@agentshouse/mdruntime 0.1.0-c3903a68dcbbf → 0.1.0-c435c7a7c4f4e

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 (200) hide show
  1. package/AGENTS.md +270 -178
  2. package/README.md +22 -12
  3. package/dist/acquisition.d.ts +14 -0
  4. package/dist/acquisition.d.ts.map +1 -0
  5. package/dist/acquisition.js +24 -0
  6. package/dist/adapter.d.ts +157 -67
  7. package/dist/adapter.d.ts.map +1 -1
  8. package/dist/adapter.js +1 -9
  9. package/dist/attached-model.d.ts +11 -0
  10. package/dist/attached-model.d.ts.map +1 -0
  11. package/dist/attached-model.js +47 -0
  12. package/dist/attempt.d.ts +16 -0
  13. package/dist/attempt.d.ts.map +1 -0
  14. package/dist/attempt.js +70 -0
  15. package/dist/binary.d.ts +23 -0
  16. package/dist/binary.d.ts.map +1 -0
  17. package/dist/binary.js +8 -0
  18. package/dist/bootstrap.d.ts +20 -6
  19. package/dist/bootstrap.d.ts.map +1 -1
  20. package/dist/bootstrap.js +114 -38
  21. package/dist/change-set.d.ts +2 -0
  22. package/dist/change-set.d.ts.map +1 -1
  23. package/dist/change-set.js +50 -21
  24. package/dist/change.d.ts +15 -0
  25. package/dist/change.d.ts.map +1 -1
  26. package/dist/change.js +26 -1
  27. package/dist/chat/acts.d.ts +33 -0
  28. package/dist/chat/acts.d.ts.map +1 -0
  29. package/dist/chat/acts.js +36 -0
  30. package/dist/chat/context.d.ts +3 -0
  31. package/dist/chat/context.d.ts.map +1 -0
  32. package/dist/chat/context.js +10 -0
  33. package/dist/chat/input.d.ts +9 -0
  34. package/dist/chat/input.d.ts.map +1 -0
  35. package/dist/chat/input.js +99 -0
  36. package/dist/chat/kit.d.ts +61 -0
  37. package/dist/chat/kit.d.ts.map +1 -0
  38. package/dist/chat/kit.js +123 -0
  39. package/dist/chat/lasting.d.ts +6 -0
  40. package/dist/chat/lasting.d.ts.map +1 -0
  41. package/dist/chat/lasting.js +19 -0
  42. package/dist/chat/list.d.ts +27 -0
  43. package/dist/chat/list.d.ts.map +1 -0
  44. package/dist/chat/list.js +63 -0
  45. package/dist/chat/markdown.d.ts +20 -0
  46. package/dist/chat/markdown.d.ts.map +1 -0
  47. package/dist/chat/markdown.js +188 -0
  48. package/dist/chat/message.d.ts +6 -0
  49. package/dist/chat/message.d.ts.map +1 -0
  50. package/dist/chat/message.js +192 -0
  51. package/dist/chat/messages.d.ts +22 -0
  52. package/dist/chat/messages.d.ts.map +1 -0
  53. package/dist/chat/messages.js +155 -0
  54. package/dist/chat/name.d.ts +6 -0
  55. package/dist/chat/name.d.ts.map +1 -0
  56. package/dist/chat/name.js +37 -0
  57. package/dist/chat/opened.d.ts +11 -0
  58. package/dist/chat/opened.d.ts.map +1 -0
  59. package/dist/chat/opened.js +17 -0
  60. package/dist/chat/overlay.d.ts +31 -0
  61. package/dist/chat/overlay.d.ts.map +1 -0
  62. package/dist/chat/overlay.js +97 -0
  63. package/dist/chat/parts.d.ts +57 -0
  64. package/dist/chat/parts.d.ts.map +1 -0
  65. package/dist/chat/parts.js +119 -0
  66. package/dist/chat/process.d.ts +20 -0
  67. package/dist/chat/process.d.ts.map +1 -0
  68. package/dist/chat/process.js +32 -0
  69. package/dist/chat/provider.d.ts +63 -0
  70. package/dist/chat/provider.d.ts.map +1 -0
  71. package/dist/chat/provider.js +629 -0
  72. package/dist/chat/question.d.ts +9 -0
  73. package/dist/chat/question.d.ts.map +1 -0
  74. package/dist/chat/question.js +80 -0
  75. package/dist/chat/questions.d.ts +31 -0
  76. package/dist/chat/questions.d.ts.map +1 -0
  77. package/dist/chat/questions.js +111 -0
  78. package/dist/chat/read.d.ts +5 -0
  79. package/dist/chat/read.d.ts.map +1 -0
  80. package/dist/chat/read.js +13 -0
  81. package/dist/chat/ready.d.ts +34 -0
  82. package/dist/chat/ready.d.ts.map +1 -0
  83. package/dist/chat/ready.js +91 -0
  84. package/dist/chat/style.d.ts +4 -0
  85. package/dist/chat/style.d.ts.map +1 -0
  86. package/dist/chat/style.js +302 -0
  87. package/dist/chat.d.ts +14 -0
  88. package/dist/chat.d.ts.map +1 -0
  89. package/dist/chat.js +8 -0
  90. package/dist/client.d.ts +28 -20
  91. package/dist/client.d.ts.map +1 -1
  92. package/dist/client.js +71 -32
  93. package/dist/collection.d.ts +21 -14
  94. package/dist/collection.d.ts.map +1 -1
  95. package/dist/collection.js +270 -32
  96. package/dist/connection.d.ts +48 -38
  97. package/dist/connection.d.ts.map +1 -1
  98. package/dist/connection.js +1996 -846
  99. package/dist/conversation.d.ts +45 -19
  100. package/dist/conversation.d.ts.map +1 -1
  101. package/dist/conversation.js +592 -216
  102. package/dist/durability.d.ts +7 -1
  103. package/dist/durability.d.ts.map +1 -1
  104. package/dist/entry.d.ts +17 -0
  105. package/dist/entry.d.ts.map +1 -0
  106. package/dist/entry.js +156 -0
  107. package/dist/expectation.d.ts +21 -0
  108. package/dist/expectation.d.ts.map +1 -0
  109. package/dist/expectation.js +70 -0
  110. package/dist/failure.d.ts +13 -0
  111. package/dist/failure.d.ts.map +1 -0
  112. package/dist/failure.js +19 -0
  113. package/dist/fence.d.ts +6 -0
  114. package/dist/fence.d.ts.map +1 -0
  115. package/dist/fence.js +10 -0
  116. package/dist/host.d.ts +20 -3
  117. package/dist/host.d.ts.map +1 -1
  118. package/dist/host.js +91 -68
  119. package/dist/identity.d.ts +5 -0
  120. package/dist/identity.d.ts.map +1 -1
  121. package/dist/identity.js +19 -1
  122. package/dist/index.d.ts +16 -9
  123. package/dist/index.d.ts.map +1 -1
  124. package/dist/index.js +5 -1
  125. package/dist/memory.d.ts +17 -7
  126. package/dist/memory.d.ts.map +1 -1
  127. package/dist/memory.js +159 -47
  128. package/dist/model.d.ts +17 -14
  129. package/dist/model.d.ts.map +1 -1
  130. package/dist/model.js +16 -4
  131. package/dist/observation.d.ts +6 -1
  132. package/dist/observation.d.ts.map +1 -1
  133. package/dist/observation.js +38 -17
  134. package/dist/open.d.ts +2 -0
  135. package/dist/open.d.ts.map +1 -0
  136. package/dist/open.js +1 -0
  137. package/dist/outcome.d.ts +35 -22
  138. package/dist/outcome.d.ts.map +1 -1
  139. package/dist/outcome.js +42 -1
  140. package/dist/overlay.d.ts +16 -3
  141. package/dist/overlay.d.ts.map +1 -1
  142. package/dist/overlay.js +118 -77
  143. package/dist/paths.d.ts +0 -1
  144. package/dist/paths.d.ts.map +1 -1
  145. package/dist/paths.js +0 -16
  146. package/dist/query.d.ts +44 -6
  147. package/dist/query.d.ts.map +1 -1
  148. package/dist/query.js +81 -37
  149. package/dist/reach.d.ts +45 -0
  150. package/dist/reach.d.ts.map +1 -0
  151. package/dist/reach.js +306 -0
  152. package/dist/react.d.ts +44 -0
  153. package/dist/react.d.ts.map +1 -0
  154. package/dist/react.js +66 -0
  155. package/dist/read-side.d.ts +16 -5
  156. package/dist/read-side.d.ts.map +1 -1
  157. package/dist/read-side.js +408 -137
  158. package/dist/readiness.d.ts +53 -0
  159. package/dist/readiness.d.ts.map +1 -0
  160. package/dist/readiness.js +33 -0
  161. package/dist/recovery.d.ts +25 -0
  162. package/dist/recovery.d.ts.map +1 -0
  163. package/dist/recovery.js +197 -0
  164. package/dist/refresh.d.ts +12 -1
  165. package/dist/refresh.d.ts.map +1 -1
  166. package/dist/refresh.js +51 -36
  167. package/dist/replica.d.ts +10 -7
  168. package/dist/replica.d.ts.map +1 -1
  169. package/dist/replica.js +131 -79
  170. package/dist/room-draft.d.ts +41 -9
  171. package/dist/room-draft.d.ts.map +1 -1
  172. package/dist/room-draft.js +139 -28
  173. package/dist/rows.d.ts +11 -14
  174. package/dist/rows.d.ts.map +1 -1
  175. package/dist/rows.js +87 -50
  176. package/dist/save.d.ts +32 -3
  177. package/dist/save.d.ts.map +1 -1
  178. package/dist/save.js +465 -93
  179. package/dist/search.d.ts +37 -8
  180. package/dist/search.d.ts.map +1 -1
  181. package/dist/search.js +116 -45
  182. package/dist/shared.d.ts +11 -0
  183. package/dist/shared.d.ts.map +1 -0
  184. package/dist/shared.js +368 -0
  185. package/dist/status.d.ts +6 -2
  186. package/dist/status.d.ts.map +1 -1
  187. package/dist/status.js +0 -8
  188. package/dist/store.d.ts +79 -32
  189. package/dist/store.d.ts.map +1 -1
  190. package/dist/store.js +542 -225
  191. package/dist/turn.d.ts +7 -0
  192. package/dist/turn.d.ts.map +1 -0
  193. package/dist/turn.js +45 -0
  194. package/dist/wire.d.ts +162 -19
  195. package/dist/wire.d.ts.map +1 -1
  196. package/dist/wire.js +82 -67
  197. package/package.json +31 -7
  198. package/dist/attachment.d.ts +0 -3
  199. package/dist/attachment.d.ts.map +0 -1
  200. package/dist/attachment.js +0 -8
