@agentshouse/mdruntime 0.1.0-cfb0d45b48da0 → 0.1.0-cfb2ae0107054
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 +5 -5
- package/dist/adapter.d.ts +24 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attempt.d.ts.map +1 -1
- package/dist/attempt.js +14 -1
- package/dist/bootstrap.d.ts +2 -2
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +28 -6
- package/dist/chat/acts.d.ts +3 -4
- package/dist/chat/acts.d.ts.map +1 -1
- package/dist/chat/acts.js +10 -10
- package/dist/chat/list.d.ts +6 -0
- package/dist/chat/list.d.ts.map +1 -1
- package/dist/chat/list.js +6 -3
- package/dist/chat/markdown.d.ts +2 -1
- package/dist/chat/markdown.d.ts.map +1 -1
- package/dist/chat/markdown.js +7 -6
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +25 -50
- package/dist/chat/ready.d.ts.map +1 -1
- package/dist/chat/ready.js +2 -2
- package/dist/chat/style.js +3 -3
- package/dist/client.d.ts +2 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +1 -1
- package/dist/connection.d.ts +1 -0
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +337 -150
- package/dist/conversation.d.ts +4 -2
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +143 -58
- package/dist/entry.d.ts +17 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +156 -0
- package/dist/fence.d.ts +6 -0
- package/dist/fence.d.ts.map +1 -0
- package/dist/fence.js +10 -0
- package/dist/host.d.ts +2 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +5 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/memory.d.ts +1 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +9 -0
- package/dist/outcome.d.ts +4 -0
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +1 -0
- package/dist/reach.js +1 -1
- package/dist/save.d.ts +1 -2
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +6 -5
- package/dist/store.d.ts +22 -7
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +125 -36
- package/package.json +5 -1
package/dist/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,YAAY,EACjB,KAAK,OAAO,EAEZ,KAAK,UAAU,EAKf,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAItB,KAAK,cAAc,EACnB,KAAK,UAAU,EAGf,KAAK,kBAAkB,EACvB,KAAK,MAAM,EAGX,KAAK,aAAa,EAIlB,KAAK,SAAS,EAGd,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAkBtB,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/memory.js
CHANGED
|
@@ -55,6 +55,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
55
55
|
const scripted = new Map();
|
|
56
56
|
const unsealed = new Map();
|
|
57
57
|
const sealed = new Set();
|
|
58
|
+
const sentTurns = new Map();
|
|
58
59
|
const historyPageSize = options.historyPageSize;
|
|
59
60
|
let held = [];
|
|
60
61
|
let expiring = [];
|
|
@@ -220,9 +221,15 @@ export function createMemoryAdapter(options = {}) {
|
|
|
220
221
|
if (outcome !== undefined)
|
|
221
222
|
return outcome;
|
|
222
223
|
if (name === 'conversation.send') {
|
|
224
|
+
const operation = typeof input.operation_id === 'string' ? input.operation_id : null;
|
|
225
|
+
const answered = operation === null ? undefined : sentTurns.get(operation);
|
|
226
|
+
if (answered !== undefined)
|
|
227
|
+
return { kind: 'action', result: { turn: answered } };
|
|
223
228
|
issued += 1;
|
|
224
229
|
const turn = `turn-${issued}`;
|
|
225
230
|
unsealed.set(turn, named);
|
|
231
|
+
if (operation !== null)
|
|
232
|
+
sentTurns.set(operation, turn);
|
|
226
233
|
return { kind: 'action', result: { turn } };
|
|
227
234
|
}
|
|
228
235
|
if (name === 'conversation.cancel') {
|
|
@@ -253,6 +260,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
253
260
|
};
|
|
254
261
|
}
|
|
255
262
|
return {
|
|
263
|
+
...(options.exhaustiveDiscovery === undefined ? {} : { exhaustiveDiscovery: true }),
|
|
256
264
|
setRooms(next) {
|
|
257
265
|
rooms = [...next];
|
|
258
266
|
retain(rooms);
|
|
@@ -340,6 +348,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
340
348
|
observer({ kind: 'closed', revoked: false });
|
|
341
349
|
});
|
|
342
350
|
},
|
|
351
|
+
published() { },
|
|
343
352
|
observe(notify) {
|
|
344
353
|
observers.add(notify);
|
|
345
354
|
queueMicrotask(() => {
|
package/dist/outcome.d.ts
CHANGED
|
@@ -20,6 +20,10 @@ export type BinaryAnswer = {
|
|
|
20
20
|
} | Refused<'rejected'> | Refused<'absent'> | Failure;
|
|
21
21
|
export declare function absentBinary(path: string): BinaryAnswer;
|
|
22
22
|
export declare function binaryAnswer(result: BinaryResult): BinaryAnswer;
|
|
23
|
+
export type Offline = {
|
|
24
|
+
readonly kind: 'offline';
|
|
25
|
+
};
|
|
26
|
+
export declare const OFFLINE: Offline;
|
|
23
27
|
export declare const UNCERTAIN: Failure;
|
|
24
28
|
export declare function undeclared(name: string): CallResult;
|
|
25
29
|
export declare function failure(result: AdapterFailure): Failure;
|
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,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"}
|
|
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,MAAM,MAAM,OAAO,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEnD,eAAO,MAAM,OAAO,EAAE,OAA6B,CAAC;AAEpD,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
|
@@ -4,6 +4,7 @@ export function absentBinary(path) {
|
|
|
4
4
|
export function binaryAnswer(result) {
|
|
5
5
|
return result.kind === 'binary' || result.kind === 'rejected' ? result : failure(result);
|
|
6
6
|
}
|
|
7
|
+
export const OFFLINE = { kind: 'offline' };
|
|
7
8
|
export const UNCERTAIN = {
|
|
8
9
|
kind: 'transport-uncertainty',
|
|
9
10
|
code: 'transport-uncertainty',
|
package/dist/reach.js
CHANGED
|
@@ -269,7 +269,7 @@ export function narrowed(runtime, given) {
|
|
|
269
269
|
list: () => conversation().list(),
|
|
270
270
|
read: (id, options) => conversation().read(id, options),
|
|
271
271
|
create: (input) => conversation().create(input),
|
|
272
|
-
send: (id) => conversation().send(id),
|
|
272
|
+
send: (id, operation, draft) => conversation().send(id, operation, draft),
|
|
273
273
|
answer: (id, answer) => conversation().answer(id, answer),
|
|
274
274
|
interrupt: (id) => conversation().interrupt(id),
|
|
275
275
|
kill: (id) => conversation().kill(id),
|
package/dist/save.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { ProviderLimit } from './adapter.js';
|
|
2
2
|
import { type Change, type ChangeBatch, type Precondition, type WrittenBy } from './change.js';
|
|
3
3
|
import { type Composition } from './collection.js';
|
|
4
|
-
import { type Layer } from './overlay.js';
|
|
5
4
|
import type { VisibleLayer } from './replica.js';
|
|
6
5
|
import type { ChangedPart } from './room-draft.js';
|
|
7
6
|
export type SaveRefusal = {
|
|
@@ -55,6 +54,6 @@ export type Joining = {
|
|
|
55
54
|
};
|
|
56
55
|
export declare function requeued(queue: readonly ChangeBatch[], changes: readonly Change[], visible: VisibleLayer, changeable: (batch: ChangeBatch) => boolean, state: (queue: readonly ChangeBatch[]) => VisibleLayer): Requeued;
|
|
57
56
|
export declare function joined(queue: readonly ChangeBatch[], owner: ChangeBatch, extra: ChangeBatch): Joining;
|
|
58
|
-
export declare function limitedIn(queue: readonly ChangeBatch[], batch: ChangeBatch, limits: readonly ProviderLimit[], state: (queue: readonly ChangeBatch[]) =>
|
|
57
|
+
export declare function limitedIn(queue: readonly ChangeBatch[], batch: ChangeBatch, limits: readonly ProviderLimit[], state: (queue: readonly ChangeBatch[]) => VisibleLayer): SaveRefusal | null;
|
|
59
58
|
export declare function buildBatch(input: SaveInput): BatchResult;
|
|
60
59
|
//# sourceMappingURL=save.d.ts.map
|
package/dist/save.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"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"}
|
package/dist/save.js
CHANGED
|
@@ -364,8 +364,8 @@ function preconditionsOf(changes, visible, bases) {
|
|
|
364
364
|
function depth(path) {
|
|
365
365
|
return path.split('/').length;
|
|
366
366
|
}
|
|
367
|
-
function exceeded(limits, changes, resulting) {
|
|
368
|
-
const written =
|
|
367
|
+
function exceeded(limits, changes, effective, resulting) {
|
|
368
|
+
const written = effective.map((change) => (change.kind === 'move' ? change.to : change.path));
|
|
369
369
|
const created = changes
|
|
370
370
|
.filter((change) => change.kind === 'create' || change.kind === 'move' || change.kind === 'binary')
|
|
371
371
|
.map((change) => (change.kind === 'move' ? change.to : change.path));
|
|
@@ -381,7 +381,7 @@ function exceeded(limits, changes, resulting) {
|
|
|
381
381
|
return refuse('provider-limit', undefined, limit.name);
|
|
382
382
|
}
|
|
383
383
|
if (limit.name === 'document-size') {
|
|
384
|
-
const large = written.find((path) => (resulting.documents[path] ?? '').
|
|
384
|
+
const large = written.find((path) => new TextEncoder().encode(resulting.documents[path] ?? '').byteLength > value);
|
|
385
385
|
if (large !== undefined)
|
|
386
386
|
return refuse('provider-limit', large, limit.name);
|
|
387
387
|
}
|
|
@@ -718,7 +718,8 @@ export function joined(queue, owner, extra) {
|
|
|
718
718
|
return { kind: 'joined', batch, queue: queue.map((item) => (item === owner ? batch : item)) };
|
|
719
719
|
}
|
|
720
720
|
export function limitedIn(queue, batch, limits, state) {
|
|
721
|
-
const
|
|
721
|
+
const at = queue.indexOf(batch);
|
|
722
|
+
const limited = exceeded(limits, batch.changes, providerRewritten(batch, state(queue.slice(0, at))).changes, state(queue.slice(0, at + 1)));
|
|
722
723
|
return limited?.kind === 'refused' ? limited.refusal : null;
|
|
723
724
|
}
|
|
724
725
|
export function buildBatch(input) {
|
|
@@ -772,7 +773,7 @@ export function buildBatch(input) {
|
|
|
772
773
|
},
|
|
773
774
|
};
|
|
774
775
|
}
|
|
775
|
-
const limited = exceeded(input.providerLimits, changes, resulting);
|
|
776
|
+
const limited = exceeded(input.providerLimits, changes, predicted.changes, resulting);
|
|
776
777
|
if (limited !== null)
|
|
777
778
|
return limited;
|
|
778
779
|
const validated = typedPaths
|
package/dist/store.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ModelState } from './model.js';
|
|
2
2
|
import type { Capability, HeadChange, Member, OperationScopes, ProviderLimit, ReplicaAdmission, TypedSelection } from './adapter.js';
|
|
3
|
-
import type { AcceptedMessage } from './adapter.js';
|
|
3
|
+
import type { AcceptedMessage, KeptReceipt } from './adapter.js';
|
|
4
4
|
import type { ChangeBatch } from './change.js';
|
|
5
5
|
import { type HeldBinary } from './overlay.js';
|
|
6
6
|
import type { ChatDraftFile } from './file.js';
|
|
7
7
|
import type { Submission } from './outcome.js';
|
|
8
8
|
import type { RoomDraftRecord, SavedDraft } from './room-draft.js';
|
|
9
|
-
export declare const STORE_SCHEMA =
|
|
10
|
-
export declare const AUTHORED_SCHEMA =
|
|
9
|
+
export declare const STORE_SCHEMA = 24;
|
|
10
|
+
export declare const AUTHORED_SCHEMA = 2;
|
|
11
11
|
export type ReplicaRecord = {
|
|
12
12
|
locator: string;
|
|
13
13
|
name: string;
|
|
@@ -66,14 +66,19 @@ export type ConversationWrite = {
|
|
|
66
66
|
conversation: string;
|
|
67
67
|
messages: readonly AcceptedMessage[];
|
|
68
68
|
read?: string | null;
|
|
69
|
-
|
|
69
|
+
};
|
|
70
|
+
export type ChatSubmission = {
|
|
71
|
+
readonly operation: string;
|
|
72
|
+
readonly text: string;
|
|
73
|
+
readonly files: readonly ChatDraftFile[];
|
|
74
|
+
readonly turn: string | null;
|
|
70
75
|
};
|
|
71
76
|
export type ChatDraftRecord = {
|
|
72
77
|
conversation: string;
|
|
73
78
|
text: string;
|
|
74
79
|
files: readonly ChatDraftFile[];
|
|
75
|
-
turn: string | null;
|
|
76
80
|
revision: string;
|
|
81
|
+
submitted?: readonly ChatSubmission[];
|
|
77
82
|
};
|
|
78
83
|
export type RecordWrite = {
|
|
79
84
|
next: ReplicaRecord;
|
|
@@ -114,17 +119,27 @@ export type RuntimeStore = {
|
|
|
114
119
|
dropChatDraft(conversation: string): Promise<void>;
|
|
115
120
|
keepRoomDraft(record: RoomDraftRecord): Promise<void>;
|
|
116
121
|
discardRoomDraft(locator: string, path: string): Promise<void>;
|
|
117
|
-
|
|
122
|
+
fences(): Promise<readonly string[]>;
|
|
123
|
+
erase(locators: readonly string[]): Promise<void>;
|
|
118
124
|
transfers(): Promise<readonly TransferRecord[]>;
|
|
119
125
|
staged(record: TransferRecord): Promise<StagedLayer>;
|
|
120
126
|
stage(record: TransferRecord, page: StagedLayer): Promise<void>;
|
|
121
127
|
abandon(locator: string): Promise<void>;
|
|
128
|
+
receivedHeads(): Promise<readonly KeptReceipt[]>;
|
|
129
|
+
receivedParts(key: string, count: number): Promise<readonly unknown[]>;
|
|
130
|
+
keepReceived(key: string, head: unknown, part?: {
|
|
131
|
+
index: number;
|
|
132
|
+
value: unknown;
|
|
133
|
+
}): Promise<void>;
|
|
134
|
+
dropReceived(keys: readonly string[]): Promise<void>;
|
|
122
135
|
generation(): Promise<string | null>;
|
|
123
136
|
rememberGeneration(value: string): Promise<void>;
|
|
124
137
|
close(): void;
|
|
125
138
|
};
|
|
126
139
|
export declare function authoredHolder(): Promise<string | null>;
|
|
127
140
|
export declare function authoredBy(holder: string): Promise<boolean>;
|
|
141
|
+
export declare function authoredBinding(): Promise<string | null>;
|
|
142
|
+
export declare function bindAuthored(binding: string): Promise<void>;
|
|
128
143
|
export declare function removeRuntimeStore(holder?: string): Promise<boolean>;
|
|
129
|
-
export declare function openRuntimeStore(): Promise<RuntimeStore>;
|
|
144
|
+
export declare function openRuntimeStore(fenced: (locator: string) => boolean): Promise<RuntimeStore>;
|
|
130
145
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,MAAM,EACN,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,cAAc,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
|
package/dist/store.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { sameBinary, sameChange } from './overlay.js';
|
|
2
2
|
const DATABASE = 'mdruntime';
|
|
3
3
|
const AUTHORED = 'mdruntime-authored';
|
|
4
|
+
const FENCES = 'fences';
|
|
4
5
|
const ROOMS = 'rooms';
|
|
5
6
|
const DOCUMENTS = 'documents';
|
|
6
7
|
const BINARY_FILES = 'binaryFiles';
|
|
7
8
|
const TRANSFERS = 'transfers';
|
|
9
|
+
const RECEIVED = 'received';
|
|
10
|
+
const RECEIVED_PARTS = 'receivedParts';
|
|
8
11
|
const PENDING_CHANGES = 'pendingChanges';
|
|
9
12
|
const DECLARATIONS = 'declarations';
|
|
10
13
|
const ROOM_DRAFTS = 'roomDrafts';
|
|
@@ -18,14 +21,29 @@ const CURRENT = 'current';
|
|
|
18
21
|
const MEMBER = 'member';
|
|
19
22
|
const GENERATION = 'generation';
|
|
20
23
|
const HOLDER = 'holder';
|
|
21
|
-
|
|
22
|
-
export const
|
|
24
|
+
const BINDING = 'binding';
|
|
25
|
+
export const STORE_SCHEMA = 24;
|
|
26
|
+
const REPLICA_SHAPE = 23;
|
|
27
|
+
export const AUTHORED_SCHEMA = 2;
|
|
23
28
|
const AUTHORED_STORES = [
|
|
24
29
|
[QUEUES, { keyPath: 'locator' }],
|
|
25
30
|
[PENDING_CHANGES, { keyPath: ['locator', 'id'] }],
|
|
26
31
|
[ROOM_DRAFTS, { keyPath: ['locator', 'path'] }],
|
|
27
32
|
[CHAT_DRAFTS, { keyPath: 'conversation' }],
|
|
28
33
|
[FACTS, undefined],
|
|
34
|
+
[FENCES, { keyPath: 'locator' }],
|
|
35
|
+
];
|
|
36
|
+
const REPLICA_STORES = [
|
|
37
|
+
[ROOMS, { keyPath: 'locator' }],
|
|
38
|
+
[DOCUMENTS, { keyPath: ['locator', 'transfer', 'path'] }],
|
|
39
|
+
[BINARY_FILES, { keyPath: ['locator', 'transfer', 'path'] }],
|
|
40
|
+
[TRANSFERS, { keyPath: 'locator' }],
|
|
41
|
+
[RECEIVED, { keyPath: 'key' }],
|
|
42
|
+
[RECEIVED_PARTS, { keyPath: ['key', 'index'] }],
|
|
43
|
+
[DECLARATIONS, undefined],
|
|
44
|
+
[PRESENTATION, { keyPath: 'app' }],
|
|
45
|
+
[CONVERSATIONS, { keyPath: 'conversation' }],
|
|
46
|
+
[MESSAGES, { keyPath: ['conversation', 'identity'] }],
|
|
29
47
|
];
|
|
30
48
|
const READ_BATCH = 256;
|
|
31
49
|
function settled(request) {
|
|
@@ -215,6 +233,29 @@ export async function authoredBy(holder) {
|
|
|
215
233
|
authored.close();
|
|
216
234
|
}
|
|
217
235
|
}
|
|
236
|
+
export async function authoredBinding() {
|
|
237
|
+
const authored = await openAuthored();
|
|
238
|
+
try {
|
|
239
|
+
const transaction = authored.transaction(FACTS, 'readonly');
|
|
240
|
+
const held = transaction.objectStore(FACTS).get(BINDING);
|
|
241
|
+
await completed(transaction);
|
|
242
|
+
return typeof held.result === 'string' ? held.result : null;
|
|
243
|
+
}
|
|
244
|
+
finally {
|
|
245
|
+
authored.close();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
export async function bindAuthored(binding) {
|
|
249
|
+
const authored = await openAuthored();
|
|
250
|
+
try {
|
|
251
|
+
const transaction = authored.transaction(FACTS, 'readwrite');
|
|
252
|
+
transaction.objectStore(FACTS).put(binding, BINDING);
|
|
253
|
+
await completed(transaction);
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
authored.close();
|
|
257
|
+
}
|
|
258
|
+
}
|
|
218
259
|
export async function removeRuntimeStore(holder) {
|
|
219
260
|
await removeDatabase(DATABASE);
|
|
220
261
|
if (holder !== undefined && (await authoredBy(holder)))
|
|
@@ -224,21 +265,19 @@ export async function removeRuntimeStore(holder) {
|
|
|
224
265
|
}
|
|
225
266
|
function openReplica() {
|
|
226
267
|
const opening = indexedDB.open(DATABASE, STORE_SCHEMA);
|
|
227
|
-
opening.onupgradeneeded = () => {
|
|
268
|
+
opening.onupgradeneeded = (event) => {
|
|
228
269
|
const database = opening.result;
|
|
229
|
-
|
|
230
|
-
database.
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
});
|
|
241
|
-
messages.createIndex('conversation', 'conversation');
|
|
270
|
+
if (event.oldVersion < REPLICA_SHAPE) {
|
|
271
|
+
for (const name of [...database.objectStoreNames])
|
|
272
|
+
database.deleteObjectStore(name);
|
|
273
|
+
}
|
|
274
|
+
for (const [name, parameters] of REPLICA_STORES) {
|
|
275
|
+
if (database.objectStoreNames.contains(name))
|
|
276
|
+
continue;
|
|
277
|
+
const store = database.createObjectStore(name, parameters);
|
|
278
|
+
if (name === MESSAGES)
|
|
279
|
+
store.createIndex('conversation', 'conversation');
|
|
280
|
+
}
|
|
242
281
|
};
|
|
243
282
|
return settled(opening);
|
|
244
283
|
}
|
|
@@ -253,7 +292,7 @@ function openAuthored() {
|
|
|
253
292
|
};
|
|
254
293
|
return settled(opening);
|
|
255
294
|
}
|
|
256
|
-
export async function openRuntimeStore() {
|
|
295
|
+
export async function openRuntimeStore(fenced) {
|
|
257
296
|
const authored = await openAuthored();
|
|
258
297
|
const database = await openReplica().catch((error) => {
|
|
259
298
|
authored.close();
|
|
@@ -264,12 +303,14 @@ export async function openRuntimeStore() {
|
|
|
264
303
|
const transaction = database.transaction([ROOMS, DOCUMENTS, BINARY_FILES], 'readonly');
|
|
265
304
|
const rooms = await settled(transaction.objectStore(ROOMS).getAll());
|
|
266
305
|
const records = [];
|
|
267
|
-
for (const room of rooms) {
|
|
306
|
+
for (const room of rooms.filter((held) => !fenced(held.locator))) {
|
|
268
307
|
records.push({ ...room, ...(await readLayer(transaction, room.locator, room.transfer)) });
|
|
269
308
|
}
|
|
270
309
|
return records;
|
|
271
310
|
},
|
|
272
311
|
async keepAuthored({ locator, queue, saved, roomDrafts, consumedRoomDrafts }) {
|
|
312
|
+
if (fenced(locator))
|
|
313
|
+
return;
|
|
273
314
|
const transaction = authored.transaction([QUEUES, PENDING_CHANGES, ROOM_DRAFTS], 'readwrite');
|
|
274
315
|
const order = transaction.objectStore(QUEUES);
|
|
275
316
|
const pending = transaction.objectStore(PENDING_CHANGES);
|
|
@@ -306,7 +347,7 @@ export async function openRuntimeStore() {
|
|
|
306
347
|
await completed(transaction);
|
|
307
348
|
},
|
|
308
349
|
async write({ next, previous, stored }) {
|
|
309
|
-
if (next === previous)
|
|
350
|
+
if (next === previous || fenced(next.locator))
|
|
310
351
|
return;
|
|
311
352
|
const transaction = database.transaction([ROOMS, DOCUMENTS, BINARY_FILES, TRANSFERS], 'readwrite');
|
|
312
353
|
transaction.objectStore(ROOMS).put(roomRecord(next));
|
|
@@ -326,6 +367,8 @@ export async function openRuntimeStore() {
|
|
|
326
367
|
const rooms = transaction.objectStore(ROOMS);
|
|
327
368
|
const revoked = { status: 'unavailable', reason: 'revoked' };
|
|
328
369
|
for (const record of records) {
|
|
370
|
+
if (fenced(record.locator))
|
|
371
|
+
continue;
|
|
329
372
|
rooms.put(roomRecord({ ...record, model: revoked, selectionModel: revoked }));
|
|
330
373
|
}
|
|
331
374
|
await completed(transaction);
|
|
@@ -366,7 +409,9 @@ export async function openRuntimeStore() {
|
|
|
366
409
|
settled(transaction.objectStore(PENDING_CHANGES).getAll()),
|
|
367
410
|
]);
|
|
368
411
|
const byId = new Map(pending.map((record) => [`${record.locator}\0${record.id}`, record]));
|
|
369
|
-
return queues
|
|
412
|
+
return queues
|
|
413
|
+
.filter((queue) => !fenced(queue.locator))
|
|
414
|
+
.map((queue) => ({
|
|
370
415
|
locator: queue.locator,
|
|
371
416
|
pending: queue.order.map((id) => {
|
|
372
417
|
const record = byId.get(`${queue.locator}\0${id}`);
|
|
@@ -377,18 +422,22 @@ export async function openRuntimeStore() {
|
|
|
377
422
|
}),
|
|
378
423
|
}));
|
|
379
424
|
},
|
|
380
|
-
submit(locator, id, submission, lost) {
|
|
381
|
-
|
|
425
|
+
async submit(locator, id, submission, lost) {
|
|
426
|
+
if (!fenced(locator))
|
|
427
|
+
await amendPending(authored, locator, id, { submission, lost });
|
|
382
428
|
},
|
|
383
|
-
accept(locator, id, roomVersion) {
|
|
384
|
-
|
|
429
|
+
async accept(locator, id, roomVersion) {
|
|
430
|
+
if (!fenced(locator))
|
|
431
|
+
await amendPending(authored, locator, id, { accepted: roomVersion });
|
|
385
432
|
},
|
|
386
|
-
keepUpload(locator, id, upload) {
|
|
387
|
-
|
|
433
|
+
async keepUpload(locator, id, upload) {
|
|
434
|
+
if (!fenced(locator))
|
|
435
|
+
await amendPending(authored, locator, id, { upload });
|
|
388
436
|
},
|
|
389
437
|
async roomDrafts() {
|
|
390
438
|
const transaction = authored.transaction(ROOM_DRAFTS, 'readonly');
|
|
391
|
-
|
|
439
|
+
const held = await settled(transaction.objectStore(ROOM_DRAFTS).getAll());
|
|
440
|
+
return held.filter((record) => !fenced(record.locator));
|
|
392
441
|
},
|
|
393
442
|
async presentation() {
|
|
394
443
|
const transaction = database.transaction(PRESENTATION, 'readonly');
|
|
@@ -416,12 +465,7 @@ export async function openRuntimeStore() {
|
|
|
416
465
|
}
|
|
417
466
|
return [...held.values()];
|
|
418
467
|
},
|
|
419
|
-
async keepMessages({ conversation, messages, read
|
|
420
|
-
if (sealed === true) {
|
|
421
|
-
const sealing = authored.transaction(CHAT_DRAFTS, 'readwrite');
|
|
422
|
-
sealing.objectStore(CHAT_DRAFTS).delete(conversation);
|
|
423
|
-
await completed(sealing);
|
|
424
|
-
}
|
|
468
|
+
async keepMessages({ conversation, messages, read }) {
|
|
425
469
|
const transaction = database.transaction([CONVERSATIONS, MESSAGES], 'readwrite');
|
|
426
470
|
const stored = transaction.objectStore(MESSAGES);
|
|
427
471
|
for (const message of messages) {
|
|
@@ -467,18 +511,28 @@ export async function openRuntimeStore() {
|
|
|
467
511
|
await completed(transaction);
|
|
468
512
|
},
|
|
469
513
|
async keepRoomDraft(record) {
|
|
514
|
+
if (fenced(record.locator))
|
|
515
|
+
return;
|
|
470
516
|
const transaction = authored.transaction(ROOM_DRAFTS, 'readwrite');
|
|
471
517
|
transaction.objectStore(ROOM_DRAFTS).put(record);
|
|
472
518
|
await completed(transaction);
|
|
473
519
|
},
|
|
474
520
|
async discardRoomDraft(locator, path) {
|
|
521
|
+
if (fenced(locator))
|
|
522
|
+
return;
|
|
475
523
|
const transaction = authored.transaction(ROOM_DRAFTS, 'readwrite');
|
|
476
524
|
transaction.objectStore(ROOM_DRAFTS).delete([locator, path]);
|
|
477
525
|
await completed(transaction);
|
|
478
526
|
},
|
|
479
|
-
async
|
|
480
|
-
const
|
|
527
|
+
async fences() {
|
|
528
|
+
const transaction = authored.transaction(FENCES, 'readonly');
|
|
529
|
+
const held = await settled(transaction.objectStore(FENCES).getAll());
|
|
530
|
+
return held.map((fence) => fence.locator);
|
|
531
|
+
},
|
|
532
|
+
async erase(locators) {
|
|
533
|
+
const work = authored.transaction([FENCES, QUEUES, PENDING_CHANGES, ROOM_DRAFTS], 'readwrite');
|
|
481
534
|
for (const locator of locators) {
|
|
535
|
+
work.objectStore(FENCES).put({ locator });
|
|
482
536
|
work.objectStore(QUEUES).delete(locator);
|
|
483
537
|
for (const name of [PENDING_CHANGES, ROOM_DRAFTS]) {
|
|
484
538
|
removeRoomEntries(work.objectStore(name), locator);
|
|
@@ -493,22 +547,31 @@ export async function openRuntimeStore() {
|
|
|
493
547
|
transaction.objectStore(BINARY_FILES).delete(underRoom(locator));
|
|
494
548
|
}
|
|
495
549
|
await completed(transaction);
|
|
550
|
+
const fences = authored.transaction(FENCES, 'readwrite');
|
|
551
|
+
for (const locator of locators)
|
|
552
|
+
fences.objectStore(FENCES).delete(locator);
|
|
553
|
+
await completed(fences);
|
|
496
554
|
},
|
|
497
555
|
async transfers() {
|
|
498
556
|
const transaction = database.transaction(TRANSFERS, 'readonly');
|
|
499
|
-
|
|
557
|
+
const held = await settled(transaction.objectStore(TRANSFERS).getAll());
|
|
558
|
+
return held.filter((record) => !fenced(record.locator));
|
|
500
559
|
},
|
|
501
560
|
staged(record) {
|
|
502
561
|
const transaction = database.transaction([DOCUMENTS, BINARY_FILES], 'readonly');
|
|
503
562
|
return readLayer(transaction, record.locator, record.transfer);
|
|
504
563
|
},
|
|
505
564
|
async stage(record, page) {
|
|
565
|
+
if (fenced(record.locator))
|
|
566
|
+
return;
|
|
506
567
|
const transaction = database.transaction([TRANSFERS, DOCUMENTS, BINARY_FILES], 'readwrite');
|
|
507
568
|
writeLayer(transaction, record.locator, record.transfer, page, null);
|
|
508
569
|
transaction.objectStore(TRANSFERS).put(record);
|
|
509
570
|
await completed(transaction);
|
|
510
571
|
},
|
|
511
572
|
async abandon(locator) {
|
|
573
|
+
if (fenced(locator))
|
|
574
|
+
return;
|
|
512
575
|
const transaction = database.transaction([TRANSFERS, DOCUMENTS, BINARY_FILES], 'readwrite');
|
|
513
576
|
const transfers = transaction.objectStore(TRANSFERS);
|
|
514
577
|
const held = transfers.get(locator);
|
|
@@ -523,6 +586,32 @@ export async function openRuntimeStore() {
|
|
|
523
586
|
};
|
|
524
587
|
await completed(transaction);
|
|
525
588
|
},
|
|
589
|
+
async receivedHeads() {
|
|
590
|
+
const transaction = database.transaction(RECEIVED, 'readonly');
|
|
591
|
+
return settled(transaction.objectStore(RECEIVED).getAll());
|
|
592
|
+
},
|
|
593
|
+
async receivedParts(key, count) {
|
|
594
|
+
const transaction = database.transaction(RECEIVED_PARTS, 'readonly');
|
|
595
|
+
const kept = await settled(transaction
|
|
596
|
+
.objectStore(RECEIVED_PARTS)
|
|
597
|
+
.getAll(IDBKeyRange.bound([key, 0], [key, count], false, true)));
|
|
598
|
+
return kept.map((part) => part.value);
|
|
599
|
+
},
|
|
600
|
+
async keepReceived(key, head, part) {
|
|
601
|
+
const transaction = database.transaction([RECEIVED, RECEIVED_PARTS], 'readwrite');
|
|
602
|
+
transaction.objectStore(RECEIVED).put({ key, head });
|
|
603
|
+
if (part !== undefined)
|
|
604
|
+
transaction.objectStore(RECEIVED_PARTS).put({ key, ...part });
|
|
605
|
+
await completed(transaction);
|
|
606
|
+
},
|
|
607
|
+
async dropReceived(keys) {
|
|
608
|
+
const transaction = database.transaction([RECEIVED, RECEIVED_PARTS], 'readwrite');
|
|
609
|
+
for (const key of keys) {
|
|
610
|
+
transaction.objectStore(RECEIVED).delete(key);
|
|
611
|
+
transaction.objectStore(RECEIVED_PARTS).delete(IDBKeyRange.bound([key], [key, []]));
|
|
612
|
+
}
|
|
613
|
+
await completed(transaction);
|
|
614
|
+
},
|
|
526
615
|
async generation() {
|
|
527
616
|
const transaction = authored.transaction(FACTS, 'readonly');
|
|
528
617
|
const held = await settled(transaction.objectStore(FACTS).get(GENERATION));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentshouse/mdruntime",
|
|
3
|
-
"version": "0.1.0-
|
|
3
|
+
"version": "0.1.0-cfb2ae0107054",
|
|
4
4
|
"description": "The headless core of MD App",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -24,6 +24,10 @@
|
|
|
24
24
|
"types": "./dist/client.d.ts",
|
|
25
25
|
"default": "./dist/client.js"
|
|
26
26
|
},
|
|
27
|
+
"./entry": {
|
|
28
|
+
"types": "./dist/entry.d.ts",
|
|
29
|
+
"default": "./dist/entry.js"
|
|
30
|
+
},
|
|
27
31
|
"./memory": {
|
|
28
32
|
"types": "./dist/memory.d.ts",
|
|
29
33
|
"default": "./dist/memory.js"
|