@agentshouse/mdruntime 0.1.0-alpha.1 → 0.1.0-alpha.10

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 (104) hide show
  1. package/dist/adapter.d.ts +142 -29
  2. package/dist/adapter.d.ts.map +1 -1
  3. package/dist/adapter.js.map +1 -1
  4. package/dist/bootstrap.d.ts +14 -0
  5. package/dist/bootstrap.d.ts.map +1 -0
  6. package/dist/bootstrap.js +55 -0
  7. package/dist/bootstrap.js.map +1 -0
  8. package/dist/change.d.ts +65 -0
  9. package/dist/change.d.ts.map +1 -0
  10. package/dist/change.js +12 -0
  11. package/dist/change.js.map +1 -0
  12. package/dist/client.d.ts +63 -0
  13. package/dist/client.d.ts.map +1 -0
  14. package/dist/client.js +227 -0
  15. package/dist/client.js.map +1 -0
  16. package/dist/collection.d.ts +33 -0
  17. package/dist/collection.d.ts.map +1 -0
  18. package/dist/collection.js +115 -0
  19. package/dist/collection.js.map +1 -0
  20. package/dist/connection.d.ts +85 -7
  21. package/dist/connection.d.ts.map +1 -1
  22. package/dist/connection.js +1573 -46
  23. package/dist/connection.js.map +1 -1
  24. package/dist/conversation.d.ts +57 -0
  25. package/dist/conversation.d.ts.map +1 -0
  26. package/dist/conversation.js +404 -0
  27. package/dist/conversation.js.map +1 -0
  28. package/dist/durability.d.ts +9 -0
  29. package/dist/durability.d.ts.map +1 -0
  30. package/dist/durability.js +11 -0
  31. package/dist/durability.js.map +1 -0
  32. package/dist/file.d.ts +20 -0
  33. package/dist/file.d.ts.map +1 -0
  34. package/dist/file.js +149 -0
  35. package/dist/file.js.map +1 -0
  36. package/dist/host.d.ts +9 -0
  37. package/dist/host.d.ts.map +1 -0
  38. package/dist/host.js +200 -0
  39. package/dist/host.js.map +1 -0
  40. package/dist/identity.d.ts +2 -0
  41. package/dist/identity.d.ts.map +1 -0
  42. package/dist/identity.js +16 -0
  43. package/dist/identity.js.map +1 -0
  44. package/dist/index.d.ts +15 -2
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +1 -0
  47. package/dist/index.js.map +1 -1
  48. package/dist/log.d.ts +5 -0
  49. package/dist/log.d.ts.map +1 -0
  50. package/dist/log.js +15 -0
  51. package/dist/log.js.map +1 -0
  52. package/dist/memory.d.ts +24 -4
  53. package/dist/memory.d.ts.map +1 -1
  54. package/dist/memory.js +300 -37
  55. package/dist/memory.js.map +1 -1
  56. package/dist/model.d.ts +70 -0
  57. package/dist/model.d.ts.map +1 -0
  58. package/dist/model.js +28 -0
  59. package/dist/model.js.map +1 -0
  60. package/dist/outcome.d.ts +37 -0
  61. package/dist/outcome.d.ts.map +1 -0
  62. package/dist/outcome.js +23 -0
  63. package/dist/outcome.js.map +1 -0
  64. package/dist/overlay.d.ts +8 -0
  65. package/dist/overlay.d.ts.map +1 -0
  66. package/dist/overlay.js +139 -0
  67. package/dist/overlay.js.map +1 -0
  68. package/dist/paths.d.ts +6 -0
  69. package/dist/paths.d.ts.map +1 -0
  70. package/dist/paths.js +47 -0
  71. package/dist/paths.js.map +1 -0
  72. package/dist/query.d.ts +13 -0
  73. package/dist/query.d.ts.map +1 -0
  74. package/dist/query.js +18 -0
  75. package/dist/query.js.map +1 -0
  76. package/dist/refresh.d.ts +14 -0
  77. package/dist/refresh.d.ts.map +1 -0
  78. package/dist/refresh.js +65 -0
  79. package/dist/refresh.js.map +1 -0
  80. package/dist/replica.d.ts +23 -0
  81. package/dist/replica.d.ts.map +1 -0
  82. package/dist/replica.js +78 -0
  83. package/dist/replica.js.map +1 -0
  84. package/dist/save.d.ts +31 -0
  85. package/dist/save.d.ts.map +1 -0
  86. package/dist/save.js +537 -0
  87. package/dist/save.js.map +1 -0
  88. package/dist/status.d.ts +25 -0
  89. package/dist/status.d.ts.map +1 -0
  90. package/dist/status.js +32 -0
  91. package/dist/status.js.map +1 -0
  92. package/dist/store.d.ts +76 -0
  93. package/dist/store.d.ts.map +1 -0
  94. package/dist/store.js +191 -0
  95. package/dist/store.js.map +1 -0
  96. package/dist/transfer.d.ts +5 -0
  97. package/dist/transfer.d.ts.map +1 -0
  98. package/dist/transfer.js +5 -0
  99. package/dist/transfer.js.map +1 -0
  100. package/dist/wire.d.ts +63 -0
  101. package/dist/wire.d.ts.map +1 -0
  102. package/dist/wire.js +139 -0
  103. package/dist/wire.js.map +1 -0
  104. package/package.json +14 -2
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/file.ts"],"sourcesContent":["export type InstructionFile = {\n name: string;\n blob: Blob;\n};\n\nexport type FileDeclaration = {\n name: string;\n mediaType: string;\n byteLength: number;\n contentHash: string;\n width?: number;\n height?: number;\n};\n\nexport type Extent = { width: number; height: number };\n\nconst PNG_SIGNATURE = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\nconst WEBP_SYNC = [0x9d, 0x01, 0x2a];\nconst SHAPELESS_JPEG_MARKERS = new Set([0xc4, 0xc8, 0xcc]);\nconst BMFF_CONTAINERS = new Set(['meta', 'iprp', 'ipco']);\n\nfunction starts(bytes: Uint8Array, signature: readonly number[], at = 0): boolean {\n return signature.every((value, index) => bytes[at + index] === value);\n}\n\nfunction text(bytes: Uint8Array, at: number, length: number): string {\n return String.fromCharCode(...bytes.subarray(at, at + length));\n}\n\nfunction bigEndian(bytes: Uint8Array, at: number, length: number): number {\n let value = 0;\n for (let index = 0; index < length; index += 1) value = value * 256 + (bytes[at + index] ?? 0);\n return value;\n}\n\nfunction littleEndian(bytes: Uint8Array, at: number, length: number): number {\n let value = 0;\n for (let index = length - 1; index >= 0; index -= 1)\n value = value * 256 + (bytes[at + index] ?? 0);\n return value;\n}\n\nfunction pngExtent(bytes: Uint8Array): Extent | null {\n if (bytes.length < 24 || !starts(bytes, PNG_SIGNATURE)) return null;\n if (text(bytes, 12, 4) !== 'IHDR') return null;\n return { width: bigEndian(bytes, 16, 4), height: bigEndian(bytes, 20, 4) };\n}\n\nfunction gifExtent(bytes: Uint8Array): Extent | null {\n if (bytes.length < 10 || text(bytes, 0, 3) !== 'GIF') return null;\n return { width: littleEndian(bytes, 6, 2), height: littleEndian(bytes, 8, 2) };\n}\n\nfunction jpegExtent(bytes: Uint8Array): Extent | null {\n if (bytes.length < 4 || bytes[0] !== 0xff || bytes[1] !== 0xd8) return null;\n let at = 2;\n while (at + 9 < bytes.length) {\n if (bytes[at] !== 0xff) return null;\n const marker = bytes[at + 1] ?? 0;\n if (marker === 0xd8 || marker === 0x01 || (marker >= 0xd0 && marker <= 0xd7)) {\n at += 2;\n continue;\n }\n const length = bigEndian(bytes, at + 2, 2);\n if (marker >= 0xc0 && marker <= 0xcf && !SHAPELESS_JPEG_MARKERS.has(marker)) {\n return { width: bigEndian(bytes, at + 7, 2), height: bigEndian(bytes, at + 5, 2) };\n }\n if (length < 2) return null;\n at += 2 + length;\n }\n return null;\n}\n\nfunction webpExtent(bytes: Uint8Array): Extent | null {\n if (bytes.length < 30 || text(bytes, 0, 4) !== 'RIFF' || text(bytes, 8, 4) !== 'WEBP')\n return null;\n const chunk = text(bytes, 12, 4);\n if (chunk === 'VP8X') {\n return {\n width: littleEndian(bytes, 24, 3) + 1,\n height: littleEndian(bytes, 27, 3) + 1,\n };\n }\n if (chunk === 'VP8 ' && starts(bytes, WEBP_SYNC, 23)) {\n return {\n width: littleEndian(bytes, 26, 2) & 0x3fff,\n height: littleEndian(bytes, 28, 2) & 0x3fff,\n };\n }\n if (chunk === 'VP8L' && bytes[20] === 0x2f) {\n const packed = littleEndian(bytes, 21, 4);\n return { width: (packed & 0x3fff) + 1, height: ((packed >>> 14) & 0x3fff) + 1 };\n }\n return null;\n}\n\nfunction spatialExtent(bytes: Uint8Array, from: number, to: number): Extent | null {\n let at = from;\n while (at + 8 <= to) {\n const size = bigEndian(bytes, at, 4);\n const name = text(bytes, at + 4, 4);\n const end = size === 0 ? to : at + size;\n if (size === 1 || end <= at || end > to) return null;\n if (name === 'ispe') {\n if (end < at + 20) return null;\n return { width: bigEndian(bytes, at + 12, 4), height: bigEndian(bytes, at + 16, 4) };\n }\n if (BMFF_CONTAINERS.has(name)) {\n const inner = spatialExtent(bytes, at + (name === 'meta' ? 12 : 8), end);\n if (inner !== null) return inner;\n }\n at = end;\n }\n return null;\n}\n\nfunction bmffExtent(bytes: Uint8Array): Extent | null {\n if (bytes.length < 16 || text(bytes, 4, 4) !== 'ftyp') return null;\n return spatialExtent(bytes, 0, bytes.length);\n}\n\nexport function extentOf(bytes: Uint8Array): Extent | null {\n return (\n pngExtent(bytes) ??\n jpegExtent(bytes) ??\n gifExtent(bytes) ??\n webpExtent(bytes) ??\n bmffExtent(bytes)\n );\n}\n\nexport function hexDigest(digest: ArrayBuffer): string {\n return [...new Uint8Array(digest)].map((value) => value.toString(16).padStart(2, '0')).join('');\n}\n\nexport async function declaredFile(file: InstructionFile): Promise<FileDeclaration> {\n const bytes = new Uint8Array(await file.blob.arrayBuffer());\n const extent = file.blob.type.startsWith('image/') ? extentOf(bytes) : null;\n return {\n name: file.name,\n mediaType: file.blob.type,\n byteLength: bytes.byteLength,\n contentHash: hexDigest(await crypto.subtle.digest('SHA-256', bytes)),\n ...(extent === null ? {} : extent),\n };\n}\n"],"names":["PNG_SIGNATURE","WEBP_SYNC","SHAPELESS_JPEG_MARKERS","Set","BMFF_CONTAINERS","starts","bytes","signature","at","every","value","index","text","length","String","fromCharCode","subarray","bigEndian","littleEndian","pngExtent","width","height","gifExtent","jpegExtent","marker","has","webpExtent","chunk","packed","spatialExtent","from","to","size","name","end","inner","bmffExtent","extentOf","hexDigest","digest","Uint8Array","map","toString","padStart","join","declaredFile","file","blob","arrayBuffer","extent","type","startsWith","mediaType","byteLength","contentHash","crypto","subtle"],"mappings":"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"}
package/dist/host.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { type MdRuntimeOptions } from './connection.js';
2
+ import { type RuntimePort } from './wire.js';
3
+ export type MdRuntimeHost = {
4
+ attach(port: RuntimePort, app: string): () => void;
5
+ endAuthorization(): Promise<void>;
6
+ };
7
+ export declare function serveMdRuntime(options: MdRuntimeOptions): MdRuntimeHost;
8
+ export type { RuntimePort } from './wire.js';
9
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAML,KAAK,WAAW,EAKjB,MAAM,WAAW,CAAC;AAEnB,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IACnD,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC,CAAC;AA2GF,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,GAAG,aAAa,CAuFvE;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
package/dist/host.js ADDED
@@ -0,0 +1,200 @@
1
+ import { createMdRuntime } from './connection.js';
2
+ import { removeRuntimeStore } from './store.js';
3
+ import { AUTHORIZATION_ENDED, carried, envelope, PROTOCOL_MISMATCH, request } from './wire.js';
4
+ function answered(md, app, member, input) {
5
+ switch(member){
6
+ case 'rooms':
7
+ return md.rooms();
8
+ case 'query':
9
+ return md.query(input[0]);
10
+ case 'types':
11
+ return md.types(input[0]);
12
+ case 'syncStatus':
13
+ return md.syncStatus();
14
+ case 'save':
15
+ return md.save(input[0], input[1], input[2]);
16
+ case 'outcome':
17
+ return md.outcome(input[0]);
18
+ case 'history':
19
+ return md.history(input[0], input[1], input[2]);
20
+ case 'call':
21
+ return md.call(input[0], input[1]);
22
+ case 'log':
23
+ return md.log();
24
+ case 'storageLoss':
25
+ return md.storageLoss();
26
+ case 'persistence':
27
+ return md.persistence();
28
+ case 'reauthorize':
29
+ return md.reauthorize();
30
+ case 'draft.list':
31
+ return md.draft.list();
32
+ case 'draft.read':
33
+ return md.draft.read(input[0], input[1]);
34
+ case 'draft.replace':
35
+ return md.draft.replace(input[0], input[1], input[2]);
36
+ case 'draft.discard':
37
+ return md.draft.discard(input[0], input[1]);
38
+ case 'queue.discard':
39
+ return md.queue.discard(input[0], input[1]);
40
+ case 'presentation.read':
41
+ return md.presentation.read(app);
42
+ case 'presentation.write':
43
+ return md.presentation.write(app, input[0]);
44
+ case 'conversation.list':
45
+ return md.conversation.list();
46
+ case 'conversation.read':
47
+ return md.conversation.read(input[0]);
48
+ case 'conversation.older':
49
+ return md.conversation.older(input[0]);
50
+ case 'conversation.compose':
51
+ return md.conversation.compose(input[0], input[1]);
52
+ case 'conversation.discard':
53
+ return md.conversation.discard(input[0]);
54
+ case 'conversation.create':
55
+ return md.conversation.create(input[0]);
56
+ case 'conversation.send':
57
+ return md.conversation.send(input[0]);
58
+ case 'conversation.answer':
59
+ return md.conversation.answer(input[0], input[1]);
60
+ case 'conversation.interrupt':
61
+ return md.conversation.interrupt(input[0]);
62
+ case 'conversation.kill':
63
+ return md.conversation.kill(input[0]);
64
+ case 'conversation.cancel':
65
+ return md.conversation.cancel(input[0], input[1]);
66
+ case 'conversation.delete':
67
+ return md.conversation.delete(input[0]);
68
+ }
69
+ }
70
+ function subscribed(md, app, topic, input, deliver) {
71
+ switch(topic){
72
+ case 'rooms':
73
+ return md.observe('rooms', deliver);
74
+ case 'connection-refusal':
75
+ return md.observe('connection-refusal', deliver);
76
+ case 'storage-loss':
77
+ return md.observe('storage-loss', deliver);
78
+ case 'sync-status':
79
+ return md.observe('sync-status', deliver);
80
+ case 'drafts':
81
+ return md.observe('drafts', deliver);
82
+ case 'queue':
83
+ return md.observe('queue', input[0], deliver);
84
+ case 'query':
85
+ return md.observe('query', input[0], deliver);
86
+ case 'presentation':
87
+ return md.observe('presentation', app, deliver);
88
+ case 'conversation':
89
+ return md.observe('conversation', input[0], deliver);
90
+ }
91
+ }
92
+ export function serveMdRuntime(options) {
93
+ const stopping = new AbortController();
94
+ const stop = ()=>{
95
+ stopping.abort();
96
+ };
97
+ options.signal?.addEventListener('abort', stop, {
98
+ once: true
99
+ });
100
+ if (options.signal?.aborted === true) stop();
101
+ const md = createMdRuntime({
102
+ ...options,
103
+ signal: stopping.signal
104
+ });
105
+ const attachments = new Map();
106
+ let authorized = true;
107
+ function attach(port, app) {
108
+ if (!authorized) throw new Error(AUTHORIZATION_ENDED);
109
+ const subscriptions = new Map();
110
+ let serving = true;
111
+ const send = (message)=>{
112
+ port.postMessage(envelope(message));
113
+ };
114
+ const detach = ()=>{
115
+ if (!serving) return;
116
+ serving = false;
117
+ for (const end of subscriptions.values())end();
118
+ subscriptions.clear();
119
+ attachments.delete(detach);
120
+ };
121
+ const serve = async (message)=>{
122
+ if (message.kind === 'hello') return;
123
+ if (message.kind === 'stop') {
124
+ subscriptions.get(message.id)?.();
125
+ subscriptions.delete(message.id);
126
+ return;
127
+ }
128
+ try {
129
+ if (message.kind === 'observe') {
130
+ subscriptions.set(message.id, subscribed(md, app, message.topic, message.input, (value)=>{
131
+ if (serving) send({
132
+ kind: 'event',
133
+ id: message.id,
134
+ value
135
+ });
136
+ }));
137
+ if (serving) send({
138
+ kind: 'result',
139
+ id: message.id,
140
+ value: null
141
+ });
142
+ return;
143
+ }
144
+ const value = await answered(md, app, message.member, message.input);
145
+ if (serving) send({
146
+ kind: 'result',
147
+ id: message.id,
148
+ value
149
+ });
150
+ } catch (error) {
151
+ if (serving) {
152
+ send({
153
+ kind: 'failure',
154
+ id: message.id,
155
+ message: error instanceof Error ? error.message : String(error)
156
+ });
157
+ }
158
+ }
159
+ };
160
+ port.addEventListener('message', (event)=>{
161
+ if (!serving) return;
162
+ const wire = carried(event.data);
163
+ if (wire === null) return;
164
+ if (!wire.matching) {
165
+ send({
166
+ kind: 'refusal',
167
+ refusal: PROTOCOL_MISMATCH
168
+ });
169
+ detach();
170
+ return;
171
+ }
172
+ const message = request(wire.message);
173
+ if (message === null) return;
174
+ void serve(message);
175
+ });
176
+ port.addEventListener('close', detach);
177
+ port.start();
178
+ attachments.set(detach, send);
179
+ return detach;
180
+ }
181
+ return {
182
+ attach,
183
+ async endAuthorization () {
184
+ authorized = false;
185
+ for (const [detach, send] of [
186
+ ...attachments
187
+ ]){
188
+ send({
189
+ kind: 'ended'
190
+ });
191
+ detach();
192
+ }
193
+ stop();
194
+ await removeRuntimeStore();
195
+ await options.shell.dropGeneration();
196
+ }
197
+ };
198
+ }
199
+
200
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/host.ts"],"sourcesContent":["import type { QueryOptions } from '@agentshouse/query';\nimport type { Change } from './change.js';\nimport {\n createMdRuntime,\n type HistoryQuery,\n type MdRuntime,\n type MdRuntimeOptions,\n} from './connection.js';\nimport type { UnsentInstruction } from './conversation.js';\nimport { removeRuntimeStore } from './store.js';\nimport {\n AUTHORIZATION_ENDED,\n carried,\n envelope,\n PROTOCOL_MISMATCH,\n request,\n type RuntimePort,\n type WireAnswer,\n type WireMember,\n type WireRequest,\n type WireTopic,\n} from './wire.js';\n\nexport type MdRuntimeHost = {\n attach(port: RuntimePort, app: string): () => void;\n endAuthorization(): Promise<void>;\n};\n\nfunction answered(\n md: MdRuntime,\n app: string,\n member: WireMember,\n input: readonly unknown[],\n): unknown {\n switch (member) {\n case 'rooms':\n return md.rooms();\n case 'query':\n return md.query(input[0] as QueryOptions | undefined);\n case 'types':\n return md.types(input[0] as string);\n case 'syncStatus':\n return md.syncStatus();\n case 'save':\n return md.save(\n input[0] as string,\n input[1] as readonly Change[],\n input[2] as string | undefined,\n );\n case 'outcome':\n return md.outcome(input[0] as string);\n case 'history':\n return md.history(input[0] as string, input[1] as string, input[2] as HistoryQuery);\n case 'call':\n return md.call(input[0] as string, input[1]);\n case 'log':\n return md.log();\n case 'storageLoss':\n return md.storageLoss();\n case 'persistence':\n return md.persistence();\n case 'reauthorize':\n return md.reauthorize();\n case 'draft.list':\n return md.draft.list();\n case 'draft.read':\n return md.draft.read(input[0] as string, input[1] as string);\n case 'draft.replace':\n return md.draft.replace(input[0] as string, input[1] as string, input[2]);\n case 'draft.discard':\n return md.draft.discard(input[0] as string, input[1] as string);\n case 'queue.discard':\n return md.queue.discard(input[0] as string, input[1] as string);\n case 'presentation.read':\n return md.presentation.read(app);\n case 'presentation.write':\n return md.presentation.write(app, input[0]);\n case 'conversation.list':\n return md.conversation.list();\n case 'conversation.read':\n return md.conversation.read(input[0] as string);\n case 'conversation.older':\n return md.conversation.older(input[0] as string);\n case 'conversation.compose':\n return md.conversation.compose(input[0] as string, input[1] as UnsentInstruction);\n case 'conversation.discard':\n return md.conversation.discard(input[0] as string);\n case 'conversation.create':\n return md.conversation.create(input[0]);\n case 'conversation.send':\n return md.conversation.send(input[0] as string);\n case 'conversation.answer':\n return md.conversation.answer(input[0] as string, input[1]);\n case 'conversation.interrupt':\n return md.conversation.interrupt(input[0] as string);\n case 'conversation.kill':\n return md.conversation.kill(input[0] as string);\n case 'conversation.cancel':\n return md.conversation.cancel(input[0] as string, input[1] as string);\n case 'conversation.delete':\n return md.conversation.delete(input[0] as string);\n }\n}\n\nfunction subscribed(\n md: MdRuntime,\n app: string,\n topic: WireTopic,\n input: readonly unknown[],\n deliver: (value: unknown) => void,\n): () => void {\n switch (topic) {\n case 'rooms':\n return md.observe('rooms', deliver);\n case 'connection-refusal':\n return md.observe('connection-refusal', deliver);\n case 'storage-loss':\n return md.observe('storage-loss', deliver);\n case 'sync-status':\n return md.observe('sync-status', deliver);\n case 'drafts':\n return md.observe('drafts', deliver);\n case 'queue':\n return md.observe('queue', input[0] as string, deliver);\n case 'query':\n return md.observe('query', input[0] as QueryOptions, deliver);\n case 'presentation':\n return md.observe('presentation', app, deliver);\n case 'conversation':\n return md.observe('conversation', input[0] as string, deliver);\n }\n}\n\nexport function serveMdRuntime(options: MdRuntimeOptions): MdRuntimeHost {\n const stopping = new AbortController();\n const stop = () => {\n stopping.abort();\n };\n options.signal?.addEventListener('abort', stop, { once: true });\n if (options.signal?.aborted === true) stop();\n const md = createMdRuntime({ ...options, signal: stopping.signal });\n const attachments = new Map<() => void, (message: WireAnswer) => void>();\n let authorized = true;\n\n function attach(port: RuntimePort, app: string): () => void {\n if (!authorized) throw new Error(AUTHORIZATION_ENDED);\n const subscriptions = new Map<number, () => void>();\n let serving = true;\n const send = (message: WireAnswer) => {\n port.postMessage(envelope(message));\n };\n const detach = () => {\n if (!serving) return;\n serving = false;\n for (const end of subscriptions.values()) end();\n subscriptions.clear();\n attachments.delete(detach);\n };\n const serve = async (message: WireRequest) => {\n if (message.kind === 'hello') return;\n if (message.kind === 'stop') {\n subscriptions.get(message.id)?.();\n subscriptions.delete(message.id);\n return;\n }\n try {\n if (message.kind === 'observe') {\n subscriptions.set(\n message.id,\n subscribed(md, app, message.topic, message.input, (value) => {\n if (serving) send({ kind: 'event', id: message.id, value });\n }),\n );\n if (serving) send({ kind: 'result', id: message.id, value: null });\n return;\n }\n const value = await answered(md, app, message.member, message.input);\n if (serving) send({ kind: 'result', id: message.id, value });\n } catch (error) {\n if (serving) {\n send({\n kind: 'failure',\n id: message.id,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n }\n };\n port.addEventListener('message', (event) => {\n if (!serving) return;\n const wire = carried(event.data);\n if (wire === null) return;\n if (!wire.matching) {\n send({ kind: 'refusal', refusal: PROTOCOL_MISMATCH });\n detach();\n return;\n }\n const message = request(wire.message);\n if (message === null) return;\n void serve(message);\n });\n port.addEventListener('close', detach);\n port.start();\n attachments.set(detach, send);\n return detach;\n }\n\n return {\n attach,\n async endAuthorization() {\n authorized = false;\n for (const [detach, send] of [...attachments]) {\n send({ kind: 'ended' });\n detach();\n }\n stop();\n await removeRuntimeStore();\n await options.shell.dropGeneration();\n },\n };\n}\n\nexport type { RuntimePort } from './wire.js';\n"],"names":["createMdRuntime","removeRuntimeStore","AUTHORIZATION_ENDED","carried","envelope","PROTOCOL_MISMATCH","request","answered","md","app","member","input","rooms","query","types","syncStatus","save","outcome","history","call","log","storageLoss","persistence","reauthorize","draft","list","read","replace","discard","queue","presentation","write","conversation","older","compose","create","send","answer","interrupt","kill","cancel","delete","subscribed","topic","deliver","observe","serveMdRuntime","options","stopping","AbortController","stop","abort","signal","addEventListener","once","aborted","attachments","Map","authorized","attach","port","Error","subscriptions","serving","message","postMessage","detach","end","values","clear","serve","kind","get","id","set","value","error","String","event","wire","data","matching","refusal","start","endAuthorization","shell","dropGeneration"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function changeBatchIdentity(at?: number): string;
2
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE"}
@@ -0,0 +1,16 @@
1
+ export function changeBatchIdentity(at = Date.now()) {
2
+ const bytes = new Uint8Array(16);
3
+ crypto.getRandomValues(bytes);
4
+ const time = BigInt(at);
5
+ for(let index = 0; index < 6; index += 1){
6
+ bytes[index] = Number(time >> BigInt(8 * (5 - index)) & 0xffn);
7
+ }
8
+ bytes[6] = bytes[6] & 0x0f | 0x70;
9
+ bytes[8] = bytes[8] & 0x3f | 0x80;
10
+ const hex = [
11
+ ...bytes
12
+ ].map((byte)=>byte.toString(16).padStart(2, '0')).join('');
13
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
14
+ }
15
+
16
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/identity.ts"],"sourcesContent":["export function changeBatchIdentity(at: number = Date.now()): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n const time = BigInt(at);\n for (let index = 0; index < 6; index += 1) {\n bytes[index] = Number((time >> BigInt(8 * (5 - index))) & 0xffn);\n }\n bytes[6] = (bytes[6] & 0x0f) | 0x70;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n"],"names":["changeBatchIdentity","at","Date","now","bytes","Uint8Array","crypto","getRandomValues","time","BigInt","index","Number","hex","map","byte","toString","padStart","join","slice"],"mappings":"AAAA,OAAO,SAASA,oBAAoBC,KAAaC,KAAKC,GAAG,EAAE;IACzD,MAAMC,QAAQ,IAAIC,WAAW;IAC7BC,OAAOC,eAAe,CAACH;IACvB,MAAMI,OAAOC,OAAOR;IACpB,IAAK,IAAIS,QAAQ,GAAGA,QAAQ,GAAGA,SAAS,EAAG;QACzCN,KAAK,CAACM,MAAM,GAAGC,OAAO,AAACH,QAAQC,OAAO,IAAK,CAAA,IAAIC,KAAI,KAAO,KAAK;IACjE;IACAN,KAAK,CAAC,EAAE,GAAG,AAACA,KAAK,CAAC,EAAE,GAAG,OAAQ;IAC/BA,KAAK,CAAC,EAAE,GAAG,AAACA,KAAK,CAAC,EAAE,GAAG,OAAQ;IAC/B,MAAMQ,MAAM;WAAIR;KAAM,CAACS,GAAG,CAAC,CAACC,OAASA,KAAKC,QAAQ,CAAC,IAAIC,QAAQ,CAAC,GAAG,MAAMC,IAAI,CAAC;IAC9E,OAAO,GAAGL,IAAIM,KAAK,CAAC,GAAG,GAAG,CAAC,EAAEN,IAAIM,KAAK,CAAC,GAAG,IAAI,CAAC,EAAEN,IAAIM,KAAK,CAAC,IAAI,IAAI,CAAC,EAAEN,IAAIM,KAAK,CAAC,IAAI,IAAI,CAAC,EAAEN,IAAIM,KAAK,CAAC,KAAK;AAC5G"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,17 @@
1
- export type { ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapRequest, BootstrapResult, Capability, DiscoverResult, DiscoveredRoom, Discovery, HistoryRequest, HistoryResult, MdModelIdentity, MutationRequest, MutationResult, PageToken, ProviderLimit, RefreshRequest, RefreshResult, Retention, RevokedAuthorization, RoomNotReadable, TransportUncertainty, } from './adapter.js';
2
- export type { AppRoom, ConnectionRefusal, ConnectionRefusalReason, MdRuntime, MdRuntimeOptions, } from './connection.js';
1
+ export type { ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ContractUnavailable, ConversationAction, ConversationCards, ConversationEvent, ConversationMessage, DiscoverResult, DiscoveredRoom, Discovery, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, MdModelIdentity, ModelRequest, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomNotReadable, RoomVersionNotification, SelectedRooms, TransportUncertainty, TypedSelection, ViewedConversations, } from './adapter.js';
2
+ export type { Change, ChangeBatch, Precondition } from './change.js';
3
+ export type { ConversationEntry, ConversationSurface, ConversationView, GrowingText, UnsentInstruction, } from './conversation.js';
4
+ export type { FileDeclaration, InstructionFile } from './file.js';
5
+ export type { MdType } from './collection.js';
6
+ export type { AppRoom, AppTypedSelection, ConnectionRefusal, ConnectionRefusalReason, DraftEntry, DraftSurface, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, QueueSurface, RoomTypes, SaveResult, } from './connection.js';
7
+ export type { AcceptedOutcome, AffectedState, CallResult, QueueEntry, QueueOutcome, SubmissionOutcome, } from './outcome.js';
8
+ export type { SaveRefusal } from './save.js';
9
+ export { changeBatchIdentity } from './identity.js';
3
10
  export { createMdRuntime } from './connection.js';
11
+ export type { RuntimeShell } from './durability.js';
12
+ export type { AttentionEntry, SyncStatus } from './status.js';
13
+ export type { Backlink, QueryDocument, QueryGroup, QueryOptions, QueryResult, Selector, } from '@agentshouse/query';
14
+ export type { AttachedModelBinding, ModelIdentity, ModelSnapshot, ModelState, ModelResult, ModelValidation, TypesResult, ValidationReceipt, } from './model.js';
15
+ export type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';
16
+ export type { QueryBinding, QueryInput } from './query.js';
4
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,cAAc,EACd,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,EACT,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAClE,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACrF,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export { changeBatchIdentity } from './identity.js';
1
2
  export { createMdRuntime } from './connection.js';
2
3
 
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/index.ts"],"sourcesContent":["export type {\n ActionDeclaration,\n ActionRequest,\n ActionResult,\n Adapter,\n AdapterFailure,\n Authorization,\n BootstrapRequest,\n BootstrapResult,\n Capability,\n DiscoverResult,\n DiscoveredRoom,\n Discovery,\n HistoryRequest,\n HistoryResult,\n MdModelIdentity,\n MutationRequest,\n MutationResult,\n PageToken,\n ProviderLimit,\n RefreshRequest,\n RefreshResult,\n Retention,\n RevokedAuthorization,\n RoomNotReadable,\n TransportUncertainty,\n} from './adapter.js';\nexport type {\n AppRoom,\n ConnectionRefusal,\n ConnectionRefusalReason,\n MdRuntime,\n MdRuntimeOptions,\n} from './connection.js';\nexport { createMdRuntime } from './connection.js';\n"],"names":["createMdRuntime"],"mappings":"AAkCA,SAASA,eAAe,QAAQ,kBAAkB"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/index.ts"],"sourcesContent":["export type {\n ActionDeclaration,\n ActionRequest,\n ActionResult,\n Adapter,\n AdapterFailure,\n Authorization,\n BootstrapPage,\n BootstrapRequest,\n BootstrapResult,\n Capability,\n ContractUnavailable,\n ConversationAction,\n ConversationCards,\n ConversationEvent,\n ConversationMessage,\n DiscoverResult,\n DiscoveredRoom,\n Discovery,\n HistoryRequest,\n HistoryResult,\n HistoryRetention,\n HistoryRevision,\n MdModelIdentity,\n ModelRequest,\n MutationRequest,\n MutationResult,\n PageToken,\n ProviderLimit,\n ProviderRefusal,\n RefreshPage,\n RefreshRequest,\n RefreshResult,\n Retention,\n RetryableRefusal,\n RevokedAuthorization,\n RoomNotReadable,\n RoomVersionNotification,\n SelectedRooms,\n TransportUncertainty,\n TypedSelection,\n ViewedConversations,\n} from './adapter.js';\nexport type { Change, ChangeBatch, Precondition } from './change.js';\nexport type {\n ConversationEntry,\n ConversationSurface,\n ConversationView,\n GrowingText,\n UnsentInstruction,\n} from './conversation.js';\nexport type { FileDeclaration, InstructionFile } from './file.js';\nexport type { MdType } from './collection.js';\nexport type {\n AppRoom,\n AppTypedSelection,\n ConnectionRefusal,\n ConnectionRefusalReason,\n DraftEntry,\n DraftSurface,\n HistoryQuery,\n MdRuntime,\n MdRuntimeOptions,\n PresentationSurface,\n QueueSurface,\n RoomTypes,\n SaveResult,\n} from './connection.js';\nexport type {\n AcceptedOutcome,\n AffectedState,\n CallResult,\n QueueEntry,\n QueueOutcome,\n SubmissionOutcome,\n} from './outcome.js';\nexport type { SaveRefusal } from './save.js';\nexport { changeBatchIdentity } from './identity.js';\nexport { createMdRuntime } from './connection.js';\nexport type { RuntimeShell } from './durability.js';\nexport type { AttentionEntry, SyncStatus } from './status.js';\nexport type {\n Backlink,\n QueryDocument,\n QueryGroup,\n QueryOptions,\n QueryResult,\n Selector,\n} from '@agentshouse/query';\n\nexport type {\n AttachedModelBinding,\n ModelIdentity,\n ModelSnapshot,\n ModelState,\n ModelResult,\n ModelValidation,\n TypesResult,\n ValidationReceipt,\n} from './model.js';\nexport type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';\nexport type { QueryBinding, QueryInput } from './query.js';\n"],"names":["changeBatchIdentity","createMdRuntime"],"mappings":"AA6EA,SAASA,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,eAAe,QAAQ,kBAAkB"}
package/dist/log.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export declare function createLog(): {
2
+ record(event: string): void;
3
+ export(): string;
4
+ };
5
+ //# sourceMappingURL=log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS;IAGrB,MAAM,QAAQ,MAAM;IAIpB,MAAM;EAIT"}
package/dist/log.js ADDED
@@ -0,0 +1,15 @@
1
+ const BOUND = 256;
2
+ export function createLog() {
3
+ const events = [];
4
+ return {
5
+ record (event) {
6
+ events.push(event);
7
+ if (events.length > BOUND) events.splice(0, events.length - BOUND);
8
+ },
9
+ export () {
10
+ return events.join('\n');
11
+ }
12
+ };
13
+ }
14
+
15
+ //# sourceMappingURL=log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/log.ts"],"sourcesContent":["const BOUND = 256;\n\nexport function createLog() {\n const events: string[] = [];\n return {\n record(event: string) {\n events.push(event);\n if (events.length > BOUND) events.splice(0, events.length - BOUND);\n },\n export() {\n return events.join('\\n');\n },\n };\n}\n"],"names":["BOUND","createLog","events","record","event","push","length","splice","export","join"],"mappings":"AAAA,MAAMA,QAAQ;AAEd,OAAO,SAASC;IACd,MAAMC,SAAmB,EAAE;IAC3B,OAAO;QACLC,QAAOC,KAAa;YAClBF,OAAOG,IAAI,CAACD;YACZ,IAAIF,OAAOI,MAAM,GAAGN,OAAOE,OAAOK,MAAM,CAAC,GAAGL,OAAOI,MAAM,GAAGN;QAC9D;QACAQ;YACE,OAAON,OAAOO,IAAI,CAAC;QACrB;IACF;AACF"}
package/dist/memory.d.ts CHANGED
@@ -1,16 +1,36 @@
1
- import { type Adapter, type Capability, type DiscoveredRoom, type MdModelIdentity, type ProviderLimit, type Retention } from './adapter.js';
1
+ import type { ModelResult } from './model.js';
2
+ import { type ActionResult, type Adapter, type Capability, type ConversationAction, type ConversationEvent, type ConversationMessage, type DiscoveredRoom, type MdModelIdentity, type ProviderLimit, type Retention, type RoomVersionNotification } from './adapter.js';
3
+ export type MemoryRoom = DiscoveredRoom & {
4
+ model?: ModelResult;
5
+ selectionModel?: ModelResult;
6
+ documents?: Readonly<Record<string, string>>;
7
+ revisions?: Readonly<Record<string, string>>;
8
+ binaryTargets?: readonly string[];
9
+ };
10
+ export type MemoryConversation = {
11
+ conversation: string;
12
+ messages?: readonly ConversationMessage[];
13
+ outcomes?: Partial<Record<ConversationAction, ActionResult>>;
14
+ };
2
15
  export type MemoryAdapterOptions = {
3
- rooms?: readonly DiscoveredRoom[];
16
+ rooms?: readonly MemoryRoom[];
17
+ conversations?: readonly MemoryConversation[];
18
+ historyPageSize?: number;
19
+ pageSize?: number;
4
20
  mdModel?: MdModelIdentity;
5
21
  supportedVersions?: readonly number[];
6
22
  capabilities?: readonly Capability[];
7
23
  providerLimits?: readonly ProviderLimit[];
8
24
  retention?: Retention;
9
- origins?: readonly string[];
10
25
  };
11
26
  export type MemoryAdapter = Adapter & {
12
- setRooms(rooms: readonly DiscoveredRoom[]): void;
27
+ setRooms(rooms: readonly MemoryRoom[]): void;
28
+ setConversations(conversations: readonly MemoryConversation[]): void;
13
29
  script(operation: keyof Adapter, answer: unknown): void;
30
+ notifyRoomVersion(notification: RoomVersionNotification): void;
31
+ notifyConversation(event: ConversationEvent): void;
32
+ selectedRooms(): readonly string[];
33
+ viewedConversations(): readonly string[];
14
34
  };
15
35
  export declare function createMemoryAdapter(options?: MemoryAdapterOptions): MemoryAdapter;
16
36
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,OAAO,EAIZ,KAAK,UAAU,EAEf,KAAK,cAAc,EAGnB,KAAK,eAAe,EAGpB,KAAK,aAAa,EAGlB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAAC;IACjD,MAAM,CAAC,SAAS,EAAE,MAAM,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACzD,CAAC;AASF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CA2GrF"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,OAAO,EAIZ,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EAExB,KAAK,cAAc,EAGnB,KAAK,eAAe,EAGpB,KAAK,aAAa,EAGlB,KAAK,SAAS,EACd,KAAK,uBAAuB,EAC7B,MAAM,cAAc,CAAC;AAkBtB,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACrC,cAAc,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAAC;IAC7C,gBAAgB,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,GAAG,IAAI,CAAC;IACrE,MAAM,CAAC,SAAS,EAAE,MAAM,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;IACxD,iBAAiB,CAAC,YAAY,EAAE,uBAAuB,GAAG,IAAI,CAAC;IAC/D,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnD,aAAa,IAAI,SAAS,MAAM,EAAE,CAAC;IACnC,mBAAmB,IAAI,SAAS,MAAM,EAAE,CAAC;CAC1C,CAAC;AA+BF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAwUrF"}