@agentshouse/mdruntime 0.1.0-c967d1ca66fee → 0.1.0-ca14c49c06d90

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 (150) hide show
  1. package/AGENTS.md +142 -112
  2. package/README.md +11 -1
  3. package/dist/adapter.d.ts +59 -13
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/attempt.d.ts +16 -0
  6. package/dist/attempt.d.ts.map +1 -0
  7. package/dist/attempt.js +70 -0
  8. package/dist/binary.d.ts +23 -0
  9. package/dist/binary.d.ts.map +1 -0
  10. package/dist/binary.js +8 -0
  11. package/dist/bootstrap.d.ts +2 -2
  12. package/dist/bootstrap.d.ts.map +1 -1
  13. package/dist/bootstrap.js +33 -14
  14. package/dist/change-set.d.ts.map +1 -1
  15. package/dist/change-set.js +8 -7
  16. package/dist/change.d.ts +11 -0
  17. package/dist/change.d.ts.map +1 -1
  18. package/dist/change.js +26 -1
  19. package/dist/chat/acts.d.ts +33 -0
  20. package/dist/chat/acts.d.ts.map +1 -0
  21. package/dist/chat/acts.js +36 -0
  22. package/dist/chat/context.d.ts +3 -0
  23. package/dist/chat/context.d.ts.map +1 -0
  24. package/dist/chat/context.js +10 -0
  25. package/dist/chat/input.d.ts +9 -0
  26. package/dist/chat/input.d.ts.map +1 -0
  27. package/dist/chat/input.js +99 -0
  28. package/dist/chat/kit.d.ts +60 -0
  29. package/dist/chat/kit.d.ts.map +1 -0
  30. package/dist/chat/kit.js +123 -0
  31. package/dist/chat/lasting.d.ts +6 -0
  32. package/dist/chat/lasting.d.ts.map +1 -0
  33. package/dist/chat/lasting.js +19 -0
  34. package/dist/chat/list.d.ts +26 -0
  35. package/dist/chat/list.d.ts.map +1 -0
  36. package/dist/chat/list.js +62 -0
  37. package/dist/chat/markdown.d.ts +20 -0
  38. package/dist/chat/markdown.d.ts.map +1 -0
  39. package/dist/chat/markdown.js +188 -0
  40. package/dist/chat/message.d.ts +6 -0
  41. package/dist/chat/message.d.ts.map +1 -0
  42. package/dist/chat/message.js +192 -0
  43. package/dist/chat/messages.d.ts +21 -0
  44. package/dist/chat/messages.d.ts.map +1 -0
  45. package/dist/chat/messages.js +151 -0
  46. package/dist/chat/name.d.ts +6 -0
  47. package/dist/chat/name.d.ts.map +1 -0
  48. package/dist/chat/name.js +37 -0
  49. package/dist/chat/opened.d.ts +11 -0
  50. package/dist/chat/opened.d.ts.map +1 -0
  51. package/dist/chat/opened.js +17 -0
  52. package/dist/chat/overlay.d.ts +31 -0
  53. package/dist/chat/overlay.d.ts.map +1 -0
  54. package/dist/chat/overlay.js +97 -0
  55. package/dist/chat/parts.d.ts +57 -0
  56. package/dist/chat/parts.d.ts.map +1 -0
  57. package/dist/chat/parts.js +119 -0
  58. package/dist/chat/process.d.ts +20 -0
  59. package/dist/chat/process.d.ts.map +1 -0
  60. package/dist/chat/process.js +32 -0
  61. package/dist/chat/provider.d.ts +63 -0
  62. package/dist/chat/provider.d.ts.map +1 -0
  63. package/dist/chat/provider.js +620 -0
  64. package/dist/chat/question.d.ts +9 -0
  65. package/dist/chat/question.d.ts.map +1 -0
  66. package/dist/chat/question.js +80 -0
  67. package/dist/chat/questions.d.ts +31 -0
  68. package/dist/chat/questions.d.ts.map +1 -0
  69. package/dist/chat/questions.js +111 -0
  70. package/dist/chat/read.d.ts +5 -0
  71. package/dist/chat/read.d.ts.map +1 -0
  72. package/dist/chat/read.js +13 -0
  73. package/dist/chat/ready.d.ts +33 -0
  74. package/dist/chat/ready.d.ts.map +1 -0
  75. package/dist/chat/ready.js +91 -0
  76. package/dist/chat/style.d.ts +4 -0
  77. package/dist/chat/style.d.ts.map +1 -0
  78. package/dist/chat/style.js +302 -0
  79. package/dist/chat.d.ts +14 -0
  80. package/dist/chat.d.ts.map +1 -0
  81. package/dist/chat.js +8 -0
  82. package/dist/client.d.ts +11 -4
  83. package/dist/client.d.ts.map +1 -1
  84. package/dist/client.js +12 -2
  85. package/dist/connection.d.ts +13 -6
  86. package/dist/connection.d.ts.map +1 -1
  87. package/dist/connection.js +573 -193
  88. package/dist/conversation.d.ts +14 -4
  89. package/dist/conversation.d.ts.map +1 -1
  90. package/dist/conversation.js +188 -63
  91. package/dist/entry.d.ts +17 -0
  92. package/dist/entry.d.ts.map +1 -0
  93. package/dist/entry.js +156 -0
  94. package/dist/expectation.d.ts +21 -0
  95. package/dist/expectation.d.ts.map +1 -0
  96. package/dist/expectation.js +70 -0
  97. package/dist/fence.d.ts +6 -0
  98. package/dist/fence.d.ts.map +1 -0
  99. package/dist/fence.js +10 -0
  100. package/dist/host.d.ts +3 -2
  101. package/dist/host.d.ts.map +1 -1
  102. package/dist/host.js +13 -6
  103. package/dist/identity.d.ts +2 -0
  104. package/dist/identity.d.ts.map +1 -1
  105. package/dist/identity.js +6 -0
  106. package/dist/index.d.ts +9 -4
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +4 -0
  109. package/dist/memory.d.ts +4 -3
  110. package/dist/memory.d.ts.map +1 -1
  111. package/dist/memory.js +40 -11
  112. package/dist/outcome.d.ts +11 -1
  113. package/dist/outcome.d.ts.map +1 -1
  114. package/dist/outcome.js +7 -0
  115. package/dist/overlay.d.ts +13 -2
  116. package/dist/overlay.d.ts.map +1 -1
  117. package/dist/overlay.js +64 -22
  118. package/dist/query.d.ts +2 -0
  119. package/dist/query.d.ts.map +1 -1
  120. package/dist/reach.d.ts +2 -0
  121. package/dist/reach.d.ts.map +1 -1
  122. package/dist/reach.js +26 -4
  123. package/dist/react.d.ts +2 -1
  124. package/dist/react.d.ts.map +1 -1
  125. package/dist/read-side.d.ts.map +1 -1
  126. package/dist/read-side.js +9 -2
  127. package/dist/refresh.d.ts.map +1 -1
  128. package/dist/refresh.js +12 -17
  129. package/dist/replica.d.ts +5 -2
  130. package/dist/replica.d.ts.map +1 -1
  131. package/dist/replica.js +33 -28
  132. package/dist/room-draft.d.ts +19 -2
  133. package/dist/room-draft.d.ts.map +1 -1
  134. package/dist/room-draft.js +119 -1
  135. package/dist/rows.d.ts +3 -1
  136. package/dist/rows.d.ts.map +1 -1
  137. package/dist/rows.js +3 -1
  138. package/dist/save.d.ts +23 -0
  139. package/dist/save.d.ts.map +1 -1
  140. package/dist/save.js +309 -18
  141. package/dist/store.d.ts +36 -18
  142. package/dist/store.d.ts.map +1 -1
  143. package/dist/store.js +291 -172
  144. package/dist/wire.d.ts +3 -0
  145. package/dist/wire.d.ts.map +1 -1
  146. package/dist/wire.js +3 -0
  147. package/package.json +26 -14
  148. package/dist/attachment.d.ts +0 -3
  149. package/dist/attachment.d.ts.map +0 -1
  150. package/dist/attachment.js +0 -8
