@agentshouse/mdruntime 0.1.0-cedb03eaa48b6 → 0.1.0-cee9c8aa4cd86

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.
Files changed (192) hide show
  1. package/AGENTS.md +86 -71
  2. package/README.md +9 -8
  3. package/dist/adapter.d.ts +44 -18
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/attached-model.d.ts +4 -1
  6. package/dist/attached-model.d.ts.map +1 -1
  7. package/dist/attached-model.js +13 -3
  8. package/dist/bootstrap.d.ts +13 -6
  9. package/dist/bootstrap.d.ts.map +1 -1
  10. package/dist/bootstrap.js +90 -61
  11. package/dist/chain.d.ts +11 -0
  12. package/dist/chain.d.ts.map +1 -0
  13. package/dist/chain.js +64 -0
  14. package/dist/change-set.d.ts +9 -16
  15. package/dist/change-set.d.ts.map +1 -1
  16. package/dist/change-set.js +11 -89
  17. package/dist/change.d.ts +31 -1
  18. package/dist/change.d.ts.map +1 -1
  19. package/dist/change.js +10 -1
  20. package/dist/chat/house.d.ts +25 -0
  21. package/dist/chat/house.d.ts.map +1 -0
  22. package/dist/chat/house.js +38 -0
  23. package/dist/chat/input.d.ts +3 -1
  24. package/dist/chat/input.d.ts.map +1 -1
  25. package/dist/chat/input.js +11 -18
  26. package/dist/chat/list.d.ts +2 -1
  27. package/dist/chat/list.d.ts.map +1 -1
  28. package/dist/chat/list.js +7 -3
  29. package/dist/chat/markdown.d.ts +1 -0
  30. package/dist/chat/markdown.d.ts.map +1 -1
  31. package/dist/chat/markdown.js +78 -20
  32. package/dist/chat/message.d.ts +1 -0
  33. package/dist/chat/message.d.ts.map +1 -1
  34. package/dist/chat/message.js +73 -11
  35. package/dist/chat/messages.d.ts +14 -1
  36. package/dist/chat/messages.d.ts.map +1 -1
  37. package/dist/chat/messages.js +79 -24
  38. package/dist/chat/name.d.ts +1 -0
  39. package/dist/chat/name.d.ts.map +1 -1
  40. package/dist/chat/name.js +1 -1
  41. package/dist/chat/opened.d.ts +1 -0
  42. package/dist/chat/opened.d.ts.map +1 -1
  43. package/dist/chat/opened.js +2 -0
  44. package/dist/chat/overlay.d.ts +1 -0
  45. package/dist/chat/overlay.d.ts.map +1 -1
  46. package/dist/chat/overlay.js +11 -5
  47. package/dist/chat/parts.d.ts +1 -0
  48. package/dist/chat/parts.d.ts.map +1 -1
  49. package/dist/chat/parts.js +3 -2
  50. package/dist/chat/pieces.d.ts +62 -0
  51. package/dist/chat/pieces.d.ts.map +1 -0
  52. package/dist/chat/pieces.js +1110 -0
  53. package/dist/chat/provider.d.ts +8 -1
  54. package/dist/chat/provider.d.ts.map +1 -1
  55. package/dist/chat/provider.js +88 -81
  56. package/dist/chat/ready.d.ts +5 -2
  57. package/dist/chat/ready.d.ts.map +1 -1
  58. package/dist/chat/ready.js +7 -5
  59. package/dist/chat/room-file.d.ts +8 -0
  60. package/dist/chat/room-file.d.ts.map +1 -0
  61. package/dist/chat/room-file.js +72 -0
  62. package/dist/chat/steady.d.ts +3 -0
  63. package/dist/chat/steady.d.ts.map +1 -0
  64. package/dist/chat/steady.js +26 -0
  65. package/dist/chat/style.d.ts.map +1 -1
  66. package/dist/chat/style.js +5 -0
  67. package/dist/chat.d.ts +3 -2
  68. package/dist/chat.d.ts.map +1 -1
  69. package/dist/chat.js +2 -2
  70. package/dist/client.d.ts +6 -1
  71. package/dist/client.d.ts.map +1 -1
  72. package/dist/client.js +29 -2
  73. package/dist/collection.d.ts +6 -19
  74. package/dist/collection.d.ts.map +1 -1
  75. package/dist/collection.js +30 -317
  76. package/dist/compile.d.ts +16 -0
  77. package/dist/compile.d.ts.map +1 -0
  78. package/dist/compile.js +718 -0
  79. package/dist/connection.d.ts +11 -5
  80. package/dist/connection.d.ts.map +1 -1
  81. package/dist/connection.js +1931 -706
  82. package/dist/conversation.d.ts +9 -3
  83. package/dist/conversation.d.ts.map +1 -1
  84. package/dist/conversation.js +85 -61
  85. package/dist/digest.d.ts +7 -0
  86. package/dist/digest.d.ts.map +1 -0
  87. package/dist/digest.js +113 -0
  88. package/dist/durability.d.ts +2 -1
  89. package/dist/durability.d.ts.map +1 -1
  90. package/dist/entry.d.ts +3 -1
  91. package/dist/entry.d.ts.map +1 -1
  92. package/dist/entry.js +18 -24
  93. package/dist/file.d.ts +2 -10
  94. package/dist/file.d.ts.map +1 -1
  95. package/dist/file.js +3 -120
  96. package/dist/fulltext.d.ts +27 -0
  97. package/dist/fulltext.d.ts.map +1 -0
  98. package/dist/fulltext.js +368 -0
  99. package/dist/host.d.ts +0 -1
  100. package/dist/host.d.ts.map +1 -1
  101. package/dist/host.js +10 -3
  102. package/dist/identity.d.ts +0 -1
  103. package/dist/identity.d.ts.map +1 -1
  104. package/dist/identity.js +0 -3
  105. package/dist/index.d.ts +8 -5
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +3 -0
  108. package/dist/live.d.ts +22 -0
  109. package/dist/live.d.ts.map +1 -0
  110. package/dist/live.js +123 -0
  111. package/dist/memory.d.ts +1 -0
  112. package/dist/memory.d.ts.map +1 -1
  113. package/dist/memory.js +22 -6
  114. package/dist/messages.d.ts +28 -0
  115. package/dist/messages.d.ts.map +1 -0
  116. package/dist/messages.js +90 -0
  117. package/dist/name.d.ts +4 -0
  118. package/dist/name.d.ts.map +1 -0
  119. package/dist/name.js +122 -0
  120. package/dist/observation.d.ts +12 -0
  121. package/dist/observation.d.ts.map +1 -1
  122. package/dist/observation.js +84 -0
  123. package/dist/opened.d.ts +22 -0
  124. package/dist/opened.d.ts.map +1 -0
  125. package/dist/opened.js +107 -0
  126. package/dist/outcome.d.ts +29 -4
  127. package/dist/outcome.d.ts.map +1 -1
  128. package/dist/outcome.js +25 -0
  129. package/dist/overlay.d.ts +2 -5
  130. package/dist/overlay.d.ts.map +1 -1
  131. package/dist/overlay.js +86 -171
  132. package/dist/query.d.ts +2 -1
  133. package/dist/query.d.ts.map +1 -1
  134. package/dist/query.js +1 -0
  135. package/dist/reach.d.ts +5 -1
  136. package/dist/reach.d.ts.map +1 -1
  137. package/dist/reach.js +158 -52
  138. package/dist/readiness.d.ts +3 -3
  139. package/dist/readiness.d.ts.map +1 -1
  140. package/dist/reads.js +1 -1
  141. package/dist/recovery.d.ts +2 -2
  142. package/dist/recovery.d.ts.map +1 -1
  143. package/dist/recovery.js +8 -7
  144. package/dist/refresh.d.ts +10 -13
  145. package/dist/refresh.d.ts.map +1 -1
  146. package/dist/refresh.js +74 -51
  147. package/dist/replica.d.ts +54 -36
  148. package/dist/replica.d.ts.map +1 -1
  149. package/dist/replica.js +277 -184
  150. package/dist/room-draft.d.ts +3 -1
  151. package/dist/room-draft.d.ts.map +1 -1
  152. package/dist/room-draft.js +29 -22
  153. package/dist/rows.d.ts +29 -31
  154. package/dist/rows.d.ts.map +1 -1
  155. package/dist/rows.js +113 -69
  156. package/dist/save.d.ts +50 -14
  157. package/dist/save.d.ts.map +1 -1
  158. package/dist/save.js +502 -178
  159. package/dist/search.d.ts +11 -43
  160. package/dist/search.d.ts.map +1 -1
  161. package/dist/search.js +0 -213
  162. package/dist/shared.d.ts +8 -3
  163. package/dist/shared.d.ts.map +1 -1
  164. package/dist/shared.js +129 -66
  165. package/dist/store.d.ts +79 -93
  166. package/dist/store.d.ts.map +1 -1
  167. package/dist/store.js +318 -687
  168. package/dist/stored.d.ts +138 -0
  169. package/dist/stored.d.ts.map +1 -0
  170. package/dist/stored.js +544 -0
  171. package/dist/tables.d.ts +332 -0
  172. package/dist/tables.d.ts.map +1 -0
  173. package/dist/tables.js +570 -0
  174. package/dist/turn.d.ts +4 -2
  175. package/dist/turn.d.ts.map +1 -1
  176. package/dist/turn.js +46 -22
  177. package/dist/validation.d.ts +30 -0
  178. package/dist/validation.d.ts.map +1 -0
  179. package/dist/validation.js +162 -0
  180. package/dist/windows.d.ts +2 -6
  181. package/dist/windows.d.ts.map +1 -1
  182. package/dist/windows.js +30 -34
  183. package/dist/wire.d.ts +16 -0
  184. package/dist/wire.d.ts.map +1 -1
  185. package/dist/wire.js +4 -0
  186. package/dist/words.d.ts +19 -0
  187. package/dist/words.d.ts.map +1 -0
  188. package/dist/words.js +150 -0
  189. package/package.json +10 -4
  190. package/dist/read-side.d.ts +0 -27
  191. package/dist/read-side.d.ts.map +0 -1
  192. package/dist/read-side.js +0 -824
