@agentshouse/mdruntime 0.1.0-cbb8d8acc9d19 → 0.1.0-cc56db96f86ae

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 (223) hide show
  1. package/AGENTS.md +285 -225
  2. package/README.md +21 -10
  3. package/dist/adapter.d.ts +114 -26
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/attempt.d.ts +16 -0
  6. package/dist/attempt.d.ts.map +1 -0
  7. package/dist/attempt.js +70 -0
  8. package/dist/binary.d.ts +23 -0
  9. package/dist/binary.d.ts.map +1 -0
  10. package/dist/binary.js +8 -0
  11. package/dist/bootstrap.d.ts +18 -5
  12. package/dist/bootstrap.d.ts.map +1 -1
  13. package/dist/bootstrap.js +147 -40
  14. package/dist/change-set.d.ts +7 -2
  15. package/dist/change-set.d.ts.map +1 -1
  16. package/dist/change-set.js +50 -16
  17. package/dist/change.d.ts +45 -0
  18. package/dist/change.d.ts.map +1 -1
  19. package/dist/change.js +34 -0
  20. package/dist/chat/acts.d.ts +33 -0
  21. package/dist/chat/acts.d.ts.map +1 -0
  22. package/dist/chat/acts.js +36 -0
  23. package/dist/chat/context.d.ts +3 -0
  24. package/dist/chat/context.d.ts.map +1 -0
  25. package/dist/chat/context.js +10 -0
  26. package/dist/chat/earlier.d.ts +10 -0
  27. package/dist/chat/earlier.d.ts.map +1 -0
  28. package/dist/chat/earlier.js +54 -0
  29. package/dist/chat/house.d.ts +25 -0
  30. package/dist/chat/house.d.ts.map +1 -0
  31. package/dist/chat/house.js +38 -0
  32. package/dist/chat/input.d.ts +11 -0
  33. package/dist/chat/input.d.ts.map +1 -0
  34. package/dist/chat/input.js +92 -0
  35. package/dist/chat/kit.d.ts +61 -0
  36. package/dist/chat/kit.d.ts.map +1 -0
  37. package/dist/chat/kit.js +123 -0
  38. package/dist/chat/lasting.d.ts +6 -0
  39. package/dist/chat/lasting.d.ts.map +1 -0
  40. package/dist/chat/lasting.js +19 -0
  41. package/dist/chat/list.d.ts +28 -0
  42. package/dist/chat/list.d.ts.map +1 -0
  43. package/dist/chat/list.js +103 -0
  44. package/dist/chat/markdown.d.ts +21 -0
  45. package/dist/chat/markdown.d.ts.map +1 -0
  46. package/dist/chat/markdown.js +246 -0
  47. package/dist/chat/message.d.ts +7 -0
  48. package/dist/chat/message.d.ts.map +1 -0
  49. package/dist/chat/message.js +237 -0
  50. package/dist/chat/messages.d.ts +29 -0
  51. package/dist/chat/messages.d.ts.map +1 -0
  52. package/dist/chat/messages.js +190 -0
  53. package/dist/chat/name.d.ts +7 -0
  54. package/dist/chat/name.d.ts.map +1 -0
  55. package/dist/chat/name.js +37 -0
  56. package/dist/chat/opened.d.ts +12 -0
  57. package/dist/chat/opened.d.ts.map +1 -0
  58. package/dist/chat/opened.js +19 -0
  59. package/dist/chat/overlay.d.ts +32 -0
  60. package/dist/chat/overlay.d.ts.map +1 -0
  61. package/dist/chat/overlay.js +103 -0
  62. package/dist/chat/parts.d.ts +58 -0
  63. package/dist/chat/parts.d.ts.map +1 -0
  64. package/dist/chat/parts.js +120 -0
  65. package/dist/chat/pieces.d.ts +62 -0
  66. package/dist/chat/pieces.d.ts.map +1 -0
  67. package/dist/chat/pieces.js +1110 -0
  68. package/dist/chat/process.d.ts +20 -0
  69. package/dist/chat/process.d.ts.map +1 -0
  70. package/dist/chat/process.js +32 -0
  71. package/dist/chat/provider.d.ts +68 -0
  72. package/dist/chat/provider.d.ts.map +1 -0
  73. package/dist/chat/provider.js +619 -0
  74. package/dist/chat/question.d.ts +9 -0
  75. package/dist/chat/question.d.ts.map +1 -0
  76. package/dist/chat/question.js +69 -0
  77. package/dist/chat/questions.d.ts +31 -0
  78. package/dist/chat/questions.d.ts.map +1 -0
  79. package/dist/chat/questions.js +111 -0
  80. package/dist/chat/read.d.ts +5 -0
  81. package/dist/chat/read.d.ts.map +1 -0
  82. package/dist/chat/read.js +13 -0
  83. package/dist/chat/ready.d.ts +37 -0
  84. package/dist/chat/ready.d.ts.map +1 -0
  85. package/dist/chat/ready.js +93 -0
  86. package/dist/chat/room-file.d.ts +8 -0
  87. package/dist/chat/room-file.d.ts.map +1 -0
  88. package/dist/chat/room-file.js +67 -0
  89. package/dist/chat/steady.d.ts +3 -0
  90. package/dist/chat/steady.d.ts.map +1 -0
  91. package/dist/chat/steady.js +26 -0
  92. package/dist/chat/style.d.ts +4 -0
  93. package/dist/chat/style.d.ts.map +1 -0
  94. package/dist/chat/style.js +306 -0
  95. package/dist/chat.d.ts +15 -0
  96. package/dist/chat.d.ts.map +1 -0
  97. package/dist/chat.js +8 -0
  98. package/dist/client.d.ts +33 -13
  99. package/dist/client.d.ts.map +1 -1
  100. package/dist/client.js +81 -16
  101. package/dist/collection.d.ts +23 -13
  102. package/dist/collection.d.ts.map +1 -1
  103. package/dist/collection.js +367 -38
  104. package/dist/connection.d.ts +54 -16
  105. package/dist/connection.d.ts.map +1 -1
  106. package/dist/connection.js +2582 -486
  107. package/dist/conversation.d.ts +39 -12
  108. package/dist/conversation.d.ts.map +1 -1
  109. package/dist/conversation.js +546 -171
  110. package/dist/digest.d.ts +2 -0
  111. package/dist/digest.d.ts.map +1 -0
  112. package/dist/digest.js +100 -0
  113. package/dist/durability.d.ts +7 -1
  114. package/dist/durability.d.ts.map +1 -1
  115. package/dist/entry.d.ts +17 -0
  116. package/dist/entry.d.ts.map +1 -0
  117. package/dist/entry.js +157 -0
  118. package/dist/expectation.d.ts +21 -0
  119. package/dist/expectation.d.ts.map +1 -0
  120. package/dist/expectation.js +70 -0
  121. package/dist/failure.d.ts +13 -0
  122. package/dist/failure.d.ts.map +1 -0
  123. package/dist/failure.js +19 -0
  124. package/dist/fence.d.ts +6 -0
  125. package/dist/fence.d.ts.map +1 -0
  126. package/dist/fence.js +10 -0
  127. package/dist/file.d.ts +2 -10
  128. package/dist/file.d.ts.map +1 -1
  129. package/dist/file.js +3 -120
  130. package/dist/host.d.ts +15 -3
  131. package/dist/host.d.ts.map +1 -1
  132. package/dist/host.js +107 -21
  133. package/dist/identity.d.ts +5 -0
  134. package/dist/identity.d.ts.map +1 -1
  135. package/dist/identity.js +19 -1
  136. package/dist/index.d.ts +20 -10
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +7 -0
  139. package/dist/memory.d.ts +11 -4
  140. package/dist/memory.d.ts.map +1 -1
  141. package/dist/memory.js +92 -27
  142. package/dist/model.d.ts +7 -4
  143. package/dist/model.d.ts.map +1 -1
  144. package/dist/model.js +10 -1
  145. package/dist/observation.d.ts +7 -2
  146. package/dist/observation.d.ts.map +1 -1
  147. package/dist/observation.js +29 -12
  148. package/dist/open.d.ts +2 -0
  149. package/dist/open.d.ts.map +1 -0
  150. package/dist/open.js +1 -0
  151. package/dist/outcome.d.ts +57 -3
  152. package/dist/outcome.d.ts.map +1 -1
  153. package/dist/outcome.js +67 -1
  154. package/dist/overlay.d.ts +18 -5
  155. package/dist/overlay.d.ts.map +1 -1
  156. package/dist/overlay.js +271 -165
  157. package/dist/query.d.ts +61 -4
  158. package/dist/query.d.ts.map +1 -1
  159. package/dist/query.js +40 -7
  160. package/dist/reach.d.ts +13 -4
  161. package/dist/reach.d.ts.map +1 -1
  162. package/dist/reach.js +201 -47
  163. package/dist/react.d.ts +31 -20
  164. package/dist/react.d.ts.map +1 -1
  165. package/dist/react.js +13 -21
  166. package/dist/read-side.d.ts +18 -9
  167. package/dist/read-side.d.ts.map +1 -1
  168. package/dist/read-side.js +903 -157
  169. package/dist/readiness.d.ts +53 -0
  170. package/dist/readiness.d.ts.map +1 -0
  171. package/dist/readiness.js +33 -0
  172. package/dist/reads.d.ts +11 -0
  173. package/dist/reads.d.ts.map +1 -0
  174. package/dist/reads.js +98 -0
  175. package/dist/recovery.d.ts +25 -0
  176. package/dist/recovery.d.ts.map +1 -0
  177. package/dist/recovery.js +198 -0
  178. package/dist/refresh.d.ts +13 -3
  179. package/dist/refresh.d.ts.map +1 -1
  180. package/dist/refresh.js +73 -43
  181. package/dist/replica.d.ts +16 -8
  182. package/dist/replica.d.ts.map +1 -1
  183. package/dist/replica.js +198 -91
  184. package/dist/room-draft.d.ts +40 -9
  185. package/dist/room-draft.d.ts.map +1 -1
  186. package/dist/room-draft.js +153 -37
  187. package/dist/rows.d.ts +10 -13
  188. package/dist/rows.d.ts.map +1 -1
  189. package/dist/rows.js +19 -14
  190. package/dist/save.d.ts +72 -4
  191. package/dist/save.d.ts.map +1 -1
  192. package/dist/save.js +812 -145
  193. package/dist/search.d.ts +52 -8
  194. package/dist/search.d.ts.map +1 -1
  195. package/dist/search.js +242 -46
  196. package/dist/seed.d.ts +16 -0
  197. package/dist/seed.d.ts.map +1 -0
  198. package/dist/seed.js +75 -0
  199. package/dist/shared.d.ts +19 -0
  200. package/dist/shared.d.ts.map +1 -0
  201. package/dist/shared.js +461 -0
  202. package/dist/status.d.ts +6 -2
  203. package/dist/status.d.ts.map +1 -1
  204. package/dist/status.js +0 -8
  205. package/dist/store.d.ts +90 -23
  206. package/dist/store.d.ts.map +1 -1
  207. package/dist/store.js +675 -295
  208. package/dist/tables.d.ts +181 -0
  209. package/dist/tables.d.ts.map +1 -0
  210. package/dist/tables.js +309 -0
  211. package/dist/turn.d.ts +9 -0
  212. package/dist/turn.d.ts.map +1 -0
  213. package/dist/turn.js +67 -0
  214. package/dist/windows.d.ts +21 -0
  215. package/dist/windows.d.ts.map +1 -0
  216. package/dist/windows.js +84 -0
  217. package/dist/wire.d.ts +165 -33
  218. package/dist/wire.d.ts.map +1 -1
  219. package/dist/wire.js +67 -31
  220. package/package.json +30 -14
  221. package/dist/attachment.d.ts +0 -3
  222. package/dist/attachment.d.ts.map +0 -1
  223. package/dist/attachment.js +0 -8
