@agentshouse/mdruntime 0.1.0-c967d1ca66fee → 0.1.0-c97456d63baba

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 (183) hide show
  1. package/AGENTS.md +257 -227
  2. package/README.md +11 -1
  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 +69 -20
  7. package/dist/adapter.d.ts.map +1 -1
  8. package/dist/attempt.d.ts +16 -0
  9. package/dist/attempt.d.ts.map +1 -0
  10. package/dist/attempt.js +70 -0
  11. package/dist/binary.d.ts +23 -0
  12. package/dist/binary.d.ts.map +1 -0
  13. package/dist/binary.js +8 -0
  14. package/dist/bootstrap.d.ts +2 -2
  15. package/dist/bootstrap.d.ts.map +1 -1
  16. package/dist/bootstrap.js +33 -14
  17. package/dist/change-set.d.ts +2 -0
  18. package/dist/change-set.d.ts.map +1 -1
  19. package/dist/change-set.js +39 -13
  20. package/dist/change.d.ts +11 -0
  21. package/dist/change.d.ts.map +1 -1
  22. package/dist/change.js +26 -1
  23. package/dist/chat/acts.d.ts +33 -0
  24. package/dist/chat/acts.d.ts.map +1 -0
  25. package/dist/chat/acts.js +36 -0
  26. package/dist/chat/context.d.ts +3 -0
  27. package/dist/chat/context.d.ts.map +1 -0
  28. package/dist/chat/context.js +10 -0
  29. package/dist/chat/input.d.ts +9 -0
  30. package/dist/chat/input.d.ts.map +1 -0
  31. package/dist/chat/input.js +99 -0
  32. package/dist/chat/kit.d.ts +61 -0
  33. package/dist/chat/kit.d.ts.map +1 -0
  34. package/dist/chat/kit.js +123 -0
  35. package/dist/chat/lasting.d.ts +6 -0
  36. package/dist/chat/lasting.d.ts.map +1 -0
  37. package/dist/chat/lasting.js +19 -0
  38. package/dist/chat/list.d.ts +27 -0
  39. package/dist/chat/list.d.ts.map +1 -0
  40. package/dist/chat/list.js +63 -0
  41. package/dist/chat/markdown.d.ts +20 -0
  42. package/dist/chat/markdown.d.ts.map +1 -0
  43. package/dist/chat/markdown.js +188 -0
  44. package/dist/chat/message.d.ts +6 -0
  45. package/dist/chat/message.d.ts.map +1 -0
  46. package/dist/chat/message.js +192 -0
  47. package/dist/chat/messages.d.ts +22 -0
  48. package/dist/chat/messages.d.ts.map +1 -0
  49. package/dist/chat/messages.js +155 -0
  50. package/dist/chat/name.d.ts +6 -0
  51. package/dist/chat/name.d.ts.map +1 -0
  52. package/dist/chat/name.js +37 -0
  53. package/dist/chat/opened.d.ts +11 -0
  54. package/dist/chat/opened.d.ts.map +1 -0
  55. package/dist/chat/opened.js +17 -0
  56. package/dist/chat/overlay.d.ts +31 -0
  57. package/dist/chat/overlay.d.ts.map +1 -0
  58. package/dist/chat/overlay.js +97 -0
  59. package/dist/chat/parts.d.ts +57 -0
  60. package/dist/chat/parts.d.ts.map +1 -0
  61. package/dist/chat/parts.js +119 -0
  62. package/dist/chat/process.d.ts +20 -0
  63. package/dist/chat/process.d.ts.map +1 -0
  64. package/dist/chat/process.js +32 -0
  65. package/dist/chat/provider.d.ts +63 -0
  66. package/dist/chat/provider.d.ts.map +1 -0
  67. package/dist/chat/provider.js +629 -0
  68. package/dist/chat/question.d.ts +9 -0
  69. package/dist/chat/question.d.ts.map +1 -0
  70. package/dist/chat/question.js +80 -0
  71. package/dist/chat/questions.d.ts +31 -0
  72. package/dist/chat/questions.d.ts.map +1 -0
  73. package/dist/chat/questions.js +111 -0
  74. package/dist/chat/read.d.ts +5 -0
  75. package/dist/chat/read.d.ts.map +1 -0
  76. package/dist/chat/read.js +13 -0
  77. package/dist/chat/ready.d.ts +34 -0
  78. package/dist/chat/ready.d.ts.map +1 -0
  79. package/dist/chat/ready.js +91 -0
  80. package/dist/chat/style.d.ts +4 -0
  81. package/dist/chat/style.d.ts.map +1 -0
  82. package/dist/chat/style.js +302 -0
  83. package/dist/chat.d.ts +14 -0
  84. package/dist/chat.d.ts.map +1 -0
  85. package/dist/chat.js +8 -0
  86. package/dist/client.d.ts +21 -10
  87. package/dist/client.d.ts.map +1 -1
  88. package/dist/client.js +14 -2
  89. package/dist/collection.d.ts +17 -3
  90. package/dist/collection.d.ts.map +1 -1
  91. package/dist/collection.js +230 -19
  92. package/dist/connection.d.ts +32 -12
  93. package/dist/connection.d.ts.map +1 -1
  94. package/dist/connection.js +1482 -351
  95. package/dist/conversation.d.ts +23 -9
  96. package/dist/conversation.d.ts.map +1 -1
  97. package/dist/conversation.js +372 -142
  98. package/dist/durability.d.ts +7 -1
  99. package/dist/durability.d.ts.map +1 -1
  100. package/dist/entry.d.ts +17 -0
  101. package/dist/entry.d.ts.map +1 -0
  102. package/dist/entry.js +156 -0
  103. package/dist/expectation.d.ts +21 -0
  104. package/dist/expectation.d.ts.map +1 -0
  105. package/dist/expectation.js +70 -0
  106. package/dist/fence.d.ts +6 -0
  107. package/dist/fence.d.ts.map +1 -0
  108. package/dist/fence.js +10 -0
  109. package/dist/host.d.ts +13 -3
  110. package/dist/host.d.ts.map +1 -1
  111. package/dist/host.js +48 -11
  112. package/dist/identity.d.ts +4 -0
  113. package/dist/identity.d.ts.map +1 -1
  114. package/dist/identity.js +12 -0
  115. package/dist/index.d.ts +13 -7
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +4 -0
  118. package/dist/memory.d.ts +5 -3
  119. package/dist/memory.d.ts.map +1 -1
  120. package/dist/memory.js +47 -13
  121. package/dist/model.d.ts +4 -2
  122. package/dist/model.d.ts.map +1 -1
  123. package/dist/model.js +10 -1
  124. package/dist/observation.d.ts +5 -2
  125. package/dist/observation.d.ts.map +1 -1
  126. package/dist/observation.js +22 -11
  127. package/dist/outcome.d.ts +11 -1
  128. package/dist/outcome.d.ts.map +1 -1
  129. package/dist/outcome.js +7 -0
  130. package/dist/overlay.d.ts +14 -2
  131. package/dist/overlay.d.ts.map +1 -1
  132. package/dist/overlay.js +75 -62
  133. package/dist/query.d.ts +31 -3
  134. package/dist/query.d.ts.map +1 -1
  135. package/dist/reach.d.ts +8 -2
  136. package/dist/reach.d.ts.map +1 -1
  137. package/dist/reach.js +42 -8
  138. package/dist/react.d.ts +7 -4
  139. package/dist/react.d.ts.map +1 -1
  140. package/dist/read-side.d.ts +13 -6
  141. package/dist/read-side.d.ts.map +1 -1
  142. package/dist/read-side.js +291 -85
  143. package/dist/readiness.d.ts +53 -0
  144. package/dist/readiness.d.ts.map +1 -0
  145. package/dist/readiness.js +33 -0
  146. package/dist/recovery.d.ts +25 -0
  147. package/dist/recovery.d.ts.map +1 -0
  148. package/dist/recovery.js +197 -0
  149. package/dist/refresh.d.ts.map +1 -1
  150. package/dist/refresh.js +21 -25
  151. package/dist/replica.d.ts +6 -3
  152. package/dist/replica.d.ts.map +1 -1
  153. package/dist/replica.js +78 -45
  154. package/dist/room-draft.d.ts +20 -3
  155. package/dist/room-draft.d.ts.map +1 -1
  156. package/dist/room-draft.js +119 -1
  157. package/dist/rows.d.ts +6 -13
  158. package/dist/rows.d.ts.map +1 -1
  159. package/dist/rows.js +5 -13
  160. package/dist/save.d.ts +28 -0
  161. package/dist/save.d.ts.map +1 -1
  162. package/dist/save.js +343 -29
  163. package/dist/search.d.ts +28 -6
  164. package/dist/search.d.ts.map +1 -1
  165. package/dist/search.js +108 -45
  166. package/dist/shared.d.ts +11 -0
  167. package/dist/shared.d.ts.map +1 -0
  168. package/dist/shared.js +368 -0
  169. package/dist/status.d.ts +4 -0
  170. package/dist/status.d.ts.map +1 -1
  171. package/dist/store.d.ts +55 -21
  172. package/dist/store.d.ts.map +1 -1
  173. package/dist/store.js +424 -206
  174. package/dist/turn.d.ts +7 -0
  175. package/dist/turn.d.ts.map +1 -0
  176. package/dist/turn.js +45 -0
  177. package/dist/wire.d.ts +137 -30
  178. package/dist/wire.d.ts.map +1 -1
  179. package/dist/wire.js +49 -29
  180. package/package.json +26 -14
  181. package/dist/attachment.d.ts +0 -3
  182. package/dist/attachment.d.ts.map +0 -1
  183. package/dist/attachment.js +0 -8
