@agentshouse/mdruntime 0.1.0-c5d3fa6fb67bc → 0.1.0-c5f333dfa0583
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 +225 -212
- package/README.md +9 -8
- package/dist/adapter.d.ts +64 -24
- package/dist/adapter.d.ts.map +1 -1
- package/dist/attached-model.d.ts +4 -1
- package/dist/attached-model.d.ts.map +1 -1
- package/dist/attached-model.js +13 -3
- package/dist/bootstrap.d.ts +15 -7
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +90 -61
- package/dist/chain.d.ts +11 -0
- package/dist/chain.d.ts.map +1 -0
- package/dist/chain.js +64 -0
- package/dist/change-set.d.ts +8 -9
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +10 -85
- package/dist/change.d.ts +31 -1
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js +10 -1
- package/dist/chat/earlier.d.ts +10 -0
- package/dist/chat/earlier.d.ts.map +1 -0
- package/dist/chat/earlier.js +54 -0
- package/dist/chat/house.d.ts +25 -0
- package/dist/chat/house.d.ts.map +1 -0
- package/dist/chat/house.js +38 -0
- package/dist/chat/input.d.ts +3 -1
- package/dist/chat/input.d.ts.map +1 -1
- package/dist/chat/input.js +11 -18
- package/dist/chat/kit.js +1 -1
- package/dist/chat/list.d.ts +2 -1
- package/dist/chat/list.d.ts.map +1 -1
- package/dist/chat/list.js +45 -5
- package/dist/chat/markdown.d.ts +1 -0
- package/dist/chat/markdown.d.ts.map +1 -1
- package/dist/chat/markdown.js +78 -20
- package/dist/chat/message.d.ts +1 -0
- package/dist/chat/message.d.ts.map +1 -1
- package/dist/chat/message.js +73 -11
- package/dist/chat/messages.d.ts +14 -1
- package/dist/chat/messages.d.ts.map +1 -1
- package/dist/chat/messages.js +79 -24
- package/dist/chat/name.d.ts +1 -0
- package/dist/chat/name.d.ts.map +1 -1
- package/dist/chat/name.js +1 -1
- package/dist/chat/opened.d.ts +1 -0
- package/dist/chat/opened.d.ts.map +1 -1
- package/dist/chat/opened.js +2 -0
- package/dist/chat/overlay.d.ts +1 -0
- package/dist/chat/overlay.d.ts.map +1 -1
- package/dist/chat/overlay.js +11 -5
- package/dist/chat/parts.d.ts +1 -0
- package/dist/chat/parts.d.ts.map +1 -1
- package/dist/chat/parts.js +3 -2
- package/dist/chat/pieces.d.ts +62 -0
- package/dist/chat/pieces.d.ts.map +1 -0
- package/dist/chat/pieces.js +1110 -0
- package/dist/chat/provider.d.ts +8 -1
- package/dist/chat/provider.d.ts.map +1 -1
- package/dist/chat/provider.js +98 -92
- package/dist/chat/question.d.ts +1 -1
- package/dist/chat/question.d.ts.map +1 -1
- package/dist/chat/question.js +7 -18
- package/dist/chat/ready.d.ts +5 -2
- package/dist/chat/ready.d.ts.map +1 -1
- package/dist/chat/ready.js +7 -5
- package/dist/chat/room-file.d.ts +8 -0
- package/dist/chat/room-file.d.ts.map +1 -0
- package/dist/chat/room-file.js +72 -0
- package/dist/chat/steady.d.ts +3 -0
- package/dist/chat/steady.d.ts.map +1 -0
- package/dist/chat/steady.js +26 -0
- package/dist/chat/style.d.ts.map +1 -1
- package/dist/chat/style.js +6 -1
- package/dist/chat.d.ts +3 -2
- package/dist/chat.d.ts.map +1 -1
- package/dist/chat.js +2 -2
- package/dist/client.d.ts +11 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +45 -7
- package/dist/collection.d.ts +6 -19
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +30 -287
- package/dist/compile.d.ts +11 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +712 -0
- package/dist/connection.d.ts +21 -8
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +2319 -688
- package/dist/conversation.d.ts +15 -3
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +233 -80
- package/dist/digest.d.ts +7 -0
- package/dist/digest.d.ts.map +1 -0
- package/dist/digest.js +113 -0
- package/dist/durability.d.ts +2 -1
- package/dist/durability.d.ts.map +1 -1
- package/dist/entry.d.ts +3 -1
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +18 -23
- package/dist/file.d.ts +2 -10
- package/dist/file.d.ts.map +1 -1
- package/dist/file.js +3 -120
- package/dist/host.d.ts +5 -4
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +55 -7
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/live.d.ts +22 -0
- package/dist/live.d.ts.map +1 -0
- package/dist/live.js +123 -0
- package/dist/memory.d.ts +7 -3
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +39 -17
- package/dist/name.d.ts +4 -0
- package/dist/name.d.ts.map +1 -0
- package/dist/name.js +122 -0
- package/dist/observation.d.ts +14 -0
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +93 -3
- package/dist/opened.d.ts +22 -0
- package/dist/opened.d.ts.map +1 -0
- package/dist/opened.js +107 -0
- package/dist/outcome.d.ts +35 -4
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +28 -0
- package/dist/overlay.d.ts +2 -5
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +86 -171
- package/dist/query.d.ts +26 -2
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +34 -6
- package/dist/reach.d.ts +5 -1
- package/dist/reach.d.ts.map +1 -1
- package/dist/reach.js +167 -48
- package/dist/react.d.ts +3 -3
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +7 -17
- package/dist/readiness.d.ts +1 -1
- package/dist/readiness.d.ts.map +1 -1
- package/dist/reads.d.ts +11 -0
- package/dist/reads.d.ts.map +1 -0
- package/dist/reads.js +98 -0
- package/dist/recovery.d.ts +2 -2
- package/dist/recovery.d.ts.map +1 -1
- package/dist/recovery.js +8 -7
- package/dist/refresh.d.ts +12 -15
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +74 -51
- package/dist/replica.d.ts +55 -33
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +295 -186
- package/dist/room-draft.d.ts +15 -1
- package/dist/room-draft.d.ts.map +1 -1
- package/dist/room-draft.js +32 -25
- package/dist/rows.d.ts +29 -30
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +113 -64
- package/dist/save.d.ts +51 -14
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +518 -180
- package/dist/search.d.ts +19 -4
- package/dist/search.d.ts.map +1 -1
- package/dist/search.js +192 -35
- package/dist/seed.d.ts +16 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +75 -0
- package/dist/shared.d.ts +8 -3
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.js +129 -66
- package/dist/store.d.ts +99 -71
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +461 -586
- package/dist/stored.d.ts +143 -0
- package/dist/stored.d.ts.map +1 -0
- package/dist/stored.js +561 -0
- package/dist/tables.d.ts +320 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/tables.js +537 -0
- package/dist/turn.d.ts +5 -3
- package/dist/turn.d.ts.map +1 -1
- package/dist/turn.js +51 -21
- package/dist/validation.d.ts +30 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +162 -0
- package/dist/windows.d.ts +22 -0
- package/dist/windows.d.ts.map +1 -0
- package/dist/windows.js +89 -0
- package/dist/wire.d.ts +32 -0
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +8 -0
- package/package.json +10 -3
- package/dist/acquisition.d.ts +0 -14
- package/dist/acquisition.d.ts.map +0 -1
- package/dist/acquisition.js +0 -24
- package/dist/read-side.d.ts +0 -25
- package/dist/read-side.d.ts.map +0 -1
- package/dist/read-side.js +0 -642
package/dist/room-draft.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { apply, equalValue, frontmatterValue, parse, serialize } from '@agentshouse/mdmodel';
|
|
1
|
+
import { apply, equalValue, frontmatterValue, parse, serialize, } from '@agentshouse/mdmodel';
|
|
2
2
|
import { runtimeError } from './failure.js';
|
|
3
|
-
import {
|
|
3
|
+
import { sha256 } from './digest.js';
|
|
4
4
|
import { binaryLocalId } from './identity.js';
|
|
5
5
|
import { normalize } from './paths.js';
|
|
6
6
|
export function returnedBy(kind) {
|
|
@@ -90,7 +90,12 @@ export function readParts(value) {
|
|
|
90
90
|
if (!plain(value.move))
|
|
91
91
|
malformed();
|
|
92
92
|
const base = markdownBase(value.move.base);
|
|
93
|
-
|
|
93
|
+
const room = optionalText(value.move.room);
|
|
94
|
+
parts.move = {
|
|
95
|
+
to: text(value.move.to),
|
|
96
|
+
...(room === undefined ? {} : { room }),
|
|
97
|
+
...(base === undefined ? {} : { base }),
|
|
98
|
+
};
|
|
94
99
|
}
|
|
95
100
|
if (value.removal !== undefined) {
|
|
96
101
|
if (!plain(value.removal))
|
|
@@ -120,6 +125,13 @@ function kept(prior, base) {
|
|
|
120
125
|
throw runtimeError('room-draft-base-missing');
|
|
121
126
|
return base;
|
|
122
127
|
}
|
|
128
|
+
function movePart(current, move) {
|
|
129
|
+
return {
|
|
130
|
+
to: move.to,
|
|
131
|
+
...(move.room === undefined ? {} : { room: move.room }),
|
|
132
|
+
base: kept(current, move.base),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
123
135
|
function editsText(parts) {
|
|
124
136
|
return (parts.preamble !== undefined ||
|
|
125
137
|
named(parts.fields).length > 0 ||
|
|
@@ -144,9 +156,7 @@ export function held(current, parts, file) {
|
|
|
144
156
|
}
|
|
145
157
|
return {
|
|
146
158
|
file: current.file,
|
|
147
|
-
...(parts.move === undefined
|
|
148
|
-
? {}
|
|
149
|
-
: { move: { to: parts.move.to, base: kept(current.move, parts.move.base) } }),
|
|
159
|
+
...(parts.move === undefined ? {} : { move: movePart(current.move, parts.move) }),
|
|
150
160
|
...(parts.removal === undefined
|
|
151
161
|
? {}
|
|
152
162
|
: { removal: { base: kept(current.removal, parts.removal.base) } }),
|
|
@@ -181,9 +191,8 @@ export function held(current, parts, file) {
|
|
|
181
191
|
}
|
|
182
192
|
if (parts.creation !== undefined)
|
|
183
193
|
next.creation = parts.creation;
|
|
184
|
-
if (parts.move !== undefined)
|
|
185
|
-
next.move =
|
|
186
|
-
}
|
|
194
|
+
if (parts.move !== undefined)
|
|
195
|
+
next.move = movePart(current?.move, parts.move);
|
|
187
196
|
if (parts.removal !== undefined) {
|
|
188
197
|
next.removal = { base: kept(current?.removal, parts.removal.base) };
|
|
189
198
|
}
|
|
@@ -240,13 +249,12 @@ export function underneath(parts, path, visible) {
|
|
|
240
249
|
}
|
|
241
250
|
const UNTYPED_MEDIA_TYPE = 'application/octet-stream';
|
|
242
251
|
export async function heldFile(blob, base) {
|
|
243
|
-
const bytes = await blob.arrayBuffer();
|
|
244
252
|
return {
|
|
245
|
-
blob,
|
|
246
253
|
localId: binaryLocalId(),
|
|
247
|
-
|
|
254
|
+
...(blob instanceof File ? { name: blob.name } : {}),
|
|
255
|
+
byteLength: blob.size,
|
|
248
256
|
mediaType: blob.type === '' ? UNTYPED_MEDIA_TYPE : blob.type,
|
|
249
|
-
sha256:
|
|
257
|
+
sha256: await sha256(blob),
|
|
250
258
|
base,
|
|
251
259
|
};
|
|
252
260
|
}
|
|
@@ -279,16 +287,15 @@ function frontmatterOf(fields) {
|
|
|
279
287
|
const opened = parse('---\n---\n');
|
|
280
288
|
if (!opened.ok)
|
|
281
289
|
return malformed();
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
function concatenated(markdown, parts) {
|
|
290
|
+
const next = apply(opened.document, fields.map(([name, part]) => ({
|
|
291
|
+
kind: 'field',
|
|
292
|
+
name,
|
|
293
|
+
value: part.value,
|
|
294
|
+
prior: undefined,
|
|
295
|
+
})));
|
|
296
|
+
return next.outcome === 'applied' ? serialize(next.document) : malformed();
|
|
297
|
+
}
|
|
298
|
+
export function partsAfter(markdown, parts) {
|
|
292
299
|
const fields = named(parts.fields);
|
|
293
300
|
const pieces = [
|
|
294
301
|
...(fields.length === 0 ? [] : [frontmatterOf(fields)]),
|
|
@@ -319,7 +326,7 @@ export function returnedInto(existing, returned) {
|
|
|
319
326
|
delete next.fields;
|
|
320
327
|
delete next.sections;
|
|
321
328
|
delete next.preamble;
|
|
322
|
-
const value =
|
|
329
|
+
const value = partsAfter(whole.value, existing.markdown === undefined ? existing : returned);
|
|
323
330
|
next.markdown = { value, base: whole.base };
|
|
324
331
|
}
|
|
325
332
|
const creation = existing.creation ?? returned.creation;
|
|
@@ -370,7 +377,7 @@ export function changesOf(path, parts) {
|
|
|
370
377
|
changes.push({ kind: 'replace', path, content: parts.markdown.value });
|
|
371
378
|
}
|
|
372
379
|
if (parts.file !== undefined && parts.removal === undefined) {
|
|
373
|
-
const { base, ...file } = parts.file;
|
|
380
|
+
const { base, name: _name, ...file } = parts.file;
|
|
374
381
|
const at = parts.move === undefined ? path : moveTarget(parts.move);
|
|
375
382
|
if (base !== null && at !== path)
|
|
376
383
|
changes.push({ kind: 'move', path, to: at });
|
package/dist/rows.d.ts
CHANGED
|
@@ -1,38 +1,37 @@
|
|
|
1
|
-
import { type Frontmatter } from '@agentshouse/mdmodel';
|
|
2
|
-
import type { HeadChange } from './adapter.js';
|
|
3
|
-
import type { BinaryFileRecord } from './binary.js';
|
|
4
1
|
import { type Composition } from './collection.js';
|
|
5
|
-
type
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
reached: Readonly<Record<string, readonly unknown[]>>;
|
|
15
|
-
directories: readonly string[];
|
|
16
|
-
text: string | null;
|
|
17
|
-
change: HeadChange | null;
|
|
18
|
-
fileId: string | null;
|
|
19
|
-
binary: BinaryFileRecord | null;
|
|
2
|
+
export type ValueKind = 'string' | 'number' | 'boolean' | 'null' | 'array' | 'object' | 'undefined';
|
|
3
|
+
type HeldValue = {
|
|
4
|
+
readonly form: string;
|
|
5
|
+
readonly held: number;
|
|
6
|
+
readonly item: number;
|
|
7
|
+
readonly kind: ValueKind;
|
|
8
|
+
readonly value: string | number | null;
|
|
9
|
+
readonly size: number | null;
|
|
10
|
+
readonly single: boolean;
|
|
20
11
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
kind:
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
12
|
+
type LinkKind = 'field' | 'section' | 'body';
|
|
13
|
+
type HeldLink = {
|
|
14
|
+
readonly kind: LinkKind;
|
|
15
|
+
readonly form: string;
|
|
16
|
+
readonly target: string;
|
|
17
|
+
readonly field: string;
|
|
18
|
+
};
|
|
19
|
+
export type Derived = {
|
|
20
|
+
readonly type: string | null;
|
|
21
|
+
readonly declared: string | null;
|
|
22
|
+
readonly queried: boolean;
|
|
23
|
+
readonly folder: string;
|
|
24
|
+
readonly fields: string | null;
|
|
25
|
+
readonly values: readonly HeldValue[];
|
|
26
|
+
readonly links: readonly HeldLink[];
|
|
31
27
|
};
|
|
32
|
-
export type Row = DocumentRow | ReferenceRow;
|
|
33
28
|
export declare function documentKey(room: string, path: string): string;
|
|
34
29
|
export declare function roomOfKey(key: string): string;
|
|
30
|
+
export declare function pathOfKey(key: string): string;
|
|
35
31
|
export declare function markdownPath(path: string): boolean;
|
|
36
|
-
export declare function
|
|
32
|
+
export declare function settingsTextPath(path: string): boolean;
|
|
33
|
+
export declare function folderOf(path: string): string;
|
|
34
|
+
export declare function kindOf(value: unknown): ValueKind;
|
|
35
|
+
export declare function derived(path: string, content: string | null, composition: Composition): Derived;
|
|
37
36
|
export {};
|
|
38
37
|
//# sourceMappingURL=rows.d.ts.map
|
package/dist/rows.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../src/rows.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../src/rows.ts"],"names":[],"mappings":"AAWA,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9D,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEpG,KAAK,SAAS,GAAG;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,KAAK,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7C,KAAK,QAAQ,GAAG;IACd,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;CACrC,CAAC;AAMF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7C;AAqBD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAMhD;AA2ID,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAmB/F"}
|
package/dist/rows.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ARRAY_INDEX, escapePointer, references, target, } from '@agentshouse/mdmodel';
|
|
1
|
+
import { ARRAY_INDEX, bodyAfterFrontmatter, bodyLinks, escapePointer, parseFrontmatter, references, sectionReferences, target, } from '@agentshouse/mdmodel';
|
|
2
2
|
import { governing } from './collection.js';
|
|
3
3
|
import { definitionOf } from './model.js';
|
|
4
4
|
function keyOf(...parts) {
|
|
@@ -10,6 +10,18 @@ export function documentKey(room, path) {
|
|
|
10
10
|
export function roomOfKey(key) {
|
|
11
11
|
return key.split('\u0000')[1];
|
|
12
12
|
}
|
|
13
|
+
export function pathOfKey(key) {
|
|
14
|
+
return key.split('\u0000')[2];
|
|
15
|
+
}
|
|
16
|
+
export function markdownPath(path) {
|
|
17
|
+
return path.endsWith('.md');
|
|
18
|
+
}
|
|
19
|
+
export function settingsTextPath(path) {
|
|
20
|
+
return /^settings\/.+\.ya?ml$/u.test(path);
|
|
21
|
+
}
|
|
22
|
+
export function folderOf(path) {
|
|
23
|
+
return path.slice(0, Math.max(path.lastIndexOf('/'), 0));
|
|
24
|
+
}
|
|
13
25
|
function plainObject(value) {
|
|
14
26
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
15
27
|
}
|
|
@@ -18,6 +30,54 @@ function compared(reading, exact, value) {
|
|
|
18
30
|
return value;
|
|
19
31
|
return (typeof value === 'string' ? target(reading.path, value) : null) ?? undefined;
|
|
20
32
|
}
|
|
33
|
+
export function kindOf(value) {
|
|
34
|
+
if (value === undefined)
|
|
35
|
+
return 'undefined';
|
|
36
|
+
if (value === null)
|
|
37
|
+
return 'null';
|
|
38
|
+
if (Array.isArray(value))
|
|
39
|
+
return 'array';
|
|
40
|
+
if (typeof value === 'object')
|
|
41
|
+
return 'object';
|
|
42
|
+
return typeof value;
|
|
43
|
+
}
|
|
44
|
+
function scalarOf(value) {
|
|
45
|
+
if (typeof value === 'string' || typeof value === 'number')
|
|
46
|
+
return value;
|
|
47
|
+
if (typeof value === 'boolean')
|
|
48
|
+
return value ? 1 : 0;
|
|
49
|
+
if (Array.isArray(value))
|
|
50
|
+
return JSON.stringify(value);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
function held(reading, form, value, single) {
|
|
54
|
+
const at = reading.reached.get(form) ?? 0;
|
|
55
|
+
reading.reached.set(form, at + 1);
|
|
56
|
+
const kind = kindOf(value);
|
|
57
|
+
reading.values.push({
|
|
58
|
+
form,
|
|
59
|
+
held: at,
|
|
60
|
+
item: -1,
|
|
61
|
+
kind,
|
|
62
|
+
value: scalarOf(value),
|
|
63
|
+
size: Array.isArray(value) ? value.length : null,
|
|
64
|
+
single,
|
|
65
|
+
});
|
|
66
|
+
if (!Array.isArray(value))
|
|
67
|
+
return;
|
|
68
|
+
value.forEach((item, index) => {
|
|
69
|
+
const itemKind = kindOf(item);
|
|
70
|
+
reading.values.push({
|
|
71
|
+
form,
|
|
72
|
+
held: at,
|
|
73
|
+
item: index,
|
|
74
|
+
kind: itemKind,
|
|
75
|
+
value: itemKind === 'array' ? null : scalarOf(item),
|
|
76
|
+
size: null,
|
|
77
|
+
single: false,
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
21
81
|
function record(reading, node, forms, exact) {
|
|
22
82
|
const value = Array.isArray(node)
|
|
23
83
|
? node.map((item, index) => compared(reading, `${exact}/${index}`, item))
|
|
@@ -25,10 +85,7 @@ function record(reading, node, forms, exact) {
|
|
|
25
85
|
for (const form of forms) {
|
|
26
86
|
if (form.pending)
|
|
27
87
|
continue;
|
|
28
|
-
(reading
|
|
29
|
-
if (!form.through && value !== undefined && !plainObject(value)) {
|
|
30
|
-
reading.values[form.text] = value;
|
|
31
|
-
}
|
|
88
|
+
held(reading, form.text, value, !form.through && value !== undefined && !plainObject(value));
|
|
32
89
|
}
|
|
33
90
|
if (Array.isArray(node) || plainObject(node) || !reading.references.has(exact))
|
|
34
91
|
return;
|
|
@@ -64,74 +121,66 @@ function walk(reading, node, forms, exact) {
|
|
|
64
121
|
: [{ text: `${form.text}/${segment}`, through: form.through, pending: false }]), `${exact}/${segment}`);
|
|
65
122
|
}
|
|
66
123
|
}
|
|
67
|
-
function
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const key = documentKey(room, path);
|
|
76
|
-
if (document === null || !markdownPath(path)) {
|
|
77
|
-
return [
|
|
78
|
-
{
|
|
79
|
-
key,
|
|
80
|
-
kind: 'document',
|
|
81
|
-
room,
|
|
82
|
-
path,
|
|
83
|
-
type: null,
|
|
84
|
-
fields: {},
|
|
85
|
-
values: {},
|
|
86
|
-
reached: {},
|
|
87
|
-
directories: directoriesOf(path),
|
|
88
|
-
text: null,
|
|
89
|
-
change,
|
|
90
|
-
fileId,
|
|
91
|
-
binary,
|
|
92
|
-
},
|
|
93
|
-
];
|
|
124
|
+
function bodyTargets(path, content) {
|
|
125
|
+
const seen = new Set();
|
|
126
|
+
const found = [];
|
|
127
|
+
for (const { target: reached } of bodyLinks(bodyAfterFrontmatter(content), path)) {
|
|
128
|
+
if (seen.has(reached))
|
|
129
|
+
continue;
|
|
130
|
+
seen.add(reached);
|
|
131
|
+
found.push({ kind: 'body', form: '', target: reached, field: '' });
|
|
94
132
|
}
|
|
95
|
-
|
|
133
|
+
return found;
|
|
134
|
+
}
|
|
135
|
+
function typedRows(path, content, document, composition) {
|
|
96
136
|
const definition = definitionOf(governing(composition, path), document.type);
|
|
97
137
|
const reading = {
|
|
98
138
|
path,
|
|
99
139
|
references: new Set(definition === undefined ? [] : references(document, definition).map((one) => one.pointer)),
|
|
100
|
-
values:
|
|
101
|
-
reached:
|
|
140
|
+
values: [],
|
|
141
|
+
reached: new Map(),
|
|
102
142
|
targets: new Map(),
|
|
103
143
|
};
|
|
104
144
|
for (const [name, value] of Object.entries(document.fields)) {
|
|
105
145
|
const segment = escapePointer(name);
|
|
106
146
|
walk(reading, value, [{ text: `/${segment}`, through: false, pending: false }], `/${segment}`);
|
|
107
147
|
}
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
{
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
148
|
+
const links = [];
|
|
149
|
+
for (const { field, target: reached, forms } of reading.targets.values()) {
|
|
150
|
+
for (const form of [...forms].sort()) {
|
|
151
|
+
links.push({ kind: 'field', form, target: reached, field });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (definition !== undefined) {
|
|
155
|
+
const sectioned = new Set();
|
|
156
|
+
for (const { target: reached } of sectionReferences(path, content, definition)) {
|
|
157
|
+
if (reached === null || sectioned.has(reached))
|
|
158
|
+
continue;
|
|
159
|
+
sectioned.add(reached);
|
|
160
|
+
links.push({ kind: 'section', form: '', target: reached, field: '' });
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return { values: reading.values, links: [...links, ...bodyTargets(path, content)] };
|
|
164
|
+
}
|
|
165
|
+
export function derived(path, content, composition) {
|
|
166
|
+
const folder = folderOf(path);
|
|
167
|
+
const unread = { values: [], links: [], fields: null, folder, type: null };
|
|
168
|
+
if (content === null)
|
|
169
|
+
return { ...unread, declared: null, queried: true };
|
|
170
|
+
const read = parseFrontmatter(content, path);
|
|
171
|
+
const declared = read.ok ? (read.frontmatter.type ?? 'any') : null;
|
|
172
|
+
if (!markdownPath(path)) {
|
|
173
|
+
return { ...unread, declared, queried: true, links: bodyTargets(path, content) };
|
|
174
|
+
}
|
|
175
|
+
if (!read.ok)
|
|
176
|
+
return { ...unread, declared, queried: false };
|
|
177
|
+
const document = read.frontmatter;
|
|
178
|
+
return {
|
|
179
|
+
type: document.type ?? 'any',
|
|
180
|
+
declared,
|
|
181
|
+
queried: true,
|
|
182
|
+
folder,
|
|
183
|
+
fields: JSON.stringify(document.fields),
|
|
184
|
+
...typedRows(path, content, document, composition),
|
|
185
|
+
};
|
|
137
186
|
}
|
package/dist/save.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Validation } from '@agentshouse/mdmodel';
|
|
2
|
+
import type { OperationScopes, ProviderLimit } from './adapter.js';
|
|
2
3
|
import { type Change, type ChangeBatch, type Precondition, type WrittenBy } from './change.js';
|
|
3
4
|
import { type Composition } from './collection.js';
|
|
5
|
+
import { type Layer } from './overlay.js';
|
|
4
6
|
import type { VisibleLayer } from './replica.js';
|
|
5
7
|
import type { ChangedPart } from './room-draft.js';
|
|
6
8
|
export type SaveRefusal = {
|
|
@@ -24,20 +26,23 @@ export type SaveInput = {
|
|
|
24
26
|
bases: readonly Precondition[];
|
|
25
27
|
queued?: ReadonlySet<string>;
|
|
26
28
|
writtenBy?: WrittenBy;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
binaries: Readonly<Record<string, unknown>>;
|
|
30
|
-
composition: Composition;
|
|
31
|
-
};
|
|
29
|
+
unmodeled: boolean;
|
|
30
|
+
validate: Validator;
|
|
32
31
|
};
|
|
33
|
-
export type
|
|
34
|
-
|
|
35
|
-
batch: ChangeBatch;
|
|
36
|
-
} | {
|
|
32
|
+
export type Validator = (resulting: Layer, touched: readonly string[]) => Promise<Validation>;
|
|
33
|
+
type Refusing = {
|
|
37
34
|
kind: 'refused';
|
|
38
35
|
refusal: SaveRefusal;
|
|
39
36
|
};
|
|
40
|
-
export
|
|
37
|
+
export type BatchResult = {
|
|
38
|
+
kind: 'batch';
|
|
39
|
+
batch: ChangeBatch;
|
|
40
|
+
} | Refusing;
|
|
41
|
+
export declare function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): Generator<number, ChangeBatch, void>;
|
|
42
|
+
export declare function leavingRewritten(batch: ChangeBatch, visible: VisibleLayer): Generator<number, ChangeBatch, void>;
|
|
43
|
+
export declare function rewriting(batch: ChangeBatch, locator: string): boolean;
|
|
44
|
+
export declare function effectiveIn(batch: ChangeBatch, locator: string, visible: VisibleLayer): Generator<number, ChangeBatch, void>;
|
|
45
|
+
export declare function queuedDocuments(queue: readonly ChangeBatch[]): ReadonlySet<string>;
|
|
41
46
|
export type Requeued = {
|
|
42
47
|
kind: 'requeued';
|
|
43
48
|
queue: readonly ChangeBatch[];
|
|
@@ -57,8 +62,40 @@ export type Joining = {
|
|
|
57
62
|
kind: 'refused';
|
|
58
63
|
refusal: SaveRefusal;
|
|
59
64
|
};
|
|
60
|
-
|
|
65
|
+
type VisibleOver = (queue: readonly ChangeBatch[]) => Generator<number, VisibleLayer, void>;
|
|
66
|
+
export declare function requeuing(queue: readonly ChangeBatch[], changes: readonly Change[], visible: VisibleLayer, changeable: (batch: ChangeBatch) => boolean, state: VisibleOver): Generator<number, Requeued, void>;
|
|
61
67
|
export declare function joined(queue: readonly ChangeBatch[], owner: ChangeBatch, extra: ChangeBatch): Joining;
|
|
62
|
-
export declare function
|
|
63
|
-
export declare
|
|
68
|
+
export declare function limiting(queue: readonly ChangeBatch[], batch: ChangeBatch, limits: readonly ProviderLimit[], state: VisibleOver): Generator<number, SaveRefusal | null, void>;
|
|
69
|
+
export declare const MOVE_DOCUMENTS = "move-documents";
|
|
70
|
+
export type MoveSide = {
|
|
71
|
+
room: string;
|
|
72
|
+
handle: string;
|
|
73
|
+
baseRoomVersion: string;
|
|
74
|
+
composition: Composition;
|
|
75
|
+
operations: OperationScopes;
|
|
76
|
+
providerOwnedPaths: readonly string[];
|
|
77
|
+
visible: VisibleLayer;
|
|
78
|
+
queued: ReadonlySet<string>;
|
|
79
|
+
unmodeled: boolean;
|
|
80
|
+
validate: Validator;
|
|
81
|
+
};
|
|
82
|
+
export type MoveInput = {
|
|
83
|
+
source: MoveSide;
|
|
84
|
+
destination: MoveSide;
|
|
85
|
+
moves: readonly {
|
|
86
|
+
readonly path: string;
|
|
87
|
+
readonly to: string;
|
|
88
|
+
}[];
|
|
89
|
+
providerLimits: readonly ProviderLimit[];
|
|
90
|
+
local: boolean;
|
|
91
|
+
writtenBy?: WrittenBy;
|
|
92
|
+
};
|
|
93
|
+
export type MoveResult = {
|
|
94
|
+
kind: 'moved';
|
|
95
|
+
leaving: ChangeBatch;
|
|
96
|
+
arriving: ChangeBatch;
|
|
97
|
+
} | Refusing;
|
|
98
|
+
export declare function buildMove(input: MoveInput): Promise<MoveResult>;
|
|
99
|
+
export declare function buildBatch(input: SaveInput): Promise<BatchResult>;
|
|
100
|
+
export {};
|
|
64
101
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"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"}
|