@@ -0,0 +1,181 @@
1
+ export type Value = string | number | bigint | Uint8Array | null;
2
+ export type Row = Readonly<Record<string, Value>>;
3
+ export interface Connection {
4
+ run(sql: string, bind?: readonly Value[]): void;
5
+ rows(sql: string, bind?: readonly Value[]): readonly Row[];
6
+ }
7
+ export declare const FILE_PART_BYTES = 1048576;
8
+ export declare const AUTHORED_TABLES: readonly string[];
9
+ export type AuthoredFact = 'holder' | 'binding' | 'generation';
10
+ export type StoredFile = {
11
+ readonly key: string;
12
+ readonly blob: Blob;
13
+ };
14
+ export interface FileSpool {
15
+ held(): Iterable<string>;
16
+ spool(key: string, type: string, parts: Iterable<Uint8Array>): Promise<Blob>;
17
+ drop(key: string): Promise<void>;
18
+ }
19
+ export type KeptPending = {
20
+ readonly id: string;
21
+ readonly batch: string;
22
+ readonly state: string;
23
+ readonly files: readonly string[];
24
+ };
25
+ export type KeptRecord = {
26
+ readonly record: string;
27
+ readonly files: readonly string[];
28
+ };
29
+ export type AuthoredRows = {
30
+ readonly locator: string;
31
+ readonly order?: readonly string[];
32
+ readonly added?: readonly KeptPending[];
33
+ readonly founded?: readonly Omit<KeptPending, 'state'>[];
34
+ readonly roomDrafts?: readonly (KeptRecord & {
35
+ readonly path: string;
36
+ })[];
37
+ readonly consumedRoomDrafts?: readonly string[];
38
+ };
39
+ export type HeldQueues = {
40
+ readonly queues: readonly {
41
+ readonly locator: string;
42
+ readonly ids: readonly string[];
43
+ }[];
44
+ readonly pending: readonly {
45
+ readonly locator: string;
46
+ readonly id: string;
47
+ readonly batch: string;
48
+ readonly state: string;
49
+ }[];
50
+ };
51
+ export interface AuthoredRequests {
52
+ readonly 'authored.queues': {
53
+ readonly asked: Readonly<Record<never, never>>;
54
+ readonly answer: HeldQueues;
55
+ };
56
+ readonly 'authored.roomDrafts': {
57
+ readonly asked: Readonly<Record<never, never>>;
58
+ readonly answer: readonly string[];
59
+ };
60
+ readonly 'authored.chatDrafts': {
61
+ readonly asked: Readonly<Record<never, never>>;
62
+ readonly answer: readonly string[];
63
+ };
64
+ readonly 'authored.calls': {
65
+ readonly asked: Readonly<Record<never, never>>;
66
+ readonly answer: readonly string[];
67
+ };
68
+ readonly 'authored.fences': {
69
+ readonly asked: Readonly<Record<never, never>>;
70
+ readonly answer: readonly string[];
71
+ };
72
+ readonly 'authored.fact': {
73
+ readonly asked: {
74
+ readonly name: AuthoredFact;
75
+ };
76
+ readonly answer: string | null;
77
+ };
78
+ readonly 'authored.file': {
79
+ readonly asked: {
80
+ readonly key: string;
81
+ readonly type: string;
82
+ };
83
+ readonly answer: Blob;
84
+ };
85
+ readonly 'authored.keep': {
86
+ readonly asked: {
87
+ readonly writes: readonly AuthoredRows[];
88
+ readonly files: readonly StoredFile[];
89
+ readonly whole: boolean;
90
+ };
91
+ readonly answer: string | null;
92
+ };
93
+ readonly 'authored.amend': {
94
+ readonly asked: {
95
+ readonly locator: string;
96
+ readonly id: string;
97
+ readonly amendment: string;
98
+ };
99
+ readonly answer: null;
100
+ };
101
+ readonly 'authored.roomDraft': {
102
+ readonly asked: {
103
+ readonly locator: string;
104
+ readonly path: string;
105
+ readonly kept: KeptRecord | null;
106
+ readonly files: readonly StoredFile[];
107
+ };
108
+ readonly answer: string | null;
109
+ };
110
+ readonly 'authored.chatDraft': {
111
+ readonly asked: {
112
+ readonly kept: readonly {
113
+ readonly conversation: string;
114
+ readonly record: string;
115
+ }[];
116
+ readonly dropped: readonly string[];
117
+ };
118
+ readonly answer: null;
119
+ };
120
+ readonly 'authored.call': {
121
+ readonly asked: {
122
+ readonly operation: string;
123
+ readonly kept: KeptRecord | null;
124
+ readonly files: readonly StoredFile[];
125
+ };
126
+ readonly answer: null;
127
+ };
128
+ readonly 'authored.fence': {
129
+ readonly asked: {
130
+ readonly locators: readonly string[];
131
+ };
132
+ readonly answer: null;
133
+ };
134
+ readonly 'authored.unfence': {
135
+ readonly asked: {
136
+ readonly locators: readonly string[];
137
+ };
138
+ readonly answer: null;
139
+ };
140
+ readonly 'authored.discard': {
141
+ readonly asked: {
142
+ readonly locator: string;
143
+ };
144
+ readonly answer: null;
145
+ };
146
+ readonly 'authored.remember': {
147
+ readonly asked: {
148
+ readonly name: AuthoredFact;
149
+ readonly value: string;
150
+ };
151
+ readonly answer: null;
152
+ };
153
+ readonly 'authored.claim': {
154
+ readonly asked: {
155
+ readonly holder: string;
156
+ };
157
+ readonly answer: boolean;
158
+ };
159
+ readonly 'authored.end': {
160
+ readonly asked: {
161
+ readonly holder: string | null;
162
+ };
163
+ readonly answer: boolean;
164
+ };
165
+ }
166
+ export type AuthoredKind = keyof AuthoredRequests;
167
+ export type AuthoredRequest<K extends AuthoredKind = AuthoredKind> = {
168
+ readonly [Kind in K]: {
169
+ readonly kind: Kind;
170
+ } & AuthoredRequests[Kind]['asked'];
171
+ }[K];
172
+ export type AuthoredAnswer<K extends AuthoredKind> = AuthoredRequests[K]['answer'];
173
+ export interface RuntimeDatabase {
174
+ ask<K extends AuthoredKind>(request: AuthoredRequest<K>): Promise<AuthoredAnswer<K>>;
175
+ }
176
+ export declare function isAuthored(request: {
177
+ readonly kind: string;
178
+ }): request is AuthoredRequest;
179
+ export declare function readsAuthored(request: AuthoredRequest): boolean;
180
+ export declare function answerAuthored(connection: Connection, request: AuthoredRequest, spool: FileSpool): unknown;
181
+ //# sourceMappingURL=tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tables.d.ts","sourceRoot":"","sources":["../src/tables.ts"],"names":[],"mappings":"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"}
package/dist/tables.js ADDED
@@ -0,0 +1,309 @@
1
+ export const FILE_PART_BYTES = 1_048_576;
2
+ const TABLES = [
3
+ ['authored_facts', 'name TEXT PRIMARY KEY, value TEXT NOT NULL'],
4
+ ['authored_queues', 'locator TEXT PRIMARY KEY, ids TEXT NOT NULL'],
5
+ [
6
+ 'authored_pending',
7
+ 'locator TEXT NOT NULL, id TEXT NOT NULL, batch TEXT NOT NULL, state TEXT NOT NULL, files TEXT NOT NULL, PRIMARY KEY (locator, id)',
8
+ ],
9
+ [
10
+ 'authored_room_drafts',
11
+ 'locator TEXT NOT NULL, path TEXT NOT NULL, record TEXT NOT NULL, files TEXT NOT NULL, PRIMARY KEY (locator, path)',
12
+ ],
13
+ ['authored_chat_drafts', 'conversation TEXT PRIMARY KEY, record TEXT NOT NULL'],
14
+ ['authored_calls', 'operation TEXT PRIMARY KEY, record TEXT NOT NULL, files TEXT NOT NULL'],
15
+ ['authored_fences', 'locator TEXT PRIMARY KEY'],
16
+ ];
17
+ export const AUTHORED_TABLES = [
18
+ ...TABLES.map(([name, columns]) => `CREATE TABLE ${name} (${columns}) WITHOUT ROWID`),
19
+ 'CREATE TABLE authored_file_parts (key TEXT NOT NULL, part INTEGER NOT NULL, bytes BLOB NOT NULL, PRIMARY KEY (key, part))',
20
+ ];
21
+ const OWNERS = ['authored_pending', 'authored_room_drafts', 'authored_calls'];
22
+ const UNOWNED_PARTS = `DELETE FROM authored_file_parts WHERE key NOT IN (${OWNERS.map((table) => `SELECT value FROM ${table}, json_each(${table}.files)`).join(' UNION ')})`;
23
+ const READS = new Set([
24
+ 'authored.queues',
25
+ 'authored.roomDrafts',
26
+ 'authored.chatDrafts',
27
+ 'authored.calls',
28
+ 'authored.fences',
29
+ 'authored.fact',
30
+ 'authored.file',
31
+ ]);
32
+ const KINDS = new Set([
33
+ ...READS,
34
+ 'authored.keep',
35
+ 'authored.amend',
36
+ 'authored.roomDraft',
37
+ 'authored.chatDraft',
38
+ 'authored.call',
39
+ 'authored.fence',
40
+ 'authored.unfence',
41
+ 'authored.discard',
42
+ 'authored.remember',
43
+ 'authored.claim',
44
+ 'authored.end',
45
+ ]);
46
+ export function isAuthored(request) {
47
+ return KINDS.has(request.kind);
48
+ }
49
+ export function readsAuthored(request) {
50
+ return READS.has(request.kind);
51
+ }
52
+ function text(value) {
53
+ return typeof value === 'string' ? value : String(value);
54
+ }
55
+ function texts(rows, column) {
56
+ return rows.map((row) => text(row[column]));
57
+ }
58
+ function owned(files) {
59
+ return JSON.stringify([...new Set(files)]);
60
+ }
61
+ function fact(connection, name) {
62
+ const [held] = connection.rows('SELECT value FROM authored_facts WHERE name = ?', [name]);
63
+ return held === undefined ? null : text(held.value);
64
+ }
65
+ function remember(connection, name, value) {
66
+ connection.run('INSERT OR REPLACE INTO authored_facts (name, value) VALUES (?, ?)', [
67
+ name,
68
+ value,
69
+ ]);
70
+ return null;
71
+ }
72
+ function fenced(connection, locator) {
73
+ return connection.rows('SELECT 1 FROM authored_fences WHERE locator = ?', [locator]).length > 0;
74
+ }
75
+ function stored(connection, key) {
76
+ return (connection.rows('SELECT 1 FROM authored_file_parts WHERE key = ? LIMIT 1', [key]).length > 0);
77
+ }
78
+ async function storedFiles(connection, files) {
79
+ for (const { key, blob } of files) {
80
+ if (stored(connection, key))
81
+ continue;
82
+ for (let at = 0, part = 0; at < blob.size; at += FILE_PART_BYTES, part += 1) {
83
+ const bytes = new Uint8Array(await blob.slice(at, at + FILE_PART_BYTES).arrayBuffer());
84
+ connection.run('INSERT INTO authored_file_parts (key, part, bytes) VALUES (?, ?, ?)', [
85
+ key,
86
+ part,
87
+ bytes,
88
+ ]);
89
+ }
90
+ }
91
+ }
92
+ function* fileParts(connection, key) {
93
+ for (let part = 0;; part += 1) {
94
+ const [held] = connection.rows('SELECT bytes FROM authored_file_parts WHERE key = ? AND part = ?', [key, part]);
95
+ if (!(held?.bytes instanceof Uint8Array))
96
+ return;
97
+ yield held.bytes;
98
+ }
99
+ }
100
+ async function spooled(connection, spool, { key, type }) {
101
+ for (const held of [...spool.held()]) {
102
+ if (held !== key && !stored(connection, held))
103
+ await spool.drop(held);
104
+ }
105
+ return spool.spool(key, type, fileParts(connection, key));
106
+ }
107
+ function unowned(connection) {
108
+ connection.run(UNOWNED_PARTS);
109
+ }
110
+ function queued(connection) {
111
+ return {
112
+ queues: connection.rows('SELECT locator, ids FROM authored_queues').map((row) => ({
113
+ locator: text(row.locator),
114
+ ids: JSON.parse(text(row.ids)),
115
+ })),
116
+ pending: connection
117
+ .rows('SELECT locator, id, batch, state FROM authored_pending')
118
+ .map((row) => ({
119
+ locator: text(row.locator),
120
+ id: text(row.id),
121
+ batch: text(row.batch),
122
+ state: text(row.state),
123
+ })),
124
+ };
125
+ }
126
+ function heldOrder(connection, locator) {
127
+ const [held] = connection.rows('SELECT ids FROM authored_queues WHERE locator = ?', [locator]);
128
+ return held === undefined ? [] : JSON.parse(text(held.ids));
129
+ }
130
+ function keptRows(connection, { locator, order, added, founded, roomDrafts, consumedRoomDrafts }) {
131
+ for (const path of consumedRoomDrafts ?? []) {
132
+ connection.run('DELETE FROM authored_room_drafts WHERE locator = ? AND path = ?', [
133
+ locator,
134
+ path,
135
+ ]);
136
+ }
137
+ for (const { path, record, files } of roomDrafts ?? []) {
138
+ connection.run('INSERT OR REPLACE INTO authored_room_drafts (locator, path, record, files) VALUES (?, ?, ?, ?)', [locator, path, record, owned(files)]);
139
+ }
140
+ if (order === undefined)
141
+ return;
142
+ const before = new Set(heldOrder(connection, locator));
143
+ const after = new Set(order);
144
+ if (after.size === 0)
145
+ connection.run('DELETE FROM authored_queues WHERE locator = ?', [locator]);
146
+ else {
147
+ connection.run('INSERT OR REPLACE INTO authored_queues (locator, ids) VALUES (?, ?)', [
148
+ locator,
149
+ JSON.stringify([...after]),
150
+ ]);
151
+ }
152
+ for (const id of before) {
153
+ if (!after.has(id)) {
154
+ connection.run('DELETE FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
155
+ }
156
+ }
157
+ for (const { id, batch, state, files } of added ?? []) {
158
+ if (before.has(id) || !after.has(id))
159
+ continue;
160
+ connection.run('INSERT OR REPLACE INTO authored_pending (locator, id, batch, state, files) VALUES (?, ?, ?, ?, ?)', [locator, id, batch, state, owned(files)]);
161
+ }
162
+ for (const { id, batch, files } of founded ?? []) {
163
+ if (!before.has(id))
164
+ continue;
165
+ connection.run('UPDATE authored_pending SET batch = ?, files = ? WHERE locator = ? AND id = ?', [batch, owned(files), locator, id]);
166
+ }
167
+ }
168
+ async function kept(connection, { writes, files, whole }) {
169
+ const refused = writes.find(({ locator }) => fenced(connection, locator));
170
+ if (refused !== undefined && whole)
171
+ return refused.locator;
172
+ await storedFiles(connection, files);
173
+ for (const write of writes) {
174
+ if (!fenced(connection, write.locator))
175
+ keptRows(connection, write);
176
+ }
177
+ unowned(connection);
178
+ return refused?.locator ?? null;
179
+ }
180
+ function amended(connection, { locator, id, amendment }) {
181
+ if (fenced(connection, locator))
182
+ return null;
183
+ const [held] = connection.rows('SELECT state FROM authored_pending WHERE locator = ? AND id = ?', [locator, id]);
184
+ if (held === undefined)
185
+ return null;
186
+ connection.run('UPDATE authored_pending SET state = ? WHERE locator = ? AND id = ?', [
187
+ JSON.stringify({
188
+ ...JSON.parse(text(held.state)),
189
+ ...JSON.parse(amendment),
190
+ }),
191
+ locator,
192
+ id,
193
+ ]);
194
+ return null;
195
+ }
196
+ async function roomDraft(connection, { locator, path, kept: draft, files }) {
197
+ if (fenced(connection, locator))
198
+ return locator;
199
+ await storedFiles(connection, files);
200
+ if (draft === null) {
201
+ connection.run('DELETE FROM authored_room_drafts WHERE locator = ? AND path = ?', [
202
+ locator,
203
+ path,
204
+ ]);
205
+ }
206
+ else {
207
+ connection.run('INSERT OR REPLACE INTO authored_room_drafts (locator, path, record, files) VALUES (?, ?, ?, ?)', [locator, path, draft.record, owned(draft.files)]);
208
+ }
209
+ unowned(connection);
210
+ return null;
211
+ }
212
+ function chatDraft(connection, { kept: drafts, dropped }) {
213
+ for (const conversation of dropped) {
214
+ connection.run('DELETE FROM authored_chat_drafts WHERE conversation = ?', [conversation]);
215
+ }
216
+ for (const { conversation, record } of drafts) {
217
+ connection.run('INSERT OR REPLACE INTO authored_chat_drafts (conversation, record) VALUES (?, ?)', [conversation, record]);
218
+ }
219
+ return null;
220
+ }
221
+ async function call(connection, { operation, kept: held, files }) {
222
+ await storedFiles(connection, files);
223
+ if (held === null)
224
+ connection.run('DELETE FROM authored_calls WHERE operation = ?', [operation]);
225
+ else {
226
+ connection.run('INSERT OR REPLACE INTO authored_calls (operation, record, files) VALUES (?, ?, ?)', [operation, held.record, owned(held.files)]);
227
+ }
228
+ unowned(connection);
229
+ return null;
230
+ }
231
+ function roomWork(connection, locator) {
232
+ connection.run('DELETE FROM authored_queues WHERE locator = ?', [locator]);
233
+ connection.run('DELETE FROM authored_pending WHERE locator = ?', [locator]);
234
+ }
235
+ function fence(connection, locators) {
236
+ for (const locator of locators) {
237
+ connection.run('INSERT OR REPLACE INTO authored_fences (locator) VALUES (?)', [locator]);
238
+ roomWork(connection, locator);
239
+ connection.run('DELETE FROM authored_room_drafts WHERE locator = ?', [locator]);
240
+ }
241
+ unowned(connection);
242
+ return null;
243
+ }
244
+ function unfence(connection, locators) {
245
+ for (const locator of locators) {
246
+ connection.run('DELETE FROM authored_fences WHERE locator = ?', [locator]);
247
+ }
248
+ return null;
249
+ }
250
+ function discard(connection, locator) {
251
+ roomWork(connection, locator);
252
+ unowned(connection);
253
+ return null;
254
+ }
255
+ function claim(connection, holder) {
256
+ const held = fact(connection, 'holder');
257
+ if (held !== null)
258
+ return held === holder;
259
+ remember(connection, 'holder', holder);
260
+ return true;
261
+ }
262
+ function end(connection, holder) {
263
+ if (holder !== null && claim(connection, holder))
264
+ return true;
265
+ for (const [table] of TABLES)
266
+ connection.run(`DELETE FROM ${table}`);
267
+ connection.run('DELETE FROM authored_file_parts');
268
+ return false;
269
+ }
270
+ export function answerAuthored(connection, request, spool) {
271
+ switch (request.kind) {
272
+ case 'authored.queues':
273
+ return queued(connection);
274
+ case 'authored.roomDrafts':
275
+ return texts(connection.rows('SELECT record FROM authored_room_drafts'), 'record');
276
+ case 'authored.chatDrafts':
277
+ return texts(connection.rows('SELECT record FROM authored_chat_drafts'), 'record');
278
+ case 'authored.calls':
279
+ return texts(connection.rows('SELECT record FROM authored_calls'), 'record');
280
+ case 'authored.fences':
281
+ return texts(connection.rows('SELECT locator FROM authored_fences'), 'locator');
282
+ case 'authored.fact':
283
+ return fact(connection, request.name);
284
+ case 'authored.file':
285
+ return spooled(connection, spool, request);
286
+ case 'authored.keep':
287
+ return kept(connection, request);
288
+ case 'authored.amend':
289
+ return amended(connection, request);
290
+ case 'authored.roomDraft':
291
+ return roomDraft(connection, request);
292
+ case 'authored.chatDraft':
293
+ return chatDraft(connection, request);
294
+ case 'authored.call':
295
+ return call(connection, request);
296
+ case 'authored.fence':
297
+ return fence(connection, request.locators);
298
+ case 'authored.unfence':
299
+ return unfence(connection, request.locators);
300
+ case 'authored.discard':
301
+ return discard(connection, request.locator);
302
+ case 'authored.remember':
303
+ return remember(connection, request.name, request.value);
304
+ case 'authored.claim':
305
+ return claim(connection, request.holder);
306
+ case 'authored.end':
307
+ return end(connection, request.holder);
308
+ }
309
+ }
package/dist/turn.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export declare function yielded(): Promise<void>;
2
+ export declare const ROW_WEIGHT = 256;
3
+ export type Later<T> = T | Promise<T>;
4
+ export declare function after<T, R>(value: Later<T>, next: (value: T) => Later<R>): Later<R>;
5
+ export declare function inUnits<T>(items: Iterable<T>, each: (item: T) => number, ended?: () => void, paused?: () => Promise<void>): Later<void>;
6
+ export declare function finished<R>(steps: Generator<number, R, void>): R;
7
+ export declare function stepped<R>(steps: Generator<number, R, void>): Later<R>;
8
+ export declare function inChunks<T>(items: Iterable<T>, weigh: (item: T) => number, each: (chunk: readonly T[]) => Later<void>): Promise<void>;
9
+ //# sourceMappingURL=turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turn.d.ts","sourceRoot":"","sources":["../src/turn.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CASvC;AAID,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAEnF;AAqBD,wBAAgB,OAAO,CAAC,CAAC,EACvB,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EACzB,KAAK,GAAE,MAAM,IAAe,EAC5B,MAAM,GAAE,MAAM,OAAO,CAAC,IAAI,CAAW,GACpC,KAAK,CAAC,IAAI,CAAC,CAWb;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAIhE;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAStE;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAC9B,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAClB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC,CAWf"}
package/dist/turn.js ADDED
@@ -0,0 +1,67 @@
1
+ export function yielded() {
2
+ return new Promise((resolve) => {
3
+ const channel = new MessageChannel();
4
+ channel.port1.onmessage = () => {
5
+ channel.port1.close();
6
+ resolve();
7
+ };
8
+ structuredClone(channel.port2, { transfer: [channel.port2] }).postMessage(null);
9
+ });
10
+ }
11
+ const UNIT = 1 << 20;
12
+ export const ROW_WEIGHT = 256;
13
+ export function after(value, next) {
14
+ return value instanceof Promise ? value.then(next) : next(value);
15
+ }
16
+ async function resumed(iterator, each, ended, paused) {
17
+ for (let spent = UNIT;;) {
18
+ if (spent >= UNIT) {
19
+ await paused();
20
+ spent = 0;
21
+ }
22
+ const next = iterator.next();
23
+ if (next.done === true)
24
+ break;
25
+ spent += each(next.value);
26
+ if (spent >= UNIT)
27
+ ended();
28
+ }
29
+ ended();
30
+ }
31
+ export function inUnits(items, each, ended = () => { }, paused = yielded) {
32
+ const iterator = items[Symbol.iterator]();
33
+ let spent = 0;
34
+ for (let next = iterator.next(); next.done !== true; next = iterator.next()) {
35
+ spent += each(next.value);
36
+ if (spent >= UNIT) {
37
+ ended();
38
+ return resumed(iterator, each, ended, paused);
39
+ }
40
+ }
41
+ ended();
42
+ }
43
+ export function finished(steps) {
44
+ for (let step = steps.next();; step = steps.next()) {
45
+ if (step.done === true)
46
+ return step.value;
47
+ }
48
+ }
49
+ export function stepped(steps) {
50
+ let result;
51
+ const driven = function* () {
52
+ result = yield* steps;
53
+ };
54
+ return after(inUnits(driven(), (weight) => weight), () => result);
55
+ }
56
+ export async function inChunks(items, weigh, each) {
57
+ const iterator = items[Symbol.iterator]();
58
+ for (let next = iterator.next(); next.done !== true;) {
59
+ await yielded();
60
+ const chunk = [];
61
+ for (let spent = 0; next.done !== true && spent < UNIT; next = iterator.next()) {
62
+ chunk.push(next.value);
63
+ spent += weigh(next.value);
64
+ }
65
+ await each(chunk);
66
+ }
67
+ }
@@ -0,0 +1,21 @@
1
+ export declare const MAXIMUM_WINDOW = 1000;
2
+ export declare const FROM_START = "[]";
3
+ export declare function capped(limit: number | null | undefined): number;
4
+ export type Ordering = {
5
+ readonly direction: 'asc' | 'desc';
6
+ readonly nulls: 'first' | 'last';
7
+ readonly stringSort: 'lexical' | 'locale';
8
+ readonly locale: string | undefined;
9
+ readonly localeOptions: Intl.CollatorOptions | undefined;
10
+ };
11
+ interface Placed {
12
+ readonly position: string;
13
+ readonly identity: string;
14
+ }
15
+ export declare function messageOrder(left: Placed, right: Placed): number;
16
+ export declare function precedes(message: Placed, before: readonly [string, string] | null): boolean;
17
+ export declare function beyond(values: readonly unknown[], cursor: readonly unknown[], orderings: readonly Ordering[]): boolean;
18
+ export declare function cursorOf(values: readonly unknown[]): string;
19
+ export declare function decodedCursor(text: string): readonly unknown[] | null;
20
+ export {};
21
+ //# sourceMappingURL=windows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.d.ts","sourceRoot":"","sources":["../src/windows.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,eAAO,MAAM,UAAU,OAAO,CAAC;AAE/B,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAE/D;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;CAC1D,CAAC;AAEF,UAAU,MAAM;IACd,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,OAAO,CAE3F;AA0CD,wBAAgB,MAAM,CACpB,MAAM,EAAE,SAAS,OAAO,EAAE,EAC1B,MAAM,EAAE,SAAS,OAAO,EAAE,EAC1B,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,OAAO,CAMT;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAE3D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,OAAO,EAAE,GAAG,IAAI,CAOrE"}