@agentshouse/mdruntime 0.1.0-cf6d5f0a5c9c8 → 0.1.0-cf96c797c5fa8
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 +96 -31
- package/README.md +11 -1
- package/dist/adapter.d.ts +41 -14
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attempt.d.ts +16 -0
- package/dist/attempt.d.ts.map +1 -0
- package/dist/attempt.js +57 -0
- package/dist/binary.d.ts +23 -0
- package/dist/binary.d.ts.map +1 -0
- package/dist/binary.js +8 -0
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +5 -8
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +8 -7
- package/dist/change.d.ts +15 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +26 -1
- package/dist/chat/acts.d.ts +34 -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/input.d.ts +9 -0
- package/dist/chat/input.d.ts.map +1 -0
- package/dist/chat/input.js +99 -0
- package/dist/chat/kit.d.ts +60 -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 +20 -0
- package/dist/chat/list.d.ts.map +1 -0
- package/dist/chat/list.js +59 -0
- package/dist/chat/markdown.d.ts +19 -0
- package/dist/chat/markdown.d.ts.map +1 -0
- package/dist/chat/markdown.js +187 -0
- package/dist/chat/message.d.ts +6 -0
- package/dist/chat/message.d.ts.map +1 -0
- package/dist/chat/message.js +192 -0
- package/dist/chat/messages.d.ts +21 -0
- package/dist/chat/messages.d.ts.map +1 -0
- package/dist/chat/messages.js +151 -0
- package/dist/chat/name.d.ts +6 -0
- package/dist/chat/name.d.ts.map +1 -0
- package/dist/chat/name.js +37 -0
- package/dist/chat/opened.d.ts +11 -0
- package/dist/chat/opened.d.ts.map +1 -0
- package/dist/chat/opened.js +17 -0
- package/dist/chat/overlay.d.ts +31 -0
- package/dist/chat/overlay.d.ts.map +1 -0
- package/dist/chat/overlay.js +97 -0
- package/dist/chat/parts.d.ts +57 -0
- package/dist/chat/parts.d.ts.map +1 -0
- package/dist/chat/parts.js +119 -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 +63 -0
- package/dist/chat/provider.d.ts.map +1 -0
- package/dist/chat/provider.js +645 -0
- package/dist/chat/question.d.ts +9 -0
- package/dist/chat/question.d.ts.map +1 -0
- package/dist/chat/question.js +80 -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 +33 -0
- package/dist/chat/ready.d.ts.map +1 -0
- package/dist/chat/ready.js +91 -0
- package/dist/chat/style.d.ts +4 -0
- package/dist/chat/style.d.ts.map +1 -0
- package/dist/chat/style.js +302 -0
- package/dist/chat.d.ts +14 -0
- package/dist/chat.d.ts.map +1 -0
- package/dist/chat.js +8 -0
- package/dist/client.d.ts +12 -5
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +30 -15
- package/dist/connection.d.ts +19 -9
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +312 -96
- package/dist/conversation.d.ts +11 -3
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +47 -7
- 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/host.d.ts +1 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +9 -9
- package/dist/identity.d.ts +2 -0
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +6 -0
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/memory.d.ts +3 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +47 -16
- package/dist/model.d.ts +3 -2
- package/dist/model.d.ts.map +1 -1
- package/dist/open.d.ts +2 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +1 -0
- package/dist/outcome.d.ts +28 -3
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +41 -1
- package/dist/overlay.d.ts +14 -3
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +75 -37
- package/dist/query.d.ts +4 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +3 -0
- package/dist/reach.d.ts +2 -0
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +43 -19
- package/dist/react.d.ts +4 -2
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +3 -2
- package/dist/read-side.d.ts.map +1 -1
- package/dist/read-side.js +9 -2
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +12 -17
- package/dist/replica.d.ts +6 -3
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +46 -32
- package/dist/room-draft.d.ts +26 -9
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +131 -22
- package/dist/rows.d.ts +3 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +3 -1
- package/dist/save.d.ts +27 -1
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +323 -22
- package/dist/search.d.ts +3 -2
- package/dist/search.d.ts.map +1 -1
- package/dist/status.d.ts +2 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +0 -8
- package/dist/store.d.ts +13 -12
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +150 -157
- package/dist/wire.d.ts +6 -3
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +14 -2
- package/package.json +17 -9
- package/dist/attachment.d.ts +0 -3
- package/dist/attachment.d.ts.map +0 -1
- package/dist/attachment.js +0 -8
package/dist/memory.js
CHANGED
|
@@ -114,24 +114,23 @@ export function createMemoryAdapter(options = {}) {
|
|
|
114
114
|
const size = pageSize ?? paths.length;
|
|
115
115
|
const taken = paths.slice(from, from + size);
|
|
116
116
|
const next = from + taken.length;
|
|
117
|
-
const targets = opening ? (room.
|
|
117
|
+
const targets = opening ? Object.keys(room.binaryFiles ?? {}) : [];
|
|
118
118
|
return {
|
|
119
119
|
kind: 'bootstrap',
|
|
120
120
|
roomVersion: room.roomVersion,
|
|
121
121
|
...(opening ? { models: modelsOf(room) } : {}),
|
|
122
122
|
documents: named(room.documents ?? {}, taken),
|
|
123
|
-
revisions: named(room.revisions ?? {}, taken),
|
|
123
|
+
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
124
124
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
125
|
-
|
|
126
|
-
...(opening && room.attachments !== undefined ? { attachments: room.attachments } : {}),
|
|
125
|
+
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
127
126
|
...(next < paths.length ? { pageToken: taken.at(-1) } : {}),
|
|
128
127
|
};
|
|
129
128
|
}
|
|
130
129
|
function advancement(room, from, at) {
|
|
131
130
|
const current = room.documents ?? {};
|
|
132
131
|
const previous = from.documents ?? {};
|
|
133
|
-
const currentTargets = new Set(room.
|
|
134
|
-
const previousTargets = new Set(from.
|
|
132
|
+
const currentTargets = new Set(Object.keys(room.binaryFiles ?? {}));
|
|
133
|
+
const previousTargets = new Set(Object.keys(from.binaryFiles ?? {}));
|
|
135
134
|
const headMoved = (path) => room.revisions?.[path] !== from.revisions?.[path] ||
|
|
136
135
|
!sameChange(room.changes?.[path], from.changes?.[path]);
|
|
137
136
|
const changed = Object.keys(current)
|
|
@@ -147,24 +146,21 @@ export function createMemoryAdapter(options = {}) {
|
|
|
147
146
|
const targets = opening
|
|
148
147
|
? [...currentTargets].filter((target) => !previousTargets.has(target) || headMoved(target))
|
|
149
148
|
: [];
|
|
150
|
-
const attachments = room.attachments ?? [];
|
|
151
|
-
const declared = opening && JSON.stringify(attachments) !== JSON.stringify(from.attachments ?? []);
|
|
152
149
|
const models = opening ? changedModels(room, from) : undefined;
|
|
153
150
|
return {
|
|
154
151
|
kind: 'net-advancement',
|
|
155
152
|
roomVersion: room.roomVersion,
|
|
156
153
|
...(models === undefined ? {} : { models }),
|
|
157
154
|
documents: named(current, taken),
|
|
158
|
-
revisions: named(room.revisions ?? {}, taken),
|
|
155
|
+
revisions: named(room.revisions ?? {}, [...taken, ...targets]),
|
|
159
156
|
changes: named(room.changes ?? {}, [...taken, ...targets]),
|
|
160
|
-
|
|
157
|
+
binaryFiles: named(room.binaryFiles ?? {}, targets),
|
|
161
158
|
removals: opening
|
|
162
159
|
? [
|
|
163
160
|
...Object.keys(previous).filter((path) => !(path in current) && !currentTargets.has(path)),
|
|
164
161
|
...[...previousTargets].filter((target) => !currentTargets.has(target) && !(target in current)),
|
|
165
162
|
].sort()
|
|
166
163
|
: [],
|
|
167
|
-
...(declared ? { attachments } : {}),
|
|
168
164
|
...(pageToken === undefined ? {} : { pageToken }),
|
|
169
165
|
};
|
|
170
166
|
}
|
|
@@ -185,7 +181,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
185
181
|
function historiesOf(input) {
|
|
186
182
|
const asked = input?.conversations;
|
|
187
183
|
if (!Array.isArray(asked))
|
|
188
|
-
return { kind: 'rejected', code: 'invalid_request', fields: {} };
|
|
184
|
+
return { kind: 'rejected', code: 'invalid_request', fields: {}, retryable: false };
|
|
189
185
|
const histories = [];
|
|
190
186
|
for (const entry of asked) {
|
|
191
187
|
const conversation = typeof entry.conversation === 'string' ? scripted.get(entry.conversation) : undefined;
|
|
@@ -213,7 +209,12 @@ export function createMemoryAdapter(options = {}) {
|
|
|
213
209
|
const named = typeof input.conversation === 'string' ? input.conversation : '';
|
|
214
210
|
const conversation = scripted.get(named);
|
|
215
211
|
if (conversation === undefined) {
|
|
216
|
-
return {
|
|
212
|
+
return {
|
|
213
|
+
kind: 'rejected',
|
|
214
|
+
code: 'unknown-conversation',
|
|
215
|
+
fields: { conversation: named },
|
|
216
|
+
retryable: false,
|
|
217
|
+
};
|
|
217
218
|
}
|
|
218
219
|
const outcome = conversation.outcomes?.[name];
|
|
219
220
|
if (outcome !== undefined)
|
|
@@ -227,7 +228,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
227
228
|
if (name === 'conversation.cancel') {
|
|
228
229
|
const turn = typeof input.turn === 'string' ? input.turn : '';
|
|
229
230
|
if (sealed.has(turn) || !unsealed.has(turn)) {
|
|
230
|
-
return { kind: 'rejected', code: 'turn-sealed', fields: { turn } };
|
|
231
|
+
return { kind: 'rejected', code: 'turn-sealed', fields: { turn }, retryable: false };
|
|
231
232
|
}
|
|
232
233
|
unsealed.delete(turn);
|
|
233
234
|
return { kind: 'action', result: { turn, cancelled: true } };
|
|
@@ -421,7 +422,13 @@ export function createMemoryAdapter(options = {}) {
|
|
|
421
422
|
if (room === undefined) {
|
|
422
423
|
return { kind: 'room-not-readable', locator: request.locator };
|
|
423
424
|
}
|
|
424
|
-
return {
|
|
425
|
+
return {
|
|
426
|
+
kind: 'rejected',
|
|
427
|
+
code: 'unscripted-mutation',
|
|
428
|
+
fields: {},
|
|
429
|
+
retryable: false,
|
|
430
|
+
affected: {},
|
|
431
|
+
};
|
|
425
432
|
}, request).then((answer) => note(request.locator, answer));
|
|
426
433
|
},
|
|
427
434
|
async history(_authorization, request) {
|
|
@@ -436,11 +443,35 @@ export function createMemoryAdapter(options = {}) {
|
|
|
436
443
|
};
|
|
437
444
|
}, request);
|
|
438
445
|
},
|
|
446
|
+
async binary(_authorization, request) {
|
|
447
|
+
return resolveScript(scripts.binary, () => {
|
|
448
|
+
if (request.kind === 'reference') {
|
|
449
|
+
return { kind: 'rejected', code: 'unscripted-binary', fields: {}, retryable: false };
|
|
450
|
+
}
|
|
451
|
+
const room = rooms.find((entry) => entry.locator === request.locator);
|
|
452
|
+
if (room === undefined)
|
|
453
|
+
return { kind: 'room-not-readable', locator: request.locator };
|
|
454
|
+
const blob = room.blobs?.[request.path];
|
|
455
|
+
return blob === undefined
|
|
456
|
+
? { kind: 'rejected', code: 'file_not_found', fields: {}, retryable: false }
|
|
457
|
+
: { kind: 'binary', blob };
|
|
458
|
+
}, request);
|
|
459
|
+
},
|
|
460
|
+
referrerScope(referrer) {
|
|
461
|
+
if (typeof referrer !== 'object' || referrer === null)
|
|
462
|
+
return null;
|
|
463
|
+
const { room, path, message } = referrer;
|
|
464
|
+
if (typeof message === 'string')
|
|
465
|
+
return { kind: 'conversations' };
|
|
466
|
+
if (typeof room !== 'string')
|
|
467
|
+
return null;
|
|
468
|
+
return { kind: 'room', locator: room, ...(typeof path === 'string' ? { path } : {}) };
|
|
469
|
+
},
|
|
439
470
|
async action(_authorization, request) {
|
|
440
471
|
return resolveScript(scripts.action, () => {
|
|
441
472
|
if (request.name.startsWith('conversation.'))
|
|
442
473
|
return conversationAction(request);
|
|
443
|
-
return { kind: 'rejected', code: 'unscripted-action', fields: {} };
|
|
474
|
+
return { kind: 'rejected', code: 'unscripted-action', fields: {}, retryable: false };
|
|
444
475
|
}, request).then((answer) => {
|
|
445
476
|
if (answer.kind === 'action' && answer.at !== undefined)
|
|
446
477
|
note(answer.at.locator, answer.at);
|
package/dist/model.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Definition, ValueFacts, VerifiedModel } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { Open } from './open.js';
|
|
2
3
|
export type ModelIdentity = {
|
|
3
4
|
identity: string;
|
|
4
5
|
version: string;
|
|
@@ -7,7 +8,7 @@ export type ModelSnapshot = ModelIdentity & {
|
|
|
7
8
|
schema: string | null;
|
|
8
9
|
revision: string | null;
|
|
9
10
|
};
|
|
10
|
-
export type ModelUnavailableReason = 'not-readable' | 'revoked' | 'not-acquired' | 'invalid'
|
|
11
|
+
export type ModelUnavailableReason = Open<'not-readable' | 'revoked' | 'not-acquired' | 'invalid'>;
|
|
11
12
|
export type ModelResult = {
|
|
12
13
|
kind: 'model';
|
|
13
14
|
snapshot: ModelSnapshot;
|
|
@@ -44,7 +45,7 @@ export type TypesResult = {
|
|
|
44
45
|
export type ValidationReceipt = {
|
|
45
46
|
identity: string;
|
|
46
47
|
version: string;
|
|
47
|
-
source: 'current' | 'cached'
|
|
48
|
+
source: Open<'current' | 'cached'>;
|
|
48
49
|
};
|
|
49
50
|
export declare const NO_MODEL: ModelState;
|
|
50
51
|
export declare function definitionOf(state: ModelState, type: string | undefined): Definition | undefined;
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAC/F,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC;AACnG,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC;AAChC,MAAM,MAAM,UAAU,GAClB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,QAAQ,EAAE,aAAa,CAAC;IACxB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;CAC/B,CAAC;AACN,MAAM,MAAM,WAAW,GACnB;IACE,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,MAAM,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,aAAa,CAAC;IAC5B,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AACN,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC;CACpC,CAAC;AACF,eAAO,MAAM,QAAQ,EAAE,UAA8D,CAAC;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAGhG;AACD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAgBzD;AACD,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAEpD;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAE5E;AACD,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAErE"}
|
package/dist/open.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open.d.ts","sourceRoot":"","sources":["../src/open.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,CAAC,KAAK,SAAS,MAAM,IAAI,KAAK,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC"}
|
package/dist/open.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/outcome.d.ts
CHANGED
|
@@ -1,8 +1,30 @@
|
|
|
1
|
-
import type { ActionResult } from './adapter.js';
|
|
1
|
+
import type { ActionResult, AdapterFailure, BinaryResult, HistoryResult, ProviderRefusal, RoomVersionAt, ScopedRefusal } from './adapter.js';
|
|
2
2
|
import type { ChangeBatch } from './change.js';
|
|
3
|
-
|
|
4
|
-
kind:
|
|
3
|
+
type Refused<Kind extends string> = ProviderRefusal & {
|
|
4
|
+
kind: Kind;
|
|
5
5
|
};
|
|
6
|
+
export type Failure = Refused<'transport-uncertainty'> | Refused<'revoked-authorization'> | (Refused<'room-not-readable'> & {
|
|
7
|
+
locator: string;
|
|
8
|
+
}) | ScopedRefusal;
|
|
9
|
+
export type CallResult = {
|
|
10
|
+
kind: 'action';
|
|
11
|
+
result: unknown;
|
|
12
|
+
at?: RoomVersionAt;
|
|
13
|
+
} | Refused<'rejected'> | Refused<'undeclared'> | Failure;
|
|
14
|
+
export type HistoryAnswer = Exclude<HistoryResult, {
|
|
15
|
+
kind: Failure['kind'];
|
|
16
|
+
}> | Failure;
|
|
17
|
+
export type BinaryAnswer = {
|
|
18
|
+
kind: 'binary';
|
|
19
|
+
blob: Blob;
|
|
20
|
+
} | Refused<'rejected'> | Refused<'absent'> | Failure;
|
|
21
|
+
export declare function absentBinary(path: string): BinaryAnswer;
|
|
22
|
+
export declare function binaryAnswer(result: BinaryResult): BinaryAnswer;
|
|
23
|
+
export declare const UNCERTAIN: Failure;
|
|
24
|
+
export declare function undeclared(name: string): CallResult;
|
|
25
|
+
export declare function failure(result: AdapterFailure): Failure;
|
|
26
|
+
export declare function calledResult(result: ActionResult): CallResult;
|
|
27
|
+
export declare function historyAnswer(result: HistoryResult): HistoryAnswer;
|
|
6
28
|
export type Submission = {
|
|
7
29
|
readonly state: 'waiting' | 'submitted';
|
|
8
30
|
} | {
|
|
@@ -12,7 +34,10 @@ export type Submission = {
|
|
|
12
34
|
export type QueueEntry = {
|
|
13
35
|
readonly batch: ChangeBatch;
|
|
14
36
|
} & (Submission | {
|
|
37
|
+
readonly state: 'local';
|
|
38
|
+
} | {
|
|
15
39
|
readonly state: 'accepted';
|
|
16
40
|
readonly roomVersion: string;
|
|
17
41
|
});
|
|
42
|
+
export {};
|
|
18
43
|
//# sourceMappingURL=outcome.d.ts.map
|
package/dist/outcome.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,KAAK,OAAO,CAAC,IAAI,SAAS,MAAM,IAAI,eAAe,GAAG;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,OAAO,GACf,OAAO,CAAC,uBAAuB,CAAC,GAChC,OAAO,CAAC,uBAAuB,CAAC,GAChC,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACpD,aAAa,CAAC;AAElB,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,EAAE,CAAC,EAAE,aAAa,CAAA;CAAE,GACvD,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,YAAY,CAAC,GACrB,OAAO,CAAC;AAEZ,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC;AAExF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,GAC9B,OAAO,CAAC,UAAU,CAAC,GACnB,OAAO,CAAC,QAAQ,CAAC,GACjB,OAAO,CAAC;AAEZ,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAEvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D;AAED,eAAO,MAAM,SAAS,EAAE,OAKvB,CAAC;AAEF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAEnD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAiBvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,CAE7D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAIlE;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAA;CAAE,GAC3C;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;CAAE,GAAG,CACvD,UAAU,GACV;IAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAC/D,CAAC"}
|
package/dist/outcome.js
CHANGED
|
@@ -1 +1,41 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export function absentBinary(path) {
|
|
2
|
+
return { kind: 'absent', code: 'binary-file-absent', fields: { path }, retryable: false };
|
|
3
|
+
}
|
|
4
|
+
export function binaryAnswer(result) {
|
|
5
|
+
return result.kind === 'binary' || result.kind === 'rejected' ? result : failure(result);
|
|
6
|
+
}
|
|
7
|
+
export const UNCERTAIN = {
|
|
8
|
+
kind: 'transport-uncertainty',
|
|
9
|
+
code: 'transport-uncertainty',
|
|
10
|
+
fields: {},
|
|
11
|
+
retryable: true,
|
|
12
|
+
};
|
|
13
|
+
export function undeclared(name) {
|
|
14
|
+
return { kind: 'undeclared', code: 'action-undeclared', fields: { name }, retryable: false };
|
|
15
|
+
}
|
|
16
|
+
export function failure(result) {
|
|
17
|
+
switch (result.kind) {
|
|
18
|
+
case 'transport-uncertainty':
|
|
19
|
+
return UNCERTAIN;
|
|
20
|
+
case 'revoked-authorization':
|
|
21
|
+
return { kind: result.kind, code: result.kind, fields: {}, retryable: false };
|
|
22
|
+
case 'room-not-readable':
|
|
23
|
+
return {
|
|
24
|
+
kind: result.kind,
|
|
25
|
+
locator: result.locator,
|
|
26
|
+
code: result.kind,
|
|
27
|
+
fields: {},
|
|
28
|
+
retryable: false,
|
|
29
|
+
};
|
|
30
|
+
case 'scoped-refusal':
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export function calledResult(result) {
|
|
35
|
+
return result.kind === 'action' || result.kind === 'rejected' ? result : failure(result);
|
|
36
|
+
}
|
|
37
|
+
export function historyAnswer(result) {
|
|
38
|
+
return result.kind === 'history' || result.kind === 'revision' || result.kind === 'no-history'
|
|
39
|
+
? result
|
|
40
|
+
: failure(result);
|
|
41
|
+
}
|
package/dist/overlay.d.ts
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
|
-
import type { HeadChange } from './adapter.js';
|
|
1
|
+
import type { BinaryFile, HeadChange } from './adapter.js';
|
|
2
2
|
import type { ChangeBatch } from './change.js';
|
|
3
3
|
export type Heads = {
|
|
4
4
|
revisions: Readonly<Record<string, string>>;
|
|
5
5
|
changes: Readonly<Record<string, HeadChange>>;
|
|
6
6
|
};
|
|
7
|
+
export type HeldBinary = ({
|
|
8
|
+
readonly state: 'accepted';
|
|
9
|
+
} & BinaryFile) | {
|
|
10
|
+
readonly state: 'pending';
|
|
11
|
+
readonly localId: string;
|
|
12
|
+
readonly byteLength: number;
|
|
13
|
+
readonly mediaType: string;
|
|
14
|
+
readonly sha256: string;
|
|
15
|
+
};
|
|
7
16
|
export type Layer = Heads & {
|
|
8
17
|
documents: Readonly<Record<string, string>>;
|
|
9
|
-
|
|
18
|
+
binaries: Readonly<Record<string, HeldBinary>>;
|
|
10
19
|
};
|
|
20
|
+
export declare function acceptedBinaries(files: Readonly<Record<string, BinaryFile>>): Record<string, HeldBinary>;
|
|
21
|
+
export declare function sameBinary(left: HeldBinary | undefined, right: HeldBinary | undefined): boolean;
|
|
11
22
|
export declare function sameChange(left: HeadChange | undefined, right: HeadChange | undefined): boolean;
|
|
12
|
-
export declare function overlay(base: Layer, queue: readonly ChangeBatch[]): Layer;
|
|
23
|
+
export declare function overlay(base: Layer, queue: readonly ChangeBatch[], unapplied?: () => void): Layer;
|
|
13
24
|
export declare function sameLayerText(left: Layer, right: Layer): boolean;
|
|
14
25
|
export declare function overlayChanged(base: Layer, queue: readonly ChangeBatch[], previousBase: Layer, previousQueue: readonly ChangeBatch[], previousVisible: Layer): Layer;
|
|
15
26
|
//# sourceMappingURL=overlay.d.ts.map
|
package/dist/overlay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,KAAK,EAAU,WAAW,EAAgB,MAAM,aAAa,CAAC;AAErE,MAAM,MAAM,KAAK,GAAG;IAClB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GAAG,UAAU,CAAC,GAC7C;IACE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG;IAC1B,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAI5B;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAW/F;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAQ/F;AAoKD,wBAAgB,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,IAAI,GAAG,KAAK,CAmBjG;AAQD,wBAAgB,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAOhE;AAiCD,wBAAgB,cAAc,CAC5B,IAAI,EAAE,KAAK,EACX,KAAK,EAAE,SAAS,WAAW,EAAE,EAC7B,YAAY,EAAE,KAAK,EACnB,aAAa,EAAE,SAAS,WAAW,EAAE,EACrC,eAAe,EAAE,KAAK,GACrB,KAAK,CAyFP"}
|
package/dist/overlay.js
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { apply, parse, serialize } from '@agentshouse/mdmodel';
|
|
2
|
+
export function acceptedBinaries(files) {
|
|
3
|
+
return Object.fromEntries(Object.entries(files).map(([path, file]) => [path, { state: 'accepted', ...file }]));
|
|
4
|
+
}
|
|
5
|
+
export function sameBinary(left, right) {
|
|
6
|
+
if (left === undefined || right === undefined)
|
|
7
|
+
return left === right;
|
|
8
|
+
return (left.state === right.state &&
|
|
9
|
+
left.byteLength === right.byteLength &&
|
|
10
|
+
left.mediaType === right.mediaType &&
|
|
11
|
+
left.sha256 === right.sha256 &&
|
|
12
|
+
(left.state === 'accepted'
|
|
13
|
+
? right.state === 'accepted' && left.fileRef === right.fileRef
|
|
14
|
+
: right.state === 'pending' && left.localId === right.localId));
|
|
15
|
+
}
|
|
2
16
|
export function sameChange(left, right) {
|
|
3
17
|
if (left === undefined || right === undefined)
|
|
4
18
|
return left === right;
|
|
@@ -76,13 +90,15 @@ function edited(document, change, priors) {
|
|
|
76
90
|
function edit(staged, change, priors) {
|
|
77
91
|
const text = staged.documents[change.path];
|
|
78
92
|
if (text === undefined)
|
|
79
|
-
return;
|
|
93
|
+
return false;
|
|
80
94
|
const parsed = parse(text, change.path);
|
|
81
95
|
if (!parsed.ok)
|
|
82
|
-
return;
|
|
96
|
+
return false;
|
|
83
97
|
const next = edited(parsed.document, change, priors);
|
|
84
|
-
if (next?.outcome
|
|
85
|
-
|
|
98
|
+
if (next?.outcome !== 'applied')
|
|
99
|
+
return false;
|
|
100
|
+
staged.documents[change.path] = serialize(next.document);
|
|
101
|
+
return true;
|
|
86
102
|
}
|
|
87
103
|
function relocate(staged, from, to) {
|
|
88
104
|
const text = staged.documents[from];
|
|
@@ -90,13 +106,15 @@ function relocate(staged, from, to) {
|
|
|
90
106
|
delete staged.documents[from];
|
|
91
107
|
staged.documents[to] = text;
|
|
92
108
|
}
|
|
93
|
-
else if (staged.
|
|
94
|
-
staged.
|
|
109
|
+
else if (staged.binaries[from] !== undefined) {
|
|
110
|
+
staged.binaries[to] = staged.binaries[from];
|
|
111
|
+
delete staged.binaries[from];
|
|
95
112
|
}
|
|
96
113
|
else {
|
|
97
|
-
return;
|
|
114
|
+
return false;
|
|
98
115
|
}
|
|
99
116
|
moveHead(staged, from, to);
|
|
117
|
+
return true;
|
|
100
118
|
}
|
|
101
119
|
function moveHead(heads, from, to) {
|
|
102
120
|
const revision = heads.revisions[from];
|
|
@@ -113,46 +131,61 @@ function erase(staged, path) {
|
|
|
113
131
|
delete staged.documents[path];
|
|
114
132
|
delete staged.revisions[path];
|
|
115
133
|
delete staged.changes[path];
|
|
116
|
-
staged.
|
|
134
|
+
delete staged.binaries[path];
|
|
117
135
|
}
|
|
118
136
|
function stage(staged, change, priors) {
|
|
119
137
|
if (change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble') {
|
|
120
|
-
edit(staged, change, priors);
|
|
121
|
-
return;
|
|
138
|
+
return edit(staged, change, priors);
|
|
122
139
|
}
|
|
123
140
|
if (change.kind === 'create') {
|
|
124
141
|
staged.documents[change.path] =
|
|
125
142
|
'content' in change ? change.content : compose(change.fields, change.sections);
|
|
126
143
|
delete staged.changes[change.path];
|
|
127
|
-
return;
|
|
144
|
+
return true;
|
|
128
145
|
}
|
|
129
146
|
if (change.kind === 'replace') {
|
|
130
147
|
if (staged.documents[change.path] === undefined)
|
|
131
|
-
return;
|
|
148
|
+
return false;
|
|
132
149
|
staged.documents[change.path] = change.content;
|
|
133
|
-
return;
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
if (change.kind === 'binary') {
|
|
153
|
+
if (staged.documents[change.path] !== undefined)
|
|
154
|
+
return false;
|
|
155
|
+
staged.binaries[change.path] = {
|
|
156
|
+
state: 'pending',
|
|
157
|
+
localId: change.localId,
|
|
158
|
+
byteLength: change.byteLength,
|
|
159
|
+
mediaType: change.mediaType,
|
|
160
|
+
sha256: change.sha256,
|
|
161
|
+
};
|
|
162
|
+
delete staged.revisions[change.path];
|
|
163
|
+
delete staged.changes[change.path];
|
|
164
|
+
return true;
|
|
134
165
|
}
|
|
135
166
|
if (change.kind === 'move') {
|
|
136
|
-
relocate(staged, change.path, change.to);
|
|
137
|
-
return;
|
|
167
|
+
return relocate(staged, change.path, change.to);
|
|
138
168
|
}
|
|
139
169
|
erase(staged, change.path);
|
|
170
|
+
return true;
|
|
140
171
|
}
|
|
141
|
-
export function overlay(base, queue) {
|
|
172
|
+
export function overlay(base, queue, unapplied) {
|
|
142
173
|
const staged = {
|
|
143
174
|
documents: { ...base.documents },
|
|
144
|
-
|
|
175
|
+
binaries: { ...base.binaries },
|
|
145
176
|
revisions: { ...base.revisions },
|
|
146
177
|
changes: { ...base.changes },
|
|
147
178
|
};
|
|
148
179
|
for (const batch of queue) {
|
|
149
180
|
const priors = priorsOf(batch.preconditions);
|
|
150
|
-
for (const change of batch.changes)
|
|
151
|
-
stage(staged, change, priors)
|
|
181
|
+
for (const change of batch.changes) {
|
|
182
|
+
if (!stage(staged, change, priors))
|
|
183
|
+
unapplied?.();
|
|
184
|
+
}
|
|
152
185
|
}
|
|
153
186
|
return {
|
|
154
187
|
documents: staged.documents,
|
|
155
|
-
|
|
188
|
+
binaries: staged.binaries,
|
|
156
189
|
revisions: staged.revisions,
|
|
157
190
|
changes: staged.changes,
|
|
158
191
|
};
|
|
@@ -164,8 +197,12 @@ export function sameLayerText(left, right) {
|
|
|
164
197
|
const paths = Object.keys(left.documents);
|
|
165
198
|
return (paths.length === Object.keys(right.documents).length &&
|
|
166
199
|
paths.every((path) => left.documents[path] === right.documents[path]) &&
|
|
167
|
-
left.
|
|
168
|
-
|
|
200
|
+
sameBinaries(left.binaries, right.binaries));
|
|
201
|
+
}
|
|
202
|
+
function sameBinaries(left, right) {
|
|
203
|
+
const paths = Object.keys(left);
|
|
204
|
+
return (paths.length === Object.keys(right).length &&
|
|
205
|
+
paths.every((path) => sameBinary(left[path], right[path])));
|
|
169
206
|
}
|
|
170
207
|
function replayHeads(base, queue) {
|
|
171
208
|
const heads = { revisions: { ...base.revisions }, changes: { ...base.changes } };
|
|
@@ -178,6 +215,10 @@ function replayHeads(base, queue) {
|
|
|
178
215
|
else if (change.kind === 'create') {
|
|
179
216
|
delete heads.changes[change.path];
|
|
180
217
|
}
|
|
218
|
+
else if (change.kind === 'binary') {
|
|
219
|
+
delete heads.revisions[change.path];
|
|
220
|
+
delete heads.changes[change.path];
|
|
221
|
+
}
|
|
181
222
|
else if (change.kind === 'move') {
|
|
182
223
|
moveHead(heads, change.path, change.to);
|
|
183
224
|
}
|
|
@@ -193,7 +234,7 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
|
|
|
193
234
|
sameLayerText(base, previousBase)) {
|
|
194
235
|
return {
|
|
195
236
|
documents: previousVisible.documents,
|
|
196
|
-
|
|
237
|
+
binaries: previousVisible.binaries,
|
|
197
238
|
...replayHeads(base, queue),
|
|
198
239
|
};
|
|
199
240
|
}
|
|
@@ -205,14 +246,14 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
|
|
|
205
246
|
...Object.keys(previousBase.revisions),
|
|
206
247
|
...Object.keys(base.changes),
|
|
207
248
|
...Object.keys(previousBase.changes),
|
|
208
|
-
...base.
|
|
209
|
-
...previousBase.
|
|
249
|
+
...Object.keys(base.binaries),
|
|
250
|
+
...Object.keys(previousBase.binaries),
|
|
210
251
|
]);
|
|
211
252
|
for (const path of paths) {
|
|
212
253
|
if (base.documents[path] !== previousBase.documents[path] ||
|
|
213
254
|
base.revisions[path] !== previousBase.revisions[path] ||
|
|
214
255
|
!sameChange(base.changes[path], previousBase.changes[path]) ||
|
|
215
|
-
base.
|
|
256
|
+
!sameBinary(base.binaries[path], previousBase.binaries[path]))
|
|
216
257
|
affected.add(path);
|
|
217
258
|
}
|
|
218
259
|
const oldIds = new Set(before);
|
|
@@ -245,6 +286,7 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
|
|
|
245
286
|
const documents = {};
|
|
246
287
|
const revisions = {};
|
|
247
288
|
const changes = {};
|
|
289
|
+
const binaries = {};
|
|
248
290
|
for (const path of affected) {
|
|
249
291
|
if (base.documents[path] !== undefined)
|
|
250
292
|
documents[path] = base.documents[path];
|
|
@@ -252,32 +294,28 @@ export function overlayChanged(base, queue, previousBase, previousQueue, previou
|
|
|
252
294
|
revisions[path] = base.revisions[path];
|
|
253
295
|
if (base.changes[path] !== undefined)
|
|
254
296
|
changes[path] = base.changes[path];
|
|
297
|
+
if (base.binaries[path] !== undefined)
|
|
298
|
+
binaries[path] = base.binaries[path];
|
|
255
299
|
}
|
|
256
|
-
const staged = overlay({
|
|
257
|
-
documents,
|
|
258
|
-
revisions,
|
|
259
|
-
changes,
|
|
260
|
-
binaryTargets: base.binaryTargets.filter((path) => affected.has(path)),
|
|
261
|
-
}, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
|
|
300
|
+
const staged = overlay({ documents, revisions, changes, binaries }, queue.filter((batch) => pathsOf(batch).some((path) => affected.has(path))));
|
|
262
301
|
const mergedDocuments = { ...previousVisible.documents };
|
|
263
302
|
const mergedRevisions = { ...previousVisible.revisions };
|
|
264
303
|
const mergedChanges = { ...previousVisible.changes };
|
|
265
|
-
const
|
|
304
|
+
const mergedBinaries = { ...previousVisible.binaries };
|
|
266
305
|
for (const path of affected) {
|
|
267
306
|
delete mergedDocuments[path];
|
|
268
307
|
delete mergedRevisions[path];
|
|
269
308
|
delete mergedChanges[path];
|
|
270
|
-
|
|
309
|
+
delete mergedBinaries[path];
|
|
271
310
|
}
|
|
272
311
|
Object.assign(mergedDocuments, staged.documents);
|
|
273
312
|
Object.assign(mergedRevisions, staged.revisions);
|
|
274
313
|
Object.assign(mergedChanges, staged.changes);
|
|
275
|
-
|
|
276
|
-
mergedTargets.add(path);
|
|
314
|
+
Object.assign(mergedBinaries, staged.binaries);
|
|
277
315
|
return {
|
|
278
316
|
documents: mergedDocuments,
|
|
279
317
|
revisions: mergedRevisions,
|
|
280
318
|
changes: mergedChanges,
|
|
281
|
-
|
|
319
|
+
binaries: mergedBinaries,
|
|
282
320
|
};
|
|
283
321
|
}
|
package/dist/query.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type Definition } from '@agentshouse/mdmodel';
|
|
2
2
|
import type { HeadChange } from './adapter.js';
|
|
3
|
+
import type { BinaryFileRecord } from './binary.js';
|
|
3
4
|
export type Value = string | number | boolean | null;
|
|
4
5
|
export type Predicate = Value | {
|
|
5
6
|
$eq: Value;
|
|
@@ -93,6 +94,7 @@ export type QueryDocument = {
|
|
|
93
94
|
markdown?: string;
|
|
94
95
|
backlinks?: readonly Backlink[];
|
|
95
96
|
change?: HeadChange | null;
|
|
97
|
+
binaryFile?: BinaryFileRecord;
|
|
96
98
|
};
|
|
97
99
|
export type QueryGroup = {
|
|
98
100
|
key: readonly unknown[];
|
|
@@ -204,6 +206,8 @@ export type Plan = {
|
|
|
204
206
|
limit: number | null;
|
|
205
207
|
};
|
|
206
208
|
export declare class QueryError extends Error {
|
|
209
|
+
readonly code: QueryErrorCode;
|
|
210
|
+
readonly retryable = false;
|
|
207
211
|
constructor(code: QueryErrorCode, at: string, problem: string);
|
|
208
212
|
}
|
|
209
213
|
type Entries = Readonly<Record<string, unknown>>;
|
package/dist/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAGhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/query.js
CHANGED
|
@@ -2,8 +2,11 @@ import { pointerFacts, } from '@agentshouse/mdmodel';
|
|
|
2
2
|
import { referenceField } from './model.js';
|
|
3
3
|
import { normalize } from './paths.js';
|
|
4
4
|
export class QueryError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
retryable = false;
|
|
5
7
|
constructor(code, at, problem) {
|
|
6
8
|
super(`${code} at ${at}: ${problem}`);
|
|
9
|
+
this.code = code;
|
|
7
10
|
}
|
|
8
11
|
}
|
|
9
12
|
const RANGE = ['$gt', '$gte', '$lt', '$lte'];
|
package/dist/reach.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ReferrerScope } from './adapter.js';
|
|
1
2
|
import type { MdRuntime, RuntimeTopic } from './connection.js';
|
|
2
3
|
import type { Plan, PlanReach, QueryResult } from './query.js';
|
|
3
4
|
import type { SearchResult } from './search.js';
|
|
@@ -24,6 +25,7 @@ export type Reachable = RuntimeView & {
|
|
|
24
25
|
query(plan: Plan): Promise<QueryResult>;
|
|
25
26
|
watchPlan(plan: Plan, deliver: (message: unknown) => void): () => void;
|
|
26
27
|
search(input: unknown, reach: PortReach | null): Promise<SearchResult>;
|
|
28
|
+
referrerScope(referrer: unknown): ReferrerScope | null;
|
|
27
29
|
};
|
|
28
30
|
export declare function holds(reach: PortReach | null, room: string): boolean;
|
|
29
31
|
export declare function governs(reach: PortReach | null, room: {
|