@agentshouse/mdruntime 0.1.0-c2c52158b7381 → 0.1.0-c2ef9303a058d

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 (230) hide show
  1. package/README.md +11 -9
  2. package/dist/adapter.d.ts +107 -70
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/attached-model.d.ts +5 -11
  5. package/dist/attached-model.d.ts.map +1 -1
  6. package/dist/attached-model.js +36 -47
  7. package/dist/binary.d.ts +0 -5
  8. package/dist/binary.d.ts.map +1 -1
  9. package/dist/binary.js +1 -1
  10. package/dist/bootstrap.d.ts +26 -11
  11. package/dist/bootstrap.d.ts.map +1 -1
  12. package/dist/bootstrap.js +177 -130
  13. package/dist/chain.d.ts +12 -0
  14. package/dist/chain.d.ts.map +1 -0
  15. package/dist/chain.js +64 -0
  16. package/dist/change-set.d.ts +6 -16
  17. package/dist/change-set.d.ts.map +1 -1
  18. package/dist/change-set.js +11 -90
  19. package/dist/client.d.ts +16 -12
  20. package/dist/client.d.ts.map +1 -1
  21. package/dist/client.js +57 -8
  22. package/dist/collection.d.ts +10 -21
  23. package/dist/collection.d.ts.map +1 -1
  24. package/dist/collection.js +39 -372
  25. package/dist/compile.d.ts +11 -0
  26. package/dist/compile.d.ts.map +1 -0
  27. package/dist/compile.js +586 -0
  28. package/dist/connection.d.ts +16 -14
  29. package/dist/connection.d.ts.map +1 -1
  30. package/dist/connection.js +2331 -1524
  31. package/dist/context.d.ts +2 -0
  32. package/dist/context.d.ts.map +1 -0
  33. package/dist/{chat/context.js → context.js} +1 -4
  34. package/dist/conversation.d.ts +18 -15
  35. package/dist/conversation.d.ts.map +1 -1
  36. package/dist/conversation.js +271 -174
  37. package/dist/durability.d.ts +6 -4
  38. package/dist/durability.d.ts.map +1 -1
  39. package/dist/durability.js +5 -0
  40. package/dist/entry.d.ts +5 -3
  41. package/dist/entry.d.ts.map +1 -1
  42. package/dist/entry.js +32 -29
  43. package/dist/file.d.ts +2 -11
  44. package/dist/file.d.ts.map +1 -1
  45. package/dist/file.js +6 -4
  46. package/dist/host.d.ts +3 -7
  47. package/dist/host.d.ts.map +1 -1
  48. package/dist/host.js +55 -38
  49. package/dist/identity.d.ts +0 -2
  50. package/dist/identity.d.ts.map +1 -1
  51. package/dist/identity.js +0 -6
  52. package/dist/index.d.ts +15 -12
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +6 -3
  55. package/dist/job.d.ts +14 -0
  56. package/dist/job.d.ts.map +1 -0
  57. package/dist/job.js +28 -0
  58. package/dist/live.d.ts +23 -0
  59. package/dist/live.d.ts.map +1 -0
  60. package/dist/live.js +127 -0
  61. package/dist/media.d.ts +8 -0
  62. package/dist/media.d.ts.map +1 -0
  63. package/dist/media.js +218 -0
  64. package/dist/memory.d.ts +13 -6
  65. package/dist/memory.d.ts.map +1 -1
  66. package/dist/memory.js +221 -101
  67. package/dist/messages.d.ts +28 -0
  68. package/dist/messages.d.ts.map +1 -0
  69. package/dist/messages.js +89 -0
  70. package/dist/model.d.ts +8 -8
  71. package/dist/model.d.ts.map +1 -1
  72. package/dist/model.js +7 -13
  73. package/dist/observation.d.ts +15 -2
  74. package/dist/observation.d.ts.map +1 -1
  75. package/dist/observation.js +91 -2
  76. package/dist/outcome.d.ts +13 -6
  77. package/dist/outcome.d.ts.map +1 -1
  78. package/dist/outcome.js +16 -5
  79. package/dist/overlay.d.ts +0 -3
  80. package/dist/overlay.d.ts.map +1 -1
  81. package/dist/overlay.js +2 -152
  82. package/dist/paths.d.ts +1 -0
  83. package/dist/paths.d.ts.map +1 -1
  84. package/dist/paths.js +4 -0
  85. package/dist/query.d.ts +10 -206
  86. package/dist/query.d.ts.map +1 -1
  87. package/dist/query.js +3 -494
  88. package/dist/reach.d.ts +14 -9
  89. package/dist/reach.d.ts.map +1 -1
  90. package/dist/reach.js +99 -107
  91. package/dist/react.d.ts +3 -1
  92. package/dist/react.d.ts.map +1 -1
  93. package/dist/readiness.d.ts +14 -17
  94. package/dist/readiness.d.ts.map +1 -1
  95. package/dist/readiness.js +2 -8
  96. package/dist/recovery.d.ts +1 -0
  97. package/dist/recovery.d.ts.map +1 -1
  98. package/dist/recovery.js +26 -0
  99. package/dist/refresh.d.ts +18 -15
  100. package/dist/refresh.d.ts.map +1 -1
  101. package/dist/refresh.js +139 -77
  102. package/dist/replica.d.ts +58 -38
  103. package/dist/replica.d.ts.map +1 -1
  104. package/dist/replica.js +291 -217
  105. package/dist/room-draft.d.ts +22 -5
  106. package/dist/room-draft.d.ts.map +1 -1
  107. package/dist/room-draft.js +131 -51
  108. package/dist/rows.d.ts +31 -31
  109. package/dist/rows.d.ts.map +1 -1
  110. package/dist/rows.js +59 -123
  111. package/dist/save.d.ts +11 -10
  112. package/dist/save.d.ts.map +1 -1
  113. package/dist/save.js +72 -64
  114. package/dist/search.d.ts +12 -95
  115. package/dist/search.d.ts.map +1 -1
  116. package/dist/search.js +10 -317
  117. package/dist/shared.d.ts +0 -4
  118. package/dist/shared.d.ts.map +1 -1
  119. package/dist/shared.js +1 -41
  120. package/dist/status.d.ts +4 -3
  121. package/dist/status.d.ts.map +1 -1
  122. package/dist/status.js +3 -1
  123. package/dist/store.d.ts +77 -97
  124. package/dist/store.d.ts.map +1 -1
  125. package/dist/store.js +142 -547
  126. package/dist/stored.d.ts +129 -0
  127. package/dist/stored.d.ts.map +1 -0
  128. package/dist/stored.js +524 -0
  129. package/dist/tables.d.ts +255 -170
  130. package/dist/tables.d.ts.map +1 -1
  131. package/dist/tables.js +204 -23
  132. package/dist/transfer.d.ts +0 -5
  133. package/dist/transfer.d.ts.map +1 -1
  134. package/dist/turn.d.ts +1 -1
  135. package/dist/turn.d.ts.map +1 -1
  136. package/dist/turn.js +28 -20
  137. package/dist/validation.d.ts +29 -0
  138. package/dist/validation.d.ts.map +1 -0
  139. package/dist/validation.js +104 -0
  140. package/dist/windows.d.ts +1 -11
  141. package/dist/windows.d.ts.map +1 -1
  142. package/dist/windows.js +2 -70
  143. package/dist/wire.d.ts +14 -9
  144. package/dist/wire.d.ts.map +1 -1
  145. package/dist/wire.js +5 -3
  146. package/package.json +14 -19
  147. package/AGENTS.md +0 -308
  148. package/dist/chat/acts.d.ts +0 -33
  149. package/dist/chat/acts.d.ts.map +0 -1
  150. package/dist/chat/acts.js +0 -36
  151. package/dist/chat/context.d.ts +0 -3
  152. package/dist/chat/context.d.ts.map +0 -1
  153. package/dist/chat/earlier.d.ts +0 -10
  154. package/dist/chat/earlier.d.ts.map +0 -1
  155. package/dist/chat/earlier.js +0 -54
  156. package/dist/chat/house.d.ts +0 -25
  157. package/dist/chat/house.d.ts.map +0 -1
  158. package/dist/chat/house.js +0 -38
  159. package/dist/chat/input.d.ts +0 -11
  160. package/dist/chat/input.d.ts.map +0 -1
  161. package/dist/chat/input.js +0 -92
  162. package/dist/chat/kit.d.ts +0 -61
  163. package/dist/chat/kit.d.ts.map +0 -1
  164. package/dist/chat/kit.js +0 -123
  165. package/dist/chat/lasting.d.ts +0 -6
  166. package/dist/chat/lasting.d.ts.map +0 -1
  167. package/dist/chat/lasting.js +0 -19
  168. package/dist/chat/list.d.ts +0 -28
  169. package/dist/chat/list.d.ts.map +0 -1
  170. package/dist/chat/list.js +0 -103
  171. package/dist/chat/markdown.d.ts +0 -21
  172. package/dist/chat/markdown.d.ts.map +0 -1
  173. package/dist/chat/markdown.js +0 -246
  174. package/dist/chat/message.d.ts +0 -7
  175. package/dist/chat/message.d.ts.map +0 -1
  176. package/dist/chat/message.js +0 -237
  177. package/dist/chat/messages.d.ts +0 -29
  178. package/dist/chat/messages.d.ts.map +0 -1
  179. package/dist/chat/messages.js +0 -190
  180. package/dist/chat/name.d.ts +0 -7
  181. package/dist/chat/name.d.ts.map +0 -1
  182. package/dist/chat/name.js +0 -37
  183. package/dist/chat/opened.d.ts +0 -12
  184. package/dist/chat/opened.d.ts.map +0 -1
  185. package/dist/chat/opened.js +0 -19
  186. package/dist/chat/overlay.d.ts +0 -32
  187. package/dist/chat/overlay.d.ts.map +0 -1
  188. package/dist/chat/overlay.js +0 -103
  189. package/dist/chat/parts.d.ts +0 -58
  190. package/dist/chat/parts.d.ts.map +0 -1
  191. package/dist/chat/parts.js +0 -120
  192. package/dist/chat/pieces.d.ts +0 -62
  193. package/dist/chat/pieces.d.ts.map +0 -1
  194. package/dist/chat/pieces.js +0 -1110
  195. package/dist/chat/process.d.ts +0 -20
  196. package/dist/chat/process.d.ts.map +0 -1
  197. package/dist/chat/process.js +0 -32
  198. package/dist/chat/provider.d.ts +0 -68
  199. package/dist/chat/provider.d.ts.map +0 -1
  200. package/dist/chat/provider.js +0 -619
  201. package/dist/chat/question.d.ts +0 -9
  202. package/dist/chat/question.d.ts.map +0 -1
  203. package/dist/chat/question.js +0 -69
  204. package/dist/chat/questions.d.ts +0 -31
  205. package/dist/chat/questions.d.ts.map +0 -1
  206. package/dist/chat/questions.js +0 -111
  207. package/dist/chat/read.d.ts +0 -5
  208. package/dist/chat/read.d.ts.map +0 -1
  209. package/dist/chat/read.js +0 -13
  210. package/dist/chat/ready.d.ts +0 -37
  211. package/dist/chat/ready.d.ts.map +0 -1
  212. package/dist/chat/ready.js +0 -93
  213. package/dist/chat/room-file.d.ts +0 -8
  214. package/dist/chat/room-file.d.ts.map +0 -1
  215. package/dist/chat/room-file.js +0 -72
  216. package/dist/chat/steady.d.ts +0 -3
  217. package/dist/chat/steady.d.ts.map +0 -1
  218. package/dist/chat/steady.js +0 -26
  219. package/dist/chat/style.d.ts +0 -4
  220. package/dist/chat/style.d.ts.map +0 -1
  221. package/dist/chat/style.js +0 -306
  222. package/dist/chat.d.ts +0 -15
  223. package/dist/chat.d.ts.map +0 -1
  224. package/dist/chat.js +0 -8
  225. package/dist/read-side.d.ts +0 -27
  226. package/dist/read-side.d.ts.map +0 -1
  227. package/dist/read-side.js +0 -1179
  228. package/dist/reads.d.ts +0 -11
  229. package/dist/reads.d.ts.map +0 -1
  230. package/dist/reads.js +0 -98
