@agentshouse/mdruntime 0.1.0-cf890bb538119 → 0.1.0-cfac557170cf3
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 +10 -8
- package/dist/adapter.d.ts +31 -18
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +2 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +28 -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 +15 -4
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +133 -90
- package/dist/client.d.ts +6 -7
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +54 -7
- package/dist/collection.d.ts +5 -0
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +23 -2
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +81 -29
- package/dist/connection.d.ts +9 -7
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +961 -476
- package/dist/conversation.d.ts +7 -5
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +166 -41
- package/dist/durability.d.ts +2 -5
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +5 -0
- package/dist/entry.d.ts +1 -0
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +1 -1
- package/dist/file.d.ts +2 -11
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +6 -4
- package/dist/fulltext.d.ts.map +1 -1
- package/dist/fulltext.js +8 -6
- package/dist/host.d.ts +4 -3
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +43 -15
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/live.d.ts.map +1 -1
- package/dist/live.js +2 -1
- 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 +2 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +46 -19
- package/dist/model.d.ts +6 -0
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +7 -1
- package/dist/observation.d.ts +1 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +1 -1
- package/dist/outcome.d.ts +13 -3
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +16 -5
- package/dist/overlay.js +1 -1
- 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 +6 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/reach.d.ts +8 -3
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +68 -45
- package/dist/readiness.d.ts +17 -7
- package/dist/readiness.d.ts.map +1 -1
- package/dist/readiness.js +6 -6
- package/dist/reads.d.ts.map +1 -1
- package/dist/reads.js +10 -17
- package/dist/recovery.d.ts +1 -0
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +26 -0
- package/dist/refresh.d.ts +6 -2
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +61 -27
- package/dist/replica.d.ts +5 -4
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +4 -3
- package/dist/room-draft.d.ts +18 -2
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +73 -6
- package/dist/rows.d.ts +15 -6
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +102 -74
- package/dist/save.d.ts +2 -0
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +13 -7
- package/dist/status.d.ts +5 -0
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +3 -1
- package/dist/store.d.ts +18 -12
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +25 -20
- package/dist/stored.d.ts +10 -13
- package/dist/stored.d.ts.map +1 -1
- package/dist/stored.js +200 -175
- package/dist/tables.d.ts +26 -6
- package/dist/tables.d.ts.map +1 -1
- package/dist/tables.js +57 -6
- package/dist/wire.d.ts +5 -5
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +2 -2
- package/dist/words.d.ts.map +1 -1
- package/dist/words.js +8 -2
- package/package.json +11 -18
- package/AGENTS.md +0 -319
- 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/context.js +0 -10
- package/dist/chat/earlier.d.ts +0 -10
- package/dist/chat/earlier.d.ts.map +0 -1
- package/dist/chat/earlier.js +0 -54
- package/dist/chat/house.d.ts +0 -25
- package/dist/chat/house.d.ts.map +0 -1
- package/dist/chat/house.js +0 -38
- package/dist/chat/input.d.ts +0 -11
- package/dist/chat/input.d.ts.map +0 -1
- package/dist/chat/input.js +0 -92
- package/dist/chat/kit.d.ts +0 -61
- 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 -28
- package/dist/chat/list.d.ts.map +0 -1
- package/dist/chat/list.js +0 -103
- package/dist/chat/markdown.d.ts +0 -21
- package/dist/chat/markdown.d.ts.map +0 -1
- package/dist/chat/markdown.js +0 -246
- package/dist/chat/message.d.ts +0 -7
- package/dist/chat/message.d.ts.map +0 -1
- package/dist/chat/message.js +0 -254
- package/dist/chat/messages.d.ts +0 -35
- package/dist/chat/messages.d.ts.map +0 -1
- package/dist/chat/messages.js +0 -210
- package/dist/chat/name.d.ts +0 -7
- package/dist/chat/name.d.ts.map +0 -1
- package/dist/chat/name.js +0 -37
- package/dist/chat/opened.d.ts +0 -12
- package/dist/chat/opened.d.ts.map +0 -1
- package/dist/chat/opened.js +0 -19
- package/dist/chat/overlay.d.ts +0 -32
- package/dist/chat/overlay.d.ts.map +0 -1
- package/dist/chat/overlay.js +0 -103
- package/dist/chat/parts.d.ts +0 -58
- package/dist/chat/parts.d.ts.map +0 -1
- package/dist/chat/parts.js +0 -120
- package/dist/chat/pieces.d.ts +0 -62
- package/dist/chat/pieces.d.ts.map +0 -1
- package/dist/chat/pieces.js +0 -1110
- 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 -70
- package/dist/chat/provider.d.ts.map +0 -1
- package/dist/chat/provider.js +0 -635
- package/dist/chat/question.d.ts +0 -9
- package/dist/chat/question.d.ts.map +0 -1
- package/dist/chat/question.js +0 -69
- 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 -37
- package/dist/chat/ready.d.ts.map +0 -1
- package/dist/chat/ready.js +0 -93
- package/dist/chat/room-file.d.ts +0 -8
- package/dist/chat/room-file.d.ts.map +0 -1
- package/dist/chat/room-file.js +0 -72
- package/dist/chat/steady.d.ts +0 -3
- package/dist/chat/steady.d.ts.map +0 -1
- package/dist/chat/steady.js +0 -26
- package/dist/chat/style.d.ts +0 -4
- package/dist/chat/style.d.ts.map +0 -1
- package/dist/chat/style.js +0 -307
- package/dist/chat.d.ts +0 -15
- package/dist/chat.d.ts.map +0 -1
- package/dist/chat.js +0 -8
package/dist/bootstrap.js
CHANGED
|
@@ -1,36 +1,12 @@
|
|
|
1
1
|
import { transferIdentity } from './identity.js';
|
|
2
|
-
import { advancement } from './refresh.js';
|
|
2
|
+
import { advancement, pageEntries } from './refresh.js';
|
|
3
3
|
import { unconfirmed } from './transfer.js';
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
]
|
|
9
|
-
|
|
10
|
-
const entries = [];
|
|
11
|
-
for (const [path, content] of Object.entries(page.documents)) {
|
|
12
|
-
entries.push({
|
|
13
|
-
path,
|
|
14
|
-
content,
|
|
15
|
-
binary: null,
|
|
16
|
-
revision: page.revisions[path] ?? null,
|
|
17
|
-
fileId: page.fileIds?.[path] ?? null,
|
|
18
|
-
change: page.changes[path] ?? null,
|
|
19
|
-
written: page.roomVersion,
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
for (const [path, file] of Object.entries(page.binaryFiles)) {
|
|
23
|
-
entries.push({
|
|
24
|
-
path,
|
|
25
|
-
content: null,
|
|
26
|
-
binary: { state: 'accepted', ...file },
|
|
27
|
-
revision: page.revisions[path] ?? null,
|
|
28
|
-
fileId: page.fileIds?.[path] ?? null,
|
|
29
|
-
change: page.changes[path] ?? null,
|
|
30
|
-
written: null,
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
return { entries, folders: page.folders ?? [] };
|
|
4
|
+
const NOTHING_PRIOR = () => Promise.resolve(new Map());
|
|
5
|
+
async function pageOf(page) {
|
|
6
|
+
return {
|
|
7
|
+
entries: await pageEntries(page, [], page.roomVersion, NOTHING_PRIOR),
|
|
8
|
+
folders: page.folders ?? [],
|
|
9
|
+
};
|
|
34
10
|
}
|
|
35
11
|
function heldTogether(first, second) {
|
|
36
12
|
if (first === null)
|
|
@@ -56,17 +32,16 @@ const NO_CONTENT = {
|
|
|
56
32
|
files: () => Promise.resolve([]),
|
|
57
33
|
contents: () => Promise.resolve(new Map()),
|
|
58
34
|
};
|
|
59
|
-
export async function bootstrapRoom(adapter, authorization, room, held, remodel, continuing, staging, reuse) {
|
|
60
|
-
|
|
61
|
-
const resumed = kept !== null && kept.selection === room.replica.selection ? kept : null;
|
|
62
|
-
if (kept !== null && resumed === null)
|
|
35
|
+
export async function bootstrapRoom(adapter, authorization, room, held, builtIn, remodel, continuing, staging, reuse) {
|
|
36
|
+
if (staging.held(room.locator) !== null)
|
|
63
37
|
await staging.abandon(room.locator);
|
|
64
|
-
const
|
|
38
|
+
const begun = (pool) => started(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool);
|
|
39
|
+
const first = await begun(reuse);
|
|
65
40
|
if (first.kind !== 'expired')
|
|
66
41
|
return first;
|
|
67
42
|
await staging.setAside(room.locator);
|
|
68
43
|
try {
|
|
69
|
-
const replacement = await
|
|
44
|
+
const replacement = await begun(heldTogether(reuse, first.held));
|
|
70
45
|
if (replacement.kind !== 'expired')
|
|
71
46
|
return replacement;
|
|
72
47
|
await staging.abandon(room.locator);
|
|
@@ -77,86 +52,154 @@ export async function bootstrapRoom(adapter, authorization, room, held, remodel,
|
|
|
77
52
|
await staging.release(first.key);
|
|
78
53
|
}
|
|
79
54
|
}
|
|
80
|
-
function
|
|
55
|
+
function dropped(ahead) {
|
|
56
|
+
void ahead?.fetched.then(({ next, written }) => {
|
|
57
|
+
written();
|
|
58
|
+
dropped(next);
|
|
59
|
+
}, () => { });
|
|
60
|
+
}
|
|
61
|
+
function compositionFor(room, models, builtIn) {
|
|
81
62
|
return {
|
|
82
63
|
model: models.collection,
|
|
83
64
|
selection: room.typedSelection === undefined
|
|
84
65
|
? null
|
|
85
|
-
: { roots: room.typedSelection.roots, model:
|
|
66
|
+
: { roots: room.typedSelection.roots, model: builtIn },
|
|
86
67
|
};
|
|
87
68
|
}
|
|
88
|
-
async function
|
|
69
|
+
async function started(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool) {
|
|
70
|
+
let outcome;
|
|
71
|
+
try {
|
|
72
|
+
outcome = await bundle(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
await staging.abandon(room.locator).catch(() => { });
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
if (outcome.kind !== 'staged' && outcome.kind !== 'expired') {
|
|
79
|
+
await staging.abandon(room.locator);
|
|
80
|
+
}
|
|
81
|
+
return outcome;
|
|
82
|
+
}
|
|
83
|
+
async function bundle(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool) {
|
|
89
84
|
const locator = room.locator;
|
|
90
85
|
const selection = room.replica.selection;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
86
|
+
const ending = new AbortController();
|
|
87
|
+
const arriving = staging.arriving(locator);
|
|
88
|
+
const downloaded = await staging.turn(locator, 'downloading');
|
|
89
|
+
const asking = (token) => adapter.bootstrap(authorization, {
|
|
90
|
+
locator,
|
|
91
|
+
selection,
|
|
92
|
+
signal: ending.signal,
|
|
93
|
+
...(token === null
|
|
94
|
+
? { arriving: (bytes) => arriving.at(bytes) }
|
|
95
|
+
: { pageToken: token }),
|
|
96
|
+
...(pool === null ? {} : { held: pool }),
|
|
97
|
+
});
|
|
98
|
+
const fetching = (token) => {
|
|
99
|
+
const fetched = (async () => {
|
|
100
|
+
await staging.unqueued();
|
|
101
|
+
const page = continuing() ? await asking(token) : unconfirmed;
|
|
102
|
+
if (page.kind !== 'bootstrap')
|
|
103
|
+
return { page, next: null, written: () => { } };
|
|
104
|
+
const written = staging.queued(page.bytes ?? 0);
|
|
105
|
+
arriving.part();
|
|
106
|
+
const later = page.pageToken;
|
|
107
|
+
if (later === undefined) {
|
|
108
|
+
downloaded();
|
|
109
|
+
arriving.end();
|
|
110
|
+
}
|
|
111
|
+
return { page, written, next: later === undefined || !continuing() ? null : fetching(later) };
|
|
112
|
+
})();
|
|
113
|
+
fetched.catch(() => { });
|
|
114
|
+
return { fetched };
|
|
115
|
+
};
|
|
116
|
+
let transfer = null;
|
|
117
|
+
let ahead = fetching(null);
|
|
118
|
+
try {
|
|
119
|
+
while (ahead !== null) {
|
|
120
|
+
if (!continuing())
|
|
121
|
+
return unconfirmed;
|
|
122
|
+
const fetched = await ahead.fetched;
|
|
123
|
+
ahead = fetched.next;
|
|
124
|
+
try {
|
|
125
|
+
if (!continuing())
|
|
126
|
+
return unconfirmed;
|
|
127
|
+
const page = fetched.page;
|
|
128
|
+
if (page.kind === 'beyond-horizon') {
|
|
129
|
+
const key = transfer?.key ?? null;
|
|
130
|
+
return { kind: 'expired', held: key === null ? NO_CONTENT : staging.content(key), key };
|
|
131
|
+
}
|
|
132
|
+
if (page.kind !== 'bootstrap')
|
|
133
|
+
return page;
|
|
134
|
+
const models = remodel(page.models, transfer?.models ?? held);
|
|
135
|
+
const staged = await staging.stage({
|
|
136
|
+
locator,
|
|
137
|
+
transfer: transfer?.transfer ?? transferIdentity(),
|
|
138
|
+
selection,
|
|
139
|
+
from: transfer !== null && adapter.reached(locator, page.roomVersion, transfer.from)
|
|
140
|
+
? transfer.from
|
|
141
|
+
: page.roomVersion,
|
|
142
|
+
last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
|
|
143
|
+
? transfer.last
|
|
144
|
+
: page.roomVersion,
|
|
145
|
+
done: {
|
|
146
|
+
parts: (transfer?.done.parts ?? 0) + 1,
|
|
147
|
+
bytes: (transfer?.done.bytes ?? 0) + (page.bytes ?? 0),
|
|
148
|
+
},
|
|
149
|
+
models,
|
|
150
|
+
key: transfer?.key ?? null,
|
|
151
|
+
}, await pageOf(page), compositionFor(room, models, builtIn));
|
|
152
|
+
if (staged === null)
|
|
153
|
+
return unconfirmed;
|
|
154
|
+
transfer = staged;
|
|
155
|
+
}
|
|
156
|
+
finally {
|
|
157
|
+
fetched.written();
|
|
158
|
+
}
|
|
109
159
|
}
|
|
110
|
-
const next = {
|
|
111
|
-
locator,
|
|
112
|
-
transfer: transfer?.transfer ?? transferIdentity(),
|
|
113
|
-
selection,
|
|
114
|
-
from: transfer !== null && adapter.reached(locator, page.roomVersion, transfer.from)
|
|
115
|
-
? transfer.from
|
|
116
|
-
: page.roomVersion,
|
|
117
|
-
last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
|
|
118
|
-
? transfer.last
|
|
119
|
-
: page.roomVersion,
|
|
120
|
-
pageToken: page.pageToken ?? null,
|
|
121
|
-
models: remodel(page.models, transfer?.models ?? held),
|
|
122
|
-
key: transfer?.key ?? null,
|
|
123
|
-
};
|
|
124
|
-
const key = await staging.stage(next, pageOf(page), compositionFor(room, next.models));
|
|
125
|
-
if (key === null)
|
|
126
|
-
return unconfirmed;
|
|
127
|
-
transfer = { ...next, key };
|
|
128
160
|
}
|
|
161
|
+
finally {
|
|
162
|
+
ending.abort();
|
|
163
|
+
downloaded();
|
|
164
|
+
arriving.end();
|
|
165
|
+
dropped(ahead);
|
|
166
|
+
}
|
|
167
|
+
if (transfer === null)
|
|
168
|
+
return unconfirmed;
|
|
169
|
+
const installed = transfer;
|
|
170
|
+
const composition = compositionFor(room, installed.models, builtIn);
|
|
171
|
+
if (!(await staging.derive(locator, installed.key, composition)))
|
|
172
|
+
return unconfirmed;
|
|
173
|
+
await staging.turn(locator, 'replaying');
|
|
174
|
+
if (!continuing())
|
|
175
|
+
return unconfirmed;
|
|
129
176
|
const record = {
|
|
130
177
|
locator,
|
|
131
178
|
name: room.name,
|
|
132
179
|
handle: room.handle,
|
|
133
180
|
operations: room.operations,
|
|
134
181
|
replica: room.replica,
|
|
135
|
-
model:
|
|
182
|
+
model: installed.models.collection,
|
|
136
183
|
typedSelection: room.typedSelection ?? null,
|
|
137
|
-
selectionModel: transfer.models.selection,
|
|
138
184
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
139
|
-
roomVersion:
|
|
140
|
-
transfer:
|
|
141
|
-
|
|
185
|
+
roomVersion: installed.from,
|
|
186
|
+
transfer: installed.transfer,
|
|
187
|
+
inventory: installed.done,
|
|
188
|
+
key: installed.key,
|
|
142
189
|
};
|
|
143
|
-
const
|
|
190
|
+
const due = [room.roomVersion, ...staging.announced(locator)];
|
|
191
|
+
const last = installed.last;
|
|
192
|
+
const reconciled = last === installed.from && due.every((version) => adapter.reached(locator, last, version))
|
|
144
193
|
? { kind: 'still-current' }
|
|
145
|
-
: await advancement(adapter, authorization, record, remodel, continuing, await staging.refreshing(record.key));
|
|
194
|
+
: await advancement(adapter, authorization, record, remodel, continuing, await staging.refreshing(locator, record.key, composition));
|
|
146
195
|
if (reconciled.kind === 'advanced' || reconciled.kind === 'still-current') {
|
|
147
196
|
const refreshed = reconciled.kind === 'advanced';
|
|
148
197
|
const result = refreshed ? reconciled.record : record;
|
|
149
198
|
const refused = await staging.validate(result, refreshed ? 'refreshed' : 'confirmed');
|
|
150
|
-
|
|
151
|
-
await staging.abandon(locator);
|
|
152
|
-
return refused;
|
|
153
|
-
}
|
|
154
|
-
return { kind: 'staged', record: result, refreshed };
|
|
199
|
+
return refused ?? { kind: 'staged', record: result, refreshed };
|
|
155
200
|
}
|
|
156
201
|
if (reconciled.kind === 'beyond-horizon') {
|
|
157
202
|
return { kind: 'expired', held: staging.content(record.key), key: record.key };
|
|
158
203
|
}
|
|
159
|
-
if (!RESUMABLE.has(reconciled.kind))
|
|
160
|
-
await staging.abandon(locator);
|
|
161
204
|
return reconciled;
|
|
162
205
|
}
|
package/dist/client.d.ts
CHANGED
|
@@ -2,9 +2,7 @@ import type { AppRoom, ConnectionRefusal, HistoryQuery, RoomSchemas, SavedParts,
|
|
|
2
2
|
import type { Member, ServiceMode } from './adapter.js';
|
|
3
3
|
import type { ChatDraft, ConversationAgent, ConversationEntry, ConversationOptions, ConversationView } from './conversation.js';
|
|
4
4
|
import { type Observation } from './observation.js';
|
|
5
|
-
import type {
|
|
6
|
-
import type { ChosenFile } from './file.js';
|
|
7
|
-
import type { BinaryAnswer, BinaryLinkAnswer, CallResult, HistoryAnswer, Offline, QueueEntry, Resolution } from './outcome.js';
|
|
5
|
+
import type { AttachAnswer, BinaryAnswer, CallResult, DownloadAnswer, HistoryAnswer, Offline, QueueEntry, Resolution } from './outcome.js';
|
|
8
6
|
import type { DocumentQuery, DocumentResult, GroupQuery, GroupResult, PendingResult } from './query.js';
|
|
9
7
|
import type { RoomDraft, RoomDraftParts, RoomDraftWrite } from './room-draft.js';
|
|
10
8
|
import type { SearchRequest, SearchResult } from './search.js';
|
|
@@ -22,7 +20,7 @@ export type MdRuntimeClient = {
|
|
|
22
20
|
roomDraft: {
|
|
23
21
|
list(): Promise<readonly RoomDraft[]>;
|
|
24
22
|
read(room: string, path: string): Promise<RoomDraft | null>;
|
|
25
|
-
write(room: string, path: string, revision: string | null, parts: RoomDraftParts): Promise<RoomDraftWrite>;
|
|
23
|
+
write(room: string, path: string, revision: string | null, parts: RoomDraftParts, next?: string): Promise<RoomDraftWrite>;
|
|
26
24
|
discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;
|
|
27
25
|
};
|
|
28
26
|
save(room: string, roomDrafts: readonly SavedRoomDraft[]): Promise<SaveResult>;
|
|
@@ -37,7 +35,6 @@ export type MdRuntimeClient = {
|
|
|
37
35
|
read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;
|
|
38
36
|
create(input: unknown): Promise<CallResult>;
|
|
39
37
|
send(conversation: string, operation?: string, draft?: ChatDraft): Promise<CallResult | Offline>;
|
|
40
|
-
attach(room: string, file: ChosenFile): Promise<CallResult | Offline>;
|
|
41
38
|
answer(conversation: string, answer: unknown): Promise<CallResult>;
|
|
42
39
|
interrupt(conversation: string): Promise<CallResult>;
|
|
43
40
|
kill(conversation: string): Promise<CallResult>;
|
|
@@ -53,8 +50,8 @@ export type MdRuntimeClient = {
|
|
|
53
50
|
resolve(room: string, path: string, destination: string): Promise<Resolution>;
|
|
54
51
|
binaryFile: {
|
|
55
52
|
read(room: string, path: string, revision?: string): Promise<BinaryAnswer>;
|
|
56
|
-
|
|
57
|
-
|
|
53
|
+
attach(room: string, file: File): Promise<AttachAnswer>;
|
|
54
|
+
download(room: string, path: string, revision?: string): Promise<DownloadAnswer>;
|
|
58
55
|
};
|
|
59
56
|
call(name: string, input: unknown): Promise<CallResult>;
|
|
60
57
|
reached(locator: string, roomVersion: string, path?: string): Promise<boolean>;
|
|
@@ -86,6 +83,8 @@ export type MdRuntimeClient = {
|
|
|
86
83
|
export declare function connectMdRuntime(port: RuntimePort): MdRuntimeClient;
|
|
87
84
|
export declare function inTurn(client: MdRuntimeClient, work: () => Promise<void>): Promise<void>;
|
|
88
85
|
export { chainedWindows, type WindowAnswer, type WindowChain } from './chain.js';
|
|
86
|
+
export { roomDraftRevision } from './identity.js';
|
|
87
|
+
export { defineRoomMedia, ROOM_MEDIA } from './media.js';
|
|
89
88
|
export type { Observation } from './observation.js';
|
|
90
89
|
export type { Open } from './open.js';
|
|
91
90
|
export { unanswered, type RuntimePort, type WireMember } from './wire.js';
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,cAAc,EACd,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
1
|
+
import { shownBy } from './media.js';
|
|
1
2
|
import { observed } from './observation.js';
|
|
2
3
|
import { runtimeError } from './failure.js';
|
|
3
4
|
import { answer, AUTHORIZATION_ENDED, PORT_CLOSED, } from './wire.js';
|
|
4
5
|
// 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
6
|
const SETTLED_FRAMES = 2;
|
|
7
|
+
// A browser reads a download's address only after the click that hands it returns, so a copy's address is released a minute later.
|
|
8
|
+
const HANDED_COPY_MS = 60_000;
|
|
9
|
+
const PAGE = /\.html?$/iu;
|
|
10
|
+
const STARTED = { kind: 'started' };
|
|
11
|
+
const BLOCKED = {
|
|
12
|
+
kind: 'blocked',
|
|
13
|
+
code: 'popup-blocked',
|
|
14
|
+
fields: {},
|
|
15
|
+
retryable: true,
|
|
16
|
+
};
|
|
17
|
+
function handed(url, name) {
|
|
18
|
+
const anchor = document.createElement('a');
|
|
19
|
+
anchor.href = url;
|
|
20
|
+
anchor.download = name;
|
|
21
|
+
anchor.click();
|
|
22
|
+
}
|
|
6
23
|
function refused(refusal) {
|
|
7
24
|
return runtimeError(refusal.code, refusal.code, refusal.retryable);
|
|
8
25
|
}
|
|
@@ -156,6 +173,34 @@ export function connectMdRuntime(port) {
|
|
|
156
173
|
}, { highWaterMark: 0 });
|
|
157
174
|
return { kind: 'binary', stream, byteLength, mediaType };
|
|
158
175
|
}
|
|
176
|
+
async function download(room, path, revision) {
|
|
177
|
+
const tab = PAGE.test(path) ? globalThis.open('', '_blank') : null;
|
|
178
|
+
const linked = await ask('binaryFile.link', [room, path, revision]);
|
|
179
|
+
if (linked.kind === 'link' && PAGE.test(linked.name)) {
|
|
180
|
+
const away = tab ?? globalThis.open('', '_blank');
|
|
181
|
+
if (away === null)
|
|
182
|
+
return BLOCKED;
|
|
183
|
+
away.location.replace(linked.url);
|
|
184
|
+
return STARTED;
|
|
185
|
+
}
|
|
186
|
+
tab?.close();
|
|
187
|
+
if (linked.kind === 'link') {
|
|
188
|
+
handed(linked.url, linked.name);
|
|
189
|
+
return STARTED;
|
|
190
|
+
}
|
|
191
|
+
if (linked.kind !== 'absent')
|
|
192
|
+
return linked;
|
|
193
|
+
const read = streamed(await ask('binaryFile.read', [room, path, revision]));
|
|
194
|
+
if (read.kind !== 'binary')
|
|
195
|
+
return read;
|
|
196
|
+
const copy = await new Response(read.stream, {
|
|
197
|
+
headers: { 'content-type': read.mediaType },
|
|
198
|
+
}).blob();
|
|
199
|
+
const url = URL.createObjectURL(copy);
|
|
200
|
+
handed(url, path.slice(path.lastIndexOf('/') + 1));
|
|
201
|
+
setTimeout(() => URL.revokeObjectURL(url), HANDED_COPY_MS);
|
|
202
|
+
return STARTED;
|
|
203
|
+
}
|
|
159
204
|
function settled() {
|
|
160
205
|
if (settling !== null)
|
|
161
206
|
return settling;
|
|
@@ -185,7 +230,8 @@ export function connectMdRuntime(port) {
|
|
|
185
230
|
});
|
|
186
231
|
return settling;
|
|
187
232
|
}
|
|
188
|
-
|
|
233
|
+
const show = (room, path, revision) => ask('binaryFile.show', [room, path, revision]).then((shown) => streamed(shown));
|
|
234
|
+
return shownBy(show, {
|
|
189
235
|
rooms: () => ask('rooms', []),
|
|
190
236
|
query: ((query) => ask('query', [query])),
|
|
191
237
|
search: (request) => ask('search', [request]),
|
|
@@ -193,7 +239,7 @@ export function connectMdRuntime(port) {
|
|
|
193
239
|
roomDraft: {
|
|
194
240
|
list: () => ask('roomDraft.list', []),
|
|
195
241
|
read: (room, path) => ask('roomDraft.read', [room, path]),
|
|
196
|
-
write: (room, path, revision, parts) => ask('roomDraft.write', [room, path, revision, parts]),
|
|
242
|
+
write: (room, path, revision, parts, next) => ask('roomDraft.write', next === undefined ? [room, path, revision, parts] : [room, path, revision, parts, next]),
|
|
197
243
|
discard: (room, path, revision) => ask('roomDraft.discard', [room, path, revision]),
|
|
198
244
|
},
|
|
199
245
|
save: (room, roomDrafts) => ask('save', [room, roomDrafts]),
|
|
@@ -208,7 +254,6 @@ export function connectMdRuntime(port) {
|
|
|
208
254
|
read: (conversation, options) => ask('conversation.read', [conversation, options]),
|
|
209
255
|
create: (input) => ask('conversation.create', [input]),
|
|
210
256
|
send: (conversation, operation, draft) => ask('conversation.send', [conversation, operation, draft]),
|
|
211
|
-
attach: (room, file) => ask('conversation.attach', [room, file]),
|
|
212
257
|
answer: (conversation, answer) => ask('conversation.answer', [conversation, answer]),
|
|
213
258
|
interrupt: (conversation) => ask('conversation.interrupt', [conversation]),
|
|
214
259
|
kill: (conversation) => ask('conversation.kill', [conversation]),
|
|
@@ -223,9 +268,9 @@ export function connectMdRuntime(port) {
|
|
|
223
268
|
history: (locator, path, query) => ask('history', [locator, path, query]),
|
|
224
269
|
resolve: (room, path, destination) => ask('resolve', [room, path, destination]),
|
|
225
270
|
binaryFile: {
|
|
226
|
-
read: (room, path, revision) => ask('binaryFile.read', [room, path, revision]).then(streamed),
|
|
227
|
-
|
|
228
|
-
|
|
271
|
+
read: (room, path, revision) => ask('binaryFile.read', [room, path, revision]).then((read) => streamed(read)),
|
|
272
|
+
attach: (room, file) => ask('binaryFile.attach', [room, file]),
|
|
273
|
+
download,
|
|
229
274
|
},
|
|
230
275
|
call: (name, input) => ask('call', [name, input]),
|
|
231
276
|
reached: (locator, roomVersion, path) => ask('reached', [locator, roomVersion, path]),
|
|
@@ -236,7 +281,7 @@ export function connectMdRuntime(port) {
|
|
|
236
281
|
observe: ((topic, ...input) => watch(topic, input)),
|
|
237
282
|
reauthorize: () => ask('reauthorize', []),
|
|
238
283
|
settled,
|
|
239
|
-
};
|
|
284
|
+
});
|
|
240
285
|
}
|
|
241
286
|
const turns = new WeakMap();
|
|
242
287
|
export function inTurn(client, work) {
|
|
@@ -245,4 +290,6 @@ export function inTurn(client, work) {
|
|
|
245
290
|
return turn;
|
|
246
291
|
}
|
|
247
292
|
export { chainedWindows } from './chain.js';
|
|
293
|
+
export { roomDraftRevision } from './identity.js';
|
|
294
|
+
export { defineRoomMedia, ROOM_MEDIA } from './media.js';
|
|
248
295
|
export { unanswered } from './wire.js';
|
package/dist/collection.d.ts
CHANGED
|
@@ -16,6 +16,11 @@ export type Composition = {
|
|
|
16
16
|
model: ModelState;
|
|
17
17
|
} | null;
|
|
18
18
|
};
|
|
19
|
+
export type Composed = {
|
|
20
|
+
readonly composition: Composition;
|
|
21
|
+
readonly fingerprint: string;
|
|
22
|
+
};
|
|
23
|
+
export declare function composedOf(composition: Composition): Composed;
|
|
19
24
|
export declare function selected(composition: Composition, path: string): boolean;
|
|
20
25
|
export declare function governing(composition: Composition, path: string): ModelState;
|
|
21
26
|
export declare function collectionOf(text: Readonly<Record<string, string>>, composition: Composition): Collection;
|
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,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;
|
|
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;AAEpD,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,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAc3F,wBAAgB,UAAU,CAAC,WAAW,EAAE,WAAW,GAAG,QAAQ,CAS7D;AAED,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,CAE3D"}
|
package/dist/collection.js
CHANGED
|
@@ -1,8 +1,30 @@
|
|
|
1
1
|
import { parse, VERSION } from '@agentshouse/mdmodel';
|
|
2
2
|
import { beneath, normalize } from './paths.js';
|
|
3
|
+
import { hashed } from './observation.js';
|
|
3
4
|
import { keysIn, sortedKeys } from './shared.js';
|
|
4
5
|
import { ROW_WEIGHT } from './turn.js';
|
|
5
6
|
export const MD_MODEL = { identity: '@agentshouse/mdmodel', version: VERSION };
|
|
7
|
+
const typesPrinted = new WeakMap();
|
|
8
|
+
function typesPrint(model) {
|
|
9
|
+
if (model.status === 'unavailable')
|
|
10
|
+
return '';
|
|
11
|
+
let print = typesPrinted.get(model.types);
|
|
12
|
+
if (print === undefined) {
|
|
13
|
+
print = hashed(JSON.stringify(model.types)).toString(36);
|
|
14
|
+
typesPrinted.set(model.types, print);
|
|
15
|
+
}
|
|
16
|
+
return print;
|
|
17
|
+
}
|
|
18
|
+
export function composedOf(composition) {
|
|
19
|
+
const { model, selection } = composition;
|
|
20
|
+
return {
|
|
21
|
+
composition,
|
|
22
|
+
fingerprint: JSON.stringify([
|
|
23
|
+
typesPrint(model),
|
|
24
|
+
selection === null ? null : [selection.roots, typesPrint(selection.model)],
|
|
25
|
+
]),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
6
28
|
export function selected(composition, path) {
|
|
7
29
|
return (composition.selection !== null &&
|
|
8
30
|
composition.selection.roots.some((root) => beneath(root, path)));
|
|
@@ -58,6 +80,5 @@ export function validRoot(root) {
|
|
|
58
80
|
return typeof root === 'string' && normalize(root) === root;
|
|
59
81
|
}
|
|
60
82
|
export function available(composition) {
|
|
61
|
-
return
|
|
62
|
-
(composition.selection === null || composition.selection.model.status !== 'unavailable'));
|
|
83
|
+
return composition.model.status !== 'unavailable';
|
|
63
84
|
}
|
package/dist/compile.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AAssBjF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4TjE,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"}
|