package/dist/replica.js CHANGED
@@ -1,80 +1,135 @@
1
- import { parse } from '@agentshouse/mdmodel';
2
- import { immutable } from './change.js';
3
- import { parseCollection, readCollection, validateCollection, } from './collection.js';
4
- import { overlay, overlayChanged, sameLayerText } from './overlay.js';
1
+ import { equalValue, parse } from '@agentshouse/mdmodel';
2
+ import { immutable, landing } from './change.js';
3
+ import { changedCleanly, collectionOf, unreadable, validateCollection, } from './collection.js';
4
+ import { acceptedBinaries, overlay, overlayChanged, sameLayerText, } from './overlay.js';
5
5
  import { providerRewritten } from './save.js';
6
- import { equalValue } from './room-draft.js';
6
+ import { drafted, patched, settled, shared } from './shared.js';
7
7
  export function compositionOf(record) {
8
8
  return {
9
9
  model: record.model,
10
10
  selection: record.typedSelection === null
11
11
  ? null
12
12
  : { roots: record.typedSelection.roots, model: record.selectionModel },
13
- untypedFolders: record.untypedFolders,
14
13
  };
15
14
  }
16
- export function readConfirmed(record, previous) {
17
- const read = readCollection(record.documents, compositionOf(record), previous === undefined
18
- ? undefined
19
- : { text: previous.record.documents, collection: previous.collection });
20
- return read.kind === 'read'
21
- ? { kind: 'staged', confirmed: { record, collection: read.collection } }
22
- : read;
15
+ function held(record) {
16
+ const documents = shared(record.documents);
17
+ const binaries = shared(record.binaries);
18
+ const revisions = shared(record.revisions);
19
+ const fileIds = shared(record.fileIds);
20
+ const changes = shared(record.changes);
21
+ const written = shared(record.written);
22
+ return documents === record.documents &&
23
+ binaries === record.binaries &&
24
+ revisions === record.revisions &&
25
+ fileIds === record.fileIds &&
26
+ changes === record.changes &&
27
+ written === record.written
28
+ ? record
29
+ : { ...record, documents, binaries, revisions, fileIds, changes, written };
30
+ }
31
+ export function confirmedOf(record, previous) {
32
+ const kept = held(record);
33
+ return {
34
+ record: kept,
35
+ collection: collectionOf(kept.documents, compositionOf(kept), previous?.collection),
36
+ };
23
37
  }
24
38
  export function sameMembership(record, other) {
25
- return (JSON.stringify(record.untypedFolders) === JSON.stringify(other.untypedFolders) &&
26
- JSON.stringify(record.typedSelection?.roots ?? null) ===
27
- JSON.stringify(other.typedSelection?.roots ?? null));
39
+ return (JSON.stringify(record.typedSelection?.roots ?? null) ===
40
+ JSON.stringify(other.typedSelection?.roots ?? null));
28
41
  }
29
- export function readStaged(record, previous) {
30
- if ((record.model.status === 'current' || record.selectionModel.status === 'current') &&
31
- (previous === undefined ||
32
- !sameLayerText(record, previous.record) ||
33
- record.model !== previous.record.model ||
34
- record.selectionModel !== previous.record.selectionModel)) {
35
- const verdict = validateCollection(record.documents, record.binaryTargets, compositionOf(record));
42
+ function cleanly(record, previous) {
43
+ if (previous === undefined)
44
+ return false;
45
+ const before = previous.record;
46
+ return changedCleanly({ text: record.documents, binaries: record.binaries }, { text: before.documents, binaries: before.binaries, composition: compositionOf(before) }, compositionOf(record));
47
+ }
48
+ export function readStaged(staged, previous) {
49
+ const record = held(staged);
50
+ const textChanged = previous === undefined || !sameLayerText(record, previous.record);
51
+ const modeled = record.model.status !== 'unavailable' || record.selectionModel.status !== 'unavailable';
52
+ if (modeled &&
53
+ (textChanged ||
54
+ record.model !== previous?.record.model ||
55
+ record.selectionModel !== previous?.record.selectionModel) &&
56
+ !cleanly(record, previous)) {
57
+ const verdict = validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
36
58
  if (verdict.verdict === 'refuse' && verdict.rule !== 'model-unavailable') {
37
59
  return { kind: 'refused', refusal: verdict };
38
60
  }
61
+ if (verdict.verdict === 'refuse') {
62
+ const refused = unreadable(record.documents, previous?.record.documents);
63
+ if (refused !== null)
64
+ return refused;
65
+ }
66
+ }
67
+ else if (textChanged) {
68
+ const refused = unreadable(record.documents, previous?.record.documents);
69
+ if (refused !== null)
70
+ return refused;
39
71
  }
40
- return readConfirmed(record, previous);
72
+ return { kind: 'staged', confirmed: confirmedOf(record, previous) };
41
73
  }
42
74
  export function readReclassified(record, previous) {
43
- const verdict = validateCollection(record.documents, record.binaryTargets, compositionOf(record));
75
+ const verdict = validateCollection(record.documents, Object.keys(record.binaries), compositionOf(record));
44
76
  if (verdict.verdict !== 'refuse')
45
- return readConfirmed(record, previous);
77
+ return { kind: 'staged', confirmed: confirmedOf(record, previous) };
46
78
  return verdict.rule === 'model-unavailable'
47
79
  ? { kind: 'deferred' }
48
80
  : { kind: 'refused', refusal: verdict };
49
81
  }
50
- export function applyReturned(confirmed, documents, revisions, removals, roomVersion) {
51
- const nextDocuments = { ...confirmed.record.documents, ...documents };
52
- const nextRevisions = { ...confirmed.record.revisions, ...revisions };
53
- const nextChanges = { ...confirmed.record.changes };
54
- const nextWritten = {
55
- ...confirmed.record.written,
56
- ...Object.fromEntries(Object.keys(documents).map((path) => [path, roomVersion])),
57
- };
58
- const binaryTargets = new Set(confirmed.record.binaryTargets);
82
+ function returnedBinaries(held, submitted, accepted) {
83
+ const binaries = drafted(held);
84
+ for (const change of submitted.changes) {
85
+ if (change.kind !== 'move')
86
+ continue;
87
+ const moved = binaries[change.path];
88
+ if (moved === undefined || accepted.revisions[change.to] === undefined)
89
+ continue;
90
+ binaries[change.to] = moved;
91
+ delete binaries[change.path];
92
+ }
93
+ Object.assign(binaries, acceptedBinaries(accepted.binaryFiles ?? {}));
94
+ for (const path of accepted.removals)
95
+ delete binaries[path];
96
+ return settled(binaries);
97
+ }
98
+ export function applyReturned(confirmed, submitted, accepted, roomVersion, writtenAt) {
99
+ const { documents, revisions, fileIds, changes, removals } = accepted;
100
+ const nextDocuments = drafted(confirmed.record.documents);
101
+ const nextRevisions = drafted(confirmed.record.revisions);
102
+ const nextFileIds = drafted(confirmed.record.fileIds);
103
+ const nextChanges = drafted(confirmed.record.changes);
104
+ const nextWritten = drafted(confirmed.record.written);
105
+ Object.assign(nextDocuments, documents);
106
+ Object.assign(nextRevisions, revisions);
107
+ for (const path of Object.keys({ ...documents, ...revisions }))
108
+ delete nextFileIds[path];
109
+ Object.assign(nextFileIds, fileIds);
110
+ for (const path of Object.keys(documents))
111
+ nextWritten[path] = writtenAt;
59
112
  for (const [path, revision] of Object.entries(revisions)) {
60
113
  if (confirmed.record.revisions[path] !== revision)
61
114
  delete nextChanges[path];
62
115
  }
116
+ Object.assign(nextChanges, changes);
63
117
  for (const path of removals) {
64
118
  delete nextDocuments[path];
65
119
  delete nextRevisions[path];
120
+ delete nextFileIds[path];
66
121
  delete nextChanges[path];
67
122
  delete nextWritten[path];
68
- binaryTargets.delete(path);
69
123
  }
70
124
  return readStaged({
71
125
  ...confirmed.record,
72
126
  roomVersion,
73
- documents: nextDocuments,
74
- revisions: nextRevisions,
75
- changes: nextChanges,
76
- written: nextWritten,
77
- binaryTargets: [...binaryTargets].sort(),
127
+ documents: settled(nextDocuments),
128
+ revisions: settled(nextRevisions),
129
+ fileIds: settled(nextFileIds),
130
+ changes: settled(nextChanges),
131
+ written: settled(nextWritten),
132
+ binaries: returnedBinaries(confirmed.record.binaries, submitted, accepted),
78
133
  }, confirmed);
79
134
  }
80
135
  function predicted(confirmed, batches, previous) {
@@ -88,8 +143,6 @@ function predicted(confirmed, batches, previous) {
88
143
  const hasMove = batch.changes.some((change) => change.kind === 'move');
89
144
  const reuseRewrite = old?.collection !== undefined &&
90
145
  sameLayerText(before, old.before) &&
91
- JSON.stringify(old.collection.composition.untypedFolders) ===
92
- JSON.stringify(composition.untypedFolders) &&
93
146
  old.collection.composition.model === composition.model &&
94
147
  old.collection.composition.selection?.model === composition.selection?.model &&
95
148
  JSON.stringify(old.collection.composition.selection?.roots) ===
@@ -97,9 +150,7 @@ function predicted(confirmed, batches, previous) {
97
150
  const collection = hasMove
98
151
  ? reuseRewrite
99
152
  ? old.collection
100
- : parseCollection(before.documents, composition, old?.collection === undefined
101
- ? { text: confirmed.record.documents, collection: confirmed.collection }
102
- : { text: old.before.documents, collection: old.collection })
153
+ : collectionOf(before.documents, composition, old?.collection ?? confirmed.collection)
103
154
  : undefined;
104
155
  const effective = collection === undefined
105
156
  ? batch
@@ -120,7 +171,7 @@ function predicted(confirmed, batches, previous) {
120
171
  }
121
172
  return { layer, replay };
122
173
  }
123
- export function replicaOf(confirmed, queue, rewriting, previous) {
174
+ export function replicaOf(confirmed, queue, previous) {
124
175
  const batches = Object.freeze(queue.map(immutable));
125
176
  if (batches.length === 0) {
126
177
  return {
@@ -128,34 +179,28 @@ export function replicaOf(confirmed, queue, rewriting, previous) {
128
179
  queue: batches,
129
180
  visible: {
130
181
  documents: confirmed.record.documents,
131
- binaryTargets: confirmed.record.binaryTargets,
182
+ binaries: confirmed.record.binaries,
132
183
  revisions: confirmed.record.revisions,
184
+ fileIds: confirmed.record.fileIds,
133
185
  changes: confirmed.record.changes,
134
186
  collection: confirmed.collection,
135
187
  },
136
188
  replay: [],
137
189
  };
138
190
  }
139
- const predictedState = rewriting === 'provider' ? predicted(confirmed, batches, previous) : null;
140
- const layer = rewriting === 'provider'
141
- ? predictedState.layer
142
- : previous === undefined
143
- ? overlay(confirmed.record, batches)
144
- : overlayChanged(confirmed.record, batches, previous.confirmed.record, previous.queue, previous.visible);
191
+ const { layer, replay } = predicted(confirmed, batches, previous);
145
192
  return {
146
193
  confirmed,
147
194
  queue: batches,
148
- replay: predictedState?.replay ?? [],
195
+ replay,
149
196
  visible: {
150
197
  ...layer,
151
- collection: parseCollection(layer.documents, compositionOf(confirmed.record), previous === undefined
152
- ? undefined
153
- : { text: previous.visible.documents, collection: previous.visible.collection }),
198
+ collection: collectionOf(layer.documents, compositionOf(confirmed.record), previous?.visible.collection ?? confirmed.collection),
154
199
  },
155
200
  };
156
201
  }
157
202
  function present(layer, path) {
158
- return layer.documents[path] !== undefined || layer.binaryTargets.includes(path);
203
+ return layer.documents[path] !== undefined || layer.binaries[path] !== undefined;
159
204
  }
160
205
  function holds(layer, preconditions) {
161
206
  const parsed = new Map();
@@ -176,6 +221,8 @@ function holds(layer, preconditions) {
176
221
  if (precondition.kind === 'revision') {
177
222
  return present(layer, path) && layer.revisions[path] === precondition.revision;
178
223
  }
224
+ if (precondition.kind === 'content')
225
+ return layer.documents[path] === precondition.content;
179
226
  const document = documentAt(path);
180
227
  if (document === null)
181
228
  return false;
@@ -220,36 +267,33 @@ function effects(change) {
220
267
  { kind: 'present', path: change.to },
221
268
  ];
222
269
  }
270
+ if (change.kind === 'binary')
271
+ return [{ kind: 'present', path }];
223
272
  return [{ kind: 'absent', path }];
224
273
  }
225
- function after(changes, index, path) {
226
- let at = path;
227
- for (const change of changes.slice(index + 1)) {
228
- if (change.path !== at)
229
- continue;
230
- if (change.kind === 'remove')
231
- return null;
232
- if (change.kind === 'move')
233
- at = change.to;
234
- }
235
- return at;
236
- }
237
- export function landed(batch, confirmed) {
238
- const layer = confirmed.record;
274
+ export function landed(batch, confirmed, current = {}) {
275
+ const layer = {
276
+ ...confirmed.record,
277
+ documents: patched(confirmed.record.documents, Object.entries(current)),
278
+ };
239
279
  return batch.changes.every((change, index) => {
240
280
  if (change.kind === 'replace' || (change.kind === 'create' && 'content' in change)) {
241
- const at = after(batch.changes, index, change.path);
281
+ const at = landing(batch.changes, index, change.path);
242
282
  return at === null || layer.documents[at] === change.content;
243
283
  }
284
+ if (change.kind === 'binary') {
285
+ const at = landing(batch.changes, index, change.path);
286
+ return at === null || layer.binaries[at]?.sha256 === change.sha256;
287
+ }
244
288
  return effects(change).every((effect) => {
245
289
  if (effect.kind === 'absent')
246
290
  return holds(layer, [effect]);
247
- const at = after(batch.changes, index, effect.path);
291
+ const at = landing(batch.changes, index, effect.path);
248
292
  return at === null || holds(layer, [{ ...effect, path: at }]);
249
293
  });
250
294
  });
251
295
  }
252
- export function withdrawals(confirmed, queue, withdrawable, rewriting) {
296
+ export function withdrawals(confirmed, queue, withdrawable, local) {
253
297
  if (!queue.some(withdrawable))
254
298
  return [];
255
299
  const composition = compositionOf(confirmed.record);
@@ -260,13 +304,21 @@ export function withdrawals(confirmed, queue, withdrawable, rewriting) {
260
304
  withdrawn.push(batch);
261
305
  continue;
262
306
  }
263
- const effective = rewriting === 'provider' && batch.changes.some((change) => change.kind === 'move')
307
+ const effective = batch.changes.some((change) => change.kind === 'move')
264
308
  ? providerRewritten(batch, {
265
309
  ...layer,
266
- collection: parseCollection(layer.documents, composition),
310
+ collection: collectionOf(layer.documents, composition),
267
311
  })
268
312
  : batch;
269
- layer = overlay(layer, [effective]);
313
+ let unapplied = false;
314
+ const next = overlay(layer, [effective], () => {
315
+ unapplied = true;
316
+ });
317
+ if (local && unapplied) {
318
+ withdrawn.push(batch);
319
+ continue;
320
+ }
321
+ layer = next;
270
322
  }
271
323
  return withdrawn;
272
324
  }
@@ -1,4 +1,5 @@
1
1
  import type { ProviderRefusal } from './adapter.js';
2
+ import type { Open } from './open.js';
2
3
  import type { Change, Precondition } from './change.js';
3
4
  import type { VisibleLayer } from './replica.js';
4
5
  export type FieldValue = {
@@ -36,6 +37,17 @@ export type RoomDraftParts = {
36
37
  readonly removal?: {
37
38
  readonly base?: string | null;
38
39
  };
40
+ readonly file?: {
41
+ readonly blob: Blob;
42
+ };
43
+ };
44
+ export type HeldFile = {
45
+ readonly blob: Blob;
46
+ readonly localId: string;
47
+ readonly byteLength: number;
48
+ readonly mediaType: string;
49
+ readonly sha256: string;
50
+ readonly base: string | null;
39
51
  };
40
52
  type HeldParts = {
41
53
  readonly fields?: Readonly<Record<string, {
@@ -62,6 +74,7 @@ type HeldParts = {
62
74
  readonly removal?: {
63
75
  readonly base: string | null;
64
76
  };
77
+ readonly file?: HeldFile;
65
78
  };
66
79
  type ChangedUnderneath = {
67
80
  readonly fields?: Readonly<Record<string, FieldValue>>;
@@ -71,14 +84,12 @@ type ChangedUnderneath = {
71
84
  readonly creation?: string;
72
85
  readonly move?: string | null;
73
86
  readonly removal?: string | null;
87
+ readonly file?: string | null;
74
88
  };
75
- export type ReturnReason = (ProviderRefusal & {
76
- readonly kind: 'conflicted' | 'rejected';
77
- }) | {
78
- readonly kind: 'expired';
79
- } | {
80
- readonly kind: 'withdrawn';
89
+ export type ReturnReason = ProviderRefusal & {
90
+ readonly kind: Open<'conflicted' | 'rejected' | 'expired' | 'withdrawn'>;
81
91
  };
92
+ export declare function returnedBy(kind: 'expired' | 'withdrawn'): ReturnReason;
82
93
  export type RoomDraft = {
83
94
  readonly room: string;
84
95
  readonly path: string;
@@ -92,11 +103,14 @@ export type RoomDraftWrite = {
92
103
  readonly roomDraft: RoomDraft | null;
93
104
  } | {
94
105
  readonly outcome: 'stale';
106
+ readonly code: string;
107
+ readonly retryable: boolean;
95
108
  readonly current: RoomDraft | null;
96
109
  };
110
+ export declare function staleWrite(current: RoomDraft | null): RoomDraftWrite;
97
111
  export type ChangedPart = {
98
112
  readonly path: string;
99
- readonly part: 'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal';
113
+ readonly part: Open<'field' | 'section' | 'preamble' | 'markdown' | 'creation' | 'move' | 'removal' | 'file'>;
100
114
  readonly name?: string;
101
115
  };
102
116
  export type RoomDraftRecord = {
@@ -111,14 +125,32 @@ export type SavedDraft = {
111
125
  readonly parts: HeldParts;
112
126
  };
113
127
  export declare function readParts(value: unknown): RoomDraftParts;
114
- export declare function held(current: HeldParts | undefined, parts: RoomDraftParts): HeldParts;
115
- export declare function equalValue(left: unknown, right: unknown): boolean;
128
+ export declare function held(current: HeldParts | undefined, parts: RoomDraftParts, file?: HeldFile): HeldParts;
116
129
  export declare function underneath(parts: HeldParts, path: string, visible: VisibleLayer | undefined): ChangedUnderneath;
130
+ export declare function heldFile(blob: Blob, base: string | null): Promise<HeldFile>;
131
+ export declare function binaryBase(visible: VisibleLayer | undefined, path: string): string | null;
117
132
  export declare function changedParts(path: string, report: ChangedUnderneath): readonly ChangedPart[];
133
+ export type TextParts = {
134
+ readonly fields?: Readonly<Record<string, {
135
+ readonly value: unknown;
136
+ }>>;
137
+ readonly sections?: Readonly<Record<string, {
138
+ readonly value: string;
139
+ }>>;
140
+ readonly preamble?: {
141
+ readonly value: string;
142
+ };
143
+ };
144
+ export declare function partsAfter(markdown: string, parts: TextParts): string;
118
145
  export declare function returnedInto(existing: HeldParts | undefined, returned: HeldParts): HeldParts;
146
+ export declare function moveTarget(move: {
147
+ readonly to: string;
148
+ }): string;
119
149
  export declare function changesOf(path: string, parts: HeldParts): {
120
150
  changes: readonly Change[];
121
151
  bases: readonly Precondition[];
122
152
  };
153
+ export declare function joinedDraft(carried: SavedDraft, saved: readonly SavedDraft[]): SavedDraft;
154
+ export declare function withdrawnDrafts(drafts: readonly SavedDraft[], changes: readonly Change[]): readonly SavedDraft[];
123
155
  export {};
124
156
  //# sourceMappingURL=room-draft.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"room-draft.d.ts","sourceRoot":"","sources":["../src/room-draft.ts"],"names":[],"mappings":"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"}