@@ -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 { hexDigest } from './file.js';
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
- parts.move = { to: text(value.move.to), ...(base === undefined ? {} : { base }) };
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 = { to: parts.move.to, base: kept(current?.move, parts.move.base) };
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
- byteLength: bytes.byteLength,
254
+ ...(blob instanceof File ? { name: blob.name } : {}),
255
+ byteLength: blob.size,
248
256
  mediaType: blob.type === '' ? UNTYPED_MEDIA_TYPE : blob.type,
249
- sha256: hexDigest(await crypto.subtle.digest('SHA-256', bytes)),
257
+ sha256: await sha256(blob),
250
258
  base,
251
259
  };
252
260
  }
@@ -279,14 +287,13 @@ function frontmatterOf(fields) {
279
287
  const opened = parse('---\n---\n');
280
288
  if (!opened.ok)
281
289
  return malformed();
282
- let document = opened.document;
283
- for (const [name, part] of fields) {
284
- const next = apply(document, { kind: 'field', name, value: part.value, prior: undefined });
285
- if (next.outcome !== 'applied')
286
- return malformed();
287
- document = next.document;
288
- }
289
- return serialize(document);
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();
290
297
  }
291
298
  export function partsAfter(markdown, parts) {
292
299
  const fields = named(parts.fields);
@@ -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,39 +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 Fields = Readonly<Record<string, unknown>>;
6
- export type DocumentRow = {
7
- key: string;
8
- kind: 'document';
9
- room: string;
10
- path: string;
11
- type: string | null;
12
- fields: Fields;
13
- values: Fields;
14
- reached: Readonly<Record<string, readonly unknown[]>>;
15
- directories: readonly string[];
16
- folder: string;
17
- text: string | null;
18
- change: HeadChange | null;
19
- fileId: string | null;
20
- 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;
21
11
  };
22
- export type ReferenceRow = {
23
- key: string;
24
- kind: 'reference';
25
- room: string;
26
- source: string;
27
- target: string;
28
- field: string;
29
- forms: readonly string[];
30
- path: string;
31
- type: string;
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[];
32
27
  };
33
- export type Row = DocumentRow | ReferenceRow;
34
28
  export declare function documentKey(room: string, path: string): string;
35
29
  export declare function roomOfKey(key: string): string;
30
+ export declare function pathOfKey(key: string): string;
36
31
  export declare function markdownPath(path: string): boolean;
37
- export declare function rowsOf(room: string, path: string, document: Frontmatter | null, composition: Composition, change: HeadChange | null, fileId: string | null, binary: BinaryFileRecord | null): readonly Row[];
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;
38
36
  export {};
39
37
  //# sourceMappingURL=rows.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../src/rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9D,KAAK,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC;IACtD,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,GAAG,GAAG,WAAW,GAAG,YAAY,CAAC;AAM7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAuFD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,MAAM,CACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,EAAE,gBAAgB,GAAG,IAAI,GAC9B,SAAS,GAAG,EAAE,CAmEhB"}
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.reached[form.text] ??= []).push(value);
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,79 +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 folderOf(path) {
68
- return path.slice(0, Math.max(path.lastIndexOf('/'), 0));
69
- }
70
- function directoriesOf(path) {
71
- const parts = path.split('/').slice(0, -1);
72
- return ['', ...parts.map((_, index) => parts.slice(0, index + 1).join('/'))];
73
- }
74
- export function markdownPath(path) {
75
- return path.endsWith('.md');
76
- }
77
- export function rowsOf(room, path, document, composition, change, fileId, binary) {
78
- const key = documentKey(room, path);
79
- if (document === null || !markdownPath(path)) {
80
- return [
81
- {
82
- key,
83
- kind: 'document',
84
- room,
85
- path,
86
- type: null,
87
- fields: {},
88
- values: {},
89
- reached: {},
90
- directories: directoriesOf(path),
91
- folder: folderOf(path),
92
- text: null,
93
- change,
94
- fileId,
95
- binary,
96
- },
97
- ];
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: '' });
98
132
  }