package/dist/save.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { definitionOf } from './model.js';
2
2
  import { apply, ATTACHMENT, links, parse, pointerSegments, references, relative, relativize, retarget, serialize, target, } from '@agentshouse/mdmodel';
3
- import { immutable, } from './change.js';
3
+ import { immutable, queuedFile, departure, } from './change.js';
4
4
  import { collectionOf, documentsOf, governing, validateCollection, } from './collection.js';
5
5
  import { changeBatchIdentity } from './identity.js';
6
6
  import { overlay } from './overlay.js';
@@ -122,7 +122,10 @@ function rewrites(changes, visible) {
122
122
  for (const change of changes) {
123
123
  if (change.kind === 'move')
124
124
  moves.set(change.path, change.to);
125
- if (change.kind === 'remove' || change.kind === 'replace' || change.kind === 'create') {
125
+ if (change.kind === 'remove' ||
126
+ change.kind === 'replace' ||
127
+ change.kind === 'create' ||
128
+ change.kind === 'binary') {
126
129
  settled.add(change.path);
127
130
  }
128
131
  if (change.kind === 'field')
@@ -216,9 +219,9 @@ function affected(change) {
216
219
  function guard(changes, input) {
217
220
  const existing = new Set([
218
221
  ...Object.keys(input.visible.documents),
219
- ...input.visible.binaryTargets,
222
+ ...Object.keys(input.visible.binaries),
220
223
  ]);
221
- for (const change of changes) {
224
+ for (const [index, change] of changes.entries()) {
222
225
  for (const path of affected(change)) {
223
226
  const normalized = normalize(path);
224
227
  if (normalized === null || normalized === '')
@@ -236,12 +239,26 @@ function guard(changes, input) {
236
239
  existing.add(change.path);
237
240
  continue;
238
241
  }
242
+ if (change.kind === 'binary') {
243
+ if (input.visible.documents[change.path] !== undefined ||
244
+ (existing.has(change.path) &&
245
+ input.bases.some((base) => base.kind === 'absent' && base.path === change.path))) {
246
+ return refuse('path-collision', change.path);
247
+ }
248
+ if (!input.local &&
249
+ existing.has(change.path) &&
250
+ input.visible.revisions[departure(changes, index)] === undefined) {
251
+ return refuse('unknown-revision', change.path);
252
+ }
253
+ existing.add(change.path);
254
+ continue;
255
+ }
239
256
  if (change.kind === 'move') {
240
257
  if (!existing.has(change.path))
241
258
  return refuse('path-absent', change.path);
242
259
  if (existing.has(change.to))
243
260
  return refuse('path-collision', change.to);
244
- if (!input.local && unrevisionedDocument(input.visible, change.path)) {
261
+ if (unrevised(input, change.path)) {
245
262
  return refuse('unknown-revision', change.path);
246
263
  }
247
264
  existing.delete(change.path);
@@ -251,7 +268,7 @@ function guard(changes, input) {
251
268
  if (!existing.has(change.path))
252
269
  return refuse('path-absent', change.path);
253
270
  if (change.kind === 'remove') {
254
- if (!input.local && unrevisionedDocument(input.visible, change.path)) {
271
+ if (unrevised(input, change.path)) {
255
272
  return refuse('unknown-revision', change.path);
256
273
  }
257
274
  existing.delete(change.path);
@@ -269,8 +286,12 @@ function guard(changes, input) {
269
286
  }
270
287
  return null;
271
288
  }
272
- function unrevisionedDocument(visible, path) {
273
- return visible.revisions[path] === undefined && !visible.binaryTargets.includes(path);
289
+ function unrevised(input, path) {
290
+ return (!input.local && input.queued?.has(path) !== true && input.visible.revisions[path] === undefined);
291
+ }
292
+ function identity(precondition) {
293
+ const part = precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';
294
+ return `${precondition.kind} ${precondition.path} ${part}`;
274
295
  }
275
296
  function existence(visible, path) {
276
297
  const revision = visible.revisions[path];
@@ -289,11 +310,10 @@ function preconditionsOf(changes, visible, bases) {
289
310
  const preconditions = [];
290
311
  const seen = new Set();
291
312
  const add = (precondition) => {
292
- const part = precondition.kind === 'field' || precondition.kind === 'section' ? precondition.name : '';
293
- const identity = `${precondition.kind} ${precondition.path} ${part}`;
294
- if (seen.has(identity))
313
+ const held = identity(precondition);
314
+ if (seen.has(held))
295
315
  return;
296
- seen.add(identity);
316
+ seen.add(held);
297
317
  preconditions.push(precondition);
298
318
  };
299
319
  for (const change of changes) {
@@ -328,6 +348,13 @@ function preconditionsOf(changes, visible, bases) {
328
348
  add({ kind: 'absent', path: change.path });
329
349
  continue;
330
350
  }
351
+ if (change.kind === 'binary') {
352
+ const revision = visible.revisions[change.path];
353
+ add(visible.binaries[change.path] === undefined || revision === undefined
354
+ ? { kind: 'absent', path: change.path }
355
+ : { kind: 'revision', path: change.path, revision });
356
+ continue;
357
+ }
331
358
  add(existence(visible, change.path));
332
359
  if (change.kind === 'move')
333
360
  add({ kind: 'absent', path: change.to });
@@ -337,10 +364,10 @@ function preconditionsOf(changes, visible, bases) {
337
364
  function depth(path) {
338
365
  return path.split('/').length;
339
366
  }
340
- function exceeded(limits, changes, resulting) {
341
- const written = changes.map((change) => (change.kind === 'move' ? change.to : change.path));
367
+ function exceeded(limits, changes, effective, resulting) {
368
+ const written = effective.map((change) => (change.kind === 'move' ? change.to : change.path));
342
369
  const created = changes
343
- .filter((change) => change.kind === 'create' || change.kind === 'move')
370
+ .filter((change) => change.kind === 'create' || change.kind === 'move' || change.kind === 'binary')
344
371
  .map((change) => (change.kind === 'move' ? change.to : change.path));
345
372
  for (const limit of limits) {
346
373
  const value = limit.value;
@@ -354,7 +381,7 @@ function exceeded(limits, changes, resulting) {
354
381
  return refuse('provider-limit', undefined, limit.name);
355
382
  }
356
383
  if (limit.name === 'document-size') {
357
- const large = written.find((path) => (resulting.documents[path] ?? '').length > value);
384
+ const large = written.find((path) => new TextEncoder().encode(resulting.documents[path] ?? '').byteLength > value);
358
385
  if (large !== undefined)
359
386
  return refuse('provider-limit', large, limit.name);
360
387
  }
@@ -431,6 +458,270 @@ function unmodeledType(collection, composition) {
431
458
  }
432
459
  return false;
433
460
  }
461
+ function unqueueable(file) {
462
+ return { kind: 'refused', refusal: { code: 'unknown-revision', retryable: false, file } };
463
+ }
464
+ function isPart(change) {
465
+ return change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble';
466
+ }
467
+ function touched(change) {
468
+ return change.kind === 'move' ? [change.path, change.to] : [change.path];
469
+ }
470
+ function partApplied(content, path, change) {
471
+ const parsed = parse(content, path);
472
+ if (!parsed.ok)
473
+ return null;
474
+ const document = parsed.document;
475
+ const applied = apply(document, change.kind === 'field'
476
+ ? {
477
+ kind: 'field',
478
+ name: change.name,
479
+ value: change.value,
480
+ prior: document.fields[change.name],
481
+ }
482
+ : change.kind === 'section'
483
+ ? {
484
+ kind: 'section',
485
+ name: change.name,
486
+ value: change.value,
487
+ prior: document.sections[change.name],
488
+ }
489
+ : { kind: 'preamble', value: change.value, prior: document.preamble });
490
+ return applied.outcome === 'applied' ? serialize(applied.document) : null;
491
+ }
492
+ function folded(changes, change, appending) {
493
+ const held = changes.find((item) => item.path === change.path && (item.kind === 'create' || item.kind === 'replace'));
494
+ const whole = held === undefined ? -1 : changes.indexOf(held);
495
+ const occupied = changes.some((item) => !isPart(item) && item !== held && touched(item).includes(change.path));
496
+ if (isPart(change)) {
497
+ const same = changes.findIndex((item) => item.kind === change.kind &&
498
+ item.path === change.path &&
499
+ (change.kind === 'preamble' || ('name' in item && item.name === change.name)));
500
+ if (same !== -1) {
501
+ changes[same] = change;
502
+ return 'folded';
503
+ }
504
+ if (held === undefined) {
505
+ if (!appending)
506
+ return 'skipped';
507
+ if (occupied)
508
+ return 'refused';
509
+ changes.push(change);
510
+ return 'appended';
511
+ }
512
+ if ('content' in held) {
513
+ const content = partApplied(held.content, held.path, change);
514
+ if (content === null)
515
+ return 'refused';
516
+ changes[whole] = { ...held, content };
517
+ return 'folded';
518
+ }
519
+ if (change.kind === 'preamble')
520
+ return 'refused';
521
+ changes[whole] =
522
+ change.kind === 'field'
523
+ ? { ...held, fields: { ...held.fields, [change.name]: change.value } }
524
+ : { ...held, sections: { ...held.sections, [change.name]: change.value } };
525
+ return 'folded';
526
+ }
527
+ if (change.kind === 'replace') {
528
+ if (held !== undefined) {
529
+ if (!('content' in held))
530
+ return 'refused';
531
+ changes[whole] = { ...held, content: change.content };
532
+ return 'folded';
533
+ }
534
+ const parts = changes.filter((item) => isPart(item) && item.path === change.path);
535
+ if (parts.length === 0 && !appending)
536
+ return 'skipped';
537
+ if (occupied)
538
+ return 'refused';
539
+ changes.splice(0, changes.length, ...changes.filter((item) => !parts.includes(item)), change);
540
+ return 'appended';
541
+ }
542
+ if (changes.some((item) => touched(change).some((path) => touched(item).includes(path))))
543
+ return 'refused';
544
+ changes.push(change);
545
+ return 'appended';
546
+ }
547
+ function relinked(batch, move, before, after, appending) {
548
+ const derived = rewrites([move], after);
549
+ if (derived.kind === 'refused')
550
+ return derived;
551
+ const changes = [...batch.changes];
552
+ const appended = [];
553
+ let changed = false;
554
+ for (const change of derived.changes) {
555
+ if (change === move)
556
+ continue;
557
+ const outcome = folded(changes, change, appending);
558
+ if (outcome === 'refused')
559
+ return unqueueable(change.path);
560
+ if (outcome === 'appended')
561
+ appended.push(change);
562
+ if (outcome !== 'skipped')
563
+ changed = true;
564
+ }
565
+ if (!changed)
566
+ return { kind: 'relinked', batch };
567
+ const held = new Set(batch.preconditions.map(identity));
568
+ return {
569
+ kind: 'relinked',
570
+ batch: immutable({
571
+ ...batch,
572
+ id: changeBatchIdentity(),
573
+ changes,
574
+ preconditions: [
575
+ ...batch.preconditions,
576
+ ...preconditionsOf(appended, before, []).filter((precondition) => !held.has(identity(precondition))),
577
+ ],
578
+ }),
579
+ };
580
+ }
581
+ function leading(changes, at) {
582
+ const from = departure(changes, at);
583
+ return new Set(changes.filter((change, index) => index < at && change.kind === 'move' && departure(changes, index) === from));
584
+ }
585
+ function created(batch, at) {
586
+ const file = batch.changes[at];
587
+ return (leading(batch.changes, at).size === 0 &&
588
+ batch.preconditions.some((precondition) => precondition.kind === 'absent' && precondition.path === file.path));
589
+ }
590
+ function withdrawnFile(batch, change, at) {
591
+ const file = batch.changes[at];
592
+ const from = departure(batch.changes, at);
593
+ const moves = leading(batch.changes, at);
594
+ const fresh = created(batch, at);
595
+ const vacated = new Set([...moves].map((move) => move.to));
596
+ if (fresh)
597
+ vacated.add(file.path);
598
+ const replaced = fresh
599
+ ? change.kind === 'remove'
600
+ ? []
601
+ : [{ ...file, path: change.to }]
602
+ : change.kind === 'remove'
603
+ ? [{ kind: 'remove', path: from }]
604
+ : change.to === from
605
+ ? [{ ...file, path: from }]
606
+ : [
607
+ { kind: 'move', path: from, to: change.to },
608
+ { ...file, path: change.to },
609
+ ];
610
+ const added = change.kind === 'move' && (fresh || change.to !== from)
611
+ ? [{ kind: 'absent', path: change.to }]
612
+ : [];
613
+ const changes = batch.changes.flatMap((item) => item === file ? replaced : item.kind === 'move' && moves.has(item) ? [] : [item]);
614
+ if (changes.length === 0)
615
+ return null;
616
+ const preconditions = [
617
+ ...added,
618
+ ...batch.preconditions.filter((precondition) => precondition.kind !== 'absent' || !vacated.has(precondition.path)),
619
+ ];
620
+ return immutable({ ...batch, id: changeBatchIdentity(), changes, preconditions });
621
+ }
622
+ export function requeued(queue, changes, visible, changeable, state) {
623
+ const next = [...queue];
624
+ const origins = new Map();
625
+ const withdrawn = new Map();
626
+ const owners = new Set();
627
+ const queued = new Set();
628
+ const kept = [];
629
+ const originOf = (batch) => origins.get(batch) ?? batch.id;
630
+ const open = (batch) => origins.has(batch) || changeable(batch);
631
+ for (const change of changes) {
632
+ const held = visible.binaries[change.path];
633
+ if ((change.kind !== 'move' && change.kind !== 'remove') || held?.state !== 'pending') {
634
+ kept.push(change);
635
+ continue;
636
+ }
637
+ let index = next.length - 1;
638
+ while (index >= 0 && queuedFile(next[index], change.path, held.localId) === -1)
639
+ index -= 1;
640
+ const owner = next[index];
641
+ if (owner === undefined || !open(owner))
642
+ return unqueueable(change.path);
643
+ const following = next.slice(index);
644
+ const rebuilt = [];
645
+ let before = change.kind === 'move' ? state(next.slice(0, index)) : visible;
646
+ for (const [offset, batch] of following.entries()) {
647
+ let current = batch;
648
+ if (change.kind === 'move') {
649
+ const after = state(next.slice(0, index + offset + 1));
650
+ const appending = offset === 0 && created(batch, queuedFile(batch, change.path, held.localId));
651
+ const relinking = relinked(batch, change, before, after, appending);
652
+ if (relinking.kind === 'refused')
653
+ return relinking;
654
+ current = relinking.batch;
655
+ before = after;
656
+ }
657
+ if (current !== batch && !open(batch))
658
+ return unqueueable(change.path);
659
+ rebuilt.push(offset === 0
660
+ ? withdrawnFile(current, change, queuedFile(current, change.path, held.localId))
661
+ : current);
662
+ }
663
+ for (const [offset, batch] of following.entries()) {
664
+ const replaced = rebuilt[offset];
665
+ if (replaced === batch)
666
+ continue;
667
+ const origin = originOf(batch);
668
+ withdrawn.set(origin, replaced);
669
+ if (replaced !== null)
670
+ origins.set(replaced, origin);
671
+ }
672
+ owners.add(originOf(owner));
673
+ next.splice(index, following.length, ...rebuilt.filter((batch) => batch !== null));
674
+ queued.add(change.path);
675
+ }
676
+ return {
677
+ kind: 'requeued',
678
+ queue: withdrawn.size === 0 ? queue : next,
679
+ changes: kept,
680
+ queued,
681
+ withdrawn,
682
+ owners,
683
+ };
684
+ }
685
+ function covering(precondition) {
686
+ return precondition.kind === 'field' ||
687
+ precondition.kind === 'section' ||
688
+ precondition.kind === 'preamble'
689
+ ? identity(precondition)
690
+ : `path ${precondition.path}`;
691
+ }
692
+ export function joined(queue, owner, extra) {
693
+ const later = new Set(queue.slice(queue.indexOf(owner) + 1).flatMap((batch) => batch.changes.flatMap(touched)));
694
+ const clash = extra.changes.flatMap(touched).find((path) => later.has(path));
695
+ if (clash !== undefined)
696
+ return unqueueable(clash);
697
+ const changes = [...owner.changes];
698
+ for (const change of extra.changes) {
699
+ if (folded(changes, change, true) === 'refused')
700
+ return unqueueable(change.path);
701
+ }
702
+ const held = new Set(owner.preconditions.map(covering));
703
+ const written = new Set(owner.changes.flatMap((change) => change.kind === 'create' || change.kind === 'replace' ? [change.path] : []));
704
+ const preconditions = [
705
+ ...owner.preconditions,
706
+ ...extra.preconditions.filter((precondition) => {
707
+ const key = covering(precondition);
708
+ return (!held.has(key) && (key === `path ${precondition.path}` || !written.has(precondition.path)));
709
+ }),
710
+ ];
711
+ const batch = immutable({
712
+ ...owner,
713
+ ...(extra.validation === undefined ? {} : { validation: extra.validation }),
714
+ id: changeBatchIdentity(),
715
+ changes,
716
+ preconditions,
717
+ });
718
+ return { kind: 'joined', batch, queue: queue.map((item) => (item === owner ? batch : item)) };
719
+ }
720
+ export function limitedIn(queue, batch, limits, state) {
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)));
723
+ return limited?.kind === 'refused' ? limited.refusal : null;
724
+ }
434
725
  export function buildBatch(input) {
435
726
  const changes = relativeChanges(input);
436
727
  const structural = changes.find((change) => change.kind === 'move' || change.kind === 'remove');
@@ -469,7 +760,7 @@ export function buildBatch(input) {
469
760
  const validationText = needsModel
470
761
  ? resulting.documents
471
762
  : Object.fromEntries(Object.entries(resulting.documents).filter(([path]) => predicted.changes.some((change) => affected(change).includes(path))));
472
- const verdict = validateCollection(validationText, resulting.binaryTargets, input.composition);
763
+ const verdict = validateCollection(validationText, Object.keys(resulting.binaries), input.composition);
473
764
  if (verdict.verdict === 'refuse') {
474
765
  return {
475
766
  kind: 'refused',
@@ -482,7 +773,7 @@ export function buildBatch(input) {
482
773
  },
483
774
  };
484
775
  }
485
- const limited = exceeded(input.providerLimits, changes, resulting);
776
+ const limited = exceeded(input.providerLimits, changes, predicted.changes, resulting);
486
777
  if (limited !== null)
487
778
  return limited;
488
779
  const validated = typedPaths
package/dist/store.d.ts CHANGED
@@ -1,11 +1,13 @@
1
1
  import type { ModelState } from './model.js';
2
- import type { Capability, HeadChange, Member, OperationScopes, ProviderLimit, ReplicaAdmission, RoomAttachment, TypedSelection } from './adapter.js';
3
- import type { AcceptedMessage } from './adapter.js';
2
+ import type { Capability, HeadChange, Member, OperationScopes, ProviderLimit, ReplicaAdmission, TypedSelection } from './adapter.js';
3
+ import type { AcceptedMessage, KeptReceipt } from './adapter.js';
4
4
  import type { ChangeBatch } from './change.js';
5
+ import { type HeldBinary } from './overlay.js';
5
6
  import type { ChatDraftFile } from './file.js';
6
7
  import type { Submission } from './outcome.js';
7
8
  import type { RoomDraftRecord, SavedDraft } from './room-draft.js';
8
- export declare const STORE_SCHEMA = 21;
9
+ export declare const STORE_SCHEMA = 24;
10
+ export declare const AUTHORED_SCHEMA = 2;
9
11
  export type ReplicaRecord = {
10
12
  locator: string;
11
13
  name: string;
@@ -19,13 +21,12 @@ export type ReplicaRecord = {
19
21
  roomVersion: string;
20
22
  transfer: string;
21
23
  documents: Readonly<Record<string, string>>;
22
- binaryTargets: readonly string[];
24
+ binaries: Readonly<Record<string, HeldBinary>>;
23
25
  revisions: Readonly<Record<string, string>>;
24
26
  changes: Readonly<Record<string, HeadChange>>;
25
27
  written: Readonly<Record<string, string>>;
26
- attachments: readonly RoomAttachment[];
27
28
  };
28
- export type StagedLayer = Pick<ReplicaRecord, 'documents' | 'binaryTargets' | 'revisions' | 'changes' | 'written'>;
29
+ export type StagedLayer = Pick<ReplicaRecord, 'documents' | 'binaries' | 'revisions' | 'changes' | 'written'>;
29
30
  export type TransferRecord = {
30
31
  locator: string;
31
32
  transfer: string;
@@ -37,7 +38,6 @@ export type TransferRecord = {
37
38
  collection: ModelState;
38
39
  selection: ModelState;
39
40
  };
40
- attachments: readonly (readonly RoomAttachment[])[];
41
41
  };
42
42
  export type PendingState = {
43
43
  readonly drafts: readonly SavedDraft[];
@@ -66,31 +66,37 @@ export type ConversationWrite = {
66
66
  conversation: string;
67
67
  messages: readonly AcceptedMessage[];
68
68
  read?: string | null;
69
- sealed?: boolean;
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;
80
+ revision: string;
81
+ submitted?: readonly ChatSubmission[];
76
82
  };
77
83
  export type RecordWrite = {
78
84
  next: ReplicaRecord;
79
85
  previous: ReplicaRecord | null;
80
86
  stored?: StagedLayer;
87
+ };
88
+ export type AuthoredWrite = {
89
+ locator: string;
81
90
  queue: readonly ChangeBatch[];
82
- previousQueue?: readonly ChangeBatch[];
83
- saved?: readonly SavedDraft[];
91
+ saved?: ReadonlyMap<string, readonly SavedDraft[]>;
84
92
  roomDrafts?: readonly RoomDraftRecord[];
85
93
  consumedRoomDrafts?: readonly string[];
86
94
  };
87
95
  export type RuntimeStore = {
88
96
  all(): Promise<readonly ReplicaRecord[]>;
97
+ keepAuthored(input: AuthoredWrite): Promise<void>;
89
98
  write(input: RecordWrite): Promise<void>;
90
- revokeModels(records: readonly {
91
- record: ReplicaRecord;
92
- queue: readonly ChangeBatch[];
93
- }[]): Promise<void>;
99
+ revokeModels(records: readonly ReplicaRecord[]): Promise<void>;
94
100
  lastCompleted(): Promise<string | null>;
95
101
  complete(at: string): Promise<void>;
96
102
  providerLimits(): Promise<readonly ProviderLimit[]>;
@@ -113,15 +119,27 @@ export type RuntimeStore = {
113
119
  dropChatDraft(conversation: string): Promise<void>;
114
120
  keepRoomDraft(record: RoomDraftRecord): Promise<void>;
115
121
  discardRoomDraft(locator: string, path: string): Promise<void>;
116
- dropRooms(locators: readonly string[]): Promise<void>;
122
+ fences(): Promise<readonly string[]>;
123
+ erase(locators: readonly string[]): Promise<void>;
117
124
  transfers(): Promise<readonly TransferRecord[]>;
118
125
  staged(record: TransferRecord): Promise<StagedLayer>;
119
126
  stage(record: TransferRecord, page: StagedLayer): Promise<void>;
120
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>;
121
135
  generation(): Promise<string | null>;
122
136
  rememberGeneration(value: string): Promise<void>;
123
137
  close(): void;
124
138
  };
125
- export declare function removeRuntimeStore(): Promise<void>;
126
- export declare function openRuntimeStore(): Promise<RuntimeStore>;
139
+ export declare function authoredHolder(): Promise<string | null>;
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>;
143
+ export declare function removeRuntimeStore(holder?: string): Promise<boolean>;
144
+ export declare function openRuntimeStore(fenced: (locator: string) => boolean): Promise<RuntimeStore>;
127
145
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}