@agentshouse/mdruntime 0.1.0-ce15a88ae8478 → 0.1.0-ce5c5bb29be5a

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 (198) hide show
  1. package/README.md +10 -8
  2. package/dist/adapter.d.ts +30 -34
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/attached-model.d.ts +2 -1
  5. package/dist/attached-model.d.ts.map +1 -1
  6. package/dist/attached-model.js +28 -4
  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 +16 -8
  11. package/dist/bootstrap.d.ts.map +1 -1
  12. package/dist/bootstrap.js +139 -94
  13. package/dist/client.d.ts +6 -7
  14. package/dist/client.d.ts.map +1 -1
  15. package/dist/client.js +54 -7
  16. package/dist/collection.d.ts +5 -3
  17. package/dist/collection.d.ts.map +1 -1
  18. package/dist/collection.js +24 -19
  19. package/dist/compile.d.ts.map +1 -1
  20. package/dist/compile.js +82 -30
  21. package/dist/connection.d.ts +8 -7
  22. package/dist/connection.d.ts.map +1 -1
  23. package/dist/connection.js +1047 -915
  24. package/dist/conversation.d.ts +7 -5
  25. package/dist/conversation.d.ts.map +1 -1
  26. package/dist/conversation.js +166 -41
  27. package/dist/durability.d.ts +1 -5
  28. package/dist/durability.d.ts.map +1 -1
  29. package/dist/durability.js +5 -0
  30. package/dist/entry.d.ts +1 -0
  31. package/dist/entry.d.ts.map +1 -1
  32. package/dist/entry.js +1 -1
  33. package/dist/file.d.ts +2 -11
  34. package/dist/file.d.ts.map +1 -1
  35. package/dist/file.js +6 -4
  36. package/dist/fulltext.d.ts.map +1 -1
  37. package/dist/fulltext.js +8 -6
  38. package/dist/host.d.ts +3 -3
  39. package/dist/host.d.ts.map +1 -1
  40. package/dist/host.js +40 -15
  41. package/dist/index.d.ts +9 -9
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +4 -3
  44. package/dist/live.d.ts.map +1 -1
  45. package/dist/live.js +2 -1
  46. package/dist/media.d.ts +8 -0
  47. package/dist/media.d.ts.map +1 -0
  48. package/dist/media.js +218 -0
  49. package/dist/memory.d.ts +2 -2
  50. package/dist/memory.d.ts.map +1 -1
  51. package/dist/memory.js +46 -20
  52. package/dist/model.d.ts +6 -1
  53. package/dist/model.d.ts.map +1 -1
  54. package/dist/model.js +7 -10
  55. package/dist/observation.d.ts +1 -0
  56. package/dist/observation.d.ts.map +1 -1
  57. package/dist/observation.js +1 -1
  58. package/dist/outcome.d.ts +13 -6
  59. package/dist/outcome.d.ts.map +1 -1
  60. package/dist/outcome.js +16 -5
  61. package/dist/overlay.js +1 -1
  62. package/dist/paths.d.ts +1 -0
  63. package/dist/paths.d.ts.map +1 -1
  64. package/dist/paths.js +4 -0
  65. package/dist/query.d.ts +6 -0
  66. package/dist/query.d.ts.map +1 -1
  67. package/dist/reach.d.ts +8 -3
  68. package/dist/reach.d.ts.map +1 -1
  69. package/dist/reach.js +69 -46
  70. package/dist/readiness.d.ts +13 -14
  71. package/dist/readiness.d.ts.map +1 -1
  72. package/dist/readiness.js +2 -8
  73. package/dist/recovery.d.ts +1 -0
  74. package/dist/recovery.d.ts.map +1 -1
  75. package/dist/recovery.js +26 -0
  76. package/dist/refresh.d.ts +6 -2
  77. package/dist/refresh.d.ts.map +1 -1
  78. package/dist/refresh.js +61 -27
  79. package/dist/replica.d.ts +5 -5
  80. package/dist/replica.d.ts.map +1 -1
  81. package/dist/replica.js +4 -7
  82. package/dist/room-draft.d.ts +18 -2
  83. package/dist/room-draft.d.ts.map +1 -1
  84. package/dist/room-draft.js +73 -6
  85. package/dist/rows.d.ts +15 -6
  86. package/dist/rows.d.ts.map +1 -1
  87. package/dist/rows.js +102 -74
  88. package/dist/save.d.ts +2 -0
  89. package/dist/save.d.ts.map +1 -1
  90. package/dist/save.js +13 -7
  91. package/dist/shared.d.ts +0 -1
  92. package/dist/shared.d.ts.map +1 -1
  93. package/dist/shared.js +0 -10
  94. package/dist/status.d.ts +4 -3
  95. package/dist/status.d.ts.map +1 -1
  96. package/dist/status.js +3 -1
  97. package/dist/store.d.ts +19 -26
  98. package/dist/store.d.ts.map +1 -1
  99. package/dist/store.js +26 -51
  100. package/dist/stored.d.ts +10 -18
  101. package/dist/stored.d.ts.map +1 -1
  102. package/dist/stored.js +209 -193
  103. package/dist/tables.d.ts +28 -35
  104. package/dist/tables.d.ts.map +1 -1
  105. package/dist/tables.js +58 -50
  106. package/dist/transfer.d.ts +0 -5
  107. package/dist/transfer.d.ts.map +1 -1
  108. package/dist/validation.d.ts +3 -4
  109. package/dist/validation.d.ts.map +1 -1
  110. package/dist/validation.js +35 -96
  111. package/dist/wire.d.ts +5 -5
  112. package/dist/wire.d.ts.map +1 -1
  113. package/dist/wire.js +2 -2
  114. package/dist/words.d.ts.map +1 -1
  115. package/dist/words.js +8 -2
  116. package/package.json +11 -18
  117. package/AGENTS.md +0 -319
  118. package/dist/chat/acts.d.ts +0 -33
  119. package/dist/chat/acts.d.ts.map +0 -1
  120. package/dist/chat/acts.js +0 -36
  121. package/dist/chat/context.d.ts +0 -3
  122. package/dist/chat/context.d.ts.map +0 -1
  123. package/dist/chat/context.js +0 -10
  124. package/dist/chat/earlier.d.ts +0 -10
  125. package/dist/chat/earlier.d.ts.map +0 -1
  126. package/dist/chat/earlier.js +0 -54
  127. package/dist/chat/house.d.ts +0 -25
  128. package/dist/chat/house.d.ts.map +0 -1
  129. package/dist/chat/house.js +0 -38
  130. package/dist/chat/input.d.ts +0 -11
  131. package/dist/chat/input.d.ts.map +0 -1
  132. package/dist/chat/input.js +0 -92
  133. package/dist/chat/kit.d.ts +0 -61
  134. package/dist/chat/kit.d.ts.map +0 -1
  135. package/dist/chat/kit.js +0 -123
  136. package/dist/chat/lasting.d.ts +0 -6
  137. package/dist/chat/lasting.d.ts.map +0 -1
  138. package/dist/chat/lasting.js +0 -19
  139. package/dist/chat/list.d.ts +0 -28
  140. package/dist/chat/list.d.ts.map +0 -1
  141. package/dist/chat/list.js +0 -103
  142. package/dist/chat/markdown.d.ts +0 -21
  143. package/dist/chat/markdown.d.ts.map +0 -1
  144. package/dist/chat/markdown.js +0 -246
  145. package/dist/chat/message.d.ts +0 -7
  146. package/dist/chat/message.d.ts.map +0 -1
  147. package/dist/chat/message.js +0 -254
  148. package/dist/chat/messages.d.ts +0 -35
  149. package/dist/chat/messages.d.ts.map +0 -1
  150. package/dist/chat/messages.js +0 -210
  151. package/dist/chat/name.d.ts +0 -7
  152. package/dist/chat/name.d.ts.map +0 -1
  153. package/dist/chat/name.js +0 -37
  154. package/dist/chat/opened.d.ts +0 -12
  155. package/dist/chat/opened.d.ts.map +0 -1
  156. package/dist/chat/opened.js +0 -19
  157. package/dist/chat/overlay.d.ts +0 -32
  158. package/dist/chat/overlay.d.ts.map +0 -1
  159. package/dist/chat/overlay.js +0 -103
  160. package/dist/chat/parts.d.ts +0 -58
  161. package/dist/chat/parts.d.ts.map +0 -1
  162. package/dist/chat/parts.js +0 -120
  163. package/dist/chat/pieces.d.ts +0 -62
  164. package/dist/chat/pieces.d.ts.map +0 -1
  165. package/dist/chat/pieces.js +0 -1110
  166. package/dist/chat/process.d.ts +0 -20
  167. package/dist/chat/process.d.ts.map +0 -1
  168. package/dist/chat/process.js +0 -32
  169. package/dist/chat/provider.d.ts +0 -70
  170. package/dist/chat/provider.d.ts.map +0 -1
  171. package/dist/chat/provider.js +0 -635
  172. package/dist/chat/question.d.ts +0 -9
  173. package/dist/chat/question.d.ts.map +0 -1
  174. package/dist/chat/question.js +0 -69
  175. package/dist/chat/questions.d.ts +0 -31
  176. package/dist/chat/questions.d.ts.map +0 -1
  177. package/dist/chat/questions.js +0 -111
  178. package/dist/chat/read.d.ts +0 -5
  179. package/dist/chat/read.d.ts.map +0 -1
  180. package/dist/chat/read.js +0 -13
  181. package/dist/chat/ready.d.ts +0 -37
  182. package/dist/chat/ready.d.ts.map +0 -1
  183. package/dist/chat/ready.js +0 -93
  184. package/dist/chat/room-file.d.ts +0 -8
  185. package/dist/chat/room-file.d.ts.map +0 -1
  186. package/dist/chat/room-file.js +0 -72
  187. package/dist/chat/steady.d.ts +0 -3
  188. package/dist/chat/steady.d.ts.map +0 -1
  189. package/dist/chat/steady.js +0 -26
  190. package/dist/chat/style.d.ts +0 -4
  191. package/dist/chat/style.d.ts.map +0 -1
  192. package/dist/chat/style.js +0 -307
  193. package/dist/chat.d.ts +0 -15
  194. package/dist/chat.d.ts.map +0 -1
  195. package/dist/chat.js +0 -8
  196. package/dist/reads.d.ts +0 -11
  197. package/dist/reads.d.ts.map +0 -1
  198. package/dist/reads.js +0 -98