@@ -1,25 +1,40 @@
1
1
  import type { ModelState } from './model.js';
2
- import type { Adapter, AdapterFailure, Authorization, DiscoveredRoom, HeldContent, RetryableRefusal, RoomModels } from './adapter.js';
3
- import { type ConfirmedLayer } from './replica.js';
4
- import type { StagedLayer, TransferRecord } from './store.js';
5
- import { type Refused, type Unconfirmed } from './transfer.js';
2
+ import type { Adapter, TypedPath, AdapterFailure, Authorization, DiscoveredRoom, HeldContent, RetryableRefusal, RoomModels } from './adapter.js';
3
+ import type { Composition } from './collection.js';
4
+ import type { InstallationStep } from './readiness.js';
5
+ import { type Refreshing } from './refresh.js';
6
+ import type { ReplicaRecord } from './replica.js';
7
+ import type { StagedPage, TransferRecord } from './store.js';
8
+ import { type Unconfirmed } from './transfer.js';
6
9
  export type Bootstrapped = {
7
10
  kind: 'staged';
8
- confirmed: ConfirmedLayer;
9
- stored: StagedLayer;
11
+ record: ReplicaRecord;
12
+ refreshed: boolean;
10
13
  };
11
- export type BootstrapOutcome = Bootstrapped | Refused | Unconfirmed | RetryableRefusal | AdapterFailure;
14
+ export type BootstrapOutcome = Bootstrapped | Unconfirmed | RetryableRefusal | AdapterFailure;
12
15
  export type HeldModels = {
13
16
  collection: ModelState;
14
- selection: ModelState;
15
17
  };