99
- const type = document.type ?? 'any';
133
+ return found;
134
+ }
135
+ function typedRows(path, content, document, composition) {
100
136
  const definition = definitionOf(governing(composition, path), document.type);
101
137
  const reading = {
102
138
  path,
103
139
  references: new Set(definition === undefined ? [] : references(document, definition).map((one) => one.pointer)),
104
- values: {},
105
- reached: {},
140
+ values: [],
141
+ reached: new Map(),
106
142
  targets: new Map(),
107
143
  };
108
144
  for (const [name, value] of Object.entries(document.fields)) {
109
145
  const segment = escapePointer(name);
110
146
  walk(reading, value, [{ text: `/${segment}`, through: false, pending: false }], `/${segment}`);
111
147
  }
112
- const { values, reached } = reading;
113
- return [
114
- {
115
- key,
116
- kind: 'document',
117
- room,
118
- path,
119
- type,
120
- fields: document.fields,
121
- values,
122
- reached,
123
- directories: directoriesOf(path),
124
- folder: folderOf(path),
125
- text: document.content,
126
- change,
127
- fileId,
128
- binary,
129
- },
130
- ...[...reading.targets.values()].map(({ field, target: found, forms }) => ({
131
- key: keyOf('r', room, path, field, found),
132
- kind: 'reference',
133
- room,
134
- source: key,
135
- target: documentKey(room, found),
136
- field,
137
- forms: [...forms].sort(),
138
- path,
139
- type,
140
- })),
141
- ];
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
+ };
142
186
  }
