@agentshouse/mdruntime 0.1.0-alpha.42 → 0.1.0-alpha.44
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.
- package/AGENTS.md +22 -11
- package/dist/adapter.d.ts +23 -1
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +6 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +3 -2
- package/dist/change-set.js.map +1 -1
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -0
- package/dist/client.js.map +1 -1
- package/dist/connection.d.ts +1 -0
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +86 -31
- package/dist/connection.js.map +1 -1
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +2 -0
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/memory.d.ts +2 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +53 -10
- package/dist/memory.js.map +1 -1
- package/dist/overlay.d.ts +7 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +48 -15
- package/dist/overlay.js.map +1 -1
- package/dist/query.d.ts +4 -0
- package/dist/query.d.ts.map +1 -1
- package/dist/query.js +4 -1
- package/dist/query.js.map +1 -1
- package/dist/read-side.d.ts.map +1 -1
- package/dist/read-side.js +6 -0
- package/dist/read-side.js.map +1 -1
- package/dist/refresh.d.ts +3 -3
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +20 -4
- package/dist/refresh.js.map +1 -1
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +9 -0
- package/dist/replica.js.map +1 -1
- package/dist/rows.d.ts +3 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +5 -3
- package/dist/rows.js.map +1 -1
- package/dist/store.d.ts +2 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +20 -12
- package/dist/store.js.map +1 -1
- package/dist/wire.d.ts +1 -1
- package/dist/wire.d.ts.map +1 -1
- package/dist/wire.js +1 -0
- package/dist/wire.js.map +1 -1
- package/package.json +1 -1
package/dist/store.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sameChange } from './overlay.js';
|
|
1
2
|
const DATABASE = 'mdruntime';
|
|
2
3
|
const ROOMS = 'rooms';
|
|
3
4
|
const DOCUMENTS = 'documents';
|
|
@@ -11,7 +12,7 @@ const CONVERSATIONS = 'conversations';
|
|
|
11
12
|
const MESSAGES = 'messages';
|
|
12
13
|
const CHAT_DRAFTS = 'chatDrafts';
|
|
13
14
|
const CURRENT = 'current';
|
|
14
|
-
const SCHEMA =
|
|
15
|
+
const SCHEMA = 15;
|
|
15
16
|
function settled(request) {
|
|
16
17
|
return new Promise((resolve, reject)=>{
|
|
17
18
|
request.onsuccess = ()=>resolve(request.result);
|
|
@@ -62,7 +63,7 @@ function amendPending(database, locator, id, amendment) {
|
|
|
62
63
|
return completed(transaction);
|
|
63
64
|
}
|
|
64
65
|
function roomRecord(record, queue) {
|
|
65
|
-
const { documents, binaryTargets, revisions, ...room } = record;
|
|
66
|
+
const { documents, binaryTargets, revisions, changes, ...room } = record;
|
|
66
67
|
return {
|
|
67
68
|
...room,
|
|
68
69
|
order: queue.map((batch)=>batch.id)
|
|
@@ -158,24 +159,29 @@ export async function openRuntimeStore() {
|
|
|
158
159
|
...room,
|
|
159
160
|
documents: {},
|
|
160
161
|
revisions: {},
|
|
162
|
+
changes: {},
|
|
161
163
|
binaryTargets: []
|
|
162
164
|
});
|
|
163
165
|
}
|
|
166
|
+
const head = (room, held)=>{
|
|
167
|
+
if (held.revision !== null) {
|
|
168
|
+
room.revisions[held.path] = held.revision;
|
|
169
|
+
}
|
|
170
|
+
if (held.change !== null) {
|
|
171
|
+
room.changes[held.path] = held.change;
|
|
172
|
+
}
|
|
173
|
+
};
|
|
164
174
|
for (const document of documents){
|
|
165
175
|
const room = byRoom.get(document.locator);
|
|
166
176
|
if (room === undefined) continue;
|
|
167
177
|
room.documents[document.path] = document.content;
|
|
168
|
-
|
|
169
|
-
room.revisions[document.path] = document.revision;
|
|
170
|
-
}
|
|
178
|
+
head(room, document);
|
|
171
179
|
}
|
|
172
180
|
for (const target of targets){
|
|
173
181
|
const room = byRoom.get(target.locator);
|
|
174
182
|
if (room === undefined) continue;
|
|
175
183
|
room.binaryTargets.push(target.path);
|
|
176
|
-
|
|
177
|
-
room.revisions[target.path] = target.revision;
|
|
178
|
-
}
|
|
184
|
+
head(room, target);
|
|
179
185
|
}
|
|
180
186
|
return [
|
|
181
187
|
...byRoom.values()
|
|
@@ -199,12 +205,13 @@ export async function openRuntimeStore() {
|
|
|
199
205
|
]);
|
|
200
206
|
}
|
|
201
207
|
for (const [path, content] of Object.entries(next.documents)){
|
|
202
|
-
if (previous?.documents[path] === content && previous.revisions[path] === next.revisions[path]) continue;
|
|
208
|
+
if (previous?.documents[path] === content && previous.revisions[path] === next.revisions[path] && sameChange(previous.changes[path], next.changes[path])) continue;
|
|
203
209
|
documents.put({
|
|
204
210
|
locator: next.locator,
|
|
205
211
|
path,
|
|
206
212
|
content,
|
|
207
|
-
revision: next.revisions[path] ?? null
|
|
213
|
+
revision: next.revisions[path] ?? null,
|
|
214
|
+
change: next.changes[path] ?? null
|
|
208
215
|
});
|
|
209
216
|
}
|
|
210
217
|
const targets = transaction.objectStore(BINARY_TARGETS);
|
|
@@ -217,11 +224,12 @@ export async function openRuntimeStore() {
|
|
|
217
224
|
]);
|
|
218
225
|
}
|
|
219
226
|
for (const path of afterTargets){
|
|
220
|
-
if (!beforeTargets.has(path) || previous?.revisions[path] !== next.revisions[path]) {
|
|
227
|
+
if (!beforeTargets.has(path) || previous?.revisions[path] !== next.revisions[path] || !sameChange(previous?.changes[path], next.changes[path])) {
|
|
221
228
|
targets.put({
|
|
222
229
|
locator: next.locator,
|
|
223
230
|
path,
|
|
224
|
-
revision: next.revisions[path] ?? null
|
|
231
|
+
revision: next.revisions[path] ?? null,
|
|
232
|
+
change: next.changes[path] ?? null
|
|
225
233
|
});
|
|
226
234
|
}
|
|
227
235
|
}
|
package/dist/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/store.ts"],"sourcesContent":["import type { ModelState } from './model.js';\nimport type {\n Capability,\n Discovery,\n OperationScopes,\n ProviderLimit,\n ReplicaAdmission,\n TypedSelection,\n} from './adapter.js';\nimport type { AcceptedMessage } from './adapter.js';\nimport type { ChangeBatch } from './change.js';\nimport type { ChatDraftFile } from './file.js';\nimport type { Submission, SubmissionOutcome } from './outcome.js';\nimport type { RoomDraftRecord, SavedDraft } from './room-draft.js';\n\nconst DATABASE = 'mdruntime';\nconst ROOMS = 'rooms';\nconst DOCUMENTS = 'documents';\nconst BINARY_TARGETS = 'binaryTargets';\nconst PENDING_CHANGES = 'pendingChanges';\nconst OUTCOMES = 'outcomes';\nconst DECLARATIONS = 'declarations';\nconst ROOM_DRAFTS = 'roomDrafts';\nconst PRESENTATION = 'presentation';\nconst CONVERSATIONS = 'conversations';\nconst MESSAGES = 'messages';\nconst CHAT_DRAFTS = 'chatDrafts';\nconst CURRENT = 'current';\nconst SCHEMA = 14;\n\nexport type ReplicaRecord = {\n collectionRoot: string;\n locator: string;\n name: string;\n operations: OperationScopes;\n replica: ReplicaAdmission;\n model: ModelState;\n attachedModel: import('./model.js').ModelIdentity | null;\n typedSelection: TypedSelection | null;\n selectionModel: ModelState;\n providerOwnedPaths: readonly string[];\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n binaryTargets: readonly string[];\n revisions: Readonly<Record<string, string>>;\n};\n\ntype RoomRecord = Omit<ReplicaRecord, 'documents' | 'binaryTargets' | 'revisions'> & {\n order: readonly string[];\n};\n\ntype DocumentRecord = {\n locator: string;\n path: string;\n content: string;\n revision: string | null;\n};\n\ntype BinaryTargetRecord = { locator: string; path: string; revision: string | null };\n\nexport type PendingState = {\n readonly drafts: readonly SavedDraft[];\n readonly submission: Submission;\n readonly lost: boolean;\n readonly upload?: unknown;\n};\n\ntype PendingChangeRecord = PendingState & {\n locator: string;\n id: string;\n batch: ChangeBatch;\n};\n\nexport type OutcomeRecord = {\n locator: string;\n id: string;\n outcome: SubmissionOutcome;\n};\n\ntype DeclarationRecord = {\n lastCompleted: string | null;\n generation: string | null;\n providerLimits: readonly ProviderLimit[];\n capabilities: readonly Capability[];\n slots: NonNullable<Discovery['slots']>;\n};\n\nexport type QueueRecord = {\n locator: string;\n pending: readonly { batch: ChangeBatch; state: PendingState }[];\n};\n\nexport type PresentationRecord = {\n app: string;\n value: unknown;\n};\n\ntype ConversationRecord = {\n conversation: string;\n read: string | null;\n};\n\ntype MessageRecord = AcceptedMessage & { conversation: string };\n\nexport type HeldConversation = {\n conversation: string;\n read: string | null | undefined;\n messages: readonly AcceptedMessage[];\n};\n\nexport type ConversationWrite = {\n conversation: string;\n messages: readonly AcceptedMessage[];\n read?: string | null;\n sealed?: boolean;\n};\n\nexport type ChatDraftRecord = {\n conversation: string;\n text: string;\n files: readonly ChatDraftFile[];\n turn: string | null;\n};\n\nexport type RecordWrite = {\n next: ReplicaRecord;\n previous: ReplicaRecord | null;\n queue: readonly ChangeBatch[];\n previousQueue?: readonly ChangeBatch[];\n saved?: readonly SavedDraft[];\n outcomes?: readonly { id: string; outcome: SubmissionOutcome | null }[];\n roomDrafts?: readonly RoomDraftRecord[];\n consumedRoomDrafts?: readonly string[];\n};\n\nexport type RuntimeStore = {\n all(): Promise<readonly ReplicaRecord[]>;\n write(input: RecordWrite): Promise<void>;\n revokeModels(\n records: readonly { record: ReplicaRecord; queue: readonly ChangeBatch[] }[],\n ): Promise<void>;\n lastCompleted(): Promise<string | null>;\n complete(at: string): Promise<void>;\n providerLimits(): Promise<readonly ProviderLimit[]>;\n capabilities(): Promise<readonly Capability[]>;\n slots(): Promise<NonNullable<Discovery['slots']>>;\n declare(\n limits: readonly ProviderLimit[],\n capabilities: readonly Capability[],\n slots: NonNullable<Discovery['slots']>,\n ): Promise<void>;\n queues(): Promise<readonly QueueRecord[]>;\n outcomes(): Promise<readonly OutcomeRecord[]>;\n submit(locator: string, id: string, submission: Submission, lost: boolean): Promise<void>;\n keepUpload(locator: string, id: string, upload: unknown): Promise<void>;\n roomDrafts(): Promise<readonly RoomDraftRecord[]>;\n presentation(): Promise<readonly PresentationRecord[]>;\n present(record: PresentationRecord): Promise<void>;\n conversations(): Promise<readonly HeldConversation[]>;\n keepMessages(write: ConversationWrite): Promise<void>;\n dropConversations(conversations: readonly string[]): Promise<void>;\n chatDrafts(): Promise<readonly ChatDraftRecord[]>;\n keepChatDraft(record: ChatDraftRecord): Promise<void>;\n dropChatDraft(conversation: string): Promise<void>;\n keepRoomDraft(record: RoomDraftRecord): Promise<void>;\n discardRoomDraft(locator: string, path: string): Promise<void>;\n dropRooms(locators: readonly string[]): Promise<void>;\n generation(): Promise<string | null>;\n rememberGeneration(value: string): Promise<void>;\n close(): void;\n};\n\nfunction settled<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nfunction completed(transaction: IDBTransaction): Promise<void> {\n return new Promise((resolve, reject) => {\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n transaction.onabort = () => reject(transaction.error);\n });\n}\n\nconst EMPTY_DECLARATIONS: DeclarationRecord = {\n lastCompleted: null,\n generation: null,\n providerLimits: [],\n capabilities: [],\n slots: [],\n};\n\nfunction declaration(database: IDBDatabase): Promise<DeclarationRecord> {\n const transaction = database.transaction(DECLARATIONS, 'readonly');\n return settled<DeclarationRecord | undefined>(\n transaction.objectStore(DECLARATIONS).get(CURRENT),\n ).then((record) => record ?? EMPTY_DECLARATIONS);\n}\n\nfunction updateDeclaration(\n database: IDBDatabase,\n update: (record: DeclarationRecord) => DeclarationRecord,\n): Promise<void> {\n const transaction = database.transaction(DECLARATIONS, 'readwrite');\n const store = transaction.objectStore(DECLARATIONS);\n const prior = store.get(CURRENT);\n prior.onsuccess = () => {\n store.put(\n update((prior.result as DeclarationRecord | undefined) ?? EMPTY_DECLARATIONS),\n CURRENT,\n );\n };\n return completed(transaction);\n}\n\nfunction amendPending(\n database: IDBDatabase,\n locator: string,\n id: string,\n amendment: Partial<PendingState>,\n): Promise<void> {\n const transaction = database.transaction(PENDING_CHANGES, 'readwrite');\n const pending = transaction.objectStore(PENDING_CHANGES);\n const request = pending.get([locator, id]);\n request.onsuccess = () => {\n const record = request.result as PendingChangeRecord | undefined;\n if (record !== undefined) pending.put({ ...record, ...amendment });\n };\n return completed(transaction);\n}\n\nfunction roomRecord(record: ReplicaRecord, queue: readonly ChangeBatch[]): RoomRecord {\n const { documents, binaryTargets, revisions, ...room } = record;\n return { ...room, order: queue.map((batch) => batch.id) };\n}\n\nfunction removeRoomEntries(store: IDBObjectStore, locator: string) {\n const keys = store.getAllKeys();\n keys.onsuccess = () => {\n for (const key of keys.result) {\n if (Array.isArray(key) && key[0] === locator) store.delete(key);\n }\n };\n}\n\nexport function removeRuntimeStore(): Promise<void> {\n return new Promise((resolve, reject) => {\n const removal = indexedDB.deleteDatabase(DATABASE);\n removal.onsuccess = () => resolve();\n removal.onerror = () => reject(removal.error);\n });\n}\n\nexport async function openRuntimeStore(): Promise<RuntimeStore> {\n const opening = indexedDB.open(DATABASE, SCHEMA);\n opening.onupgradeneeded = () => {\n const database = opening.result;\n for (const name of [...database.objectStoreNames]) database.deleteObjectStore(name);\n database.createObjectStore(ROOMS, { keyPath: 'locator' });\n database.createObjectStore(DOCUMENTS, { keyPath: ['locator', 'path'] });\n database.createObjectStore(BINARY_TARGETS, { keyPath: ['locator', 'path'] });\n database.createObjectStore(PENDING_CHANGES, { keyPath: ['locator', 'id'] });\n const outcomes = database.createObjectStore(OUTCOMES, { keyPath: 'id' });\n outcomes.createIndex('locator', 'locator');\n database.createObjectStore(DECLARATIONS);\n database.createObjectStore(ROOM_DRAFTS, { keyPath: ['locator', 'path'] });\n database.createObjectStore(PRESENTATION, { keyPath: 'app' });\n database.createObjectStore(CONVERSATIONS, { keyPath: 'conversation' });\n const messages = database.createObjectStore(MESSAGES, {\n keyPath: ['conversation', 'identity'],\n });\n messages.createIndex('conversation', 'conversation');\n database.createObjectStore(CHAT_DRAFTS, { keyPath: 'conversation' });\n };\n const database = await settled(opening);\n return {\n async all() {\n const transaction = database.transaction([ROOMS, DOCUMENTS, BINARY_TARGETS], 'readonly');\n const [rooms, documents, targets] = await Promise.all([\n settled<RoomRecord[]>(transaction.objectStore(ROOMS).getAll()),\n settled<DocumentRecord[]>(transaction.objectStore(DOCUMENTS).getAll()),\n settled<BinaryTargetRecord[]>(transaction.objectStore(BINARY_TARGETS).getAll()),\n ]);\n const byRoom = new Map<string, ReplicaRecord>();\n for (const { order, ...room } of rooms) {\n byRoom.set(room.locator, { ...room, documents: {}, revisions: {}, binaryTargets: [] });\n }\n for (const document of documents) {\n const room = byRoom.get(document.locator);\n if (room === undefined) continue;\n (room.documents as Record<string, string>)[document.path] = document.content;\n if (document.revision !== null) {\n (room.revisions as Record<string, string>)[document.path] = document.revision;\n }\n }\n for (const target of targets) {\n const room = byRoom.get(target.locator);\n if (room === undefined) continue;\n (room.binaryTargets as string[]).push(target.path);\n if (target.revision !== null) {\n (room.revisions as Record<string, string>)[target.path] = target.revision;\n }\n }\n return [...byRoom.values()];\n },\n async write({\n next,\n previous,\n queue,\n previousQueue,\n saved,\n outcomes,\n roomDrafts,\n consumedRoomDrafts,\n }) {\n const transaction = database.transaction(\n [ROOMS, DOCUMENTS, BINARY_TARGETS, PENDING_CHANGES, OUTCOMES, ROOM_DRAFTS],\n 'readwrite',\n );\n transaction.objectStore(ROOMS).put(roomRecord(next, queue));\n const documents = transaction.objectStore(DOCUMENTS);\n for (const path of Object.keys(previous?.documents ?? {})) {\n if (next.documents[path] === undefined) documents.delete([next.locator, path]);\n }\n for (const [path, content] of Object.entries(next.documents)) {\n if (\n previous?.documents[path] === content &&\n previous.revisions[path] === next.revisions[path]\n )\n continue;\n documents.put({\n locator: next.locator,\n path,\n content,\n revision: next.revisions[path] ?? null,\n } satisfies DocumentRecord);\n }\n const targets = transaction.objectStore(BINARY_TARGETS);\n const beforeTargets = new Set(previous?.binaryTargets ?? []);\n const afterTargets = new Set(next.binaryTargets);\n for (const path of beforeTargets) {\n if (!afterTargets.has(path)) targets.delete([next.locator, path]);\n }\n for (const path of afterTargets) {\n if (!beforeTargets.has(path) || previous?.revisions[path] !== next.revisions[path]) {\n targets.put({\n locator: next.locator,\n path,\n revision: next.revisions[path] ?? null,\n });\n }\n }\n if (previousQueue !== undefined) {\n const pending = transaction.objectStore(PENDING_CHANGES);\n const before = new Set(previousQueue.map((batch) => batch.id));\n const after = new Set(queue.map((batch) => batch.id));\n for (const id of before) {\n if (!after.has(id)) pending.delete([next.locator, id]);\n }\n for (const batch of queue) {\n if (!before.has(batch.id)) {\n pending.put({\n locator: next.locator,\n id: batch.id,\n batch,\n drafts: saved ?? [],\n submission: { state: 'waiting' },\n lost: false,\n } satisfies PendingChangeRecord);\n }\n }\n }\n const outcomeStore = transaction.objectStore(OUTCOMES);\n for (const entry of outcomes ?? []) {\n if (entry.outcome === null) outcomeStore.delete(entry.id);\n else outcomeStore.put({ locator: next.locator, id: entry.id, outcome: entry.outcome });\n }\n const draftStore = transaction.objectStore(ROOM_DRAFTS);\n for (const path of consumedRoomDrafts ?? []) draftStore.delete([next.locator, path]);\n for (const record of roomDrafts ?? []) draftStore.put(record);\n await completed(transaction);\n },\n async revokeModels(records) {\n const transaction = database.transaction(ROOMS, 'readwrite');\n const rooms = transaction.objectStore(ROOMS);\n const revoked: ModelState = { status: 'unavailable', reason: 'revoked' };\n for (const { record, queue } of records) {\n rooms.put(roomRecord({ ...record, model: revoked, selectionModel: revoked }, queue));\n }\n await completed(transaction);\n },\n async lastCompleted() {\n return (await declaration(database)).lastCompleted;\n },\n complete(at) {\n return updateDeclaration(database, (record) => ({ ...record, lastCompleted: at }));\n },\n async providerLimits() {\n return (await declaration(database)).providerLimits;\n },\n async capabilities() {\n return (await declaration(database)).capabilities;\n },\n async slots() {\n return (await declaration(database)).slots;\n },\n declare(limits, capabilities, slots) {\n return updateDeclaration(database, (record) => ({\n ...record,\n providerLimits: limits,\n capabilities,\n slots,\n }));\n },\n async queues() {\n const transaction = database.transaction([ROOMS, PENDING_CHANGES], 'readonly');\n const [rooms, pending] = await Promise.all([\n settled<RoomRecord[]>(transaction.objectStore(ROOMS).getAll()),\n settled<PendingChangeRecord[]>(transaction.objectStore(PENDING_CHANGES).getAll()),\n ]);\n const byId = new Map(pending.map((record) => [`${record.locator}\\0${record.id}`, record]));\n return rooms.map((room) => ({\n locator: room.locator,\n pending: room.order.map((id) => {\n const record = byId.get(`${room.locator}\\0${id}`);\n if (record === undefined) throw new Error(`Missing Pending Change ${room.locator}/${id}`);\n const { batch, drafts, submission, lost, upload } = record;\n return { batch, state: { drafts, submission, lost, upload } };\n }),\n }));\n },\n async outcomes() {\n const transaction = database.transaction(OUTCOMES, 'readonly');\n return settled<OutcomeRecord[]>(transaction.objectStore(OUTCOMES).getAll());\n },\n submit(locator, id, submission, lost) {\n return amendPending(database, locator, id, { submission, lost });\n },\n keepUpload(locator, id, upload) {\n return amendPending(database, locator, id, { upload });\n },\n async roomDrafts() {\n const transaction = database.transaction(ROOM_DRAFTS, 'readonly');\n return settled<RoomDraftRecord[]>(transaction.objectStore(ROOM_DRAFTS).getAll());\n },\n async presentation() {\n const transaction = database.transaction(PRESENTATION, 'readonly');\n return settled<PresentationRecord[]>(transaction.objectStore(PRESENTATION).getAll());\n },\n async present(record) {\n const transaction = database.transaction(PRESENTATION, 'readwrite');\n transaction.objectStore(PRESENTATION).put(record);\n await completed(transaction);\n },\n async conversations() {\n const transaction = database.transaction([CONVERSATIONS, MESSAGES], 'readonly');\n const [reads, messages] = await Promise.all([\n settled<ConversationRecord[]>(transaction.objectStore(CONVERSATIONS).getAll()),\n settled<MessageRecord[]>(transaction.objectStore(MESSAGES).getAll()),\n ]);\n const held = new Map<string, HeldConversation & { messages: AcceptedMessage[] }>();\n for (const { conversation, read } of reads) {\n held.set(conversation, { conversation, read, messages: [] });\n }\n for (const { conversation, ...message } of messages) {\n const entry = held.get(conversation) ?? { conversation, read: undefined, messages: [] };\n entry.messages.push(message);\n held.set(conversation, entry);\n }\n return [...held.values()];\n },\n async keepMessages({ conversation, messages, read, sealed }) {\n const transaction = database.transaction([CONVERSATIONS, MESSAGES, CHAT_DRAFTS], 'readwrite');\n const stored = transaction.objectStore(MESSAGES);\n for (const message of messages) {\n stored.put({ ...message, conversation } satisfies MessageRecord);\n }\n if (read !== undefined) {\n transaction\n .objectStore(CONVERSATIONS)\n .put({ conversation, read } satisfies ConversationRecord);\n }\n if (sealed === true) transaction.objectStore(CHAT_DRAFTS).delete(conversation);\n await completed(transaction);\n },\n async dropConversations(conversations) {\n const transaction = database.transaction([CONVERSATIONS, MESSAGES, CHAT_DRAFTS], 'readwrite');\n const messages = transaction.objectStore(MESSAGES);\n for (const conversation of conversations) {\n transaction.objectStore(CONVERSATIONS).delete(conversation);\n transaction.objectStore(CHAT_DRAFTS).delete(conversation);\n const keys = messages.index('conversation').getAllKeys(conversation);\n keys.onsuccess = () => {\n for (const key of keys.result) messages.delete(key);\n };\n }\n await completed(transaction);\n },\n async chatDrafts() {\n const transaction = database.transaction(CHAT_DRAFTS, 'readonly');\n return settled<ChatDraftRecord[]>(transaction.objectStore(CHAT_DRAFTS).getAll());\n },\n async keepChatDraft(record) {\n const transaction = database.transaction(CHAT_DRAFTS, 'readwrite');\n transaction.objectStore(CHAT_DRAFTS).put(record);\n await completed(transaction);\n },\n async dropChatDraft(conversation) {\n const transaction = database.transaction(CHAT_DRAFTS, 'readwrite');\n transaction.objectStore(CHAT_DRAFTS).delete(conversation);\n await completed(transaction);\n },\n async keepRoomDraft(record) {\n const transaction = database.transaction(ROOM_DRAFTS, 'readwrite');\n transaction.objectStore(ROOM_DRAFTS).put(record);\n await completed(transaction);\n },\n async discardRoomDraft(locator, path) {\n const transaction = database.transaction(ROOM_DRAFTS, 'readwrite');\n transaction.objectStore(ROOM_DRAFTS).delete([locator, path]);\n await completed(transaction);\n },\n async dropRooms(locators) {\n const transaction = database.transaction(\n [ROOMS, DOCUMENTS, BINARY_TARGETS, PENDING_CHANGES, OUTCOMES, ROOM_DRAFTS],\n 'readwrite',\n );\n for (const locator of locators) {\n transaction.objectStore(ROOMS).delete(locator);\n for (const name of [DOCUMENTS, BINARY_TARGETS, PENDING_CHANGES, ROOM_DRAFTS]) {\n removeRoomEntries(transaction.objectStore(name), locator);\n }\n const outcomes = transaction.objectStore(OUTCOMES);\n const ids = outcomes.index('locator').getAllKeys(locator);\n ids.onsuccess = () => {\n for (const id of ids.result) outcomes.delete(id);\n };\n }\n await completed(transaction);\n },\n async generation() {\n return (await declaration(database)).generation;\n },\n rememberGeneration(value) {\n return updateDeclaration(database, (record) => ({ ...record, generation: value }));\n },\n close() {\n database.close();\n },\n };\n}\n"],"names":["DATABASE","ROOMS","DOCUMENTS","BINARY_TARGETS","PENDING_CHANGES","OUTCOMES","DECLARATIONS","ROOM_DRAFTS","PRESENTATION","CONVERSATIONS","MESSAGES","CHAT_DRAFTS","CURRENT","SCHEMA","settled","request","Promise","resolve","reject","onsuccess","result","onerror","error","completed","transaction","oncomplete","onabort","EMPTY_DECLARATIONS","lastCompleted","generation","providerLimits","capabilities","slots","declaration","database","objectStore","get","then","record","updateDeclaration","update","store","prior","put","amendPending","locator","id","amendment","pending","undefined","roomRecord","queue","documents","binaryTargets","revisions","room","order","map","batch","removeRoomEntries","keys","getAllKeys","key","Array","isArray","delete","removeRuntimeStore","removal","indexedDB","deleteDatabase","openRuntimeStore","opening","open","onupgradeneeded","name","objectStoreNames","deleteObjectStore","createObjectStore","keyPath","outcomes","createIndex","messages","all","rooms","targets","getAll","byRoom","Map","set","document","path","content","revision","target","push","values","write","next","previous","previousQueue","saved","roomDrafts","consumedRoomDrafts","Object","entries","beforeTargets","Set","afterTargets","has","before","after","drafts","submission","state","lost","outcomeStore","entry","outcome","draftStore","revokeModels","records","revoked","status","reason","model","selectionModel","complete","at","declare","limits","queues","byId","Error","upload","submit","keepUpload","presentation","present","conversations","reads","held","conversation","read","message","keepMessages","sealed","stored","dropConversations","index","chatDrafts","keepChatDraft","dropChatDraft","keepRoomDraft","discardRoomDraft","dropRooms","locators","ids","rememberGeneration","value","close"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/store.ts"],"sourcesContent":["import type { ModelState } from './model.js';\nimport type {\n Capability,\n Discovery,\n HeadChange,\n OperationScopes,\n ProviderLimit,\n ReplicaAdmission,\n TypedSelection,\n} from './adapter.js';\nimport type { AcceptedMessage } from './adapter.js';\nimport type { ChangeBatch } from './change.js';\nimport { sameChange } from './overlay.js';\nimport type { ChatDraftFile } from './file.js';\nimport type { Submission, SubmissionOutcome } from './outcome.js';\nimport type { RoomDraftRecord, SavedDraft } from './room-draft.js';\n\nconst DATABASE = 'mdruntime';\nconst ROOMS = 'rooms';\nconst DOCUMENTS = 'documents';\nconst BINARY_TARGETS = 'binaryTargets';\nconst PENDING_CHANGES = 'pendingChanges';\nconst OUTCOMES = 'outcomes';\nconst DECLARATIONS = 'declarations';\nconst ROOM_DRAFTS = 'roomDrafts';\nconst PRESENTATION = 'presentation';\nconst CONVERSATIONS = 'conversations';\nconst MESSAGES = 'messages';\nconst CHAT_DRAFTS = 'chatDrafts';\nconst CURRENT = 'current';\nconst SCHEMA = 15;\n\nexport type ReplicaRecord = {\n collectionRoot: string;\n locator: string;\n name: string;\n operations: OperationScopes;\n replica: ReplicaAdmission;\n model: ModelState;\n attachedModel: import('./model.js').ModelIdentity | null;\n typedSelection: TypedSelection | null;\n selectionModel: ModelState;\n providerOwnedPaths: readonly string[];\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n binaryTargets: readonly string[];\n revisions: Readonly<Record<string, string>>;\n changes: Readonly<Record<string, HeadChange>>;\n};\n\ntype RoomRecord = Omit<ReplicaRecord, 'documents' | 'binaryTargets' | 'revisions' | 'changes'> & {\n order: readonly string[];\n};\n\ntype DocumentRecord = {\n locator: string;\n path: string;\n content: string;\n revision: string | null;\n change: HeadChange | null;\n};\n\ntype BinaryTargetRecord = {\n locator: string;\n path: string;\n revision: string | null;\n change: HeadChange | null;\n};\n\nexport type PendingState = {\n readonly drafts: readonly SavedDraft[];\n readonly submission: Submission;\n readonly lost: boolean;\n readonly upload?: unknown;\n};\n\ntype PendingChangeRecord = PendingState & {\n locator: string;\n id: string;\n batch: ChangeBatch;\n};\n\nexport type OutcomeRecord = {\n locator: string;\n id: string;\n outcome: SubmissionOutcome;\n};\n\ntype DeclarationRecord = {\n lastCompleted: string | null;\n generation: string | null;\n providerLimits: readonly ProviderLimit[];\n capabilities: readonly Capability[];\n slots: NonNullable<Discovery['slots']>;\n};\n\nexport type QueueRecord = {\n locator: string;\n pending: readonly { batch: ChangeBatch; state: PendingState }[];\n};\n\nexport type PresentationRecord = {\n app: string;\n value: unknown;\n};\n\ntype ConversationRecord = {\n conversation: string;\n read: string | null;\n};\n\ntype MessageRecord = AcceptedMessage & { conversation: string };\n\nexport type HeldConversation = {\n conversation: string;\n read: string | null | undefined;\n messages: readonly AcceptedMessage[];\n};\n\nexport type ConversationWrite = {\n conversation: string;\n messages: readonly AcceptedMessage[];\n read?: string | null;\n sealed?: boolean;\n};\n\nexport type ChatDraftRecord = {\n conversation: string;\n text: string;\n files: readonly ChatDraftFile[];\n turn: string | null;\n};\n\nexport type RecordWrite = {\n next: ReplicaRecord;\n previous: ReplicaRecord | null;\n queue: readonly ChangeBatch[];\n previousQueue?: readonly ChangeBatch[];\n saved?: readonly SavedDraft[];\n outcomes?: readonly { id: string; outcome: SubmissionOutcome | null }[];\n roomDrafts?: readonly RoomDraftRecord[];\n consumedRoomDrafts?: readonly string[];\n};\n\nexport type RuntimeStore = {\n all(): Promise<readonly ReplicaRecord[]>;\n write(input: RecordWrite): Promise<void>;\n revokeModels(\n records: readonly { record: ReplicaRecord; queue: readonly ChangeBatch[] }[],\n ): Promise<void>;\n lastCompleted(): Promise<string | null>;\n complete(at: string): Promise<void>;\n providerLimits(): Promise<readonly ProviderLimit[]>;\n capabilities(): Promise<readonly Capability[]>;\n slots(): Promise<NonNullable<Discovery['slots']>>;\n declare(\n limits: readonly ProviderLimit[],\n capabilities: readonly Capability[],\n slots: NonNullable<Discovery['slots']>,\n ): Promise<void>;\n queues(): Promise<readonly QueueRecord[]>;\n outcomes(): Promise<readonly OutcomeRecord[]>;\n submit(locator: string, id: string, submission: Submission, lost: boolean): Promise<void>;\n keepUpload(locator: string, id: string, upload: unknown): Promise<void>;\n roomDrafts(): Promise<readonly RoomDraftRecord[]>;\n presentation(): Promise<readonly PresentationRecord[]>;\n present(record: PresentationRecord): Promise<void>;\n conversations(): Promise<readonly HeldConversation[]>;\n keepMessages(write: ConversationWrite): Promise<void>;\n dropConversations(conversations: readonly string[]): Promise<void>;\n chatDrafts(): Promise<readonly ChatDraftRecord[]>;\n keepChatDraft(record: ChatDraftRecord): Promise<void>;\n dropChatDraft(conversation: string): Promise<void>;\n keepRoomDraft(record: RoomDraftRecord): Promise<void>;\n discardRoomDraft(locator: string, path: string): Promise<void>;\n dropRooms(locators: readonly string[]): Promise<void>;\n generation(): Promise<string | null>;\n rememberGeneration(value: string): Promise<void>;\n close(): void;\n};\n\nfunction settled<T>(request: IDBRequest<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nfunction completed(transaction: IDBTransaction): Promise<void> {\n return new Promise((resolve, reject) => {\n transaction.oncomplete = () => resolve();\n transaction.onerror = () => reject(transaction.error);\n transaction.onabort = () => reject(transaction.error);\n });\n}\n\nconst EMPTY_DECLARATIONS: DeclarationRecord = {\n lastCompleted: null,\n generation: null,\n providerLimits: [],\n capabilities: [],\n slots: [],\n};\n\nfunction declaration(database: IDBDatabase): Promise<DeclarationRecord> {\n const transaction = database.transaction(DECLARATIONS, 'readonly');\n return settled<DeclarationRecord | undefined>(\n transaction.objectStore(DECLARATIONS).get(CURRENT),\n ).then((record) => record ?? EMPTY_DECLARATIONS);\n}\n\nfunction updateDeclaration(\n database: IDBDatabase,\n update: (record: DeclarationRecord) => DeclarationRecord,\n): Promise<void> {\n const transaction = database.transaction(DECLARATIONS, 'readwrite');\n const store = transaction.objectStore(DECLARATIONS);\n const prior = store.get(CURRENT);\n prior.onsuccess = () => {\n store.put(\n update((prior.result as DeclarationRecord | undefined) ?? EMPTY_DECLARATIONS),\n CURRENT,\n );\n };\n return completed(transaction);\n}\n\nfunction amendPending(\n database: IDBDatabase,\n locator: string,\n id: string,\n amendment: Partial<PendingState>,\n): Promise<void> {\n const transaction = database.transaction(PENDING_CHANGES, 'readwrite');\n const pending = transaction.objectStore(PENDING_CHANGES);\n const request = pending.get([locator, id]);\n request.onsuccess = () => {\n const record = request.result as PendingChangeRecord | undefined;\n if (record !== undefined) pending.put({ ...record, ...amendment });\n };\n return completed(transaction);\n}\n\nfunction roomRecord(record: ReplicaRecord, queue: readonly ChangeBatch[]): RoomRecord {\n const { documents, binaryTargets, revisions, changes, ...room } = record;\n return { ...room, order: queue.map((batch) => batch.id) };\n}\n\nfunction removeRoomEntries(store: IDBObjectStore, locator: string) {\n const keys = store.getAllKeys();\n keys.onsuccess = () => {\n for (const key of keys.result) {\n if (Array.isArray(key) && key[0] === locator) store.delete(key);\n }\n };\n}\n\nexport function removeRuntimeStore(): Promise<void> {\n return new Promise((resolve, reject) => {\n const removal = indexedDB.deleteDatabase(DATABASE);\n removal.onsuccess = () => resolve();\n removal.onerror = () => reject(removal.error);\n });\n}\n\nexport async function openRuntimeStore(): Promise<RuntimeStore> {\n const opening = indexedDB.open(DATABASE, SCHEMA);\n opening.onupgradeneeded = () => {\n const database = opening.result;\n for (const name of [...database.objectStoreNames]) database.deleteObjectStore(name);\n database.createObjectStore(ROOMS, { keyPath: 'locator' });\n database.createObjectStore(DOCUMENTS, { keyPath: ['locator', 'path'] });\n database.createObjectStore(BINARY_TARGETS, { keyPath: ['locator', 'path'] });\n database.createObjectStore(PENDING_CHANGES, { keyPath: ['locator', 'id'] });\n const outcomes = database.createObjectStore(OUTCOMES, { keyPath: 'id' });\n outcomes.createIndex('locator', 'locator');\n database.createObjectStore(DECLARATIONS);\n database.createObjectStore(ROOM_DRAFTS, { keyPath: ['locator', 'path'] });\n database.createObjectStore(PRESENTATION, { keyPath: 'app' });\n database.createObjectStore(CONVERSATIONS, { keyPath: 'conversation' });\n const messages = database.createObjectStore(MESSAGES, {\n keyPath: ['conversation', 'identity'],\n });\n messages.createIndex('conversation', 'conversation');\n database.createObjectStore(CHAT_DRAFTS, { keyPath: 'conversation' });\n };\n const database = await settled(opening);\n return {\n async all() {\n const transaction = database.transaction([ROOMS, DOCUMENTS, BINARY_TARGETS], 'readonly');\n const [rooms, documents, targets] = await Promise.all([\n settled<RoomRecord[]>(transaction.objectStore(ROOMS).getAll()),\n settled<DocumentRecord[]>(transaction.objectStore(DOCUMENTS).getAll()),\n settled<BinaryTargetRecord[]>(transaction.objectStore(BINARY_TARGETS).getAll()),\n ]);\n const byRoom = new Map<string, ReplicaRecord>();\n for (const { order, ...room } of rooms) {\n byRoom.set(room.locator, {\n ...room,\n documents: {},\n revisions: {},\n changes: {},\n binaryTargets: [],\n });\n }\n const head = (room: ReplicaRecord, held: DocumentRecord | BinaryTargetRecord) => {\n if (held.revision !== null) {\n (room.revisions as Record<string, string>)[held.path] = held.revision;\n }\n if (held.change !== null) {\n (room.changes as Record<string, HeadChange>)[held.path] = held.change;\n }\n };\n for (const document of documents) {\n const room = byRoom.get(document.locator);\n if (room === undefined) continue;\n (room.documents as Record<string, string>)[document.path] = document.content;\n head(room, document);\n }\n for (const target of targets) {\n const room = byRoom.get(target.locator);\n if (room === undefined) continue;\n (room.binaryTargets as string[]).push(target.path);\n head(room, target);\n }\n return [...byRoom.values()];\n },\n async write({\n next,\n previous,\n queue,\n previousQueue,\n saved,\n outcomes,\n roomDrafts,\n consumedRoomDrafts,\n }) {\n const transaction = database.transaction(\n [ROOMS, DOCUMENTS, BINARY_TARGETS, PENDING_CHANGES, OUTCOMES, ROOM_DRAFTS],\n 'readwrite',\n );\n transaction.objectStore(ROOMS).put(roomRecord(next, queue));\n const documents = transaction.objectStore(DOCUMENTS);\n for (const path of Object.keys(previous?.documents ?? {})) {\n if (next.documents[path] === undefined) documents.delete([next.locator, path]);\n }\n for (const [path, content] of Object.entries(next.documents)) {\n if (\n previous?.documents[path] === content &&\n previous.revisions[path] === next.revisions[path] &&\n sameChange(previous.changes[path], next.changes[path])\n )\n continue;\n documents.put({\n locator: next.locator,\n path,\n content,\n revision: next.revisions[path] ?? null,\n change: next.changes[path] ?? null,\n } satisfies DocumentRecord);\n }\n const targets = transaction.objectStore(BINARY_TARGETS);\n const beforeTargets = new Set(previous?.binaryTargets ?? []);\n const afterTargets = new Set(next.binaryTargets);\n for (const path of beforeTargets) {\n if (!afterTargets.has(path)) targets.delete([next.locator, path]);\n }\n for (const path of afterTargets) {\n if (\n !beforeTargets.has(path) ||\n previous?.revisions[path] !== next.revisions[path] ||\n !sameChange(previous?.changes[path], next.changes[path])\n ) {\n targets.put({\n locator: next.locator,\n path,\n revision: next.revisions[path] ?? null,\n change: next.changes[path] ?? null,\n } satisfies BinaryTargetRecord);\n }\n }\n if (previousQueue !== undefined) {\n const pending = transaction.objectStore(PENDING_CHANGES);\n const before = new Set(previousQueue.map((batch) => batch.id));\n const after = new Set(queue.map((batch) => batch.id));\n for (const id of before) {\n if (!after.has(id)) pending.delete([next.locator, id]);\n }\n for (const batch of queue) {\n if (!before.has(batch.id)) {\n pending.put({\n locator: next.locator,\n id: batch.id,\n batch,\n drafts: saved ?? [],\n submission: { state: 'waiting' },\n lost: false,\n } satisfies PendingChangeRecord);\n }\n }\n }\n const outcomeStore = transaction.objectStore(OUTCOMES);\n for (const entry of outcomes ?? []) {\n if (entry.outcome === null) outcomeStore.delete(entry.id);\n else outcomeStore.put({ locator: next.locator, id: entry.id, outcome: entry.outcome });\n }\n const draftStore = transaction.objectStore(ROOM_DRAFTS);\n for (const path of consumedRoomDrafts ?? []) draftStore.delete([next.locator, path]);\n for (const record of roomDrafts ?? []) draftStore.put(record);\n await completed(transaction);\n },\n async revokeModels(records) {\n const transaction = database.transaction(ROOMS, 'readwrite');\n const rooms = transaction.objectStore(ROOMS);\n const revoked: ModelState = { status: 'unavailable', reason: 'revoked' };\n for (const { record, queue } of records) {\n rooms.put(roomRecord({ ...record, model: revoked, selectionModel: revoked }, queue));\n }\n await completed(transaction);\n },\n async lastCompleted() {\n return (await declaration(database)).lastCompleted;\n },\n complete(at) {\n return updateDeclaration(database, (record) => ({ ...record, lastCompleted: at }));\n },\n async providerLimits() {\n return (await declaration(database)).providerLimits;\n },\n async capabilities() {\n return (await declaration(database)).capabilities;\n },\n async slots() {\n return (await declaration(database)).slots;\n },\n declare(limits, capabilities, slots) {\n return updateDeclaration(database, (record) => ({\n ...record,\n providerLimits: limits,\n capabilities,\n slots,\n }));\n },\n async queues() {\n const transaction = database.transaction([ROOMS, PENDING_CHANGES], 'readonly');\n const [rooms, pending] = await Promise.all([\n settled<RoomRecord[]>(transaction.objectStore(ROOMS).getAll()),\n settled<PendingChangeRecord[]>(transaction.objectStore(PENDING_CHANGES).getAll()),\n ]);\n const byId = new Map(pending.map((record) => [`${record.locator}\\0${record.id}`, record]));\n return rooms.map((room) => ({\n locator: room.locator,\n pending: room.order.map((id) => {\n const record = byId.get(`${room.locator}\\0${id}`);\n if (record === undefined) throw new Error(`Missing Pending Change ${room.locator}/${id}`);\n const { batch, drafts, submission, lost, upload } = record;\n return { batch, state: { drafts, submission, lost, upload } };\n }),\n }));\n },\n async outcomes() {\n const transaction = database.transaction(OUTCOMES, 'readonly');\n return settled<OutcomeRecord[]>(transaction.objectStore(OUTCOMES).getAll());\n },\n submit(locator, id, submission, lost) {\n return amendPending(database, locator, id, { submission, lost });\n },\n keepUpload(locator, id, upload) {\n return amendPending(database, locator, id, { upload });\n },\n async roomDrafts() {\n const transaction = database.transaction(ROOM_DRAFTS, 'readonly');\n return settled<RoomDraftRecord[]>(transaction.objectStore(ROOM_DRAFTS).getAll());\n },\n async presentation() {\n const transaction = database.transaction(PRESENTATION, 'readonly');\n return settled<PresentationRecord[]>(transaction.objectStore(PRESENTATION).getAll());\n },\n async present(record) {\n const transaction = database.transaction(PRESENTATION, 'readwrite');\n transaction.objectStore(PRESENTATION).put(record);\n await completed(transaction);\n },\n async conversations() {\n const transaction = database.transaction([CONVERSATIONS, MESSAGES], 'readonly');\n const [reads, messages] = await Promise.all([\n settled<ConversationRecord[]>(transaction.objectStore(CONVERSATIONS).getAll()),\n settled<MessageRecord[]>(transaction.objectStore(MESSAGES).getAll()),\n ]);\n const held = new Map<string, HeldConversation & { messages: AcceptedMessage[] }>();\n for (const { conversation, read } of reads) {\n held.set(conversation, { conversation, read, messages: [] });\n }\n for (const { conversation, ...message } of messages) {\n const entry = held.get(conversation) ?? { conversation, read: undefined, messages: [] };\n entry.messages.push(message);\n held.set(conversation, entry);\n }\n return [...held.values()];\n },\n async keepMessages({ conversation, messages, read, sealed }) {\n const transaction = database.transaction([CONVERSATIONS, MESSAGES, CHAT_DRAFTS], 'readwrite');\n const stored = transaction.objectStore(MESSAGES);\n for (const message of messages) {\n stored.put({ ...message, conversation } satisfies MessageRecord);\n }\n if (read !== undefined) {\n transaction\n .objectStore(CONVERSATIONS)\n .put({ conversation, read } satisfies ConversationRecord);\n }\n if (sealed === true) transaction.objectStore(CHAT_DRAFTS).delete(conversation);\n await completed(transaction);\n },\n async dropConversations(conversations) {\n const transaction = database.transaction([CONVERSATIONS, MESSAGES, CHAT_DRAFTS], 'readwrite');\n const messages = transaction.objectStore(MESSAGES);\n for (const conversation of conversations) {\n transaction.objectStore(CONVERSATIONS).delete(conversation);\n transaction.objectStore(CHAT_DRAFTS).delete(conversation);\n const keys = messages.index('conversation').getAllKeys(conversation);\n keys.onsuccess = () => {\n for (const key of keys.result) messages.delete(key);\n };\n }\n await completed(transaction);\n },\n async chatDrafts() {\n const transaction = database.transaction(CHAT_DRAFTS, 'readonly');\n return settled<ChatDraftRecord[]>(transaction.objectStore(CHAT_DRAFTS).getAll());\n },\n async keepChatDraft(record) {\n const transaction = database.transaction(CHAT_DRAFTS, 'readwrite');\n transaction.objectStore(CHAT_DRAFTS).put(record);\n await completed(transaction);\n },\n async dropChatDraft(conversation) {\n const transaction = database.transaction(CHAT_DRAFTS, 'readwrite');\n transaction.objectStore(CHAT_DRAFTS).delete(conversation);\n await completed(transaction);\n },\n async keepRoomDraft(record) {\n const transaction = database.transaction(ROOM_DRAFTS, 'readwrite');\n transaction.objectStore(ROOM_DRAFTS).put(record);\n await completed(transaction);\n },\n async discardRoomDraft(locator, path) {\n const transaction = database.transaction(ROOM_DRAFTS, 'readwrite');\n transaction.objectStore(ROOM_DRAFTS).delete([locator, path]);\n await completed(transaction);\n },\n async dropRooms(locators) {\n const transaction = database.transaction(\n [ROOMS, DOCUMENTS, BINARY_TARGETS, PENDING_CHANGES, OUTCOMES, ROOM_DRAFTS],\n 'readwrite',\n );\n for (const locator of locators) {\n transaction.objectStore(ROOMS).delete(locator);\n for (const name of [DOCUMENTS, BINARY_TARGETS, PENDING_CHANGES, ROOM_DRAFTS]) {\n removeRoomEntries(transaction.objectStore(name), locator);\n }\n const outcomes = transaction.objectStore(OUTCOMES);\n const ids = outcomes.index('locator').getAllKeys(locator);\n ids.onsuccess = () => {\n for (const id of ids.result) outcomes.delete(id);\n };\n }\n await completed(transaction);\n },\n async generation() {\n return (await declaration(database)).generation;\n },\n rememberGeneration(value) {\n return updateDeclaration(database, (record) => ({ ...record, generation: value }));\n },\n close() {\n database.close();\n },\n };\n}\n"],"names":["sameChange","DATABASE","ROOMS","DOCUMENTS","BINARY_TARGETS","PENDING_CHANGES","OUTCOMES","DECLARATIONS","ROOM_DRAFTS","PRESENTATION","CONVERSATIONS","MESSAGES","CHAT_DRAFTS","CURRENT","SCHEMA","settled","request","Promise","resolve","reject","onsuccess","result","onerror","error","completed","transaction","oncomplete","onabort","EMPTY_DECLARATIONS","lastCompleted","generation","providerLimits","capabilities","slots","declaration","database","objectStore","get","then","record","updateDeclaration","update","store","prior","put","amendPending","locator","id","amendment","pending","undefined","roomRecord","queue","documents","binaryTargets","revisions","changes","room","order","map","batch","removeRoomEntries","keys","getAllKeys","key","Array","isArray","delete","removeRuntimeStore","removal","indexedDB","deleteDatabase","openRuntimeStore","opening","open","onupgradeneeded","name","objectStoreNames","deleteObjectStore","createObjectStore","keyPath","outcomes","createIndex","messages","all","rooms","targets","getAll","byRoom","Map","set","head","held","revision","path","change","document","content","target","push","values","write","next","previous","previousQueue","saved","roomDrafts","consumedRoomDrafts","Object","entries","beforeTargets","Set","afterTargets","has","before","after","drafts","submission","state","lost","outcomeStore","entry","outcome","draftStore","revokeModels","records","revoked","status","reason","model","selectionModel","complete","at","declare","limits","queues","byId","Error","upload","submit","keepUpload","presentation","present","conversations","reads","conversation","read","message","keepMessages","sealed","stored","dropConversations","index","chatDrafts","keepChatDraft","dropChatDraft","keepRoomDraft","discardRoomDraft","dropRooms","locators","ids","rememberGeneration","value","close"],"mappings":"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"}
|
package/dist/wire.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type RuntimePort = {
|
|
|
8
8
|
}) => void): void;
|
|
9
9
|
start(): void;
|
|
10
10
|
};
|
|
11
|
-
declare const MEMBERS: readonly ['rooms', 'slots', 'query', 'search', 'types', 'syncStatus', 'serviceMode', 'save', 'outcome', 'history', 'call', 'log', 'storageLoss', 'persistence', 'deploymentFacts', 'reauthorize', 'roomDraft.list', 'roomDraft.read', 'roomDraft.write', 'roomDraft.discard', 'presentation.read', 'presentation.write', 'conversation.list', 'conversation.read', 'conversation.create', 'conversation.send', 'conversation.answer', 'conversation.interrupt', 'conversation.kill', 'conversation.cancel', 'conversation.delete', 'chatDraft.write', 'chatDraft.discard'];
|
|
11
|
+
declare const MEMBERS: readonly ['rooms', 'slots', 'query', 'search', 'types', 'syncStatus', 'serviceMode', 'save', 'outcome', 'history', 'call', 'reached', 'log', 'storageLoss', 'persistence', 'deploymentFacts', 'reauthorize', 'roomDraft.list', 'roomDraft.read', 'roomDraft.write', 'roomDraft.discard', 'presentation.read', 'presentation.write', 'conversation.list', 'conversation.read', 'conversation.create', 'conversation.send', 'conversation.answer', 'conversation.interrupt', 'conversation.kill', 'conversation.cancel', 'conversation.delete', 'chatDraft.write', 'chatDraft.discard'];
|
|
12
12
|
declare const TOPICS: readonly ['rooms', 'connection-refusal', 'storage-loss', 'deployment-facts', 'sync-status', 'service-mode', 'query', 'queue', 'room-drafts', 'presentation', 'conversation'];
|
|
13
13
|
export type WireMember = (typeof MEMBERS)[number];
|
|
14
14
|
export type WireTopic = (typeof TOPICS)[number];
|
package/dist/wire.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
|
package/dist/wire.js
CHANGED
package/dist/wire.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/wire.ts"],"sourcesContent":["import type { ConnectionRefusal } from './connection.js';\n\nexport const RUNTIME_WIRE_PROTOCOL = 8;\n\nexport const PROTOCOL_MISMATCH: ConnectionRefusal = {\n reason: 'client-host-protocol-mismatch',\n reauthorizationOffered: false,\n refusal: null,\n};\n\nexport type RuntimePort = {\n postMessage(message: unknown): void;\n addEventListener(type: 'message' | 'close', listener: (event: { data?: unknown }) => void): void;\n start(): void;\n};\n\nconst MEMBERS = [\n 'rooms',\n 'slots',\n 'query',\n 'search',\n 'types',\n 'syncStatus',\n 'serviceMode',\n 'save',\n 'outcome',\n 'history',\n 'call',\n 'log',\n 'storageLoss',\n 'persistence',\n 'deploymentFacts',\n 'reauthorize',\n 'roomDraft.list',\n 'roomDraft.read',\n 'roomDraft.write',\n 'roomDraft.discard',\n 'presentation.read',\n 'presentation.write',\n 'conversation.list',\n 'conversation.read',\n 'conversation.create',\n 'conversation.send',\n 'conversation.answer',\n 'conversation.interrupt',\n 'conversation.kill',\n 'conversation.cancel',\n 'conversation.delete',\n 'chatDraft.write',\n 'chatDraft.discard',\n] as const;\n\nconst TOPICS = [\n 'rooms',\n 'connection-refusal',\n 'storage-loss',\n 'deployment-facts',\n 'sync-status',\n 'service-mode',\n 'query',\n 'queue',\n 'room-drafts',\n 'presentation',\n 'conversation',\n] as const;\n\nexport type WireMember = (typeof MEMBERS)[number];\nexport type WireTopic = (typeof TOPICS)[number];\n\nexport type WireRequest =\n | { kind: 'hello' }\n | { kind: 'call'; id: number; member: WireMember; input: readonly unknown[] }\n | { kind: 'observe'; id: number; topic: WireTopic; input: readonly unknown[] }\n | { kind: 'stop'; id: number };\n\nexport type WireAnswer =\n | { kind: 'result'; id: number; value: unknown }\n | { kind: 'failure'; id: number; message: string }\n | { kind: 'event'; id: number; value: unknown }\n | { kind: 'refusal'; refusal: ConnectionRefusal }\n | { kind: 'ended' };\n\nexport const AUTHORIZATION_ENDED = 'the host authorization ended';\n\nexport const PORT_CLOSED = 'the port closed';\n\nexport type WireEnvelope = { mdRuntime: number; message: WireRequest | WireAnswer };\n\nexport type Carried = { matching: boolean; message: unknown };\n\nexport function envelope(message: WireRequest | WireAnswer): WireEnvelope {\n return { mdRuntime: RUNTIME_WIRE_PROTOCOL, message };\n}\n\nexport function carried(data: unknown): Carried | null {\n if (typeof data !== 'object' || data === null || !('mdRuntime' in data)) return null;\n const record = data as { mdRuntime: unknown; message?: unknown };\n return { matching: record.mdRuntime === RUNTIME_WIRE_PROTOCOL, message: record.message };\n}\n\nfunction body(message: unknown): { kind: unknown; id: unknown } | null {\n if (typeof message !== 'object' || message === null) return null;\n const record = message as { kind?: unknown; id?: unknown };\n return { kind: record.kind, id: record.id };\n}\n\nexport function request(message: unknown): WireRequest | null {\n const shape = body(message);\n if (shape === null) return null;\n if (shape.kind === 'hello') return { kind: 'hello' };\n if (typeof shape.id !== 'number') return null;\n const record = message as { input?: unknown; member?: unknown; topic?: unknown };\n if (shape.kind === 'stop') return { kind: 'stop', id: shape.id };\n if (!Array.isArray(record.input)) return null;\n if (shape.kind === 'call' && MEMBERS.includes(record.member as WireMember)) {\n return {\n kind: 'call',\n id: shape.id,\n member: record.member as WireMember,\n input: record.input as readonly unknown[],\n };\n }\n if (shape.kind === 'observe' && TOPICS.includes(record.topic as WireTopic)) {\n return {\n kind: 'observe',\n id: shape.id,\n topic: record.topic as WireTopic,\n input: record.input as readonly unknown[],\n };\n }\n return null;\n}\n\nexport function answer(message: unknown): WireAnswer | null {\n const shape = body(message);\n if (shape === null) return null;\n const record = message as { value?: unknown; message?: unknown; refusal?: unknown };\n if (shape.kind === 'refusal') {\n return { kind: 'refusal', refusal: record.refusal as ConnectionRefusal };\n }\n if (shape.kind === 'ended') return { kind: 'ended' };\n if (typeof shape.id !== 'number') return null;\n if (shape.kind === 'result') return { kind: 'result', id: shape.id, value: record.value };\n if (shape.kind === 'event') return { kind: 'event', id: shape.id, value: record.value };\n if (shape.kind === 'failure' && typeof record.message === 'string') {\n return { kind: 'failure', id: shape.id, message: record.message };\n }\n return null;\n}\n"],"names":["RUNTIME_WIRE_PROTOCOL","PROTOCOL_MISMATCH","reason","reauthorizationOffered","refusal","MEMBERS","TOPICS","AUTHORIZATION_ENDED","PORT_CLOSED","envelope","message","mdRuntime","carried","data","record","matching","body","kind","id","request","shape","Array","isArray","input","includes","member","topic","answer","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/wire.ts"],"sourcesContent":["import type { ConnectionRefusal } from './connection.js';\n\nexport const RUNTIME_WIRE_PROTOCOL = 8;\n\nexport const PROTOCOL_MISMATCH: ConnectionRefusal = {\n reason: 'client-host-protocol-mismatch',\n reauthorizationOffered: false,\n refusal: null,\n};\n\nexport type RuntimePort = {\n postMessage(message: unknown): void;\n addEventListener(type: 'message' | 'close', listener: (event: { data?: unknown }) => void): void;\n start(): void;\n};\n\nconst MEMBERS = [\n 'rooms',\n 'slots',\n 'query',\n 'search',\n 'types',\n 'syncStatus',\n 'serviceMode',\n 'save',\n 'outcome',\n 'history',\n 'call',\n 'reached',\n 'log',\n 'storageLoss',\n 'persistence',\n 'deploymentFacts',\n 'reauthorize',\n 'roomDraft.list',\n 'roomDraft.read',\n 'roomDraft.write',\n 'roomDraft.discard',\n 'presentation.read',\n 'presentation.write',\n 'conversation.list',\n 'conversation.read',\n 'conversation.create',\n 'conversation.send',\n 'conversation.answer',\n 'conversation.interrupt',\n 'conversation.kill',\n 'conversation.cancel',\n 'conversation.delete',\n 'chatDraft.write',\n 'chatDraft.discard',\n] as const;\n\nconst TOPICS = [\n 'rooms',\n 'connection-refusal',\n 'storage-loss',\n 'deployment-facts',\n 'sync-status',\n 'service-mode',\n 'query',\n 'queue',\n 'room-drafts',\n 'presentation',\n 'conversation',\n] as const;\n\nexport type WireMember = (typeof MEMBERS)[number];\nexport type WireTopic = (typeof TOPICS)[number];\n\nexport type WireRequest =\n | { kind: 'hello' }\n | { kind: 'call'; id: number; member: WireMember; input: readonly unknown[] }\n | { kind: 'observe'; id: number; topic: WireTopic; input: readonly unknown[] }\n | { kind: 'stop'; id: number };\n\nexport type WireAnswer =\n | { kind: 'result'; id: number; value: unknown }\n | { kind: 'failure'; id: number; message: string }\n | { kind: 'event'; id: number; value: unknown }\n | { kind: 'refusal'; refusal: ConnectionRefusal }\n | { kind: 'ended' };\n\nexport const AUTHORIZATION_ENDED = 'the host authorization ended';\n\nexport const PORT_CLOSED = 'the port closed';\n\nexport type WireEnvelope = { mdRuntime: number; message: WireRequest | WireAnswer };\n\nexport type Carried = { matching: boolean; message: unknown };\n\nexport function envelope(message: WireRequest | WireAnswer): WireEnvelope {\n return { mdRuntime: RUNTIME_WIRE_PROTOCOL, message };\n}\n\nexport function carried(data: unknown): Carried | null {\n if (typeof data !== 'object' || data === null || !('mdRuntime' in data)) return null;\n const record = data as { mdRuntime: unknown; message?: unknown };\n return { matching: record.mdRuntime === RUNTIME_WIRE_PROTOCOL, message: record.message };\n}\n\nfunction body(message: unknown): { kind: unknown; id: unknown } | null {\n if (typeof message !== 'object' || message === null) return null;\n const record = message as { kind?: unknown; id?: unknown };\n return { kind: record.kind, id: record.id };\n}\n\nexport function request(message: unknown): WireRequest | null {\n const shape = body(message);\n if (shape === null) return null;\n if (shape.kind === 'hello') return { kind: 'hello' };\n if (typeof shape.id !== 'number') return null;\n const record = message as { input?: unknown; member?: unknown; topic?: unknown };\n if (shape.kind === 'stop') return { kind: 'stop', id: shape.id };\n if (!Array.isArray(record.input)) return null;\n if (shape.kind === 'call' && MEMBERS.includes(record.member as WireMember)) {\n return {\n kind: 'call',\n id: shape.id,\n member: record.member as WireMember,\n input: record.input as readonly unknown[],\n };\n }\n if (shape.kind === 'observe' && TOPICS.includes(record.topic as WireTopic)) {\n return {\n kind: 'observe',\n id: shape.id,\n topic: record.topic as WireTopic,\n input: record.input as readonly unknown[],\n };\n }\n return null;\n}\n\nexport function answer(message: unknown): WireAnswer | null {\n const shape = body(message);\n if (shape === null) return null;\n const record = message as { value?: unknown; message?: unknown; refusal?: unknown };\n if (shape.kind === 'refusal') {\n return { kind: 'refusal', refusal: record.refusal as ConnectionRefusal };\n }\n if (shape.kind === 'ended') return { kind: 'ended' };\n if (typeof shape.id !== 'number') return null;\n if (shape.kind === 'result') return { kind: 'result', id: shape.id, value: record.value };\n if (shape.kind === 'event') return { kind: 'event', id: shape.id, value: record.value };\n if (shape.kind === 'failure' && typeof record.message === 'string') {\n return { kind: 'failure', id: shape.id, message: record.message };\n }\n return null;\n}\n"],"names":["RUNTIME_WIRE_PROTOCOL","PROTOCOL_MISMATCH","reason","reauthorizationOffered","refusal","MEMBERS","TOPICS","AUTHORIZATION_ENDED","PORT_CLOSED","envelope","message","mdRuntime","carried","data","record","matching","body","kind","id","request","shape","Array","isArray","input","includes","member","topic","answer","value"],"mappings":"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"}
|