16
18
  export type Remodel = (models: RoomModels | undefined, held: HeldModels) => HeldModels;
17
19
  export type Reads = Pick<Adapter, 'bootstrap' | 'refresh' | 'reached'>;
20
+ export type Arriving = {
21
+ at(bytes: number): void;
22
+ end(): void;
23
+ };
18
24
  export type Staging = {
19
25
  held(locator: string): TransferRecord | null;
20
- staged(record: TransferRecord): Promise<StagedLayer>;
21
- stage(record: TransferRecord, page: StagedLayer): Promise<boolean>;
26
+ turn(locator: string, step: InstallationStep): Promise<() => void>;
27
+ unqueued(): Promise<void>;
28
+ queued(text: number): () => void;
29
+ arriving(locator: string): Arriving;
30
+ readonly streamed: boolean;
31
+ stage(record: TransferRecord, page: StagedPage, composition: Composition): Promise<TransferRecord | null>;
32
+ derive(locator: string, key: number, composition: Composition): Promise<boolean>;
33
+ refreshing(locator: string, key: number, composition: Composition): Promise<Refreshing>;
22
34
  abandon(locator: string): Promise<void>;
35
+ setAside(locator: string): Promise<void>;
36
+ release(key: number): Promise<void>;
37
+ content(key: number): HeldContent;
23
38
  };