package/dist/bootstrap.js CHANGED
@@ -1,36 +1,19 @@
1
1
  import { transferIdentity } from './identity.js';
2
- import { advancement } from './refresh.js';
2
+ import { advancement, pageEntries } from './refresh.js';
3
+ import { entriesIn } from './shared.js';
3
4
  import { unconfirmed } from './transfer.js';
4
- const RESUMABLE = new Set([
5
- 'transport-uncertainty',
6
- 'retryable-refusal',
7
- 'unconfirmed',
8
- ]);
9
- function pageOf(page) {
10
- const entries = [];
11
- for (const [path, content] of Object.entries(page.documents)) {
12
- entries.push({
13
- path,
14
- content,
15
- binary: null,
16
- revision: page.revisions[path] ?? null,
17
- fileId: page.fileIds?.[path] ?? null,
18
- change: page.changes[path] ?? null,
19
- written: page.roomVersion,
20
- });
21
- }
22
- for (const [path, file] of Object.entries(page.binaryFiles)) {
23
- entries.push({
24
- path,
25
- content: null,
26
- binary: { state: 'accepted', ...file },
27
- revision: page.revisions[path] ?? null,
28
- fileId: page.fileIds?.[path] ?? null,
29
- change: page.changes[path] ?? null,
30
- written: null,
31
- });
32
- }
33
- return { entries, folders: page.folders ?? [] };
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) {
13
+ return {
14
+ entries: await pageEntries(page, [], page.roomVersion, NOTHING_PRIOR),
15
+ folders: page.folders ?? [],
16
+ };
34
17
  }
