@agentshouse/mdruntime 0.1.0-c0b4d0492dec3 → 0.1.0-c0c0511ef12ee

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 (212) hide show
  1. package/dist/acceptance.d.ts +6 -0
  2. package/dist/acceptance.d.ts.map +1 -0
  3. package/dist/acceptance.js +385 -0
  4. package/dist/actions.d.ts +20 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +251 -0
  7. package/dist/adapter.d.ts +5 -0
  8. package/dist/adapter.d.ts.map +1 -1
  9. package/dist/bootstrap.js +1 -0
  10. package/dist/cell.d.ts +6 -0
  11. package/dist/cell.d.ts.map +1 -0
  12. package/dist/cell.js +9 -0
  13. package/dist/change.d.ts.map +1 -1
  14. package/dist/change.js +4 -2
  15. package/dist/chat-types.d.ts +2 -0
  16. package/dist/chat-types.d.ts.map +1 -1
  17. package/dist/chat-types.js +11 -0
  18. package/dist/client.d.ts +7 -1
  19. package/dist/client.d.ts.map +1 -1
  20. package/dist/client.js +1 -1
  21. package/dist/compile.d.ts.map +1 -1
  22. package/dist/compile.js +15 -21
  23. package/dist/connection.d.ts +4 -148
  24. package/dist/connection.d.ts.map +1 -1
  25. package/dist/connection.js +100 -5361
  26. package/dist/conversation-live.d.ts +136 -0
  27. package/dist/conversation-live.d.ts.map +1 -0
  28. package/dist/conversation-live.js +248 -0
  29. package/dist/conversation-row.d.ts.map +1 -1
  30. package/dist/conversation-row.js +7 -1
  31. package/dist/conversation.d.ts +22 -35
  32. package/dist/conversation.d.ts.map +1 -1
  33. package/dist/conversation.js +827 -972
  34. package/dist/discovery.d.ts +10 -0
  35. package/dist/discovery.d.ts.map +1 -0
  36. package/dist/discovery.js +175 -0
  37. package/dist/durability.d.ts +9 -0
  38. package/dist/durability.d.ts.map +1 -1
  39. package/dist/figures.d.ts +1 -0
  40. package/dist/figures.d.ts.map +1 -1
  41. package/dist/figures.js +2 -2
  42. package/dist/holdings.d.ts +29 -0
  43. package/dist/holdings.d.ts.map +1 -0
  44. package/dist/holdings.js +95 -0
  45. package/dist/host.d.ts +1 -0
  46. package/dist/host.d.ts.map +1 -1
  47. package/dist/host.js +4 -1
  48. package/dist/index.d.ts +12 -3
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +3 -1
  51. package/dist/install.d.ts +56 -0
  52. package/dist/install.d.ts.map +1 -0
  53. package/dist/install.js +554 -0
  54. package/dist/lifecycle.d.ts +7 -0
  55. package/dist/lifecycle.d.ts.map +1 -0
  56. package/dist/lifecycle.js +268 -0
  57. package/dist/listing.d.ts +53 -0
  58. package/dist/listing.d.ts.map +1 -0
  59. package/dist/listing.js +176 -0
  60. package/dist/live.d.ts.map +1 -1
  61. package/dist/live.js +0 -2
  62. package/dist/locks.d.ts +9 -0
  63. package/dist/locks.d.ts.map +1 -0
  64. package/dist/locks.js +61 -0
  65. package/dist/log.d.ts +1 -0
  66. package/dist/log.d.ts.map +1 -1
  67. package/dist/lost.d.ts +5 -0
  68. package/dist/lost.d.ts.map +1 -0
  69. package/dist/lost.js +61 -0
  70. package/dist/media.d.ts +1 -1
  71. package/dist/media.d.ts.map +1 -1
  72. package/dist/media.js +3 -3
  73. package/dist/memory.d.ts.map +1 -1
  74. package/dist/memory.js +1 -0
  75. package/dist/messages.d.ts +1 -1
  76. package/dist/messages.d.ts.map +1 -1
  77. package/dist/messages.js +10 -16
  78. package/dist/models.d.ts +14 -0
  79. package/dist/models.d.ts.map +1 -0
  80. package/dist/models.js +195 -0
  81. package/dist/observation.d.ts.map +1 -1
  82. package/dist/observation.js +12 -17
  83. package/dist/opened.js +3 -3
  84. package/dist/opening.d.ts +4 -0
  85. package/dist/opening.d.ts.map +1 -0
  86. package/dist/opening.js +57 -0
  87. package/dist/outcome.d.ts +3 -1
  88. package/dist/outcome.d.ts.map +1 -1
  89. package/dist/parts.d.ts +1 -0
  90. package/dist/parts.d.ts.map +1 -1
  91. package/dist/parts.js +8 -0
  92. package/dist/paths.d.ts +1 -0
  93. package/dist/paths.d.ts.map +1 -1
  94. package/dist/paths.js +22 -0
  95. package/dist/preparation.d.ts +20 -0
  96. package/dist/preparation.d.ts.map +1 -0
  97. package/dist/preparation.js +226 -0
  98. package/dist/queries.d.ts +16 -0
  99. package/dist/queries.d.ts.map +1 -0
  100. package/dist/queries.js +272 -0
  101. package/dist/query.d.ts +0 -1
  102. package/dist/query.d.ts.map +1 -1
  103. package/dist/questions.d.ts +2 -0
  104. package/dist/questions.d.ts.map +1 -1
  105. package/dist/questions.js +5 -1
  106. package/dist/reach.d.ts +3 -1
  107. package/dist/reach.d.ts.map +1 -1
  108. package/dist/reach.js +1 -1
  109. package/dist/react.d.ts +7 -1
  110. package/dist/react.d.ts.map +1 -1
  111. package/dist/readiness.d.ts +0 -1
  112. package/dist/readiness.d.ts.map +1 -1
  113. package/dist/reads.d.ts +2 -0
  114. package/dist/reads.d.ts.map +1 -1
  115. package/dist/reads.js +51 -8
  116. package/dist/refusal.d.ts +5 -0
  117. package/dist/refusal.d.ts.map +1 -0
  118. package/dist/refusal.js +55 -0
  119. package/dist/replica.d.ts +1 -3
  120. package/dist/replica.d.ts.map +1 -1
  121. package/dist/replica.js +3 -2
  122. package/dist/room-draft.d.ts +1 -3
  123. package/dist/room-draft.d.ts.map +1 -1
  124. package/dist/room-draft.js +3 -3
  125. package/dist/room-drafts.d.ts +24 -0
  126. package/dist/room-drafts.d.ts.map +1 -0
  127. package/dist/room-drafts.js +217 -0
  128. package/dist/runtime.d.ts +43 -0
  129. package/dist/runtime.d.ts.map +1 -0
  130. package/dist/runtime.js +1 -0
  131. package/dist/save.d.ts +5 -1
  132. package/dist/save.d.ts.map +1 -1
  133. package/dist/save.js +12 -14
  134. package/dist/saves.d.ts +70 -0
  135. package/dist/saves.d.ts.map +1 -0
  136. package/dist/saves.js +1005 -0
  137. package/dist/seed.d.ts +11 -2
  138. package/dist/seed.d.ts.map +1 -1
  139. package/dist/seed.js +71 -1
  140. package/dist/shared.d.ts +1 -6
  141. package/dist/shared.d.ts.map +1 -1
  142. package/dist/shared.js +13 -95
  143. package/dist/shown.d.ts +31 -0
  144. package/dist/shown.d.ts.map +1 -0
  145. package/dist/shown.js +292 -0
  146. package/dist/socket/admission.d.ts +7 -0
  147. package/dist/socket/admission.d.ts.map +1 -0
  148. package/dist/socket/admission.js +39 -0
  149. package/dist/socket/answers.d.ts +6 -0
  150. package/dist/socket/answers.d.ts.map +1 -0
  151. package/dist/socket/answers.js +20 -0
  152. package/dist/socket/lanes.d.ts +20 -0
  153. package/dist/socket/lanes.d.ts.map +1 -0
  154. package/dist/socket/lanes.js +77 -0
  155. package/dist/socket/reads.d.ts +10 -0
  156. package/dist/socket/reads.d.ts.map +1 -0
  157. package/dist/socket/reads.js +31 -0
  158. package/dist/socket/rooms.d.ts +44 -0
  159. package/dist/socket/rooms.d.ts.map +1 -0
  160. package/dist/socket/rooms.js +90 -0
  161. package/dist/socket/session.d.ts +38 -0
  162. package/dist/socket/session.d.ts.map +1 -0
  163. package/dist/socket/session.js +23 -0
  164. package/dist/socket.d.ts +70 -0
  165. package/dist/socket.d.ts.map +1 -0
  166. package/dist/socket.js +175 -0
  167. package/dist/source.d.ts.map +1 -1
  168. package/dist/source.js +5 -4
  169. package/dist/store/fences.d.ts +16 -0
  170. package/dist/store/fences.d.ts.map +1 -0
  171. package/dist/store/fences.js +26 -0
  172. package/dist/store/installs.d.ts +30 -0
  173. package/dist/store/installs.d.ts.map +1 -0
  174. package/dist/store/installs.js +34 -0
  175. package/dist/store/readiness.d.ts +10 -0
  176. package/dist/store/readiness.d.ts.map +1 -0
  177. package/dist/store/readiness.js +52 -0
  178. package/dist/store/records.d.ts +212 -0
  179. package/dist/store/records.d.ts.map +1 -0
  180. package/dist/store/records.js +431 -0
  181. package/dist/store/room-held.d.ts +8 -0
  182. package/dist/store/room-held.d.ts.map +1 -0
  183. package/dist/store/room-held.js +17 -0
  184. package/dist/store/space.d.ts +11 -0
  185. package/dist/store/space.d.ts.map +1 -0
  186. package/dist/store/space.js +41 -0
  187. package/dist/store/watchers.d.ts +17 -0
  188. package/dist/store/watchers.d.ts.map +1 -0
  189. package/dist/store/watchers.js +56 -0
  190. package/dist/store/writes.d.ts +24 -0
  191. package/dist/store/writes.d.ts.map +1 -0
  192. package/dist/store/writes.js +125 -0
  193. package/dist/store.d.ts +111 -206
  194. package/dist/store.d.ts.map +1 -1
  195. package/dist/store.js +142 -398
  196. package/dist/stored.d.ts +1 -1
  197. package/dist/stored.d.ts.map +1 -1
  198. package/dist/stored.js +19 -7
  199. package/dist/surface.d.ts +88 -0
  200. package/dist/surface.d.ts.map +1 -0
  201. package/dist/surface.js +223 -0
  202. package/dist/sync.d.ts +19 -0
  203. package/dist/sync.d.ts.map +1 -0
  204. package/dist/sync.js +532 -0
  205. package/dist/tables.d.ts +13 -4
  206. package/dist/tables.d.ts.map +1 -1
  207. package/dist/tables.js +24 -8
  208. package/dist/tallies.js +5 -5
  209. package/dist/wire.d.ts +2 -1
  210. package/dist/wire.d.ts.map +1 -1
  211. package/dist/wire.js +1 -0
  212. package/package.json +2 -2