package/dist/save.d.ts CHANGED
@@ -1,6 +1,8 @@
1
- import type { ProviderLimit } from './adapter.js';
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,22 @@ export type SaveInput = {
24
26
  bases: readonly Precondition[];
25
27
  queued?: ReadonlySet<string>;
26
28
  writtenBy?: WrittenBy;
27
- clean?: {
28
- text: Readonly<Record<string, string>>;
29
- binaries: Readonly<Record<string, unknown>>;
30
- composition: Composition;
31
- };
29
+ unmodeled: boolean;
30
+ validate: Validator;
32
31
  };
33
- export type BatchResult = {
34
- kind: 'batch';
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 declare function providerRewritten(batch: ChangeBatch, visible: VisibleLayer): ChangeBatch;
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>;
41
45
  export declare function queuedDocuments(queue: readonly ChangeBatch[]): ReadonlySet<string>;
42
46
  export type Requeued = {
43
47
  kind: 'requeued';
@@ -58,8 +62,40 @@ export type Joining = {
58
62
  kind: 'refused';
59
63
  refusal: SaveRefusal;
60
64
  };
61
- export declare function requeued(queue: readonly ChangeBatch[], changes: readonly Change[], visible: VisibleLayer, changeable: (batch: ChangeBatch) => boolean, state: (queue: readonly ChangeBatch[]) => VisibleLayer): Requeued;
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>;
62
67
  export declare function joined(queue: readonly ChangeBatch[], owner: ChangeBatch, extra: ChangeBatch): Joining;
63
- export declare function limitedIn(queue: readonly ChangeBatch[], batch: ChangeBatch, limits: readonly ProviderLimit[], state: (queue: readonly ChangeBatch[]) => VisibleLayer): SaveRefusal | null;
64
- export declare function buildBatch(input: SaveInput): BatchResult;
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 {};
65
101
  //# sourceMappingURL=save.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../src/save.ts"],"names":[],"mappings":"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"}