24
- export declare function bootstrapRoom(adapter: Reads, authorization: Authorization, room: DiscoveredRoom, held: HeldModels, remodel: Remodel, continuing: () => boolean, staging: Staging, reuse: HeldContent | null): Promise<BootstrapOutcome>;
39
+ export declare function bootstrapRoom(adapter: Reads, authorization: Authorization, room: DiscoveredRoom, held: HeldModels, builtIn: ModelState, typedPaths: readonly TypedPath[], remodel: Remodel, continuing: () => boolean, staging: Staging, reuse: HeldContent | null): Promise<BootstrapOutcome>;
25
40
  //# sourceMappingURL=bootstrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,aAAa,EAEb,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,UAAU,EACX,MAAM,cAAc,CAAC;AAItB,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAiB,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAe,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5E,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAE9F,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,OAAO,GACP,WAAW,GACX,gBAAgB,GAChB,cAAc,CAAC;AAEnB,MAAM,MAAM,UAAU,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,EAAE,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;AAEvF,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAEvE,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC;IAC7C,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACrD,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC,CAAC;AA2EF,wBAAsB,aAAa,CACjC,OAAO,EAAE,KAAK,EACd,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,OAAO,EACzB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,GAAG,IAAI,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA6B3B"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
package/dist/bootstrap.js CHANGED
@@ -1,164 +1,211 @@
1
1
  import { transferIdentity } from './identity.js';
2
- import { advancement } from './refresh.js';
3
- import { acceptedBinaries } from './overlay.js';
4
- import { readStaged } from './replica.js';
2
+ import { advancement, pageEntries } from './refresh.js';
3
+ import { entriesIn } from './shared.js';
5
4
  import { unconfirmed } from './transfer.js';