package/dist/lost.js ADDED
@@ -0,0 +1,61 @@
1
+ import { changeSet, mergeChangeSets } from './change-set.js';
2
+ import { ERASE_BATCH, forgetInstall } from './install.js';
3
+ import { recoverReads, statusShown } from './shown.js';
4
+ import { yielded } from './turn.js';
5
+ function forget({ store, socket }, locator) {
6
+ forgetInstall(store, locator);
7
+ socket.rooms.forget(locator);
8
+ store.forget(locator);
9
+ }
10
+ export async function eraseFenced({ store }, locators) {
11
+ for (const locator of locators) {
12
+ while (await store.durably((local) => local.erase(locator, ERASE_BATCH)))
13
+ await yielded();
14
+ }
15
+ }
16
+ export function fenceLive(runtime, locators) {
17
+ const { store, socket, journal } = runtime;
18
+ for (const locator of new Set(locators)) {
19
+ if (!store.fences.raise(locator, socket.session.now().discoveries))
20
+ continue;
21
+ forget(runtime, locator);
22
+ journal.record(`room lost ${locator}`);
23
+ }
24
+ }
25
+ export async function loseRooms(runtime, locators) {
26
+ const { store } = runtime;
27
+ fenceLive(runtime, locators);
28
+ const fresh = [...new Set(locators)].filter((locator) => {
29
+ const fence = store.fences.of(locator);
30
+ if (fence === undefined || fence.written)
31
+ return false;
32
+ store.fences.mark(locator, true);
33
+ return true;
34
+ });
35
+ if (fresh.length === 0)
36
+ return;
37
+ let held = [];
38
+ try {
39
+ await store.durably(async (local) => {
40
+ held = await local.roomDrafts();
41
+ await local.fence(fresh);
42
+ });
43
+ }
44
+ catch (error) {
45
+ for (const locator of fresh)
46
+ store.fences.mark(locator, false);
47
+ throw error;
48
+ }
49
+ finally {
50
+ store.changed(mergeChangeSets(fresh.map((locator) => changeSet(locator, {
51
+ documents: null,
52
+ room: true,
53
+ queue: true,
54
+ drafts: held.filter((draft) => draft.locator === locator).map(({ path }) => path),
55
+ }))));
56
+ recoverReads(runtime);
57
+ statusShown(runtime);
58
+ }
59
+ await store.durably((local) => runtime.unpair(local));
60
+ await eraseFenced(runtime, fresh);
61
+ }
package/dist/media.d.ts CHANGED
@@ -3,6 +3,6 @@ import { type ShownAnswer } from './outcome.js';
3
3
  export declare const ROOM_MEDIA = "room-media";
