@agentshouse/mdruntime 0.1.0-cfbf80d8d4644 → 0.1.0-cfe148b32e3d8
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 +299 -214
- package/README.md +21 -10
- package/dist/adapter.d.ts +126 -29
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +4 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +28 -5
- 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 +36 -5
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +207 -46
- 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 +33 -13
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +105 -16
- 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 +57 -18
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +3572 -640
- package/dist/conversation.d.ts +39 -12
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +552 -177
- 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 +9 -1
- package/dist/durability.d.ts.map +1 -1
- 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 +111 -20
- 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 +21 -10
- 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 +12 -4
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +97 -25
- 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 +14 -4
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +12 -1
- 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/query.d.ts +65 -5
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +100 -26
- package/dist/reach.d.ts +11 -4
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +194 -57
- package/dist/react.d.ts +31 -19
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +13 -21
- package/dist/readiness.d.ts +68 -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 +16 -8
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +93 -55
- package/dist/replica.d.ts +60 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +319 -153
- 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 +170 -81
- package/dist/save.d.ts +71 -4
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +815 -148
- 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 +342 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +576 -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 +169 -33
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +68 -31
- package/dist/words.d.ts +19 -0
- package/dist/words.d.ts.map +1 -0
- package/dist/words.js +150 -0
- package/package.json +33 -15
- 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 { runtimeError } from './failure.js';
|
|
2
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,6 +13,8 @@ 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
19
|
port.postMessage(message);
|
|
12
20
|
};
|
|
@@ -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,6 +59,7 @@ 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
65
|
const message = answer(event.data);
|
|
@@ -61,7 +70,11 @@ export function connectMdRuntime(port) {
|
|
|
61
70
|
return;
|
|
62
71
|
}
|
|
63
72
|
if (message.kind === 'ended') {
|
|
64
|
-
|
|
73
|
+
for (const { topic, handle } of observations.values()) {
|
|
74
|
+
if (topic === 'member')
|
|
75
|
+
handle.receive(null);
|
|
76
|
+
}
|
|
77
|
+
end(runtimeError('authorization-ended', AUTHORIZATION_ENDED));
|
|
65
78
|
return;
|
|
66
79
|
}
|
|
67
80
|
if (message.kind === 'event') {
|
|
@@ -71,31 +84,34 @@ export function connectMdRuntime(port) {
|
|
|
71
84
|
const waiting = opening.get(message.id);
|
|
72
85
|
if (waiting !== undefined) {
|
|
73
86
|
opening.delete(message.id);
|
|
74
|
-
if (message.kind === 'failure')
|
|
75
|
-
waiting.fail(
|
|
87
|
+
if (message.kind === 'failure') {
|
|
88
|
+
waiting.fail(runtimeError(message.code, message.message, message.retryable));
|
|
89
|
+
}
|
|
76
90
|
else
|
|
77
91
|
waiting.settle(begin(message.id, waiting.topic, message.value));
|
|
92
|
+
drawing?.();
|
|
78
93
|
return;
|
|
79
94
|
}
|
|
80
95
|
const called = calls.get(message.id);
|
|
81
96
|
if (called === undefined)
|
|
82
97
|
return;
|
|
83
98
|
calls.delete(message.id);
|
|
84
|
-
if (message.kind === 'failure')
|
|
85
|
-
called.fail(
|
|
99
|
+
if (message.kind === 'failure') {
|
|
100
|
+
called.fail(runtimeError(message.code, message.message, message.retryable));
|
|
101
|
+
}
|
|
86
102
|
else
|
|
87
103
|
called.settle(message.value);
|
|
88
104
|
});
|
|
89
105
|
port.addEventListener('close', () => {
|
|
90
|
-
end(PORT_CLOSED);
|
|
106
|
+
end(runtimeError('port-closed', PORT_CLOSED));
|
|
91
107
|
});
|
|
92
108
|
port.start();
|
|
93
109
|
send({ kind: 'hello' });
|
|
94
110
|
function ask(member, input) {
|
|
95
111
|
if (ended !== null)
|
|
96
|
-
return Promise.reject(
|
|
112
|
+
return Promise.reject(ended);
|
|
97
113
|
if (refusal !== null)
|
|
98
|
-
return Promise.reject(
|
|
114
|
+
return Promise.reject(refused(refusal));
|
|
99
115
|
const id = (sequence += 1);
|
|
100
116
|
return new Promise((settle, fail) => {
|
|
101
117
|
calls.set(id, { settle: settle, fail });
|
|
@@ -104,18 +120,71 @@ export function connectMdRuntime(port) {
|
|
|
104
120
|
}
|
|
105
121
|
function watch(topic, input) {
|
|
106
122
|
if (ended !== null)
|
|
107
|
-
return Promise.reject(
|
|
123
|
+
return Promise.reject(ended);
|
|
108
124
|
const id = (sequence += 1);
|
|
109
125
|
if (refusal !== null) {
|
|
110
126
|
return topic === 'connection-refusal'
|
|
111
127
|
? Promise.resolve(begin(id, topic, refusal))
|
|
112
|
-
: Promise.reject(
|
|
128
|
+
: Promise.reject(refused(refusal));
|
|
113
129
|
}
|
|
114
130
|
return new Promise((settle, fail) => {
|
|
115
131
|
opening.set(id, { topic, settle, fail });
|
|
116
132
|
send({ kind: 'observe', id, topic, input });
|
|
133
|
+
drawing?.();
|
|
117
134
|
});
|
|
118
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
|
+
}
|
|
119
188
|
return {
|
|
120
189
|
rooms: () => ask('rooms', []),
|
|
121
190
|
query: ((query) => ask('query', [query])),
|
|
@@ -128,15 +197,18 @@ export function connectMdRuntime(port) {
|
|
|
128
197
|
discard: (room, path, revision) => ask('roomDraft.discard', [room, path, revision]),
|
|
129
198
|
},
|
|
130
199
|
save: (room, roomDrafts) => ask('save', [room, roomDrafts]),
|
|
200
|
+
saveParts: (room, parts) => ask('saveParts', [room, parts]),
|
|
131
201
|
presentation: {
|
|
132
202
|
read: () => ask('presentation.read', []),
|
|
133
203
|
write: (value) => ask('presentation.write', [value]),
|
|
204
|
+
edit: (members) => ask('presentation.edit', [members]),
|
|
134
205
|
},
|
|
135
206
|
conversation: {
|
|
136
207
|
list: () => ask('conversation.list', []),
|
|
137
208
|
read: (conversation, options) => ask('conversation.read', [conversation, options]),
|
|
138
209
|
create: (input) => ask('conversation.create', [input]),
|
|
139
|
-
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]),
|
|
140
212
|
answer: (conversation, answer) => ask('conversation.answer', [conversation, answer]),
|
|
141
213
|
interrupt: (conversation) => ask('conversation.interrupt', [conversation]),
|
|
142
214
|
kill: (conversation) => ask('conversation.kill', [conversation]),
|
|
@@ -144,15 +216,32 @@ export function connectMdRuntime(port) {
|
|
|
144
216
|
delete: (conversation) => ask('conversation.delete', [conversation]),
|
|
145
217
|
},
|
|
146
218
|
chatDraft: {
|
|
147
|
-
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]),
|
|
148
221
|
discard: (conversation) => ask('chatDraft.discard', [conversation]),
|
|
149
222
|
},
|
|
150
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
|
+
},
|
|
151
229
|
call: (name, input) => ask('call', [name, input]),
|
|
152
230
|
reached: (locator, roomVersion, path) => ask('reached', [locator, roomVersion, path]),
|
|
153
231
|
log: () => ask('log', []),
|
|
154
232
|
persistence: () => ask('persistence', []),
|
|
233
|
+
retry: () => ask('retry', []),
|
|
234
|
+
cleanUp: () => ask('cleanUp', []),
|
|
155
235
|
observe: ((topic, ...input) => watch(topic, input)),
|
|
156
236
|
reauthorize: () => ask('reauthorize', []),
|
|
237
|
+
settled,
|
|
157
238
|
};
|
|
158
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"}
|