35
18
  function heldTogether(first, second) {
36
19
  if (first === null)
@@ -56,17 +39,16 @@ const NO_CONTENT = {
56
39
  files: () => Promise.resolve([]),
57
40
  contents: () => Promise.resolve(new Map()),
58
41
  };
59
- export async function bootstrapRoom(adapter, authorization, room, held, remodel, continuing, staging, reuse) {
60
- const kept = staging.held(room.locator);
61
- const resumed = kept !== null && kept.selection === room.replica.selection ? kept : null;
62
- if (kept !== null && resumed === null)
42
+ export async function bootstrapRoom(adapter, authorization, room, held, builtIn, remodel, continuing, staging, reuse) {
43
+ if (staging.held(room.locator) !== null)
63
44
  await staging.abandon(room.locator);
64
- const first = await bundle(adapter, authorization, room, held, remodel, continuing, staging, resumed, reuse);
45
+ const begun = (pool) => started(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool);
46
+ const first = await begun(reuse);
65
47
  if (first.kind !== 'expired')
66
48
  return first;
67
49
  await staging.setAside(room.locator);
68
50
  try {
69
- const replacement = await bundle(adapter, authorization, room, held, remodel, continuing, staging, null, heldTogether(reuse, first.held));
51
+ const replacement = await begun(heldTogether(reuse, first.held));
70
52
  if (replacement.kind !== 'expired')
71
53
  return replacement;
72
54
  await staging.abandon(room.locator);
@@ -77,86 +59,149 @@ export async function bootstrapRoom(adapter, authorization, room, held, remodel,
77
59
  await staging.release(first.key);
78
60
  }
79
61
  }
80
- function compositionFor(room, models) {
62
+ function dropped(ahead) {
63
+ void ahead?.fetched.then(({ next, written }) => {
64
+ written();
65
+ dropped(next);
66
+ }, () => { });
67
+ }
68
+ function compositionFor(room, models, builtIn) {
81
69
  return {
82
70
  model: models.collection,
83
71
  selection: room.typedSelection === undefined
84
72
  ? null
85
- : { roots: room.typedSelection.roots, model: models.selection },
73
+ : { roots: room.typedSelection.roots, model: builtIn },
86
74
  };
87
75
  }
88
- async function bundle(adapter, authorization, room, held, remodel, continuing, staging, kept, pool) {
76
+ async function started(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool) {
77
+ let outcome;
78
+ try {
79
+ outcome = await bundle(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool);
80
+ }
81
+ catch (error) {
82
+ await staging.abandon(room.locator).catch(() => { });
83
+ throw error;
84
+ }
85
+ if (outcome.kind !== 'staged' && outcome.kind !== 'expired') {
86
+ await staging.abandon(room.locator);
87
+ }
88
+ return outcome;
89
+ }
90
+ async function bundle(adapter, authorization, room, held, builtIn, remodel, continuing, staging, pool) {
89
91
  const locator = room.locator;
90
92
  const selection = room.replica.selection;
91
- let transfer = kept;
92
- while (transfer === null || transfer.pageToken !== null) {
93
- if (!continuing())
94
- return unconfirmed;
95
- const page = await adapter.bootstrap(authorization, {
96
- locator,
97
- selection,
98
- ...(transfer?.pageToken == null ? {} : { pageToken: transfer.pageToken }),
99
- ...(pool === null ? {} : { held: pool }),
100
- });
101
- if (page.kind === 'beyond-horizon') {
102
- const key = transfer?.key ?? null;
103
- return { kind: 'expired', held: key === null ? NO_CONTENT : staging.content(key), key };
104
- }
105
- if (page.kind !== 'bootstrap') {
106
- if (!RESUMABLE.has(page.kind))
107
- await staging.abandon(locator);
108
- return page;
93
+ const ending = new AbortController();
94
+ const arriving = staging.arriving(locator);
95
+ const downloaded = await staging.turn(locator, 'downloading');
96
+ const asking = (token) => adapter.bootstrap(authorization, {
97
+ locator,
98
+ selection,
99
+ signal: ending.signal,
100
+ ...(token === null
101
+ ? { arriving: (bytes) => arriving.at(bytes) }
102
+ : { pageToken: token }),
103
+ ...(pool === null ? {} : { held: pool }),
104
+ });
105
+ const fetching = (token) => {
106
+ const fetched = (async () => {
107
+ await staging.unqueued();
108
+ const page = continuing() ? await asking(token) : unconfirmed;
109
+ if (page.kind !== 'bootstrap')
110
+ return { page, next: null, written: () => { } };
111
+ const written = staging.queued(textOf(page));
112
+ const later = page.pageToken;
113
+ if (later === undefined) {
114
+ downloaded();
115
+ arriving.end();
116
+ }
117
+ return { page, written, next: later === undefined || !continuing() ? null : fetching(later) };
118
+ })();
119
+ fetched.catch(() => { });
120
+ return { fetched };
121
+ };
122
+ let transfer = null;
123
+ let ahead = fetching(null);
124
+ try {
125
+ while (ahead !== null) {
126
+ if (!continuing())
127
+ return unconfirmed;
128
+ const fetched = await ahead.fetched;
129
+ ahead = fetched.next;
130
+ try {
131
+ if (!continuing())
132
+ return unconfirmed;
133
+ const page = fetched.page;
134
+ if (page.kind === 'beyond-horizon') {
135
+ const key = transfer?.key ?? null;
136
+ return { kind: 'expired', held: key === null ? NO_CONTENT : staging.content(key), key };
137
+ }
138
+ if (page.kind !== 'bootstrap')
139
+ return page;
140
+ const models = remodel(page.models, transfer?.models ?? held);
141
+ const staged = await staging.stage({
142
+ locator,
143
+ transfer: transfer?.transfer ?? transferIdentity(),
144
+ selection,
145
+ from: transfer !== null && adapter.reached(locator, page.roomVersion, transfer.from)
146
+ ? transfer.from
147
+ : page.roomVersion,
148
+ last: transfer !== null && !adapter.reached(locator, page.roomVersion, transfer.last)
149
+ ? transfer.last
150
+ : page.roomVersion,
151
+ done: { bytes: (transfer?.done.bytes ?? 0) + (page.bytes ?? 0) },
152
+ models,
153
+ key: transfer?.key ?? null,
154
+ }, await pageOf(page), compositionFor(room, models, builtIn));
155
+ if (staged === null)
156
+ return unconfirmed;
157
+ transfer = staged;
158
+ }
159
+ finally {
160
+ fetched.written();
161
+ }
109
162
  }
110
- const next = {
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
- key: transfer?.key ?? null,
123
- };
124
- const key = await staging.stage(next, pageOf(page), compositionFor(room, next.models));
125
- if (key === null)
126
- return unconfirmed;
127
- transfer = { ...next, key };
128
163
  }
164
+ finally {
165
+ ending.abort();
166
+ downloaded();
167
+ arriving.end();
168
+ dropped(ahead);
169
+ }
170
+ if (transfer === null)
171
+ return unconfirmed;
172
+ const installed = transfer;
173
+ const composition = compositionFor(room, installed.models, builtIn);
174
+ if (!(await staging.derive(locator, installed.key, composition)))
175
+ return unconfirmed;
176
+ await staging.turn(locator, 'replaying');
177
+ if (!continuing())
178
+ return unconfirmed;
129
179
  const record = {
130
180
  locator,
131
181
  name: room.name,
132
182
  handle: room.handle,
133
183
  operations: room.operations,
134
184
  replica: room.replica,
135
- model: transfer.models.collection,
185
+ model: installed.models.collection,
136
186
  typedSelection: room.typedSelection ?? null,
137
- selectionModel: transfer.models.selection,
138
187
  providerOwnedPaths: room.providerOwnedPaths,
139
- roomVersion: transfer.from,
140
- transfer: transfer.transfer,
141
- key: transfer.key,
188
+ roomVersion: installed.from,
189
+ transfer: installed.transfer,
190
+ inventory: installed.done,
191
+ key: installed.key,
142
192
  };
143
- const reconciled = transfer.last === transfer.from && adapter.reached(locator, transfer.last, room.roomVersion)
193
+ const due = [room.roomVersion, ...staging.announced(locator)];
194
+ const last = installed.last;
195
+ const reconciled = last === installed.from && due.every((version) => adapter.reached(locator, last, version))
144
196
  ? { kind: 'still-current' }
145
- : await advancement(adapter, authorization, record, remodel, continuing, await staging.refreshing(record.key));
146
- if (reconciled.kind === 'advanced' || reconciled.kind === 'still-current') {
147
- const refreshed = reconciled.kind === 'advanced';
148
- const result = refreshed ? reconciled.record : record;
149
- const refused = await staging.validate(result, refreshed ? 'refreshed' : 'confirmed');
150
- if (refused !== null) {
151
- await staging.abandon(locator);
152
- return refused;
153
- }
154
- return { kind: 'staged', record: result, refreshed };
197
+ : await advancement(adapter, authorization, record, remodel, continuing, await staging.refreshing(locator, record.key, composition));
198
+ if (reconciled.kind === 'advanced') {
199
+ return { kind: 'staged', record: reconciled.record, refreshed: true };
155
200
  }
201
+ if (reconciled.kind === 'still-current')
202
+ return { kind: 'staged', record, refreshed: false };
156
203
  if (reconciled.kind === 'beyond-horizon') {
157
204
  return { kind: 'expired', held: staging.content(record.key), key: record.key };
158
205
  }
159
- if (!RESUMABLE.has(reconciled.kind))
160
- await staging.abandon(locator);
161
206
  return reconciled;
162
207
  }
package/dist/client.d.ts CHANGED
@@ -2,9 +2,7 @@ import type { AppRoom, ConnectionRefusal, HistoryQuery, RoomSchemas, SavedParts,
2
2
  import type { Member, ServiceMode } from './adapter.js';
3
3
  import type { ChatDraft, ConversationAgent, ConversationEntry, ConversationOptions, ConversationView } from './conversation.js';
4
4
  import { type Observation } from './observation.js';
5
- import type { BinaryReference } from './binary.js';
6
- import type { ChosenFile } from './file.js';
7
- import type { BinaryAnswer, BinaryLinkAnswer, CallResult, HistoryAnswer, Offline, QueueEntry, Resolution } from './outcome.js';
5
+ import type { AttachAnswer, BinaryAnswer, CallResult, DownloadAnswer, HistoryAnswer, Offline, QueueEntry, Resolution } from './outcome.js';
8
6
  import type { DocumentQuery, DocumentResult, GroupQuery, GroupResult, PendingResult } from './query.js';
9
7
  import type { RoomDraft, RoomDraftParts, RoomDraftWrite } from './room-draft.js';
10
8
  import type { SearchRequest, SearchResult } from './search.js';
@@ -22,7 +20,7 @@ export type MdRuntimeClient = {
22
20
  roomDraft: {
23
21
  list(): Promise<readonly RoomDraft[]>;
24
22
  read(room: string, path: string): Promise<RoomDraft | null>;
25
- write(room: string, path: string, revision: string | null, parts: RoomDraftParts): Promise<RoomDraftWrite>;
23
+ write(room: string, path: string, revision: string | null, parts: RoomDraftParts, next?: string): Promise<RoomDraftWrite>;
26
24
  discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;
27
25
  };
28
26
  save(room: string, roomDrafts: readonly SavedRoomDraft[]): Promise<SaveResult>;
@@ -37,7 +35,6 @@ export type MdRuntimeClient = {
37
35
  read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;
38
36
  create(input: unknown): Promise<CallResult>;
39
37
  send(conversation: string, operation?: string, draft?: ChatDraft): Promise<CallResult | Offline>;
40
- attach(room: string, file: ChosenFile): Promise<CallResult | Offline>;
41
38
  answer(conversation: string, answer: unknown): Promise<CallResult>;
42
39
  interrupt(conversation: string): Promise<CallResult>;
43
40
  kill(conversation: string): Promise<CallResult>;
@@ -53,8 +50,8 @@ export type MdRuntimeClient = {
53
50
  resolve(room: string, path: string, destination: string): Promise<Resolution>;
54
51
  binaryFile: {
55
52
  read(room: string, path: string, revision?: string): Promise<BinaryAnswer>;
56
- link(room: string, path: string, revision?: string): Promise<BinaryLinkAnswer>;
57
- readReference(reference: BinaryReference): Promise<BinaryAnswer>;
53
+ attach(room: string, file: File): Promise<AttachAnswer>;
54
+ download(room: string, path: string, revision?: string): Promise<DownloadAnswer>;
58
55
  };
59
56
  call(name: string, input: unknown): Promise<CallResult>;
60
57
  reached(locator: string, roomVersion: string, path?: string): Promise<boolean>;
@@ -86,6 +83,8 @@ export type MdRuntimeClient = {
86
83
  export declare function connectMdRuntime(port: RuntimePort): MdRuntimeClient;
87
84
  export declare function inTurn(client: MdRuntimeClient, work: () => Promise<void>): Promise<void>;
88
85
  export { chainedWindows, type WindowAnswer, type WindowChain } from './chain.js';
86
+ export { roomDraftRevision } from './identity.js';
87
+ export { defineRoomMedia, ROOM_MEDIA } from './media.js';
89
88
  export type { Observation } from './observation.js';
90
89
  export type { Open } from './open.js';
91
90
  export { unanswered, type RuntimePort, type WireMember } from './wire.js';
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/client.js CHANGED
@@ -1,8 +1,25 @@
1
+ import { shownBy } from './media.js';
1
2
  import { observed } from './observation.js';
2
3
  import { runtimeError } from './failure.js';
3
4
  import { answer, AUTHORIZATION_ENDED, PORT_CLOSED, } from './wire.js';
4
5
  // React renders an arrived value in a later task and opens what that render observes as it commits, so this many frames opening nothing mean the page drew what it observes.
5
6
  const SETTLED_FRAMES = 2;
7
+ // A browser reads a download's address only after the click that hands it returns, so a copy's address is released a minute later.
8
+ const HANDED_COPY_MS = 60_000;
9
+ const PAGE = /\.html?$/iu;
10
+ const STARTED = { kind: 'started' };
11
+ const BLOCKED = {
12
+ kind: 'blocked',
13
+ code: 'popup-blocked',
14
+ fields: {},
15
+ retryable: true,
16
+ };
17
+ function handed(url, name) {
18
+ const anchor = document.createElement('a');
19
+ anchor.href = url;
20
+ anchor.download = name;
21
+ anchor.click();
22
+ }
6
23
  function refused(refusal) {
7
24
  return runtimeError(refusal.code, refusal.code, refusal.retryable);
8
25
  }
@@ -156,6 +173,34 @@ export function connectMdRuntime(port) {
156
173
  }, { highWaterMark: 0 });
157
174
  return { kind: 'binary', stream, byteLength, mediaType };
158
175
  }
176
+ async function download(room, path, revision) {
177
+ const tab = PAGE.test(path) ? globalThis.open('', '_blank') : null;
178
+ const linked = await ask('binaryFile.link', [room, path, revision]);
179
+ if (linked.kind === 'link' && PAGE.test(linked.name)) {
180
+ const away = tab ?? globalThis.open('', '_blank');
181
+ if (away === null)
182
+ return BLOCKED;
183
+ away.location.replace(linked.url);
184
+ return STARTED;
185
+ }
186
+ tab?.close();
187
+ if (linked.kind === 'link') {
188
+ handed(linked.url, linked.name);
189
+ return STARTED;
190
+ }
191
+ if (linked.kind !== 'absent')
192
+ return linked;
193
+ const read = streamed(await ask('binaryFile.read', [room, path, revision]));
194
+ if (read.kind !== 'binary')
195
+ return read;
196
+ const copy = await new Response(read.stream, {
197
+ headers: { 'content-type': read.mediaType },
198
+ }).blob();
199
+ const url = URL.createObjectURL(copy);
200
+ handed(url, path.slice(path.lastIndexOf('/') + 1));
201
+ setTimeout(() => URL.revokeObjectURL(url), HANDED_COPY_MS);
202
+ return STARTED;
203
+ }
159
204
  function settled() {
160
205
  if (settling !== null)
161
206
  return settling;
@@ -185,7 +230,8 @@ export function connectMdRuntime(port) {
185
230
  });
186
231
  return settling;
187
232
  }
188
- return {
233
+ const show = (room, path, revision) => ask('binaryFile.show', [room, path, revision]).then((shown) => streamed(shown));
234
+ return shownBy(show, {
189
235
  rooms: () => ask('rooms', []),
190
236
  query: ((query) => ask('query', [query])),
191
237
  search: (request) => ask('search', [request]),
@@ -193,7 +239,7 @@ export function connectMdRuntime(port) {
193
239
  roomDraft: {
194
240
  list: () => ask('roomDraft.list', []),
195
241
  read: (room, path) => ask('roomDraft.read', [room, path]),
196
- write: (room, path, revision, parts) => ask('roomDraft.write', [room, path, revision, parts]),
242
+ write: (room, path, revision, parts, next) => ask('roomDraft.write', next === undefined ? [room, path, revision, parts] : [room, path, revision, parts, next]),
197
243
  discard: (room, path, revision) => ask('roomDraft.discard', [room, path, revision]),
198
244
  },
199
245
  save: (room, roomDrafts) => ask('save', [room, roomDrafts]),
@@ -208,7 +254,6 @@ export function connectMdRuntime(port) {
208
254
  read: (conversation, options) => ask('conversation.read', [conversation, options]),
209
255
  create: (input) => ask('conversation.create', [input]),
210
256
  send: (conversation, operation, draft) => ask('conversation.send', [conversation, operation, draft]),
211
- attach: (room, file) => ask('conversation.attach', [room, file]),
212
257
  answer: (conversation, answer) => ask('conversation.answer', [conversation, answer]),
213
258
  interrupt: (conversation) => ask('conversation.interrupt', [conversation]),
214
259
  kill: (conversation) => ask('conversation.kill', [conversation]),
@@ -223,9 +268,9 @@ export function connectMdRuntime(port) {
223
268
  history: (locator, path, query) => ask('history', [locator, path, query]),
224
269
  resolve: (room, path, destination) => ask('resolve', [room, path, destination]),
225
270
  binaryFile: {
226
- read: (room, path, revision) => ask('binaryFile.read', [room, path, revision]).then(streamed),
227
- link: (room, path, revision) => ask('binaryFile.link', [room, path, revision]),
228
- readReference: (reference) => ask('binaryFile.readReference', [reference]).then(streamed),
271
+ read: (room, path, revision) => ask('binaryFile.read', [room, path, revision]).then((read) => streamed(read)),
272
+ attach: (room, file) => ask('binaryFile.attach', [room, file]),
273
+ download,
229
274
  },
230
275
  call: (name, input) => ask('call', [name, input]),
231
276
  reached: (locator, roomVersion, path) => ask('reached', [locator, roomVersion, path]),
@@ -236,7 +281,7 @@ export function connectMdRuntime(port) {
236
281
  observe: ((topic, ...input) => watch(topic, input)),
237
282
  reauthorize: () => ask('reauthorize', []),
238
283
  settled,
239
- };
284
+ });
240
285
  }
241
286
  const turns = new WeakMap();
242
287
  export function inTurn(client, work) {
@@ -245,4 +290,6 @@ export function inTurn(client, work) {
245
290
  return turn;
246
291
  }
247
292
  export { chainedWindows } from './chain.js';
293
+ export { roomDraftRevision } from './identity.js';
294
+ export { defineRoomMedia, ROOM_MEDIA } from './media.js';
248
295
  export { unanswered } from './wire.js';
@@ -1,8 +1,6 @@
1
1
  import { type Document } from '@agentshouse/mdmodel';
2
2
  import type { ModelState } from './model.js';
3
3
  import type { MdModelIdentity } from './adapter.js';
4
- import { type Paths } from './shared.js';
5
- import type { Refused } from './transfer.js';
6
4
  export declare const MD_MODEL: MdModelIdentity;
7
5
  export type Collection = {
8
6
  text: Readonly<Record<string, string>>;
@@ -16,11 +14,15 @@ export type Composition = {
16
14
  model: ModelState;
17
15
  } | null;
18
16
  };
17
+ export type Composed = {
18
+ readonly composition: Composition;
19
+ readonly fingerprint: string;
20
+ };
21
+ export declare function composedOf(composition: Composition): Composed;
19
22
  export declare function selected(composition: Composition, path: string): boolean;
20
23
  export declare function governing(composition: Composition, path: string): ModelState;
21
24
  export declare function collectionOf(text: Readonly<Record<string, string>>, composition: Composition): Collection;
22
25
  export declare function documentsOf(collection: Collection): Generator<number, Iterable<readonly [string, Document]>, void>;
23
- export declare function unreadable(text: Paths<string>, paths?: Iterable<string> | null): Generator<number, Refused | null, void>;
24
26
  export declare function validRoot(root: unknown): root is string;
25
27
  export declare function available(composition: Composition): boolean;
26
28
  //# sourceMappingURL=collection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAsB,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,QAAQ,EAAE,eAAwE,CAAC;AAEhG,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE,CAAC;AAEF,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAI5E;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,GACvB,UAAU,CAcZ;AAED,wBAAiB,WAAW,CAC1B,UAAU,EAAE,UAAU,GACrB,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAQhE;AAED,wBAAiB,UAAU,CACzB,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,EACnB,KAAK,GAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAW,GACpC,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,EAAE,IAAI,CAAC,CAazC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEvD;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAK3D"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,eAAO,MAAM,QAAQ,EAAE,eAAwE,CAAC;AAEhG,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE;QAAE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAc3F,wBAAgB,UAAU,CAAC,WAAW,EAAE,WAAW,GAAG,QAAQ,CAS7D;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxE;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAI5E;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACtC,WAAW,EAAE,WAAW,GACvB,UAAU,CAcZ;AAED,wBAAiB,WAAW,CAC1B,UAAU,EAAE,UAAU,GACrB,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAQhE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEvD;AAED,wBAAgB,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAE3D"}
@@ -1,8 +1,29 @@
1
1
  import { parse, VERSION } from '@agentshouse/mdmodel';
2
2
  import { beneath, normalize } from './paths.js';
3
- import { keysIn, sortedKeys } from './shared.js';
4
- import { ROW_WEIGHT } from './turn.js';
3
+ import { hashed } from './observation.js';
4
+ import { sortedKeys } from './shared.js';
5
5
  export const MD_MODEL = { identity: '@agentshouse/mdmodel', version: VERSION };
6
+ const typesPrinted = new WeakMap();
7
+ function typesPrint(model) {
8
+ if (model.status === 'unavailable')
9
+ return '';
10
+ let print = typesPrinted.get(model.types);
11
+ if (print === undefined) {
12
+ print = hashed(JSON.stringify(model.types)).toString(36);
13
+ typesPrinted.set(model.types, print);
14
+ }
15
+ return print;
16
+ }
17
+ export function composedOf(composition) {
18
+ const { model, selection } = composition;
19
+ return {
20
+ composition,
21
+ fingerprint: JSON.stringify([
22
+ typesPrint(model),
23
+ selection === null ? null : [selection.roots, typesPrint(selection.model)],
24
+ ]),
25
+ };
26
+ }
6
27
  export function selected(composition, path) {
7
28
  return (composition.selection !== null &&
8
29
  composition.selection.roots.some((root) => beneath(root, path)));
@@ -39,25 +60,9 @@ export function* documentsOf(collection) {
39
60
  }
40
61
  })();
41
62
  }
42
- export function* unreadable(text, paths = null) {
43
- const named = paths ?? (yield* keysIn(text));
44
- let least = null;
45
- for (const path of named) {
46
- const content = Object.hasOwn(text, path) ? text[path] : undefined;
47
- if (content === undefined)
48
- continue;
49
- const read = parse(content, path);
50
- if (!read.ok && (least === null || path < least.path)) {
51
- least = { path, refused: { kind: 'refused', refusal: read.refusal } };
52
- }
53
- yield ROW_WEIGHT + content.length;
54
- }
55
- return least?.refused ?? null;
56
- }
57
63
  export function validRoot(root) {
58
64
  return typeof root === 'string' && normalize(root) === root;
59
65
  }
60
66
  export function available(composition) {
61
- return (composition.model.status !== 'unavailable' &&
62
- (composition.selection === null || composition.selection.model.status !== 'unavailable'));
67
+ return composition.model.status !== 'unavailable';
63
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAOV,IAAI,EAGJ,SAAS,EAIV,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAU1D,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAA;CAAE,CAAC;AA+pBjF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA8SjE,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,GAC1B,QAAQ,CAEV;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,WAAW,CAUb"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAOV,IAAI,EAGJ,SAAS,EAIV,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,UAAU,EAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAU1D,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,QAAQ,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAA;CAAE,CAAC;AAssBjF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4TjE,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,GAC1B,QAAQ,CAEV;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,WAAW,CAUb"}