6
- import { entriesIn, patching } from './shared.js';
7
- import { ROW_WEIGHT, stepped } from './turn.js';
8
- const RESUMABLE = new Set([
9
- 'transport-uncertainty',
10
- 'retryable-refusal',
11
- 'unconfirmed',
12
- ]);
13
- function* pageLayer(page) {
14
- const written = {};
15
- for (const [path] of entriesIn(page.documents)) {
16
- written[path] = page.roomVersion;
17
- yield ROW_WEIGHT;
18
- }
19
- const binaries = {};
20
- for (const [path, binary] of acceptedBinaries(page.binaryFiles)) {
21
- binaries[path] = binary;
22
- yield ROW_WEIGHT;
23
- }
5
+ const NOTHING_PRIOR = () => Promise.resolve(new Map());
6
+ function textOf(page) {
7
+ let text = 0;
8
+ for (const [, content] of entriesIn(page.documents))
9
+ text += content.length;
10
+ return text;
11
+ }
12
+ async function pageOf(page) {
24
13
  return {
25
- documents: page.documents,
26
- revisions: page.revisions,
27
- fileIds: page.fileIds ?? {},
28
- changes: page.changes,
29
- written,
30
- binaries,
14
+ entries: await pageEntries(page, [], page.roomVersion, NOTHING_PRIOR),
15
+ folders: page.folders ?? [],
31
16
  };
32
17
  }
33
- const LAYER = ['documents', 'revisions', 'fileIds', 'changes', 'written', 'binaries'];
34
- function* gathering(into, layer) {
35
- if (layer === undefined)
36
- return;
37
- for (const name of LAYER) {
38
- for (const [path, value] of entriesIn(layer[name])) {
39
- into[name].set(path, value);
40
- yield ROW_WEIGHT;
41
- }
42
- }
43
- }
44
- function* heldContent(gathered) {
18
+ function heldTogether(first, second) {
19
+ if (first === null)
20
+ return second;
45
21
  return {
46
- documents: yield* patching({}, gathered.documents),
47
- revisions: yield* patching({}, gathered.revisions),
22
+ async files(after, limit) {
23
+ const [left, right] = await Promise.all([
24
+ first.files(after, limit),
25
+ second.files(after, limit),
26
+ ]);
27
+ const merged = new Map([...left, ...right].map((file) => [file.path, file]));
28
+ return [...merged.values()]
29
+ .sort((one, other) => (one.path < other.path ? -1 : one.path > other.path ? 1 : 0))
30
+ .slice(0, limit);
31
+ },
32
+ async contents(paths) {
33
+ const [left, right] = await Promise.all([first.contents(paths), second.contents(paths)]);
34
+ return new Map([...left, ...right]);
35
+ },
48
36
  };
49
37
  }
50
- async function heldTransfer(staging, room) {
51
- const record = staging.held(room.locator);
52
- if (record === null)
53
- return null;
54
- if (record.selection === room.replica.selection) {
55
- return { record, layer: await staging.staged(record) };
38
+ const NO_CONTENT = {
39
+ files: () => Promise.resolve([]),
40
+ contents: () => Promise.resolve(new Map()),
41
+ };
42
+ export async function bootstrapRoom(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, reuse) {
43
+ if (staging.held(room.locator) !== null)
44
+ await staging.abandon(room.locator);
45
+ const begun = (pool) => started(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, pool);
46
+ const first = await begun(reuse);
47
+ if (first.kind !== 'expired')
48
+ return first;
49
+ await staging.setAside(room.locator);
50
+ try {
51
+ const replacement = await begun(heldTogether(reuse, first.held));
52
+ if (replacement.kind !== 'expired')
53
+ return replacement;
54
+ await staging.abandon(room.locator);
55
+ return unconfirmed;
56
56
  }
57
- await staging.abandon(room.locator);
58
- return null;
57
+ finally {
58
+ if (first.key !== null)
59
+ await staging.release(first.key);
60
+ }
61
+ }
62
+ function dropped(ahead) {
63
+ void ahead?.fetched.then(({ next, written }) => {
64
+ written();
65
+ dropped(next);
66
+ }, () => { });
59
67
  }
60
- function* pooling(pool, layer) {
61
- if (pool === null)
62
- return layer;
68
+ function compositionFor(room, models, builtIn, typedPaths) {
63
69
  return {
64
- documents: yield* patching(pool.documents, entriesIn(layer.documents)),
65
- revisions: yield* patching(pool.revisions, entriesIn(layer.revisions)),
70
+ model: models.collection,
71
+ selection: room.typedSelection === undefined
72
+ ? null
73
+ : { roots: room.typedSelection.roots, model: builtIn },
74
+ typedPaths,
66
75
  };
67
76
  }
68
- export async function bootstrapRoom(adapter, authorization, room, held, remodel, continuing, staging, reuse) {
69
- const first = await bundle(adapter, authorization, room, held, remodel, continuing, staging, await heldTransfer(staging, room), reuse);
70
- if (first.kind !== 'expired')
71
- return first;
72
- await staging.abandon(room.locator);
73
- const pool = await stepped(pooling(reuse, first.held));
74
- const replacement = await bundle(adapter, authorization, room, held, remodel, continuing, staging, null, pool);
75
- if (replacement.kind !== 'expired')
76
- return replacement;
77
- await staging.abandon(room.locator);
78
- return unconfirmed;
77
+ async function started(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, pool) {
78
+ let outcome;
79
+ try {
80
+ outcome = await bundle(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, pool);
81
+ }
82
+ catch (error) {
83
+ await staging.abandon(room.locator).catch(() => { });
84
+ throw error;
85
+ }
86
+ if (outcome.kind !== 'staged' && outcome.kind !== 'expired') {
87
+ await staging.abandon(room.locator);
88
+ }
89
+ return outcome;
79
90
  }
80
- async function bundle(adapter, authorization, room, held, remodel, continuing, staging, kept, pool) {
91
+ async function bundle(adapter, authorization, room, held, builtIn, typedPaths, remodel, continuing, staging, pool) {
81
92
  const locator = room.locator;
82
93
  const selection = room.replica.selection;
83
- const gathered = {
84
- documents: new Map(),
85
- revisions: new Map(),
86
- fileIds: new Map(),
87
- changes: new Map(),
88
- written: new Map(),
89
- binaries: new Map(),
94
+ const ending = new AbortController();
95
+ const arriving = staging.arriving(locator);
96
+ const downloaded = await staging.turn(locator, 'downloading');
97
+ const asking = (token) => adapter.bootstrap(authorization, {
98
+ locator,
99
+ selection,
100
+ signal: ending.signal,
101
+ ...(token === null
102
+ ? { arriving: (bytes) => arriving.at(bytes) }
103
+ : { pageToken: token }),
104
+ ...(pool === null ? {} : { held: pool }),
105
+ });
106
+ const fetching = (token) => {
107
+ const fetched = (async () => {
108
+ await staging.unqueued();
109
+ const page = continuing() ? await asking(token) : unconfirmed;
110
+ if (page.kind !== 'bootstrap')
111
+ return { page, next: null, written: () => { } };
112
+ const written = staging.queued(textOf(page));
113
+ const later = page.pageToken;
114
+ if (later === undefined) {
115
+ downloaded();
116
+ arriving.end();
117
+ }
118
+ return { page, written, next: later === undefined || !continuing() ? null : fetching(later) };
119
+ })();
120
+ fetched.catch(() => { });
121
+ return { fetched };
90
122
  };
91
- await stepped(gathering(gathered, kept?.layer));
92
- let transfer = kept?.record ?? null;
93
- while (transfer === null || transfer.pageToken !== null) {
94
- if (!continuing())
95
- return unconfirmed;
96
- const page = await adapter.bootstrap(authorization, {
97
- locator,
98
- selection,
99
- ...(transfer?.pageToken == null ? {} : { pageToken: transfer.pageToken }),
100
- ...(pool === null ? {} : { held: pool }),
101
- });
102
- if (page.kind === 'beyond-horizon') {
103
- return { kind: 'expired', held: await stepped(heldContent(gathered)) };
104
- }
105
- if (page.kind !== 'bootstrap') {
106
- if (!RESUMABLE.has(page.kind))
107
- await staging.abandon(locator);
108
- return page;
123
+ let transfer = null;
124
+ let ahead = fetching(null);
125
+ try {
126
+ while (ahead !== null) {
127
+ if (!continuing())
128
+ return unconfirmed;
129
+ const fetched = await ahead.fetched;
130
+ ahead = fetched.next;
131
+ try {
132
+ if (!continuing())
133
+ return unconfirmed;
134
+ const page = fetched.page;
135
+ if (page.kind === 'beyond-horizon') {
136
+ const key = transfer?.key ?? null;
137
+ return { kind: 'expired', held: key === null ? NO_CONTENT : staging.content(key), key };
138
+ }
139
+ if (page.kind !== 'bootstrap')
140
+ return page;
141
+ const models = remodel(page.models, transfer?.models ?? held);
142
+ const staged = await staging.stage({
143
+ locator,
144
+ transfer: transfer?.transfer ?? transferIdentity(),
145
+ selection,
146
+ from: transfer !== null && adapter.reached(locator, page.roomVersion, transfer.from)
147
+ ? transfer.from
148
+ : page.roomVersion,
149
+ last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
150
+ ? transfer.last
151
+ : page.roomVersion,
152
+ done: { bytes: (transfer?.done.bytes ?? 0) + (page.bytes ?? 0) },
153
+ models,
154
+ key: transfer?.key ?? null,
155
+ }, await pageOf(page), compositionFor(room, models, builtIn, typedPaths));
156
+ if (staged === null)
157
+ return unconfirmed;
158
+ transfer = staged;
159
+ }
160
+ finally {
161
+ fetched.written();
162
+ }
109
163
  }
110
- transfer = {
111
- locator,
112
- transfer: transfer?.transfer ?? transferIdentity(),
113
- selection,
114
- from: transfer !== null && adapter.reached(locator, page.roomVersion, transfer.from)
115
- ? transfer.from
116
- : page.roomVersion,
117
- last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
118
- ? transfer.last
119
- : page.roomVersion,
120
- pageToken: page.pageToken ?? null,
121
- models: remodel(page.models, transfer?.models ?? held),
122
- };
123
- const staged = await stepped(pageLayer(page));
124
- if (!(await staging.stage(transfer, staged)))
125
- return unconfirmed;
126
- await stepped(gathering(gathered, staged));
127
164
  }
165
+ finally {
166
+ ending.abort();
167
+ downloaded();
168
+ arriving.end();
169
+ dropped(ahead);
170
+ }
171
+ if (transfer === null)
172
+ return unconfirmed;
173
+ const installed = transfer;
174
+ const composition = compositionFor(room, installed.models, builtIn, typedPaths);
175
+ if (!(await staging.derive(locator, installed.key, composition)))
176
+ return unconfirmed;
177
+ await staging.turn(locator, 'replaying');
178
+ if (!continuing())
179
+ return unconfirmed;
128
180
  const record = {
129
181
  locator,
130
182
  name: room.name,
131
183
  handle: room.handle,
132
184
  operations: room.operations,
133
185
  replica: room.replica,
134
- model: transfer.models.collection,
186
+ model: installed.models.collection,
135
187
  typedSelection: room.typedSelection ?? null,
136
- selectionModel: transfer.models.selection,
137
188
  providerOwnedPaths: room.providerOwnedPaths,
138
- roomVersion: transfer.from,
139
- transfer: transfer.transfer,
140
- documents: await stepped(patching({}, gathered.documents)),
141
- binaries: await stepped(patching({}, gathered.binaries)),
142
- revisions: await stepped(patching({}, gathered.revisions)),
143
- fileIds: await stepped(patching({}, gathered.fileIds)),
144
- changes: await stepped(patching({}, gathered.changes)),
145
- written: await stepped(patching({}, gathered.written)),
189
+ roomVersion: installed.from,
190
+ transfer: installed.transfer,
191
+ inventory: installed.done,
192
+ key: installed.key,
146
193
  };
147
- const reconciled = transfer.last === transfer.from
194
+ const last = installed.last;
195
+ const refresh = adapter.refresh;
196
+ const reconciled = last === installed.from &&
197
+ (staging.streamed || adapter.reached(locator, last, room.roomVersion))
148
198
  ? { kind: 'still-current' }
149
- : await advancement(adapter, authorization, record, remodel, continuing);
150
- if (reconciled.kind === 'advanced' || reconciled.kind === 'still-current') {
151
- const read = await readStaged(reconciled.kind === 'advanced' ? reconciled.record : record);
152
- if (read.kind === 'refused') {
153
- await staging.abandon(locator);
154
- return read;
155
- }
156
- return { kind: 'staged', confirmed: read.confirmed, stored: record };
199
+ : refresh === undefined
200
+ ? unconfirmed
201
+ : await advancement(refresh, authorization, record, remodel, continuing, await staging.refreshing(locator, record.key, composition));
202
+ if (reconciled.kind === 'advanced') {
203
+ return { kind: 'staged', record: reconciled.record, refreshed: true };
157
204
  }
205
+ if (reconciled.kind === 'still-current')
206
+ return { kind: 'staged', record, refreshed: false };
158
207
  if (reconciled.kind === 'beyond-horizon') {
159
- return { kind: 'expired', held: { documents: record.documents, revisions: record.revisions } };
208
+ return { kind: 'expired', held: staging.content(record.key), key: record.key };
160
209
  }
161
- if (!RESUMABLE.has(reconciled.kind))
162
- await staging.abandon(locator);
163
210
  return reconciled;
164
211
  }
@@ -0,0 +1,12 @@
1
+ import type { DocumentQuery, GroupQuery } from '@agentshouse/mdmodel';
2
+ import type { MdRuntimeClient } from './client.js';
3
+ import type { DocumentResult, GroupResult, PendingResult } from './query.js';
4
+ type Rows = DocumentResult | GroupResult;
5
+ export type WindowAnswer = Rows | PendingResult;
6
+ export type WindowChain = {
7
+ want(count: number): void;
8
+ close(): void;
9
+ };
10
+ export declare function chainedWindows(runtime: MdRuntimeClient, query: DocumentQuery | GroupQuery, count: number, publish: (answers: readonly (WindowAnswer | null)[], settled: boolean) => void): WindowChain;
11
+ export {};
12
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E,KAAK,IAAI,GAAG,cAAc,GAAG,WAAW,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,aAAa,CAAC;AAEhD,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAaF,wBAAgB,cAAc,CAC5B,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,aAAa,GAAG,UAAU,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7E,WAAW,CAkEb"}
package/dist/chain.js ADDED
@@ -0,0 +1,64 @@
1
+ function answered(answer) {
2
+ return answer !== null && !('pending' in answer);
3
+ }
4
+ export function chainedWindows(runtime, query, count, publish) {
5
+ let links = [];
6
+ let wanted = count;
7
+ let closed = false;
8
+ const observe = runtime.observe;
9
+ const open = (after, shown) => {
10
+ const link = { after, observation: null, value: shown, fresh: false };
11
+ void observe('query', after === undefined ? query : { ...query, after }).then((observation) => {
12
+ if (closed || !links.includes(link)) {
13
+ observation.close();
14
+ return;
15
+ }
16
+ link.observation = observation;
17
+ const take = (value) => {
18
+ link.value = value;
19
+ link.fresh = true;
20
+ settle();
21
+ };
22
+ observation.subscribe(take);
23
+ take(observation.current());
24
+ }, () => { });
25
+ return link;
26
+ };
27
+ const settle = () => {
28
+ if (closed)
29
+ return;
30
+ const next = [];
31
+ for (let at = 0; at < wanted; at += 1) {
32
+ const before = next[at - 1];
33
+ if (before !== undefined && !before.fresh) {
34
+ next.push(...links.slice(at, wanted));
35
+ break;
36
+ }
37
+ if (before !== undefined && (!answered(before.value) || before.value.next === undefined)) {
38
+ break;
39
+ }
40
+ const after = before === undefined ? undefined : before.value.next;
41
+ const held = links[at];
42
+ next.push(held !== undefined && held.after === after ? held : open(after, held?.value ?? null));
43
+ }
44
+ for (const link of links)
45
+ if (!next.includes(link))
46
+ link.observation?.close();
47
+ links = next;
48
+ publish(links.map((link) => link.value), links.every((link) => link.fresh));
49
+ };
50
+ settle();
51
+ return {
52
+ want(count) {
53
+ if (count === wanted)
54
+ return;
55
+ wanted = count;
56
+ settle();
57
+ },
58
+ close() {
59
+ closed = true;
60
+ for (const link of links)
61
+ link.observation?.close();
62
+ },
63
+ };
64
+ }
@@ -1,15 +1,6 @@
1
- import { type Replica } from './replica.js';
2
- import { type Row } from './rows.js';
3
1
  export type DocumentChange = {
4
- locator: string;
5
- path: string;
6
- before: readonly Row[];
7
- after: readonly Row[];
8
- };
9
- export type MessageChange = {
10
- conversation: string;
11
- identity: string;
12
- text: string | null;
2
+ readonly locator: string;
3
+ readonly path: string | null;
13
4
  };
14
5
  export type ChangeSet = {
15
6
  documents: readonly DocumentChange[];
@@ -20,19 +11,18 @@ export type ChangeSet = {
20
11
  rooms: readonly string[];
21
12
  queues: readonly string[];
22
13
  presentations: readonly string[];
23
- messages: readonly MessageChange[];
24
14
  conversations: readonly string[];
25
15
  };
26
16
  type Changed = {
17
+ documents?: readonly string[] | null;
27
18
  drafts?: readonly string[];
28
19
  room?: boolean;
29
20
  queue?: boolean;
30
21
  presentation?: string;
31
22
  };
32
- export declare function changeSet(locator: string, before: Replica | null, after: Replica | null, changed?: Changed): ChangeSet;
33
- export declare function changing(locator: string, before: Replica | null, after: Replica | null, changed?: Changed): Generator<number, ChangeSet, void>;
34
- export declare function entering(locator: string, replica: Replica, paths: readonly string[]): ChangeSet;
35
- export declare function conversationChangeSet(messages: readonly MessageChange[], conversations: readonly string[]): ChangeSet;
23
+ export declare function changeSet(locator: string, changed?: Changed): ChangeSet;
24
+ export declare function conversationChangeSet(conversations: readonly string[]): ChangeSet;
36
25
  export declare function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet;
26
+ export declare function touches(set: ChangeSet, locator: string, path: string): boolean;
37
27
  export {};
38
28
  //# sourceMappingURL=change-set.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAI3D,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE5F,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAwBF,KAAK,OAAO,GAAG;IACb,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,OAAO,GAAE,OAAY,GACpB,SAAS,CAEX;AAED,wBAAiB,QAAQ,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,OAAO,GAAE,OAAY,GACpB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CA+DpC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAiB/F;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,CAUX;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAUrE"}
1
+ {"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAExF,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,OAAY,GAAG,SAAS,CAe3E;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CASjF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CASrE;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAI9E"}