4
4
  type Show = (room: string, path: string, revision?: string) => Promise<ShownAnswer>;
5
5
  export declare function shownBy(show: Show, client: MdRuntimeClient): MdRuntimeClient;
6
- export declare function defineRoomMedia(client: Promise<MdRuntimeClient> | MdRuntimeClient, registry?: CustomElementRegistry): void;
6
+ export declare function defineRoomMedia(client: Promise<MdRuntimeClient> | MdRuntimeClient): void;
7
7
  export {};
8
8
  //# sourceMappingURL=media.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,eAAO,MAAM,UAAU,eAAe,CAAC;AAwBvC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAIpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,GAAG,eAAe,CAG5E;AAsBD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,EAClD,QAAQ,GAAE,qBAAsC,GAC/C,IAAI,CA0LN"}
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,eAAO,MAAM,UAAU,eAAe,CAAC;AAwBvC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAIpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,GAAG,eAAe,CAG5E;AAsBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,IAAI,CA0LxF"}
package/dist/media.js CHANGED
@@ -37,8 +37,8 @@ function drawnFor(mediaType) {
37
37
  return 'audio';
38
38
  return null;
39
39
  }
40
- export function defineRoomMedia(client, registry = customElements) {
41
- if (registry.get(ROOM_MEDIA) !== undefined)
40
+ export function defineRoomMedia(client) {
41
+ if (customElements.get(ROOM_MEDIA) !== undefined)
42
42
  return;
43
43
  const connected = Promise.resolve(client);
44
44
  class RoomMedia extends HTMLElement {
@@ -214,5 +214,5 @@ export function defineRoomMedia(client, registry = customElements) {
214
214
  void this.#load();
215
215
  }
216
216
  }
217
- registry.define(ROOM_MEDIA, RoomMedia);
217
+ customElements.define(ROOM_MEDIA, RoomMedia);
218
218
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
package/dist/memory.js CHANGED
@@ -149,6 +149,7 @@ export function createMemoryAdapter(options = {}) {
149
149
  replica: room.replica,
150
150
  ...(room.typedSelection === undefined ? {} : { typedSelection: room.typedSelection }),
151
151
  providerOwnedPaths: room.providerOwnedPaths,
152
+ authoredPaths: room.authoredPaths,
152
153
  };
153
154
  }
154
155
  function page(room, after) {
@@ -2,7 +2,7 @@ import type { AcceptedMessage } from './adapter.js';
2
2
  import type { JobMarker } from './job.js';
3
3
  import type { Connection } from './tables.js';
4
4
  export declare const MESSAGE_TABLES: readonly string[];
5
- export declare const ROWS = "WITH chosen AS (\n SELECT listed.value AS conversation,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'assistant' ORDER BY position DESC, identity DESC LIMIT 1) AS answer,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND text <> '' ORDER BY position DESC, identity DESC LIMIT 1) AS said,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' ORDER BY position, identity LIMIT 1) AS opened,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' AND json_extract(message, '$.waiting') = 1 ORDER BY position, identity LIMIT 1) AS asking\n FROM json_each(?) AS listed\n )\n SELECT chosen.conversation AS conversation,\n substr(said.text, 1, 512) AS said_text,\n json_extract(said.message, '$.role') AS said_role,\n json_extract(said.message, '$.accepted_at') AS said_at,\n substr(json_extract(answer.message, '$.failure'), 1, 512) AS failure,\n json_extract(opened.message, '$.source') AS opened_source,\n json_extract(opened.message, '$.sender') AS opened_sender,\n asking.identity AS asking_identity,\n substr(asking.text, 1, 512) AS asking_text,\n json_extract(asking.message, '$.accepted_at') AS asking_at,\n json_extract(asking.message, '$.source') AS asking_source,\n json_extract(asking.message, '$.sender') AS asking_sender\n FROM chosen\n LEFT JOIN conversation_messages said ON said.id = chosen.said\n LEFT JOIN conversation_messages answer ON answer.id = chosen.answer\n LEFT JOIN conversation_messages opened ON opened.id = chosen.opened\n LEFT JOIN conversation_messages asking ON asking.id = chosen.asking";
5
+ export declare const ROWS = "WITH chosen AS (\n SELECT listed.value AS conversation,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'assistant' ORDER BY position DESC, identity DESC LIMIT 1) AS answer,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND text <> '' ORDER BY position DESC, identity DESC LIMIT 1) AS said,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' ORDER BY position, identity LIMIT 1) AS opened,\n (SELECT id FROM conversation_messages WHERE conversation = listed.value AND json_extract(message, '$.role') = 'house' AND json_extract(message, '$.waiting') = 1 ORDER BY position, identity LIMIT 1) AS asking\n FROM json_each(?) AS listed\n )\n SELECT chosen.conversation AS conversation,\n substr(said.text, 1, 512) AS said_text,\n json_extract(said.message, '$.role') AS said_role,\n json_extract(said.message, '$.accepted_at') AS said_at,\n substr(json_extract(answer.message, '$.failure'), 1, 512) AS failure,\n json_extract(opened.message, '$.source') AS opened_source,\n json_extract(opened.message, '$.sender') AS opened_sender,\n asking.identity AS asking_identity,\n asking.text AS asking_text,\n json_extract(asking.message, '$.accepted_at') AS asking_at,\n json_extract(asking.message, '$.source') AS asking_source,\n json_extract(asking.message, '$.sender') AS asking_sender\n FROM chosen\n LEFT JOIN conversation_messages said ON said.id = chosen.said\n LEFT JOIN conversation_messages answer ON answer.id = chosen.answer\n LEFT JOIN conversation_messages opened ON opened.id = chosen.opened\n LEFT JOIN conversation_messages asking ON asking.id = chosen.asking";
6
6
  export declare const JOB_MARKERS = "SELECT json_extract(part.value, '$.text') AS said,\n json_extract(message, '$.accepted_at') AS at\n FROM conversation_messages, json_each(message, '$.parts') AS part\n WHERE conversation = ? AND instr(message, '\"marker\":\"job\"') > 0\n AND json_extract(part.value, '$.type') = 'marker'\n AND json_extract(part.value, '$.marker') = 'job'\n ORDER BY position, identity, part.key";
7
7
  export type HeldConversation = {
8
8
  readonly conversation: string;
@@ -1 +1 @@
1
- {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
package/dist/messages.js CHANGED
@@ -31,7 +31,7 @@ export const ROWS = `WITH chosen AS (
31
31
  json_extract(opened.message, '$.source') AS opened_source,
32
32
  json_extract(opened.message, '$.sender') AS opened_sender,
33
33
  asking.identity AS asking_identity,
34
- substr(asking.text, 1, ${EXCERPT}) AS asking_text,
34
+ asking.text AS asking_text,
35
35
  json_extract(asking.message, '$.accepted_at') AS asking_at,
36
36
  json_extract(asking.message, '$.source') AS asking_source,
37
37
  json_extract(asking.message, '$.sender') AS asking_sender
@@ -72,19 +72,14 @@ export function heldConversations(connection, conversations) {
72
72
  }
73
73
  export function keptMessages(connection, { conversation, messages, read }) {
74
74
  for (const message of messages) {
75
- const [held] = connection.rows('SELECT id FROM conversation_messages WHERE conversation = ? AND identity = ?', [conversation, message.identity]);
76
- const record = [
75
+ connection.run('INSERT INTO conversation_messages (conversation, identity, turn, position, message, text) VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT (conversation, identity) DO UPDATE SET turn = excluded.turn, position = excluded.position, message = excluded.message, text = excluded.text', [
76
+ conversation,
77
+ message.identity,
77
78
  message.turn,
78
79
  message.position,
79
80
  JSON.stringify(message.message ?? null),
80
81
  message.text,
81
- ];
82
- if (held === undefined) {
83
- connection.run('INSERT INTO conversation_messages (conversation, identity, turn, position, message, text) VALUES (?, ?, ?, ?, ?, ?)', [conversation, message.identity, ...record]);
84
- }
85
- else {
86
- connection.run('UPDATE conversation_messages SET turn = ?, position = ?, message = ?, text = ? WHERE id = ?', [...record, held.id]);
87
- }
82
+ ]);
88
83
  }
89
84
  if (read !== undefined) {
90
85
  connection.run('INSERT OR REPLACE INTO conversation_reads (conversation, read, partial) VALUES (?, ?, ?)', [conversation, read.at, read.partial ? 1 : 0]);
@@ -118,11 +113,11 @@ export function messageCount(connection, conversation, phrase) {
118
113
  return Number(counted?.held ?? 0);
119
114
  }
120
115
  function textOrNull(value) {
121
- return value === null || value === undefined ? null : text(value);
116
+ return value === null ? null : text(value);
122
117
  }
123
118
  function heldSource(source, sender) {
124
119
  return {
125
- source: source === null || source === undefined ? null : JSON.parse(text(source)),
120
+ source: source === null ? null : JSON.parse(text(source)),
126
121
  sender: textOrNull(sender),
127
122
  };
128
123
  }
@@ -157,10 +152,9 @@ export function turnArrived(connection, conversation, turn) {
157
152
  return (connection.rows('SELECT 1 FROM conversation_messages WHERE conversation = ? AND turn = ? LIMIT 1', [conversation, turn]).length > 0);
158
153
  }
159
154
  export function droppedMessages(connection, conversations) {
160
- for (const conversation of conversations) {
161
- connection.run('DELETE FROM conversation_messages WHERE conversation = ?', [conversation]);
162
- connection.run('DELETE FROM conversation_reads WHERE conversation = ?', [conversation]);
163
- }
155
+ const named = [JSON.stringify(conversations)];
156
+ connection.run('DELETE FROM conversation_messages WHERE conversation IN (SELECT value FROM json_each(?))', named);
157
+ connection.run('DELETE FROM conversation_reads WHERE conversation IN (SELECT value FROM json_each(?))', named);
164
158
  }
165
159
  export function forgottenMessages(connection) {
166
160
  connection.run('DELETE FROM conversation_messages');
@@ -0,0 +1,14 @@
1
+ import type { ScopedRefusal } from './adapter.js';
2
+ import { type ModelState } from './model.js';
3
+ import { type ReplicaRecord } from './replica.js';
4
+ import type { Runtime } from './runtime.js';
5
+ import type { RoomDeclaration } from './socket.js';
6
+ import type { RuntimeStore } from './store.js';
7
+ export declare function declaredAsHeld(held: ReplicaRecord | undefined, room: RoomDeclaration): boolean;
8
+ export declare function revoked(model: ModelState | undefined): boolean;
9
+ export declare function keepNaming(runtime: Runtime, local: RuntimeStore, room: RoomDeclaration): Promise<void>;
10
+ export declare function retainModel(runtime: Runtime, local: RuntimeStore, room: RoomDeclaration, given: ModelState | null): Promise<void>;
11
+ export declare function scoped(runtime: Runtime, result: ScopedRefusal, room: RoomDeclaration, local: RuntimeStore): Promise<void>;
12
+ export declare function settleModels(runtime: Runtime, held: readonly RoomDeclaration[], status: 'current' | 'cached', local: RuntimeStore): Promise<void>;
13
+ export declare function cachedModels(runtime: Runtime, local: RuntimeStore): Promise<void>;
14
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAS9F;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAE9D;AAMD,wBAAsB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,iBAqB5F;AAMD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,UAAU,GAAG,IAAI,iBAuDzB;AAED,wBAAsB,MAAM,CAC1B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,YAAY,iBA0BpB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,SAAS,eAAe,EAAE,EAChC,MAAM,EAAE,SAAS,GAAG,QAAQ,EAC5B,KAAK,EAAE,YAAY,iBAsDpB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAcvF"}
package/dist/models.js ADDED
@@ -0,0 +1,195 @@
1
+ import { changeSet } from './change-set.js';
2
+ import { composedOf } from './collection.js';
3
+ import { admitted, declarationOf, list, listedLocators } from './listing.js';
4
+ import { loseRooms } from './lost.js';
5
+ import { NO_MODEL } from './model.js';
6
+ import { storedRecord } from './replica.js';
7
+ import { overlayDiff, preparedAfter, replayed, sliceAt } from './saves.js';
8
+ import { emitRooms } from './shown.js';
9
+ export function declaredAsHeld(held, room) {
10
+ return (held === undefined ||
11
+ (JSON.stringify(held.operations) === JSON.stringify(room.operations) &&
12
+ JSON.stringify(held.replica) === JSON.stringify(room.replica) &&
13
+ JSON.stringify(held.providerOwnedPaths) === JSON.stringify(room.providerOwnedPaths) &&
14
+ JSON.stringify(held.authoredPaths) === JSON.stringify(room.authoredPaths) &&
15
+ JSON.stringify(held.typedSelection) === JSON.stringify(room.typedSelection ?? null)));
16
+ }
17
+ export function revoked(model) {
18
+ return model?.status === 'unavailable' && model.reason === 'revoked';
19
+ }
20
+ function unheldModelOf({ socket }, locator) {
21
+ return socket.rooms.standing(locator).unheldModel ?? NO_MODEL;
22
+ }
23
+ export async function keepNaming(runtime, local, room) {
24
+ const { store, socket } = runtime;
25
+ const held = await store.record(room.locator);
26
+ if (held === undefined || (held.name === room.name && held.handle === room.handle))
27
+ return;
28
+ await store.exclusive(async () => {
29
+ if (!socket.continuing())
30
+ return;
31
+ const current = await store.record(room.locator);
32
+ if (current === undefined)
33
+ return;
34
+ const record = { ...current, name: room.name, handle: room.handle };
35
+ await local.commit({
36
+ rooms: [
37
+ {
38
+ locator: room.locator,
39
+ key: record.key,
40
+ record: storedRecord(record),
41
+ composed: composedOf(store.composed(record)),
42
+ },
43
+ ],
44
+ });
45
+ emitRooms(runtime);
46
+ });
47
+ }
48
+ async function modelNow(runtime, locator) {
49
+ return (await runtime.store.record(locator))?.model ?? unheldModelOf(runtime, locator);
50
+ }
51
+ export async function retainModel(runtime, local, room, given) {
52
+ const { store, socket } = runtime;
53
+ const held = await store.record(room.locator);
54
+ const previous = held?.model ?? unheldModelOf(runtime, room.locator);
55
+ const next = given ?? previous;
56
+ if (JSON.stringify(previous) === JSON.stringify(next) && declaredAsHeld(held, room))
57
+ return;
58
+ await store.exclusive(async () => {
59
+ if (!socket.continuing())
60
+ return;
61
+ const work = await store.work(room.locator);
62
+ const current = work.replica;
63
+ let changed = null;
64
+ if (current !== undefined) {
65
+ const record = {
66
+ ...current.record,
67
+ name: room.name,
68
+ handle: room.handle,
69
+ operations: room.operations,
70
+ replica: room.replica,
71
+ providerOwnedPaths: room.providerOwnedPaths,
72
+ authoredPaths: room.authoredPaths,
73
+ typedSelection: room.typedSelection ?? null,
74
+ model: next,
75
+ };
76
+ const confirmedLayer = await sliceAt(store, record, 'confirmed', current.queue, current.overlaid);
77
+ const replayedLayer = await replayed(store, record, confirmedLayer, current.queue);
78
+ const diff = await overlayDiff(record, current, replayedLayer.visible, replayedLayer.touched);
79
+ const answer = await local.commit({
80
+ rooms: [
81
+ {
82
+ locator: room.locator,
83
+ key: record.key,
84
+ record: storedRecord(record),
85
+ roots: record.typedSelection?.roots ?? [],
86
+ composed: composedOf(store.composed(record)),
87
+ overlay: diff.overlay,
88
+ },
89
+ ],
90
+ });
91
+ preparedAfter(runtime, room.locator, answer);
92
+ changed = changeSet(room.locator, {
93
+ documents: answer.changed[room.locator] ?? [],
94
+ room: true,
95
+ });
96
+ }
97
+ else
98
+ socket.rooms.stand(room.locator, { unheldModel: next });
99
+ list(runtime, room, admitted(runtime, room));
100
+ if (changed === null)
101
+ emitRooms(runtime);
102
+ else
103
+ store.changed(changed);
104
+ });
105
+ }
106
+ export async function scoped(runtime, result, room, local) {
107
+ const { socket, journal } = runtime;
108
+ if (result.scope === 'content' && !result.retryable) {
109
+ journal.record(`scoped refusal ${room.locator} ${result.scope} ${result.code}`);
110
+ await loseRooms(runtime, [room.locator]);
111
+ return;
112
+ }
113
+ socket.rooms.stand(room.locator, {
114
+ refusal: { code: result.code, fields: result.fields, retryable: result.retryable },
115
+ });
116
+ let scopedAway = room;
117
+ if (result.scope === 'model')
118
+ await retainModel(runtime, local, room, {
119
+ status: 'unavailable',
120
+ reason: 'not-readable',
121
+ });
122
+ else if (result.scope !== 'operation') {
123
+ socket.rooms.stand(room.locator, { unreadable: true });
124
+ scopedAway = { ...room, replica: { ...room.replica, admission: 'unavailable' } };
125
+ await retainModel(runtime, local, scopedAway, null);
126
+ }
127
+ if (!socket.continuing())
128
+ return;
129
+ list(runtime, scopedAway, admitted(runtime, scopedAway));
130
+ emitRooms(runtime);
131
+ journal.record(`scoped refusal ${room.locator} ${result.scope} ${result.code}`);
132
+ }
133
+ export async function settleModels(runtime, held, status, local) {
134
+ const { store, socket, journal } = runtime;
135
+ const owed = (model) => model.status !== 'unavailable' && model.status !== status;
136
+ const declaredAnew = await store.exclusive(async () => {
137
+ if (!socket.continuing())
138
+ return [];
139
+ const stored = await store.rooms(held.map(({ locator }) => locator));
140
+ const unchanged = held.filter((room) => {
141
+ const record = stored.get(room.locator)?.record;
142
+ return (owed(record?.model ?? unheldModelOf(runtime, room.locator)) && declaredAsHeld(record, room));
143
+ });
144
+ const records = unchanged.flatMap((room) => {
145
+ const record = stored.get(room.locator)?.record;
146
+ return record === undefined
147
+ ? []
148
+ : [{ ...record, model: { ...record.model, status } }];
149
+ });
150
+ if (records.length > 0) {
151
+ try {
152
+ await local.commit({
153
+ rooms: records.map((record) => ({
154
+ locator: record.locator,
155
+ key: record.key,
156
+ record: storedRecord(record),
157
+ composed: composedOf(store.composed(record)),
158
+ })),
159
+ });
160
+ }
161
+ catch {
162
+ journal.record(`model ${status} persistence failed`);
163
+ }
164
+ }
165
+ for (const room of unchanged) {
166
+ const { unheldModel } = socket.rooms.standing(room.locator);
167
+ if (!stored.has(room.locator) && unheldModel !== null) {
168
+ socket.rooms.stand(room.locator, {
169
+ unheldModel: { ...unheldModel, status },
170
+ });
171
+ }
172
+ list(runtime, room, admitted(runtime, room));
173
+ }
174
+ if (unchanged.length > 0)
175
+ emitRooms(runtime);
176
+ return held.filter((room) => {
177
+ const record = stored.get(room.locator)?.record;
178
+ return (!unchanged.includes(room) && owed(record?.model ?? unheldModelOf(runtime, room.locator)));
179
+ });
180
+ });
181
+ for (const room of declaredAnew) {
182
+ const model = await modelNow(runtime, room.locator);
183
+ if (owed(model))
184
+ await retainModel(runtime, local, room, { ...model, status });
185
+ }
186
+ }
187
+ export async function cachedModels(runtime, local) {
188
+ const { store, socket } = runtime;
189
+ const held = await store.rooms();
190
+ await settleModels(runtime, listedLocators(runtime, held).flatMap((locator) => {
191
+ const room = socket.rooms.discovered(locator) ??
192
+ declarationOf(runtime, locator, held.get(locator))?.room;
193
+ return room === undefined ? [] : [room];
194
+ }), 'cached', local);
195
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observation.d.ts","sourceRoot":"","sources":["../src/observation.ts"],"names":[],"mappings":"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"}
@@ -90,24 +90,19 @@ export function opened(watch, keyed) {
90
90
  return new Promise((resolve, reject) => {
91
91
  let handle;
92
92
  let stop = () => { };
93
- try {
94
- stop = watch((message) => {
95
- if (handle !== undefined) {
96
- handle.receive(message);
97
- return;
98
- }
99
- handle = observed(message, () => stop(), keyed);
100
- resolve(handle.observation);
101
- }, (error) => {
102
- if (handle !== undefined)
103
- return;
104
- stop();
105
- reject(error);
106
- });
107
- }
108
- catch (error) {
93
+ stop = watch((message) => {
94
+ if (handle !== undefined) {
95
+ handle.receive(message);
96
+ return;
97
+ }
98
+ handle = observed(message, () => stop(), keyed);
99
+ resolve(handle.observation);
100
+ }, (error) => {
101
+ if (handle !== undefined)
102
+ return;
103
+ stop();
109
104
  reject(error);
110
- }
105
+ });
111
106
  });
112
107
  }
113
108
  export function observing(watch) {
package/dist/opened.js CHANGED
@@ -36,14 +36,14 @@ export function openedFiles(database, fenced) {
36
36
  let part = 0;
37
37
  const write = async (bytes) => {
38
38
  if (!(await database.ask({ kind: 'opened.part', key, part, bytes }))) {
39
- throw new Error('the device no longer keeps this download');
39
+ throw new Error();
40
40
  }
41
41
  part += 1;
42
42
  };
43
43
  try {
44
44
  if (fenced(name.locator) ||
45
45
  !(await database.ask({ kind: 'opened.begin', key, ...name, mediaType }))) {
46
- throw new Error('the device no longer reads this Room');
46
+ throw new Error();
47
47
  }
48
48
  for (;;) {
49
49
  const read = await reader.read();
@@ -61,7 +61,7 @@ export function openedFiles(database, fenced) {
61
61
  await write(taken(chunks, held));
62
62
  const received = hashed.hex();
63
63
  if (sha256 !== undefined && sha256 !== received) {
64
- throw new Error('the bytes are not the file the device asked for');
64
+ throw new Error();
65
65
  }
66
66
  const whole = await database.ask({
67
67
  kind: 'opened.keep',
@@ -0,0 +1,4 @@
1
+ import type { Runtime } from './runtime.js';
2
+ import type { RuntimeStore } from './store.js';
3
+ export declare function open(runtime: Runtime, opened: RuntimeStore): Promise<RuntimeStore>;
4
+ //# sourceMappingURL=opening.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opening.d.ts","sourceRoot":"","sources":["../src/opening.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,wBAAsB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CA2CxF"}
@@ -0,0 +1,57 @@
1
+ import { conversationsOpened } from './conversation.js';
2
+ import { detectStorageLoss, nextGeneration, refusedForSpace } from './durability.js';
3
+ import { sweep } from './install.js';
4
+ import { eraseFenced } from './lost.js';
5
+ import { prepare } from './preparation.js';
6
+ import { emitRooms, emitStorageLoss, statusShown } from './shown.js';
7
+ export async function open(runtime, opened) {
8
+ const { store, socket, journal, shell, conversations, build, usableWhenHeld } = runtime;
9
+ if (socket.closed())
10
+ throw new Error('runtime closed');
11
+ const interrupted = await opened.fences();
12
+ const kept = shell.generation;
13
+ const storedGeneration = await opened.generation();
14
+ const loss = detectStorageLoss(storedGeneration, kept);
15
+ const generation = nextGeneration(storedGeneration, kept);
16
+ if (generation !== storedGeneration)
17
+ await opened.rememberGeneration(generation);
18
+ if (generation !== kept)
19
+ await shell.keepGeneration(generation);
20
+ if (loss !== null) {
21
+ store.device.set({ storageLoss: loss });
22
+ emitStorageLoss(runtime);
23
+ }
24
+ const held = await opened.opened();
25
+ store.device.set({
26
+ heldWhenOpened: usableWhenHeld.length > 0 && (await opened.covering()).rooms.size > 0,
27
+ });
28
+ try {
29
+ await opened.demote();
30
+ await store.ask({ kind: 'read.builds', build });
31
+ for (const key of held.orphans)
32
+ await opened.release(key);
33
+ }
34
+ catch (error) {
35
+ if (!refusedForSpace(error))
36
+ throw error;
37
+ }
38
+ if (held.erasing || held.orphans.length > 0)
39
+ queueMicrotask(() => sweep(runtime));
40
+ await conversationsOpened(conversations, opened);
41
+ if (interrupted.length > 0) {
42
+ queueMicrotask(() => {
43
+ void eraseFenced(runtime, interrupted).catch(() => {
44
+ journal.record('erasure failed');
45
+ });
46
+ });
47
+ }
48
+ statusShown(runtime);
49
+ prepare(runtime);
50
+ emitRooms(runtime);
51
+ void store
52
+ .exclusive(() => runtime.unpair(opened))
53
+ .catch(() => {
54
+ journal.record('unpair failed');
55
+ });
56
+ return opened;
57
+ }
package/dist/outcome.d.ts CHANGED
@@ -13,7 +13,9 @@ export type CallResult = {
13
13
  kind: 'action';
14
14
  result: unknown;
15
15
  at?: RoomVersionAt;
16
- } | Refused<'rejected'> | Refused<'undeclared'> | Failure;
16
+ } | (Refused<'rejected'> & {
17
+ reset?: string;
18
+ }) | Refused<'undeclared'> | Failure;
17
19
  export type HistoryAnswer = Exclude<HistoryResult, {
18
20
  kind: Failure['kind'];
19
21
  }> | Failure;
@@ -1 +1 @@
1
- {"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../src/outcome.ts"],"names":[],"mappings":"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"}
package/dist/parts.d.ts CHANGED
@@ -38,6 +38,7 @@ export type Part = {
38
38
  };
39
39
  export declare function partsOf(raw: readonly unknown[]): readonly Part[];
40
40
  export declare function contextIn(raw: unknown): TurnContext | null;
41
+ export declare function tokensIn(raw: unknown): number | null;
41
42
  export type Turn = {
42
43
  readonly turn: string;
43
44
  readonly parts: readonly Part[];
@@ -1 +1 @@
1
- {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"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"}