@agentshouse/mdruntime 0.1.0-cc7bd7a53214e → 0.1.0-ccbe92df1c4f6
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 +302 -200
- package/README.md +22 -11
- package/dist/adapter.d.ts +172 -49
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +1 -9
- package/dist/attached-model.d.ts +14 -0
- package/dist/attached-model.d.ts.map +1 -0
- package/dist/attached-model.js +57 -0
- package/dist/attempt.d.ts +16 -0
- package/dist/attempt.d.ts.map +1 -0
- package/dist/attempt.js +70 -0
- package/dist/binary.d.ts +18 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +8 -0
- package/dist/bootstrap.d.ts +39 -6
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +188 -45
- package/dist/chain.d.ts +11 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +9 -14
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +11 -56
- package/dist/change.d.ts +45 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +34 -0
- package/dist/chat/acts.d.ts +33 -0
- package/dist/chat/acts.d.ts.map +1 -0
- package/dist/chat/acts.js +36 -0
- package/dist/chat/context.d.ts +3 -0
- package/dist/chat/context.d.ts.map +1 -0
- package/dist/chat/context.js +10 -0
- 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/house.d.ts +25 -0
- package/dist/chat/house.d.ts.map +1 -0
- package/dist/chat/house.js +38 -0
- package/dist/chat/input.d.ts +11 -0
- package/dist/chat/input.d.ts.map +1 -0
- package/dist/chat/input.js +92 -0
- package/dist/chat/kit.d.ts +61 -0
- package/dist/chat/kit.d.ts.map +1 -0
- package/dist/chat/kit.js +123 -0
- package/dist/chat/lasting.d.ts +6 -0
- package/dist/chat/lasting.d.ts.map +1 -0
- package/dist/chat/lasting.js +19 -0
- package/dist/chat/list.d.ts +28 -0
- package/dist/chat/list.d.ts.map +1 -0
- package/dist/chat/list.js +103 -0
- package/dist/chat/markdown.d.ts +20 -0
- package/dist/chat/markdown.d.ts.map +1 -0
- package/dist/chat/markdown.js +229 -0
- package/dist/chat/message.d.ts +7 -0
- package/dist/chat/message.d.ts.map +1 -0
- package/dist/chat/message.js +254 -0
- package/dist/chat/messages.d.ts +35 -0
- package/dist/chat/messages.d.ts.map +1 -0
- package/dist/chat/messages.js +210 -0
- package/dist/chat/name.d.ts +7 -0
- package/dist/chat/name.d.ts.map +1 -0
- package/dist/chat/name.js +37 -0
- package/dist/chat/opened.d.ts +12 -0
- package/dist/chat/opened.d.ts.map +1 -0
- package/dist/chat/opened.js +19 -0
- package/dist/chat/overlay.d.ts +32 -0
- package/dist/chat/overlay.d.ts.map +1 -0
- package/dist/chat/overlay.js +103 -0
- package/dist/chat/parts.d.ts +58 -0
- package/dist/chat/parts.d.ts.map +1 -0
- package/dist/chat/parts.js +120 -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/process.d.ts +20 -0
- package/dist/chat/process.d.ts.map +1 -0
- package/dist/chat/process.js +32 -0
- package/dist/chat/provider.d.ts +70 -0
- package/dist/chat/provider.d.ts.map +1 -0
- package/dist/chat/provider.js +635 -0
- package/dist/chat/question.d.ts +9 -0
- package/dist/chat/question.d.ts.map +1 -0
- package/dist/chat/question.js +69 -0
- package/dist/chat/questions.d.ts +31 -0
- package/dist/chat/questions.d.ts.map +1 -0
- package/dist/chat/questions.js +111 -0
- package/dist/chat/read.d.ts +5 -0
- package/dist/chat/read.d.ts.map +1 -0
- package/dist/chat/read.js +13 -0
- package/dist/chat/ready.d.ts +37 -0
- package/dist/chat/ready.d.ts.map +1 -0
- package/dist/chat/ready.js +93 -0
- package/dist/chat/room-file.d.ts +8 -0
- package/dist/chat/room-file.d.ts.map +1 -0
- package/dist/chat/room-file.js +72 -0
- 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.d.ts +4 -0
- package/dist/chat/style.d.ts.map +1 -0
- package/dist/chat/style.js +307 -0
- package/dist/chat.d.ts +15 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +8 -0
- package/dist/client.d.ts +35 -14
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +108 -26
- package/dist/collection.d.ts +9 -13
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +47 -56
- package/dist/compile.d.ts +16 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +721 -0
- package/dist/connection.d.ts +61 -24
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +3786 -906
- package/dist/conversation.d.ts +56 -16
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +736 -242
- 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 +5 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +19 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +151 -0
- package/dist/expectation.d.ts +21 -0
- package/dist/expectation.d.ts.map +1 -0
- package/dist/expectation.js +70 -0
- package/dist/failure.d.ts +13 -0
- package/dist/failure.d.ts.map +1 -0
- package/dist/failure.js +19 -0
- package/dist/fence.d.ts +6 -0
- package/dist/fence.d.ts.map +1 -0
- package/dist/fence.js +10 -0
- package/dist/file.d.ts +2 -10
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +3 -120
- package/dist/fulltext.d.ts +27 -0
- package/dist/fulltext.d.ts.map +1 -0
- package/dist/fulltext.js +368 -0
- package/dist/host.d.ts +15 -2
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +113 -30
- package/dist/identity.d.ts +4 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +16 -1
- package/dist/index.d.ts +20 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/live.d.ts +22 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +123 -0
- package/dist/memory.d.ts +21 -7
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +171 -47
- package/dist/messages.d.ts +28 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +90 -0
- package/dist/model.d.ts +17 -14
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +16 -4
- 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 +19 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +113 -12
- package/dist/open.d.ts +2 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +1 -0
- 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 +62 -3
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +67 -1
- package/dist/overlay.d.ts +15 -5
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +136 -180
- package/dist/paths.d.ts +0 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +0 -16
- package/dist/query.d.ts +65 -5
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +122 -40
- package/dist/reach.d.ts +11 -4
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +202 -73
- package/dist/react.d.ts +43 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +54 -0
- package/dist/readiness.d.ts +63 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +33 -0
- package/dist/reads.d.ts +11 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +100 -0
- package/dist/recovery.d.ts +25 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +198 -0
- package/dist/refresh.d.ts +19 -7
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +129 -53
- package/dist/replica.d.ts +60 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +319 -154
- package/dist/room-draft.d.ts +40 -9
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +153 -37
- package/dist/rows.d.ts +30 -34
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +168 -82
- package/dist/save.d.ts +72 -6
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +889 -178
- package/dist/search.d.ts +41 -29
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +37 -105
- 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 +16 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +431 -0
- package/dist/status.d.ts +6 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -8
- package/dist/store.d.ts +124 -58
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +359 -344
- package/dist/stored.d.ts +145 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +567 -0
- package/dist/tables.d.ts +344 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +580 -0
- package/dist/turn.d.ts +9 -0
- package/dist/turn.d.ts.map +1 -0
- package/dist/turn.js +75 -0
- package/dist/validation.d.ts +30 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +162 -0
- package/dist/windows.d.ts +22 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +89 -0
- package/dist/wire.d.ts +170 -45
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +69 -46
- package/dist/words.d.ts +19 -0
- package/dist/words.d.ts.map +1 -0
- package/dist/words.js +150 -0
- package/package.json +39 -9
- package/dist/attachment.d.ts +0 -3
- package/dist/attachment.d.ts.map +0 -1
- package/dist/attachment.js +0 -8
- package/dist/read-side.d.ts +0 -18
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -377
package/dist/client.js
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { observed } from './observation.js';
|
|
2
|
-
import {
|
|
2
|
+
import { runtimeError } from './failure.js';
|
|
3
|
+
import { answer, AUTHORIZATION_ENDED, PORT_CLOSED, } from './wire.js';
|
|
4
|
+
// 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.
|
|
5
|
+
const SETTLED_FRAMES = 2;
|
|
6
|
+
function refused(refusal) {
|
|
7
|
+
return runtimeError(refusal.code, refusal.code, refusal.retryable);
|
|
8
|
+
}
|
|
3
9
|
export function connectMdRuntime(port) {
|
|
4
10
|
let sequence = 0;
|
|
5
11
|
let refusal = null;
|
|
@@ -7,8 +13,10 @@ export function connectMdRuntime(port) {
|
|
|
7
13
|
const calls = new Map();
|
|
8
14
|
const opening = new Map();
|
|
9
15
|
const observations = new Map();
|
|
16
|
+
let drawing = null;
|
|
17
|
+
let settling = null;
|
|
10
18
|
const send = (message) => {
|
|
11
|
-
port.postMessage(
|
|
19
|
+
port.postMessage(message);
|
|
12
20
|
};
|
|
13
21
|
function begin(id, topic, first) {
|
|
14
22
|
const handle = observed(first, () => {
|
|
@@ -25,7 +33,7 @@ export function connectMdRuntime(port) {
|
|
|
25
33
|
if (topic === 'connection-refusal')
|
|
26
34
|
handle.receive(reported);
|
|
27
35
|
}
|
|
28
|
-
const failure =
|
|
36
|
+
const failure = refused(reported);
|
|
29
37
|
for (const [id, waiting] of opening) {
|
|
30
38
|
if (waiting.topic === 'connection-refusal')
|
|
31
39
|
waiting.settle(begin(id, waiting.topic, reported));
|
|
@@ -36,12 +44,12 @@ export function connectMdRuntime(port) {
|
|
|
36
44
|
for (const waiting of calls.values())
|
|
37
45
|
waiting.fail(failure);
|
|
38
46
|
calls.clear();
|
|
47
|
+
drawing?.();
|
|
39
48
|
}
|
|
40
|
-
function end(
|
|
49
|
+
function end(failure) {
|
|
41
50
|
if (ended !== null)
|
|
42
51
|
return;
|
|
43
|
-
ended =
|
|
44
|
-
const failure = new Error(reason);
|
|
52
|
+
ended = failure;
|
|
45
53
|
for (const waiting of opening.values())
|
|
46
54
|
waiting.fail(failure);
|
|
47
55
|
opening.clear();
|
|
@@ -51,16 +59,10 @@ export function connectMdRuntime(port) {
|
|
|
51
59
|
for (const { handle } of observations.values())
|
|
52
60
|
handle.end();
|
|
53
61
|
observations.clear();
|
|
62
|
+
drawing?.();
|
|
54
63
|
}
|
|
55
64
|
port.addEventListener('message', (event) => {
|
|
56
|
-
const
|
|
57
|
-
if (wire === null)
|
|
58
|
-
return;
|
|
59
|
-
if (!wire.matching) {
|
|
60
|
-
refuse(PROTOCOL_MISMATCH);
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
const message = answer(wire.message);
|
|
65
|
+
const message = answer(event.data);
|
|
64
66
|
if (message === null)
|
|
65
67
|
return;
|
|
66
68
|
if (message.kind === 'refusal') {
|
|
@@ -68,7 +70,11 @@ export function connectMdRuntime(port) {
|
|
|
68
70
|
return;
|
|
69
71
|
}
|
|
70
72
|
if (message.kind === 'ended') {
|
|
71
|
-
|
|
73
|
+
for (const { topic, handle } of observations.values()) {
|
|
74
|
+
if (topic === 'member')
|
|
75
|
+
handle.receive(null);
|
|
76
|
+
}
|
|
77
|
+
end(runtimeError('authorization-ended', AUTHORIZATION_ENDED));
|
|
72
78
|
return;
|
|
73
79
|
}
|
|
74
80
|
if (message.kind === 'event') {
|
|
@@ -78,31 +84,34 @@ export function connectMdRuntime(port) {
|
|
|
78
84
|
const waiting = opening.get(message.id);
|
|
79
85
|
if (waiting !== undefined) {
|
|
80
86
|
opening.delete(message.id);
|
|
81
|
-
if (message.kind === 'failure')
|
|
82
|
-
waiting.fail(
|
|
87
|
+
if (message.kind === 'failure') {
|
|
88
|
+
waiting.fail(runtimeError(message.code, message.message, message.retryable));
|
|
89
|
+
}
|
|
83
90
|
else
|
|
84
91
|
waiting.settle(begin(message.id, waiting.topic, message.value));
|
|
92
|
+
drawing?.();
|
|
85
93
|
return;
|
|
86
94
|
}
|
|
87
95
|
const called = calls.get(message.id);
|
|
88
96
|
if (called === undefined)
|
|
89
97
|
return;
|
|
90
98
|
calls.delete(message.id);
|
|
91
|
-
if (message.kind === 'failure')
|
|
92
|
-
called.fail(
|
|
99
|
+
if (message.kind === 'failure') {
|
|
100
|
+
called.fail(runtimeError(message.code, message.message, message.retryable));
|
|
101
|
+
}
|
|
93
102
|
else
|
|
94
103
|
called.settle(message.value);
|
|
95
104
|
});
|
|
96
105
|
port.addEventListener('close', () => {
|
|
97
|
-
end(PORT_CLOSED);
|
|
106
|
+
end(runtimeError('port-closed', PORT_CLOSED));
|
|
98
107
|
});
|
|
99
108
|
port.start();
|
|
100
109
|
send({ kind: 'hello' });
|
|
101
110
|
function ask(member, input) {
|
|
102
111
|
if (ended !== null)
|
|
103
|
-
return Promise.reject(
|
|
112
|
+
return Promise.reject(ended);
|
|
104
113
|
if (refusal !== null)
|
|
105
|
-
return Promise.reject(
|
|
114
|
+
return Promise.reject(refused(refusal));
|
|
106
115
|
const id = (sequence += 1);
|
|
107
116
|
return new Promise((settle, fail) => {
|
|
108
117
|
calls.set(id, { settle: settle, fail });
|
|
@@ -111,18 +120,71 @@ export function connectMdRuntime(port) {
|
|
|
111
120
|
}
|
|
112
121
|
function watch(topic, input) {
|
|
113
122
|
if (ended !== null)
|
|
114
|
-
return Promise.reject(
|
|
123
|
+
return Promise.reject(ended);
|
|
115
124
|
const id = (sequence += 1);
|
|
116
125
|
if (refusal !== null) {
|
|
117
126
|
return topic === 'connection-refusal'
|
|
118
127
|
? Promise.resolve(begin(id, topic, refusal))
|
|
119
|
-
: Promise.reject(
|
|
128
|
+
: Promise.reject(refused(refusal));
|
|
120
129
|
}
|
|
121
130
|
return new Promise((settle, fail) => {
|
|
122
131
|
opening.set(id, { topic, settle, fail });
|
|
123
132
|
send({ kind: 'observe', id, topic, input });
|
|
133
|
+
drawing?.();
|
|
124
134
|
});
|
|
125
135
|
}
|
|
136
|
+
function streamed(answer) {
|
|
137
|
+
if (answer.kind !== 'binary')
|
|
138
|
+
return answer;
|
|
139
|
+
const { file, byteLength, mediaType } = answer;
|
|
140
|
+
let part = 0;
|
|
141
|
+
let received = 0;
|
|
142
|
+
const stream = new ReadableStream({
|
|
143
|
+
async pull(controller) {
|
|
144
|
+
const bytes = await ask('binaryFile.part', [file, part]);
|
|
145
|
+
if (bytes === null) {
|
|
146
|
+
if (received === byteLength)
|
|
147
|
+
controller.close();
|
|
148
|
+
else
|
|
149
|
+
controller.error(runtimeError('binary-file-absent', 'The file ended early'));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
part += 1;
|
|
153
|
+
received += bytes.byteLength;
|
|
154
|
+
controller.enqueue(bytes);
|
|
155
|
+
},
|
|
156
|
+
}, { highWaterMark: 0 });
|
|
157
|
+
return { kind: 'binary', stream, byteLength, mediaType };
|
|
158
|
+
}
|
|
159
|
+
function settled() {
|
|
160
|
+
if (settling !== null)
|
|
161
|
+
return settling;
|
|
162
|
+
settling = new Promise((resolve) => {
|
|
163
|
+
let moved = 0;
|
|
164
|
+
const check = () => {
|
|
165
|
+
moved += 1;
|
|
166
|
+
if (opening.size > 0)
|
|
167
|
+
return;
|
|
168
|
+
const at = moved;
|
|
169
|
+
const waited = (frames) => {
|
|
170
|
+
requestAnimationFrame(() => {
|
|
171
|
+
if (frames < SETTLED_FRAMES) {
|
|
172
|
+
waited(frames + 1);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (moved !== at || opening.size > 0)
|
|
176
|
+
return;
|
|
177
|
+
drawing = null;
|
|
178
|
+
resolve();
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
waited(1);
|
|
182
|
+
};
|
|
183
|
+
drawing = check;
|
|
184
|
+
check();
|
|
185
|
+
});
|
|
186
|
+
return settling;
|
|
187
|
+
}
|
|
126
188
|
return {
|
|
127
189
|
rooms: () => ask('rooms', []),
|
|
128
190
|
query: ((query) => ask('query', [query])),
|
|
@@ -135,15 +197,18 @@ export function connectMdRuntime(port) {
|
|
|
135
197
|
discard: (room, path, revision) => ask('roomDraft.discard', [room, path, revision]),
|
|
136
198
|
},
|
|
137
199
|
save: (room, roomDrafts) => ask('save', [room, roomDrafts]),
|
|
200
|
+
saveParts: (room, parts) => ask('saveParts', [room, parts]),
|
|
138
201
|
presentation: {
|
|
139
202
|
read: () => ask('presentation.read', []),
|
|
140
203
|
write: (value) => ask('presentation.write', [value]),
|
|
204
|
+
edit: (members) => ask('presentation.edit', [members]),
|
|
141
205
|
},
|
|
142
206
|
conversation: {
|
|
143
207
|
list: () => ask('conversation.list', []),
|
|
144
208
|
read: (conversation, options) => ask('conversation.read', [conversation, options]),
|
|
145
209
|
create: (input) => ask('conversation.create', [input]),
|
|
146
|
-
send: (conversation) => ask('conversation.send', [conversation]),
|
|
210
|
+
send: (conversation, operation, draft) => ask('conversation.send', [conversation, operation, draft]),
|
|
211
|
+
attach: (room, file) => ask('conversation.attach', [room, file]),
|
|
147
212
|
answer: (conversation, answer) => ask('conversation.answer', [conversation, answer]),
|
|
148
213
|
interrupt: (conversation) => ask('conversation.interrupt', [conversation]),
|
|
149
214
|
kill: (conversation) => ask('conversation.kill', [conversation]),
|
|
@@ -151,15 +216,32 @@ export function connectMdRuntime(port) {
|
|
|
151
216
|
delete: (conversation) => ask('conversation.delete', [conversation]),
|
|
152
217
|
},
|
|
153
218
|
chatDraft: {
|
|
154
|
-
write: (conversation, draft) => ask('chatDraft.write', [conversation, draft]),
|
|
219
|
+
write: (conversation, draft, revision) => ask('chatDraft.write', [conversation, draft, revision]),
|
|
220
|
+
prepend: (conversation, draft) => ask('chatDraft.prepend', [conversation, draft]),
|
|
155
221
|
discard: (conversation) => ask('chatDraft.discard', [conversation]),
|
|
156
222
|
},
|
|
157
223
|
history: (locator, path, query) => ask('history', [locator, path, query]),
|
|
224
|
+
resolve: (room, path, destination) => ask('resolve', [room, path, destination]),
|
|
225
|
+
binaryFile: {
|
|
226
|
+
read: (room, path, revision) => ask('binaryFile.read', [room, path, revision]).then(streamed),
|
|
227
|
+
link: (room, path, revision) => ask('binaryFile.link', [room, path, revision]),
|
|
228
|
+
},
|
|
158
229
|
call: (name, input) => ask('call', [name, input]),
|
|
159
230
|
reached: (locator, roomVersion, path) => ask('reached', [locator, roomVersion, path]),
|
|
160
231
|
log: () => ask('log', []),
|
|
161
232
|
persistence: () => ask('persistence', []),
|
|
233
|
+
retry: () => ask('retry', []),
|
|
234
|
+
cleanUp: () => ask('cleanUp', []),
|
|
162
235
|
observe: ((topic, ...input) => watch(topic, input)),
|
|
163
236
|
reauthorize: () => ask('reauthorize', []),
|
|
237
|
+
settled,
|
|
164
238
|
};
|
|
165
239
|
}
|
|
240
|
+
const turns = new WeakMap();
|
|
241
|
+
export function inTurn(client, work) {
|
|
242
|
+
const turn = (turns.get(client) ?? Promise.resolve()).then(work);
|
|
243
|
+
turns.set(client, turn.then(() => undefined, () => undefined));
|
|
244
|
+
return turn;
|
|
245
|
+
}
|
|
246
|
+
export { chainedWindows } from './chain.js';
|
|
247
|
+
export { unanswered } from './wire.js';
|
package/dist/collection.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { type Document
|
|
1
|
+
import { type Document } from '@agentshouse/mdmodel';
|
|
2
2
|
import type { ModelState } from './model.js';
|
|
3
3
|
import type { MdModelIdentity } from './adapter.js';
|
|
4
|
+
import { type Paths } from './shared.js';
|
|
4
5
|
import type { Refused } from './transfer.js';
|
|
5
6
|
export declare const MD_MODEL: MdModelIdentity;
|
|
6
7
|
export type Collection = {
|
|
7
|
-
|
|
8
|
+
text: Readonly<Record<string, string>>;
|
|
8
9
|
composition: Composition;
|
|
10
|
+
document(path: string): Document | undefined;
|
|
9
11
|
};
|
|
10
12
|
export type Composition = {
|
|
11
13
|
model: ModelState;
|
|
@@ -14,17 +16,11 @@ export type Composition = {
|
|
|
14
16
|
model: ModelState;
|
|
15
17
|
} | null;
|
|
16
18
|
};
|
|
19
|
+
export declare function selected(composition: Composition, path: string): boolean;
|
|
17
20
|
export declare function governing(composition: Composition, path: string): ModelState;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
};
|
|
22
|
-
export declare function parseCollection(text: Readonly<Record<string, string>>, composition: Composition, previous?: Previous): Collection;
|
|
23
|
-
export declare function readCollection(text: Readonly<Record<string, string>>, composition: Composition, previous?: Previous): {
|
|
24
|
-
kind: 'read';
|
|
25
|
-
collection: Collection;
|
|
26
|
-
} | Refused;
|
|
21
|
+
export declare function collectionOf(text: Readonly<Record<string, string>>, composition: Composition): Collection;
|
|
22
|
+
export declare function documentsOf(collection: Collection): Generator<number, Iterable<readonly [string, Document]>, void>;
|
|
23
|
+
export declare function unreadable(text: Paths<string>, paths?: Iterable<string> | null): Generator<number, Refused | null, void>;
|
|
27
24
|
export declare function validRoot(root: unknown): root is string;
|
|
28
|
-
export declare function
|
|
29
|
-
export {};
|
|
25
|
+
export declare function available(composition: Composition): boolean;
|
|
30
26
|
//# sourceMappingURL=collection.d.ts.map
|
package/dist/collection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAsB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,QAAQ,EAAE,eAAwE,CAAC;AAEhG,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE,CAAC;AAEF,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAI5E;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,GACvB,UAAU,CAcZ;AAED,wBAAiB,WAAW,CAC1B,UAAU,EAAE,UAAU,GACrB,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAQhE;AAED,wBAAiB,UAAU,CACzB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EACnB,KAAK,GAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAW,GACpC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,CAazC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEvD;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAK3D"}
|
package/dist/collection.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { parse,
|
|
1
|
+
import { parse, VERSION } from '@agentshouse/mdmodel';
|
|
2
2
|
import { beneath, normalize } from './paths.js';
|
|
3
|
+
import { keysIn, sortedKeys } from './shared.js';
|
|
4
|
+
import { ROW_WEIGHT } from './turn.js';
|
|
3
5
|
export const MD_MODEL = { identity: '@agentshouse/mdmodel', version: VERSION };
|
|
4
|
-
|
|
5
|
-
function selected(composition, path) {
|
|
6
|
+
export function selected(composition, path) {
|
|
6
7
|
return (composition.selection !== null &&
|
|
7
8
|
composition.selection.roots.some((root) => beneath(root, path)));
|
|
8
9
|
}
|
|
@@ -11,62 +12,52 @@ export function governing(composition, path) {
|
|
|
11
12
|
? composition.selection.model
|
|
12
13
|
: composition.model;
|
|
13
14
|
}
|
|
14
|
-
function
|
|
15
|
-
const
|
|
16
|
-
return
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
15
|
+
export function collectionOf(text, composition) {
|
|
16
|
+
const parsed = new Map();
|
|
17
|
+
return {
|
|
18
|
+
text,
|
|
19
|
+
composition,
|
|
20
|
+
document(path) {
|
|
21
|
+
if (parsed.has(path))
|
|
22
|
+
return parsed.get(path) ?? undefined;
|
|
23
|
+
const content = text[path];
|
|
24
|
+
if (content === undefined)
|
|
25
|
+
return undefined;
|
|
26
|
+
const read = parse(content, path);
|
|
27
|
+
parsed.set(path, read.ok ? read.document : null);
|
|
28
|
+
return read.ok ? read.document : undefined;
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function* documentsOf(collection) {
|
|
33
|
+
const paths = yield* sortedKeys(collection.text);
|
|
34
|
+
return (function* () {
|
|
35
|
+
for (const path of paths) {
|
|
36
|
+
const document = collection.document(path);
|
|
37
|
+
if (document !== undefined)
|
|
38
|
+
yield [path, document];
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
}
|
|
42
|
+
export function* unreadable(text, paths = null) {
|
|
43
|
+
const named = paths ?? (yield* keysIn(text));
|
|
44
|
+
let least = null;
|
|
45
|
+
for (const path of named) {
|
|
46
|
+
const content = Object.hasOwn(text, path) ? text[path] : undefined;
|
|
47
|
+
if (content === undefined)
|
|
48
|
+
continue;
|
|
49
|
+
const read = parse(content, path);
|
|
50
|
+
if (!read.ok && (least === null || path < least.path)) {
|
|
51
|
+
least = { path, refused: { kind: 'refused', refusal: read.refusal } };
|
|
52
|
+
}
|
|
53
|
+
yield ROW_WEIGHT + content.length;
|
|
36
54
|
}
|
|
37
|
-
return
|
|
55
|
+
return least?.refused ?? null;
|
|
38
56
|
}
|
|
39
57
|
export function validRoot(root) {
|
|
40
58
|
return typeof root === 'string' && normalize(root) === root;
|
|
41
59
|
}
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const parsed = parse(content);
|
|
46
|
-
return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';
|
|
47
|
-
});
|
|
48
|
-
if (typed !== undefined)
|
|
49
|
-
return { verdict: 'refuse', rule: 'model-unavailable', file: typed[0] };
|
|
50
|
-
}
|
|
51
|
-
return validate(documents, { binaryTargets }, model.status === 'unavailable' ? NO_TYPES : { types: model.types });
|
|
52
|
-
}
|
|
53
|
-
export function validateCollection(text, binaryTargets, composition) {
|
|
54
|
-
const collection = {};
|
|
55
|
-
const selection = {};
|
|
56
|
-
for (const [path, content] of Object.entries(text)) {
|
|
57
|
-
if (selected(composition, path))
|
|
58
|
-
selection[path] = content;
|
|
59
|
-
else
|
|
60
|
-
collection[path] = content;
|
|
61
|
-
}
|
|
62
|
-
const verdicts = [
|
|
63
|
-
validateAgainst(collection, binaryTargets.filter((path) => !selected(composition, path)), composition.model),
|
|
64
|
-
];
|
|
65
|
-
if (composition.selection !== null) {
|
|
66
|
-
verdicts.push(validateAgainst(selection, binaryTargets.filter((path) => selected(composition, path)), composition.selection.model));
|
|
67
|
-
}
|
|
68
|
-
const refusals = verdicts.filter((verdict) => verdict.verdict === 'refuse');
|
|
69
|
-
if (refusals.length === 0)
|
|
70
|
-
return verdicts[0];
|
|
71
|
-
return refusals.find((refusal) => refusal.rule !== 'model-unavailable') ?? refusals[0];
|
|
60
|
+
export function available(composition) {
|
|
61
|
+
return (composition.model.status !== 'unavailable' &&
|
|
62
|
+
(composition.selection === null || composition.selection.model.status !== 'unavailable'));
|
|
72
63
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Plan, QueryRows } from './query.js';
|
|
2
|
+
import type { Connection, Value } from './tables.js';
|
|
3
|
+
export type QueryRoom = {
|
|
4
|
+
readonly locator: string;
|
|
5
|
+
readonly key: number;
|
|
6
|
+
};
|
|
7
|
+
export type Fragment = {
|
|
8
|
+
readonly sql: string;
|
|
9
|
+
readonly bind: readonly Value[];
|
|
10
|
+
};
|
|
11
|
+
export type QueryAnswer = QueryRows & {
|
|
12
|
+
readonly more?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function selected(connection: Connection, plan: Plan, rooms: readonly QueryRoom[]): Fragment;
|
|
15
|
+
export declare function answerQuery(connection: Connection, plan: Plan, rooms: readonly QueryRoom[], budget?: number | null): QueryAnswer;
|
|
16
|
+
//# sourceMappingURL=compile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAOV,IAAI,EAGJ,SAAS,EAIV,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAU1D,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAA;CAAE,CAAC;AA+pBjF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA8SjE,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,GAC1B,QAAQ,CAEV;AAED,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"}
|