@@ -1,8 +1,14 @@
1
+ import type { Persistence } from './readiness.js';
2
+ export type StorageEstimate = {
3
+ readonly usage: number;
4
+ readonly quota: number;
5
+ };
1
6
  export type RuntimeShell = {
2
- persistentStorage: boolean;
7
+ persistence: Persistence;
3
8
  generation: string | null;
4
9
  keepGeneration(value: string): void | Promise<void>;
5
10
  dropGeneration(): void | Promise<void>;
11
+ estimate?(): Promise<StorageEstimate | null>;
6
12
  };
7
13
  export declare function detectStorageLoss(stored: string | null, reported: string | null): string | null;
8
14
  export declare function nextGeneration(stored: string | null, reported: string | null): string;
@@ -1 +1 @@
1
- {"version":3,"file":"durability.d.ts","sourceRoot":"","sources":["../src/durability.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,YAAY,GAAG;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG/F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGrF"}
1
+ {"version":3,"file":"durability.d.ts","sourceRoot":"","sources":["../src/durability.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAIlD,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjF,MAAM,MAAM,YAAY,GAAG;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,cAAc,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,QAAQ,CAAC,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CAC9C,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG/F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGrF"}
@@ -0,0 +1,17 @@
1
+ import { type QueryRows } from './query.js';
2
+ export { QueryError } from './query.js';
3
+ export type EntryRoom = {
4
+ locator: string;
5
+ schema: string | null;
6
+ documents: Readonly<Record<string, string>>;
7
+ };
8
+ export type EntryArguments = Readonly<Record<string, string>>;
9
+ export type EntryParameterKind = 'string' | 'integer' | 'number' | 'boolean';
10
+ export declare function boundQuery(template: unknown, args: EntryArguments): unknown;
11
+ export declare function entryParameters(template: unknown): readonly string[];
12
+ export declare function entryRefusal(template: unknown): string | null;
13
+ export type EntryScope = {
14
+ results(queries: Readonly<Record<string, unknown>>): Promise<Record<string, QueryRows>>;
15
+ };
16
+ export declare function entryScope(rooms: readonly EntryRoom[]): EntryScope;
17
+ //# sourceMappingURL=entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry.d.ts","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,SAAS,EAEf,MAAM,YAAY,CAAC;AAIpB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AA0D7E,wBAAgB,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAE3E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAMpE;AAkCD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ7D;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACzF,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,UAAU,CAqDlE"}
package/dist/entry.js ADDED
@@ -0,0 +1,156 @@
1
+ import { attachedModel } from './attached-model.js';
2
+ import { collectionOf, passingFrontmatter } from './collection.js';
3
+ import { NO_MODEL } from './model.js';
4
+ import { invalid, planOf, plain, QueryError, } from './query.js';
5
+ import { createReadSide } from './read-side.js';
6
+ import { rowsOf } from './rows.js';
7
+ export { QueryError } from './query.js';
8
+ const PARAMETER = '$param';
9
+ const KIND = 'as';
10
+ const INTEGER = /^-?(?:0|[1-9][0-9]*)$/u;
11
+ const NUMBER = /^-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/u;
12
+ function parameterOf(value) {
13
+ if (!plain(value) || !Object.hasOwn(value, PARAMETER))
14
+ return null;
15
+ const { [PARAMETER]: name, [KIND]: kind = 'string', ...rest } = value;
16
+ if (typeof name !== 'string' || Object.keys(rest).length > 0)
17
+ return null;
18
+ if (kind !== 'string' && kind !== 'integer' && kind !== 'number' && kind !== 'boolean') {
19
+ return null;
20
+ }
21
+ return { name, kind };
22
+ }
23
+ function converted(text, kind, at) {
24
+ if (kind === 'string')
25
+ return text;
26
+ if (kind === 'boolean') {
27
+ if (text === 'true' || text === 'false')
28
+ return text === 'true';
29
+ return invalid(at, 'expects true or false');
30
+ }
31
+ if (!(kind === 'integer' ? INTEGER : NUMBER).test(text))
32
+ invalid(at, `expects ${kind === 'integer' ? 'an integer' : 'a number'}`);
33
+ const number = Number(text);
34
+ if (!Number.isFinite(number) || (kind === 'integer' && !Number.isSafeInteger(number))) {
35
+ invalid(at, 'is out of range');
36
+ }
37
+ return number;
38
+ }
39
+ function bound(template, args, at) {
40
+ const parameter = parameterOf(template);
41
+ if (parameter !== null) {
42
+ const text = args[parameter.name];
43
+ if (text === undefined || !Object.hasOwn(args, parameter.name)) {
44
+ invalid(at, `names the parameter ${parameter.name}, which the route lacks`);
45
+ }
46
+ return converted(text, parameter.kind, at);
47
+ }
48
+ if (Array.isArray(template)) {
49
+ return template.map((item, index) => bound(item, args, `${at}[${index}]`));
50
+ }
51
+ if (plain(template)) {
52
+ return Object.fromEntries(Object.entries(template).map(([name, value]) => [
53
+ name,
54
+ bound(value, args, at === '' ? name : `${at}.${name}`),
55
+ ]));
56
+ }
57
+ return template;
58
+ }
59
+ export function boundQuery(template, args) {
60
+ return bound(template, args, '');
61
+ }
62
+ export function entryParameters(template) {
63
+ const parameter = parameterOf(template);
64
+ if (parameter !== null)
65
+ return [parameter.name];
66
+ if (Array.isArray(template))
67
+ return [...new Set(template.flatMap(entryParameters))];
68
+ if (plain(template))
69
+ return [...new Set(Object.values(template).flatMap(entryParameters))];
70
+ return [];
71
+ }
72
+ const SAMPLED = {
73
+ direction: 'asc',
74
+ nulls: 'last',
75
+ stringSort: 'lexical',
76
+ locale: 'en',
77
+ limit: 0,
78
+ pathPrefix: 'entry',
79
+ field: '/entry',
80
+ fields: '/entry',
81
+ types: 'any',
82
+ $in: 'entry',
83
+ $nin: 'entry',
84
+ $all: 'entry',
85
+ $size: 0,
86
+ $exists: true,
87
+ $gt: 0,
88
+ $gte: 0,
89
+ $lt: 0,
90
+ $lte: 0,
91
+ };
92
+ function sampled(template, key) {
93
+ if (parameterOf(template) !== null)
94
+ return Object.hasOwn(SAMPLED, key) ? SAMPLED[key] : null;
95
+ if (Array.isArray(template))
96
+ return template.map((item) => sampled(item, key));
97
+ if (plain(template)) {
98
+ return Object.fromEntries(Object.entries(template).map(([name, value]) => [name, sampled(value, name)]));
99
+ }
100
+ return template;
101
+ }
102
+ export function entryRefusal(template) {
103
+ try {
104
+ planOf(sampled(template, ''), { listed: false, rooms: [] });
105
+ return null;
106
+ }
107
+ catch (error) {
108
+ if (error instanceof QueryError)
109
+ return error.message;
110
+ throw error;
111
+ }
112
+ }
113
+ export function entryScope(rooms) {
114
+ const readSide = createReadSide();
115
+ const held = [];
116
+ const documents = rooms.flatMap((room) => {
117
+ const model = attachedModel({
118
+ kind: 'model',
119
+ snapshot: { identity: room.locator, version: '', schema: room.schema, revision: null },
120
+ }, NO_MODEL).state;
121
+ held.push({
122
+ locator: room.locator,
123
+ available: model.status !== 'unavailable',
124
+ types: model.status === 'unavailable' ? [] : Object.values(model.types),
125
+ });
126
+ const composition = { model, selection: null };
127
+ const collection = collectionOf(room.documents, composition);
128
+ return Object.keys(room.documents)
129
+ .sort()
130
+ .map((path) => ({
131
+ locator: room.locator,
132
+ path,
133
+ before: [],
134
+ after: rowsOf(room.locator, path, passingFrontmatter(collection, path) ?? null, composition, null, null),
135
+ }));
136
+ });
137
+ readSide.apply({
138
+ documents,
139
+ drafts: [],
140
+ rooms: [],
141
+ queues: [],
142
+ presentations: [],
143
+ messages: [],
144
+ conversations: [],
145
+ });
146
+ const planned = { listed: true, rooms: held };
147
+ return {
148
+ async results(queries) {
149
+ const results = {};
150
+ for (const [name, query] of Object.entries(queries)) {
151
+ results[name] = (await readSide.query(planOf(query, planned), () => null)).rows;
152
+ }
153
+ return results;
154
+ },
155
+ };
156
+ }
@@ -0,0 +1,21 @@
1
+ export type ExpectedOf<E extends {
2
+ readonly key: string;
3
+ }> = E | readonly E[] | null;
4
+ export type Expecting<E extends {
5
+ readonly key: string;
6
+ }> = {
7
+ subscribe(listener: () => void): () => void;
8
+ version(): number;
9
+ begin(): number;
10
+ expect(act: number, expected: ExpectedOf<E>, settled?: (one: E) => boolean): void;
11
+ drop(act: number): void;
12
+ heard(shown: (one: E) => boolean): void;
13
+ drawn(): readonly E[];
14
+ };
15
+ export declare function expectedList<E extends {
16
+ readonly key: string;
17
+ }>(expected: ExpectedOf<E>): readonly E[];
18
+ export declare function expecting<E extends {
19
+ readonly key: string;
20
+ }>(): Expecting<E>;
21
+ //# sourceMappingURL=expectation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expectation.d.ts","sourceRoot":"","sources":["../src/expectation.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC;AAErF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,IAAI;IAC1D,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,OAAO,IAAI,MAAM,CAAC;IAClB,KAAK,IAAI,MAAM,CAAC;IAChB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IAClF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;IACxC,KAAK,IAAI,SAAS,CAAC,EAAE,CAAC;CACvB,CAAC;AAIF,wBAAgB,YAAY,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAC7D,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,GACtB,SAAS,CAAC,EAAE,CAGd;AAwBD,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CA4C5E"}
@@ -0,0 +1,70 @@
1
+ export function expectedList(expected) {
2
+ if (expected === null)
3
+ return [];
4
+ return 'key' in expected ? [expected] : expected;
5
+ }
6
+ function superseded(entries, at) {
7
+ const key = entries[at]?.expectation.key;
8
+ return entries.slice(at + 1).some((later) => later.expectation.key === key);
9
+ }
10
+ function unended(entries, ends) {
11
+ const ended = new Set();
12
+ const kept = [];
13
+ for (const one of [...entries].reverse()) {
14
+ if (ended.has(one.expectation.key))
15
+ continue;
16
+ if (ends(one.expectation))
17
+ ended.add(one.expectation.key);
18
+ else
19
+ kept.unshift(one);
20
+ }
21
+ return kept;
22
+ }
23
+ export function expecting() {
24
+ let entries = [];
25
+ let version = 0;
26
+ let acts = 0;
27
+ const listeners = new Set();
28
+ const set = (next) => {
29
+ if (next.length === entries.length && next.every((one, at) => one === entries[at]))
30
+ return;
31
+ entries = next;
32
+ version += 1;
33
+ for (const listener of listeners)
34
+ listener();
35
+ };
36
+ return {
37
+ subscribe(listener) {
38
+ listeners.add(listener);
39
+ return () => {
40
+ listeners.delete(listener);
41
+ };
42
+ },
43
+ version: () => version,
44
+ begin() {
45
+ acts += 1;
46
+ return acts;
47
+ },
48
+ expect(act, expected, settled = () => false) {
49
+ const fresh = expectedList(expected);
50
+ if (fresh.length === 0)
51
+ return;
52
+ const keys = new Set(fresh.map((one) => one.key));
53
+ const kept = entries.filter((one) => one.act !== act || !keys.has(one.expectation.key));
54
+ const over = new Set(kept.map((one) => one.expectation.key));
55
+ set([
56
+ ...kept,
57
+ ...fresh
58
+ .filter((one) => over.has(one.key) || !settled(one))
59
+ .map((expectation) => ({ act, expectation })),
60
+ ]);
61
+ },
62
+ drop(act) {
63
+ set(entries.filter((one) => one.act !== act));
64
+ },
65
+ heard(shown) {
66
+ set(unended(entries, shown));
67
+ },
68
+ drawn: () => entries.flatMap((one, at) => (superseded(entries, at) ? [] : [one.expectation])),
69
+ };
70
+ }
@@ -0,0 +1,6 @@
1
+ export declare class FencedMap<V> extends Map<string, V> {
2
+ #private;
3
+ constructor(fenced: (locator: string) => boolean);
4
+ set(locator: string, value: V): this;
5
+ }
6
+ //# sourceMappingURL=fence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fence.d.ts","sourceRoot":"","sources":["../src/fence.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;;IAG9C,YAAY,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAG/C;IAEQ,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAE5C;CACF"}
package/dist/fence.js ADDED
@@ -0,0 +1,10 @@
1
+ export class FencedMap extends Map {
2
+ #fenced;
3
+ constructor(fenced) {
4
+ super();
5
+ this.#fenced = fenced;
6
+ }
7
+ set(locator, value) {
8
+ return this.#fenced(locator) ? this : super.set(locator, value);
9
+ }
10
+ }
package/dist/host.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { type MdRuntimeOptions } from './connection.js';
2
+ import type { RuntimeDemand } from './acquisition.js';
2
3
  import type { PortReach } from './reach.js';
4
+ import type { CapacityCause, CodeAvailability, Persistence, Readiness } from './readiness.js';
3
5
  import { type RuntimePort } from './wire.js';
4
6
  export type MdRuntimeHostOptions = MdRuntimeOptions & {
5
7
  deploymentFacts?: unknown;
@@ -7,14 +9,22 @@ export type MdRuntimeHostOptions = MdRuntimeOptions & {
7
9
  export type AttachedPort = {
8
10
  detach(): void;
9
11
  narrow(reach: PortReach): void;
12
+ readiness(deliver: (readiness: Readiness) => void): () => void;
13
+ code(code: CodeAvailability, capacity: CapacityCause | null): void;
10
14
  };
11
15
  export type MdRuntimeHost = {
12
- attach(port: RuntimePort, app: string, release?: string, reach?: PortReach): AttachedPort;
13
- endAuthorization(): Promise<void>;
16
+ attach(port: RuntimePort, app: string, release?: string, reach?: PortReach, code?: CodeAvailability): AttachedPort;
17
+ acquire(demand: RuntimeDemand): void;
18
+ persisted(answer: Persistence): void;
19
+ endAuthorization(holder?: string): Promise<void>;
20
+ lose(locators: readonly string[]): Promise<void>;
14
21
  stop(): Promise<void>;
15
22
  };
16
23
  export declare function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost;
24
+ export type { RuntimeDemand } from './acquisition.js';
17
25
  export type { PortReach, ReachedDocument } from './reach.js';
18
- export { STORE_SCHEMA } from './store.js';
26
+ export type { CapacityCause, CodeAvailability, Persistence } from './readiness.js';
27
+ export { createRecovery, retryDelay, type Attempt, type Attempted, type AttemptOptions, type Recovery, type RecoveryOptions, } from './recovery.js';
28
+ export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, } from './store.js';
19
29
  export type { RuntimePort } from './wire.js';
20
30
  //# sourceMappingURL=host.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C,OAAO,EAGL,KAAK,WAAW,EAOjB,MAAM,WAAW,CAAC;AAInB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IAC1F,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AA0EF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAkH3E;AAED,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI9F,OAAO,EAGL,KAAK,WAAW,EAOjB,MAAM,WAAW,CAAC;AAInB,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,IAAI,IAAI,CAAC;IACf,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/D,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CACJ,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE,gBAAgB,GACtB,YAAY,CAAC;IAChB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB,CAAC;AA4FF,wBAAgB,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CA4I3E;AAED,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EACL,cAAc,EACd,UAAU,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
package/dist/host.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { composeRuntime, } from './connection.js';
2
2
  import { described } from './failure.js';
3
3
  import { removeRuntimeStore } from './store.js';
4
- import { AUTHORIZATION_ENDED, request, WIRE_REACH, } from './wire.js';
4
+ import { AUTHORIZATION_ENDED, request, WIRE, } from './wire.js';
5
5
  const NARROWED = new Set(['within', 'whole']);
6
6
  function answered(md, app, writtenBy, member, input) {
7
7
  switch (member) {
@@ -17,6 +17,10 @@ function answered(md, app, writtenBy, member, input) {
17
17
  return md.save(input[0], input[1], writtenBy);
18
18
  case 'history':
19
19
  return md.history(input[0], input[1], input[2]);
20
+ case 'binaryFile.read':
21
+ return md.binaryFile.read(input[0], input[1], input[2]);
22
+ case 'binaryFile.readReference':
23
+ return md.binaryFile.readReference(input[0]);
20
24
  case 'call':
21
25
  return md.call(input[0], input[1]);
22
26
  case 'reached':
@@ -25,6 +29,8 @@ function answered(md, app, writtenBy, member, input) {
25
29
  return md.log();
26
30
  case 'persistence':
27
31
  return md.persistence();
32
+ case 'retry':
33
+ return md.retry();
28
34
  case 'reauthorize':
29
35
  return md.reauthorize();
30
36
  case 'roomDraft.list':
@@ -46,7 +52,7 @@ function answered(md, app, writtenBy, member, input) {
46
52
  case 'conversation.create':
47
53
  return md.conversation.create(input[0]);
48
54
  case 'conversation.send':
49
- return md.conversation.send(input[0]);
55
+ return md.conversation.send(input[0], input[1], input[2]);
50
56
  case 'conversation.answer':
51
57
  return md.conversation.answer(input[0], input[1]);
52
58
  case 'conversation.interrupt':
@@ -58,7 +64,7 @@ function answered(md, app, writtenBy, member, input) {
58
64
  case 'conversation.delete':
59
65
  return md.conversation.delete(input[0]);
60
66
  case 'chatDraft.write':
61
- return md.chatDraft.write(input[0], input[1]);
67
+ return md.chatDraft.write(input[0], input[1], input[2]);
62
68
  case 'chatDraft.discard':
63
69
  return md.chatDraft.discard(input[0]);
64
70
  }
@@ -80,12 +86,13 @@ export function serveMdRuntime(options) {
80
86
  deliver(structuredClone(deploymentFacts));
81
87
  return () => { };
82
88
  };
83
- function attach(port, app, release, reach) {
89
+ function attach(port, app, release, reach, code = 'stored') {
84
90
  if (!authorized)
85
91
  throw new Error(AUTHORIZATION_ENDED);
86
92
  const writtenBy = release === undefined ? undefined : { app, release };
87
- const view = runtime.within(reach ?? null);
93
+ const view = runtime.within(reach ?? null, { target: app, code, capacity: null });
88
94
  const observations = new Map();
95
+ const followed = new Set();
89
96
  let serving = true;
90
97
  const send = (message) => {
91
98
  port.postMessage(message);
@@ -97,6 +104,8 @@ export function serveMdRuntime(options) {
97
104
  for (const end of observations.values())
98
105
  end();
99
106
  observations.clear();
107
+ for (const end of [...followed])
108
+ end();
100
109
  attachments.delete(detach);
101
110
  };
102
111
  const observe = (id, topic, input) => {
@@ -109,7 +118,7 @@ export function serveMdRuntime(options) {
109
118
  };
110
119
  observations.set(id, topic === 'deployment-facts'
111
120
  ? watchFacts(deliver)
112
- : (NARROWED.has(WIRE_REACH.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver));
121
+ : (NARROWED.has(WIRE.topics[topic]) ? view : runtime).watch(topic, topic === 'presentation' ? [app] : input, deliver));
113
122
  };
114
123
  const serve = async (message) => {
115
124
  if (message.kind === 'hello')
@@ -127,7 +136,7 @@ export function serveMdRuntime(options) {
127
136
  observe(message.id, message.topic, message.input);
128
137
  return;
129
138
  }
130
- const value = await answered(NARROWED.has(WIRE_REACH.members[message.member]) ? view.md : md, app, writtenBy, message.member, message.input);
139
+ const value = await answered(NARROWED.has(WIRE.members[message.member].reach) ? view.md : md, app, writtenBy, message.member, message.input);
131
140
  if (serving)
132
141
  send({ kind: 'result', id: message.id, value });
133
142
  }
@@ -153,23 +162,51 @@ export function serveMdRuntime(options) {
153
162
  if (serving)
154
163
  view.narrow(next);
155
164
  },
165
+ code(next, capacity) {
166
+ if (serving)
167
+ view.facts({ target: app, code: next, capacity });
168
+ },
169
+ readiness(deliver) {
170
+ if (!serving)
171
+ return () => { };
172
+ const stop = view.watch('readiness', [], (value) => {
173
+ if (serving)
174
+ deliver(value);
175
+ });
176
+ const end = () => {
177
+ followed.delete(end);
178
+ stop();
179
+ };
180
+ followed.add(end);
181
+ return end;
182
+ },
156
183
  };
157
184
  }
158
185
  return {
159
186
  attach,
160
- async endAuthorization() {
187
+ acquire(demand) {
188
+ runtime.acquire(demand);
189
+ },
190
+ persisted(answer) {
191
+ runtime.persisted(answer);
192
+ },
193
+ async endAuthorization(holder) {
161
194
  authorized = false;
162
195
  for (const [detach, send] of [...attachments]) {
163
196
  send({ kind: 'ended' });
164
197
  detach();
165
198
  }
166
199
  close();
167
- await removeRuntimeStore();
168
- await options.shell.dropGeneration();
200
+ if (!(await removeRuntimeStore(holder)))
201
+ await options.shell.dropGeneration();
202
+ },
203
+ lose(locators) {
204
+ return runtime.lose(locators);
169
205
  },
170
206
  stop() {
171
207
  return runtime.stop();
172
208
  },
173
209
  };
174
210
  }
175
- export { STORE_SCHEMA } from './store.js';
211
+ export { createRecovery, retryDelay, } from './recovery.js';
212
+ export { AUTHORED_SCHEMA, authoredBinding, authoredBy, authoredHolder, bindAuthored, openDatabase, STORE_SCHEMA, } from './store.js';
@@ -1,4 +1,8 @@
1
1
  export declare function changeBatchIdentity(at?: number): string;
2
+ export declare function identityTime(identity: string): number;
2
3
  export declare function roomDraftRevision(): string;
4
+ export declare function chatDraftRevision(): string;
3
5
  export declare function transferIdentity(): string;
6
+ export declare function indexGeneration(): string;
7
+ export declare function binaryLocalId(): string;
4
8
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAQD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAQD,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/identity.js CHANGED
@@ -10,6 +10,9 @@ export function changeBatchIdentity(at = Date.now()) {
10
10
  const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');
11
11
  return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
12
12
  }
13
+ export function identityTime(identity) {
14
+ return Number.parseInt(identity.replaceAll('-', '').slice(0, 12), 16);
15
+ }
13
16
  function randomIdentity() {
14
17
  const bytes = new Uint8Array(16);
15
18
  crypto.getRandomValues(bytes);
@@ -18,6 +21,15 @@ function randomIdentity() {
18
21
  export function roomDraftRevision() {
19
22
  return randomIdentity();
20
23
  }
24
+ export function chatDraftRevision() {
25
+ return randomIdentity();
26
+ }
21
27
  export function transferIdentity() {
22
28
  return randomIdentity();
23
29
  }
30
+ export function indexGeneration() {
31
+ return randomIdentity();
32
+ }
33
+ export function binaryLocalId() {
34
+ return randomIdentity();
35
+ }
package/dist/index.d.ts CHANGED
@@ -1,18 +1,24 @@
1
- export type { AcceptedMessage, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationAgents, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, HeldRoom, ListedConversation, MdModelIdentity, Member, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomAttachment, RoomModels, RoomNotReadable, RoomStream, RoomStreamEvent, RoomVersionAt, ServiceMode, ServiceModeSignal, TransportUncertainty, TurnContext, TurnOperation, TypedSelection, } from './adapter.js';
1
+ export type { AcquiredDemand, AcceptedMessage, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BinaryFile, BinaryRequest, BinaryResult, ReferrerScope, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationAgents, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, HeldContent, HeldRoom, KeptReceipt, ListedConversation, MdModelIdentity, Member, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomModels, RoomNotReadable, RoomStream, RoomStreamEvent, RoomVersionAt, ServiceMode, ServiceModeSignal, StreamReceipts, TransportUncertainty, TurnContext, TurnOperation, TypedSelection, } from './adapter.js';
2
2
  export type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';
3
- export type { ChatDraft, ChatDraftSurface, ConversationEntry, ConversationOptions, ConversationState, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
3
+ export type { ChatDraft, ChatDraftSurface, ConversationAgent, ConversationEntry, ConversationOptions, ConversationState, ConversationSurface, ConversationView, RunningTurn, } from './conversation.js';
4
4
  export type { ChatDraftFile, FileDeclaration } from './file.js';
5
- export type { AppRoom, AppTypedSelection, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedRoomDraft, SaveResult, } from './connection.js';
5
+ export type { AppRoom, AppTypedSelection, BinaryFileSurface, ConnectionRefusal, ConnectionRefusalCode, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomSchemas, SavedRoomDraft, SaveResult, } from './connection.js';
6
6
  export type { Observation } from './observation.js';
7
- export type { CallResult, Failure, HistoryAnswer, QueueEntry, Submission } from './outcome.js';
7
+ export type { BinaryAnswer, CallResult, Failure, HistoryAnswer, Offline, QueueEntry, Submission, } from './outcome.js';
8
+ export type { BinaryFileRecord, BinaryReference } from './binary.js';
8
9
  export type { RuntimeError } from './failure.js';
9
10
  export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, } from './room-draft.js';
10
11
  export type { SaveRefusal } from './save.js';
11
- export type { DocumentHit, DocumentPart, MessageHit, SearchRequest, SearchResult, } from './search.js';
12
+ export type { DocumentHit, DocumentPart, MessageHit, PendingConversation, SearchCoverage, SearchHits, SearchPending, SearchRequest, SearchResult, } from './search.js';
13
+ export { departure } from './change.js';
14
+ export { SESSION_STARTED } from './conversation.js';
12
15
  export { changeBatchIdentity } from './identity.js';
13
- export type { RuntimeShell } from './durability.js';
16
+ export { attempts, identities, intentOf, type Answered, type Attempt, type Attempts, type Identities, } from './attempt.js';
17
+ export { expectedList, expecting, type ExpectedOf, type Expecting } from './expectation.js';
18
+ export type { RuntimeShell, StorageEstimate } from './durability.js';
19
+ export type { CapacityCause, CodeAvailability, ConnectionAvailability, ConversationCoverage, Durability, HouseOutcome, Persistence, Readiness, ReadinessStatus, RefusedRoom, RoomCoverage, RoomPreparation, SearchObligation, TargetCoverage, } from './readiness.js';
14
20
  export type { AttentionEntry, SyncStatus } from './status.js';
15
- export type { Backlink, Direction, DocumentQuery, DocumentResult, Filter, GroupQuery, GroupResult, Key, LocalQuery, OrderOptions, Predicate, QueryDocument, QueryGroup, QueryResult, Related, Select, Value, Where, } from './query.js';
21
+ export type { Awaits, Backlink, CoveredRoom, Direction, DocumentQuery, DocumentResult, Filter, GroupQuery, GroupResult, Key, LocalQuery, OrderOptions, PendingResult, PendingRoom, Predicate, QueryCoverage, QueryDocument, QueryGroup, QueryResult, QueryRows, Related, Select, Value, Where, } from './query.js';
16
22
  export type { MdType, ModelIdentity, ModelSnapshot, ModelState, ModelResult, TypesResult, ValidationReceipt, } from './model.js';
17
23
  export type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';
18
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,MAAM,EACN,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,eAAe,EACf,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EACX,aAAa,EACb,cAAc,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/F,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EACV,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,MAAM,EACN,UAAU,EACV,WAAW,EACX,GAAG,EACH,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1 +1,5 @@
1
+ export { departure } from './change.js';
2
+ export { SESSION_STARTED } from './conversation.js';
1
3
  export { changeBatchIdentity } from './identity.js';
4
+ export { attempts, identities, intentOf, } from './attempt.js';
5
+ export { expectedList, expecting } from './expectation.js';
package/dist/memory.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import type { ModelResult } from './model.js';
2
- import { type AcceptedMessage, type ActionResult, type Adapter, type Capability, type ConversationAction, type ConversationEvent, type DiscoveredRoom, type HeadChange, type ListedConversation, type Member, type ProviderLimit, type Retention, type RoomAttachment, type ServiceMode } from './adapter.js';
2
+ import { type AcceptedMessage, type ActionResult, type Adapter, type BinaryFile, type Capability, type ConversationAction, type ConversationEvent, type DiscoveredRoom, type HeadChange, type ListedConversation, type Member, type ProviderLimit, type Retention, type AcquiredDemand, type ServiceMode } from './adapter.js';
3
3
  export type MemoryRoom = DiscoveredRoom & {
4
4
  model?: ModelResult;
5
5
  selectionModel?: ModelResult;
6
6
  documents?: Readonly<Record<string, string>>;
7
7
  revisions?: Readonly<Record<string, string>>;
8
8
  changes?: Readonly<Record<string, HeadChange>>;
9
- binaryTargets?: readonly string[];
10
- attachments?: readonly RoomAttachment[];
9
+ binaryFiles?: Readonly<Record<string, BinaryFile>>;
10
+ blobs?: Readonly<Record<string, Blob>>;
11
11
  };
12
12
  export type MemoryConversation = {
13
13
  conversation: string;
@@ -25,6 +25,7 @@ export type MemoryAdapterOptions = {
25
25
  retention?: Retention;
26
26
  member?: Member;
27
27
  unopened?: boolean;
28
+ exhaustiveDiscovery?: true;
28
29
  };
29
30
  export type MemoryAdapter = Adapter & {
30
31
  setRooms(rooms: readonly MemoryRoom[]): void;
@@ -40,6 +41,7 @@ export type MemoryAdapter = Adapter & {
40
41
  notifyConversation(event: ConversationEvent): void;
41
42
  notifyServiceMode(mode: ServiceMode): void;
42
43
  heldRooms(): readonly string[];
44
+ heldDemand(): AcquiredDemand | null;
43
45
  replicatedConversations(): readonly string[];
44
46
  };
45
47
  export declare function createMemoryAdapter(options?: MemoryAdapterOptions): MemoryAdapter;