@agentshouse/mdruntime 0.1.0-alpha.5 → 0.1.0-alpha.50
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 +210 -0
- package/README.md +44 -0
- package/dist/adapter.d.ts +253 -19
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +2 -1
- package/dist/adapter.js.map +1 -1
- package/dist/attachment.d.ts +3 -0
- package/dist/attachment.d.ts.map +1 -0
- package/dist/attachment.js +11 -0
- package/dist/attachment.js.map +1 -0
- package/dist/bootstrap.d.ts +7 -6
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +30 -10
- package/dist/bootstrap.js.map +1 -1
- package/dist/change-set.d.ts +33 -0
- package/dist/change-set.d.ts.map +1 -0
- package/dist/change-set.js +95 -0
- package/dist/change-set.js.map +1 -0
- package/dist/change.d.ts +10 -0
- package/dist/change.d.ts.map +1 -1
- package/dist/change.js.map +1 -1
- package/dist/client.d.ts +75 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +237 -0
- package/dist/client.js.map +1 -0
- package/dist/collection.d.ts +26 -12
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +78 -31
- package/dist/collection.js.map +1 -1
- package/dist/connection.d.ts +85 -28
- package/dist/connection.d.ts.map +1 -1
- package/dist/connection.js +1756 -510
- package/dist/connection.js.map +1 -1
- package/dist/conversation.d.ts +79 -0
- package/dist/conversation.d.ts.map +1 -0
- package/dist/conversation.js +635 -0
- package/dist/conversation.js.map +1 -0
- package/dist/durability.d.ts +8 -3
- package/dist/durability.d.ts.map +1 -1
- package/dist/durability.js +8 -62
- package/dist/durability.js.map +1 -1
- package/dist/file.d.ts +20 -0
- package/dist/file.d.ts.map +1 -0
- package/dist/file.js +149 -0
- package/dist/file.js.map +1 -0
- package/dist/host.d.ts +14 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +213 -0
- package/dist/host.js.map +1 -0
- package/dist/identity.d.ts +3 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +23 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +15 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/memory.d.ts +19 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +283 -24
- package/dist/memory.js.map +1 -1
- package/dist/model.d.ts +55 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +36 -0
- package/dist/model.js.map +1 -0
- package/dist/observation.d.ts +25 -0
- package/dist/observation.d.ts.map +1 -0
- package/dist/observation.js +92 -0
- package/dist/observation.js.map +1 -0
- package/dist/outcome.d.ts +22 -18
- package/dist/outcome.d.ts.map +1 -1
- package/dist/outcome.js +1 -11
- package/dist/outcome.js.map +1 -1
- package/dist/overlay.d.ts +9 -2
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +145 -6
- package/dist/overlay.js.map +1 -1
- package/dist/paths.d.ts +0 -1
- package/dist/paths.d.ts.map +1 -1
- package/dist/paths.js +0 -4
- package/dist/paths.js.map +1 -1
- package/dist/query.d.ts +213 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +470 -0
- package/dist/query.js.map +1 -0
- package/dist/read-side.d.ts +14 -0
- package/dist/read-side.d.ts.map +1 -0
- package/dist/read-side.js +457 -0
- package/dist/read-side.js.map +1 -0
- package/dist/refresh.d.ts +4 -4
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +40 -10
- package/dist/refresh.js.map +1 -1
- package/dist/replica.d.ts +27 -4
- package/dist/replica.d.ts.map +1 -1
- package/dist/replica.js +255 -13
- package/dist/replica.js.map +1 -1
- package/dist/room-draft.d.ts +124 -0
- package/dist/room-draft.d.ts.map +1 -0
- package/dist/room-draft.js +406 -0
- package/dist/room-draft.js.map +1 -0
- package/dist/rows.d.ts +41 -0
- package/dist/rows.d.ts.map +1 -0
- package/dist/rows.js +102 -0
- package/dist/rows.js.map +1 -0
- package/dist/save.d.ts +11 -2
- package/dist/save.d.ts.map +1 -1
- package/dist/save.js +116 -128
- package/dist/save.js.map +1 -1
- package/dist/search.d.ts +61 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +155 -0
- package/dist/search.js.map +1 -0
- package/dist/status.d.ts +9 -2
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +5 -4
- package/dist/status.js.map +1 -1
- package/dist/store.d.ts +90 -18
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +492 -67
- package/dist/store.js.map +1 -1
- package/dist/transfer.d.ts +5 -0
- package/dist/transfer.d.ts.map +1 -1
- package/dist/transfer.js.map +1 -1
- package/dist/wire.d.ts +64 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +145 -0
- package/dist/wire.js.map +1 -0
- package/package.json +15 -13
package/dist/host.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/host.ts"],"sourcesContent":["import type { WrittenBy } from './change.js';\nimport {\n composeRuntime,\n type HistoryQuery,\n type MdRuntime,\n type MdRuntimeOptions,\n type SavedRoomDraft,\n} from './connection.js';\nimport type { ChatDraft, ConversationOptions } from './conversation.js';\nimport type { DocumentQuery } from './query.js';\nimport type { SearchRequest } from './search.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} from './wire.js';\n\nexport type MdRuntimeHostOptions = MdRuntimeOptions & { deploymentFacts?: unknown };\n\nexport type MdRuntimeHost = {\n replaceDeploymentFacts(value: unknown): void;\n attach(port: RuntimePort, app: string, release?: string): () => void;\n endAuthorization(): Promise<void>;\n stop(): Promise<void>;\n};\n\nfunction answered(\n md: MdRuntime,\n app: string,\n writtenBy: WrittenBy | undefined,\n member: WireMember,\n input: readonly unknown[],\n deploymentFacts: unknown,\n): unknown {\n switch (member) {\n case 'rooms':\n return md.rooms();\n case 'slots':\n return md.slots();\n case 'query':\n return md.query(input[0] as DocumentQuery);\n case 'search':\n return md.search(input[0] as SearchRequest);\n case 'types':\n return md.types(input[0] as string);\n case 'syncStatus':\n return md.syncStatus();\n case 'serviceMode':\n return md.serviceMode();\n case 'save':\n return md.save(input[0] as string, input[1] as readonly SavedRoomDraft[], writtenBy);\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 'reached':\n return md.reached(input[0] as string, input[1] as string, input[2] as string | undefined);\n case 'log':\n return md.log();\n case 'storageLoss':\n return md.storageLoss();\n case 'deploymentFacts':\n return structuredClone(deploymentFacts);\n case 'persistence':\n return md.persistence();\n case 'reauthorize':\n return md.reauthorize();\n case 'roomDraft.list':\n return md.roomDraft.list();\n case 'roomDraft.read':\n return md.roomDraft.read(input[0] as string, input[1] as string);\n case 'roomDraft.write':\n return md.roomDraft.write(\n input[0] as string,\n input[1] as string,\n input[2] as string | null,\n input[3],\n );\n case 'roomDraft.discard':\n return md.roomDraft.discard(input[0] as string, input[1] as string, input[2] 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, input[1] as ConversationOptions | undefined);\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 case 'chatDraft.write':\n return md.chatDraft.write(input[0] as string, input[1] as ChatDraft);\n case 'chatDraft.discard':\n return md.chatDraft.discard(input[0] as string);\n }\n}\n\nexport function serveMdRuntime(options: MdRuntimeHostOptions): MdRuntimeHost {\n let deploymentFacts = structuredClone(options.deploymentFacts);\n const closing = new AbortController();\n const close = () => {\n closing.abort();\n };\n options.signal?.addEventListener('abort', close, { once: true });\n if (options.signal?.aborted === true) close();\n const runtime = composeRuntime({ ...options, signal: closing.signal });\n const { md, watch } = runtime;\n const attachments = new Map<() => void, (message: WireAnswer) => void>();\n let authorized = true;\n const factsObservers = new Set<(value: unknown) => void>();\n const watchFacts = (deliver: (value: unknown) => void) => {\n factsObservers.add(deliver);\n deliver(structuredClone(deploymentFacts));\n return () => {\n factsObservers.delete(deliver);\n };\n };\n\n function attach(port: RuntimePort, app: string, release?: string): () => void {\n if (!authorized) throw new Error(AUTHORIZATION_ENDED);\n const writtenBy = release === undefined ? undefined : { app, release };\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' || message.topic !== 'room-drafts') await md.loaded();\n if (message.kind === 'observe') {\n const { id, topic } = message;\n let resolved = false;\n const deliver = (value: unknown) => {\n if (!serving) return;\n send(resolved ? { kind: 'event', id, value } : { kind: 'result', id, value });\n resolved = true;\n };\n subscriptions.set(\n id,\n topic === 'deployment-facts'\n ? watchFacts(deliver)\n : watch(topic, topic === 'presentation' ? [app] : message.input, deliver),\n );\n return;\n }\n const value = await answered(\n md,\n app,\n writtenBy,\n message.member,\n message.input,\n deploymentFacts,\n );\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 replaceDeploymentFacts(value) {\n if (!authorized) throw new Error(AUTHORIZATION_ENDED);\n deploymentFacts = structuredClone(value);\n for (const deliver of factsObservers) deliver(structuredClone(deploymentFacts));\n },\n async endAuthorization() {\n authorized = false;\n for (const [detach, send] of [...attachments]) {\n send({ kind: 'ended' });\n detach();\n }\n close();\n await removeRuntimeStore();\n await options.shell.dropGeneration();\n },\n stop() {\n return runtime.stop();\n },\n };\n}\n\nexport type { RuntimePort } from './wire.js';\n"],"names":["composeRuntime","removeRuntimeStore","AUTHORIZATION_ENDED","carried","envelope","PROTOCOL_MISMATCH","request","answered","md","app","writtenBy","member","input","deploymentFacts","rooms","slots","query","search","types","syncStatus","serviceMode","save","outcome","history","call","reached","log","storageLoss","structuredClone","persistence","reauthorize","roomDraft","list","read","write","discard","presentation","conversation","create","send","answer","interrupt","kill","cancel","delete","chatDraft","serveMdRuntime","options","closing","AbortController","close","abort","signal","addEventListener","once","aborted","runtime","watch","attachments","Map","authorized","factsObservers","Set","watchFacts","deliver","add","attach","port","release","Error","undefined","subscriptions","serving","message","postMessage","detach","end","values","clear","serve","kind","get","id","topic","loaded","resolved","value","set","error","String","event","wire","data","matching","refusal","start","replaceDeploymentFacts","endAuthorization","shell","dropGeneration","stop"],"mappings":"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"}
|
|
@@ -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;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C"}
|
package/dist/identity.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
export function roomDraftRevision() {
|
|
16
|
+
const bytes = new Uint8Array(16);
|
|
17
|
+
crypto.getRandomValues(bytes);
|
|
18
|
+
return [
|
|
19
|
+
...bytes
|
|
20
|
+
].map((byte)=>byte.toString(16).padStart(2, '0')).join('');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
//# 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\nexport function roomDraftRevision(): string {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n return [...bytes].map((byte) => byte.toString(16).padStart(2, '0')).join('');\n}\n"],"names":["changeBatchIdentity","at","Date","now","bytes","Uint8Array","crypto","getRandomValues","time","BigInt","index","Number","hex","map","byte","toString","padStart","join","slice","roomDraftRevision"],"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;AAEA,OAAO,SAASC;IACd,MAAMf,QAAQ,IAAIC,WAAW;IAC7BC,OAAOC,eAAe,CAACH;IACvB,OAAO;WAAIA;KAAM,CAACS,GAAG,CAAC,CAACC,OAASA,KAAKC,QAAQ,CAAC,IAAIC,QAAQ,CAAC,GAAG,MAAMC,IAAI,CAAC;AAC3E"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
|
-
export type { ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, DiscoverResult, DiscoveredRoom, Discovery, HistoryRequest, HistoryResult, HistoryRevision, MdModelIdentity, MutationRequest, MutationResult, PageToken, ProviderLimit, RefreshPage, RefreshRequest, RefreshResult, Retention, RevokedAuthorization, RoomNotReadable, TransportUncertainty, } from './adapter.js';
|
|
2
|
-
export type { Change, ChangeBatch, Precondition } from './change.js';
|
|
3
|
-
export type {
|
|
4
|
-
export type {
|
|
5
|
-
export type {
|
|
1
|
+
export type { AcceptedMessage, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationCards, ConversationEvent, ConversationHistories, ConversationHistoryPage, ConversationHistoryRequest, ConversationMessage, ConversationStream, DiscoverResult, DiscoveredRoom, Discovery, HistoryAuthor, HistoryRequest, HistoryResult, HistoryRetention, HistoryRevision, MdModelIdentity, ModelRequest, MutationRequest, MutationResult, PageToken, ProviderLimit, ProviderRefusal, RefreshPage, RefreshRequest, RefreshResult, Retention, RetryableRefusal, RevokedAuthorization, RoomAttachment, RoomNotReadable, RoomVersionAt, RoomVersionNotification, SelectedRooms, ServiceMode, ServiceModeSignal, TransportUncertainty, TypedSelection, WorkingNote, } from './adapter.js';
|
|
2
|
+
export type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';
|
|
3
|
+
export type { ChatDraft, ChatDraftSurface, ConversationEntry, ConversationOptions, ConversationSurface, ConversationView, GrowingText, } from './conversation.js';
|
|
4
|
+
export type { ChatDraftFile, FileDeclaration } from './file.js';
|
|
5
|
+
export type { AppRoom, AppSlot, AppSlotEntry, AppTypedSelection, ConnectionRefusal, ConnectionRefusalReason, HistoryQuery, MdRuntime, MdRuntimeOptions, PresentationSurface, RoomDraftSurface, RoomTypes, SavedRoomDraft, SaveResult, } from './connection.js';
|
|
6
|
+
export type { Observation } from './observation.js';
|
|
7
|
+
export type { AcceptedOutcome, AffectedState, CallResult, QueueEntry, Submission, SubmissionOutcome, } from './outcome.js';
|
|
8
|
+
export type { ChangedPart, FieldValue, ReturnReason, RoomDraft, RoomDraftCreation, RoomDraftParts, RoomDraftWrite, } from './room-draft.js';
|
|
6
9
|
export type { SaveRefusal } from './save.js';
|
|
10
|
+
export type { DocumentHit, DocumentPart, MessageHit, SearchRequest, SearchResult, } from './search.js';
|
|
11
|
+
export { changeBatchIdentity } from './identity.js';
|
|
7
12
|
export { createMdRuntime } from './connection.js';
|
|
8
|
-
export type {
|
|
9
|
-
export type {
|
|
13
|
+
export type { RuntimeShell } from './durability.js';
|
|
14
|
+
export type { AttentionEntry, SyncStatus } from './status.js';
|
|
15
|
+
export type { Backlink, Direction, DocumentQuery, DocumentResult, Filter, GroupQuery, GroupResult, Key, LocalQuery, OrderOptions, Predicate, QueryDocument, QueryGroup, QueryResult, Related, Select, Value, Where, } from './query.js';
|
|
16
|
+
export type { MdType, ModelIdentity, ModelSnapshot, ModelState, ModelResult, TypesResult, ValidationReceipt, } from './model.js';
|
|
17
|
+
export type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';
|
|
10
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,SAAS,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,aAAa,EACb,SAAS,EACT,oBAAoB,EACpB,eAAe,EACf,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,OAAO,EACP,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,SAAS,EACT,aAAa,EACb,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,cAAc,EACd,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAChF,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EACV,eAAe,EACf,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,WAAW,EACX,UAAU,EACV,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EACV,WAAW,EACX,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,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,SAAS,EACT,aAAa,EACb,cAAc,EACd,MAAM,EACN,UAAU,EACV,WAAW,EACX,GAAG,EACH,UAAU,EACV,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,EACV,WAAW,EACX,OAAO,EACP,MAAM,EACN,KAAK,EACL,KAAK,GACN,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
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 BootstrapPage,\n BootstrapRequest,\n BootstrapResult,\n Capability,\n DiscoverResult,\n DiscoveredRoom,\n Discovery,\n HistoryRequest,\n HistoryResult,\n HistoryRevision,\n MdModelIdentity,\n MutationRequest,\n MutationResult,\n PageToken,\n ProviderLimit,\n RefreshPage,\n RefreshRequest,\n RefreshResult,\n Retention,\n RevokedAuthorization,\n RoomNotReadable,\n TransportUncertainty,\n} from './adapter.js';\nexport type { Change, ChangeBatch, Precondition } from './change.js';\nexport type {
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/index.ts"],"sourcesContent":["export type {\n AcceptedMessage,\n ActionDeclaration,\n ActionRequest,\n ActionResult,\n Adapter,\n AdapterFailure,\n Authorization,\n BootstrapPage,\n BootstrapRequest,\n BootstrapResult,\n Capability,\n ChangeAuthor,\n ContractUnavailable,\n ConversationAction,\n ConversationCards,\n ConversationEvent,\n ConversationHistories,\n ConversationHistoryPage,\n ConversationHistoryRequest,\n ConversationMessage,\n ConversationStream,\n DiscoverResult,\n DiscoveredRoom,\n Discovery,\n HistoryAuthor,\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 RoomAttachment,\n RoomNotReadable,\n RoomVersionAt,\n RoomVersionNotification,\n SelectedRooms,\n ServiceMode,\n ServiceModeSignal,\n TransportUncertainty,\n TypedSelection,\n WorkingNote,\n} from './adapter.js';\nexport type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';\nexport type {\n ChatDraft,\n ChatDraftSurface,\n ConversationEntry,\n ConversationOptions,\n ConversationSurface,\n ConversationView,\n GrowingText,\n} from './conversation.js';\nexport type { ChatDraftFile, FileDeclaration } from './file.js';\nexport type {\n AppRoom,\n AppSlot,\n AppSlotEntry,\n AppTypedSelection,\n ConnectionRefusal,\n ConnectionRefusalReason,\n HistoryQuery,\n MdRuntime,\n MdRuntimeOptions,\n PresentationSurface,\n RoomDraftSurface,\n RoomTypes,\n SavedRoomDraft,\n SaveResult,\n} from './connection.js';\nexport type { Observation } from './observation.js';\nexport type {\n AcceptedOutcome,\n AffectedState,\n CallResult,\n QueueEntry,\n Submission,\n SubmissionOutcome,\n} from './outcome.js';\nexport type {\n ChangedPart,\n FieldValue,\n ReturnReason,\n RoomDraft,\n RoomDraftCreation,\n RoomDraftParts,\n RoomDraftWrite,\n} from './room-draft.js';\nexport type { SaveRefusal } from './save.js';\nexport type {\n DocumentHit,\n DocumentPart,\n MessageHit,\n SearchRequest,\n SearchResult,\n} from './search.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 Direction,\n DocumentQuery,\n DocumentResult,\n Filter,\n GroupQuery,\n GroupResult,\n Key,\n LocalQuery,\n OrderOptions,\n Predicate,\n QueryDocument,\n QueryGroup,\n QueryResult,\n Related,\n Select,\n Value,\n Where,\n} from './query.js';\n\nexport type {\n MdType,\n ModelIdentity,\n ModelSnapshot,\n ModelState,\n ModelResult,\n TypesResult,\n ValidationReceipt,\n} from './model.js';\nexport type { OperationScopes, ReplicaAdmission, ScopedRefusal } from './adapter.js';\n"],"names":["changeBatchIdentity","createMdRuntime"],"mappings":"AA2GA,SAASA,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,eAAe,QAAQ,kBAAkB"}
|
package/dist/memory.d.ts
CHANGED
|
@@ -1,22 +1,39 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type { ModelResult } from './model.js';
|
|
2
|
+
import { type AcceptedMessage, type ActionResult, type Adapter, type Capability, type ConversationAction, type ConversationEvent, type DiscoveredRoom, type HeadChange, type MdModelIdentity, type ProviderLimit, type Retention, type RoomAttachment, type RoomVersionNotification, type ServiceMode } from './adapter.js';
|
|
2
3
|
export type MemoryRoom = DiscoveredRoom & {
|
|
4
|
+
model?: ModelResult;
|
|
5
|
+
selectionModel?: ModelResult;
|
|
3
6
|
documents?: Readonly<Record<string, string>>;
|
|
4
7
|
revisions?: Readonly<Record<string, string>>;
|
|
8
|
+
changes?: Readonly<Record<string, HeadChange>>;
|
|
5
9
|
binaryTargets?: readonly string[];
|
|
10
|
+
attachments?: readonly RoomAttachment[];
|
|
11
|
+
};
|
|
12
|
+
export type MemoryConversation = {
|
|
13
|
+
conversation: string;
|
|
14
|
+
messages?: readonly AcceptedMessage[];
|
|
15
|
+
outcomes?: Partial<Record<ConversationAction, ActionResult>>;
|
|
6
16
|
};
|
|
7
17
|
export type MemoryAdapterOptions = {
|
|
8
18
|
rooms?: readonly MemoryRoom[];
|
|
19
|
+
conversations?: readonly MemoryConversation[];
|
|
20
|
+
historyPageSize?: number;
|
|
9
21
|
pageSize?: number;
|
|
10
22
|
mdModel?: MdModelIdentity;
|
|
11
23
|
supportedVersions?: readonly number[];
|
|
12
24
|
capabilities?: readonly Capability[];
|
|
13
25
|
providerLimits?: readonly ProviderLimit[];
|
|
14
26
|
retention?: Retention;
|
|
15
|
-
origins?: readonly string[];
|
|
16
27
|
};
|
|
17
28
|
export type MemoryAdapter = Adapter & {
|
|
18
29
|
setRooms(rooms: readonly MemoryRoom[]): void;
|
|
30
|
+
setConversations(conversations: readonly MemoryConversation[]): void;
|
|
19
31
|
script(operation: keyof Adapter, answer: unknown): void;
|
|
32
|
+
notifyRoomVersion(notification: RoomVersionNotification): void;
|
|
33
|
+
notifyConversation(event: ConversationEvent): void;
|
|
34
|
+
notifyServiceMode(mode: ServiceMode): void;
|
|
35
|
+
selectedRooms(): readonly string[];
|
|
36
|
+
replicatedConversations(): readonly string[];
|
|
20
37
|
};
|
|
21
38
|
export declare function createMemoryAdapter(options?: MemoryAdapterOptions): MemoryAdapter;
|
|
22
39
|
//# sourceMappingURL=memory.d.ts.map
|
package/dist/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
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,EAEL,KAAK,eAAe,EAEpB,KAAK,YAAY,EACjB,KAAK,OAAO,EAIZ,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EAItB,KAAK,cAAc,EACnB,KAAK,UAAU,EAGf,KAAK,eAAe,EAGpB,KAAK,aAAa,EAGlB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAmBtB,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,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACtC,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,iBAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,aAAa,IAAI,SAAS,MAAM,EAAE,CAAC;IACnC,uBAAuB,IAAI,SAAS,MAAM,EAAE,CAAC;CAC9C,CAAC;AA+BF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CAkZrF"}
|
package/dist/memory.js
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
import { ROOM_CONTRACT_VERSION } from './adapter.js';
|
|
2
2
|
import { MD_MODEL } from './collection.js';
|
|
3
|
+
import { sameChange } from './overlay.js';
|
|
4
|
+
const FIXTURE_RETENTION = {
|
|
5
|
+
history: {
|
|
6
|
+
kind: 'duration',
|
|
7
|
+
seconds: 1
|
|
8
|
+
},
|
|
9
|
+
outcome: 1,
|
|
10
|
+
refreshHorizon: 1
|
|
11
|
+
};
|
|
12
|
+
function declaredRetention(value) {
|
|
13
|
+
const retention = value ?? FIXTURE_RETENTION;
|
|
14
|
+
if (retention.history.kind === 'no-declared-time-bound') return retention;
|
|
15
|
+
if (Number.isFinite(retention.history.seconds) && retention.history.seconds > 0) {
|
|
16
|
+
return retention;
|
|
17
|
+
}
|
|
18
|
+
throw new Error('history retention duration must be a finite positive number of seconds');
|
|
19
|
+
}
|
|
3
20
|
function named(source, paths) {
|
|
4
21
|
const taken = {};
|
|
5
22
|
for (const path of paths){
|
|
@@ -22,20 +39,45 @@ export function createMemoryAdapter(options = {}) {
|
|
|
22
39
|
];
|
|
23
40
|
const capabilities = options.capabilities ?? [];
|
|
24
41
|
const providerLimits = options.providerLimits ?? [];
|
|
25
|
-
const retention = options.retention
|
|
26
|
-
history: 1,
|
|
27
|
-
outcome: 1,
|
|
28
|
-
refreshHorizon: 1
|
|
29
|
-
};
|
|
30
|
-
const origins = options.origins ?? [
|
|
31
|
-
'https://origin.example'
|
|
32
|
-
];
|
|
42
|
+
const retention = declaredRetention(options.retention);
|
|
33
43
|
const pageSize = options.pageSize;
|
|
34
44
|
const scripts = {};
|
|
35
45
|
const served = new Map();
|
|
36
46
|
const refreshPages = new Map();
|
|
47
|
+
const observers = new Set();
|
|
48
|
+
const listeners = new Set();
|
|
49
|
+
const modeObservers = new Set();
|
|
50
|
+
const scripted = new Map();
|
|
51
|
+
const unsealed = new Map();
|
|
52
|
+
const sealed = new Set();
|
|
53
|
+
const historyPageSize = options.historyPageSize;
|
|
54
|
+
let selected = [];
|
|
55
|
+
let replicated = [];
|
|
56
|
+
let issued = 0;
|
|
57
|
+
function scriptConversations(entries) {
|
|
58
|
+
scripted.clear();
|
|
59
|
+
for (const entry of entries)scripted.set(entry.conversation, entry);
|
|
60
|
+
}
|
|
61
|
+
scriptConversations(options.conversations ?? []);
|
|
62
|
+
const ordinals = new Map();
|
|
63
|
+
function note(locator, answer) {
|
|
64
|
+
const roomVersion = answer.roomVersion;
|
|
65
|
+
const key = `${locator}\u0000${String(roomVersion)}`;
|
|
66
|
+
if (typeof roomVersion === 'string' && !ordinals.has(key)) ordinals.set(key, ordinals.size);
|
|
67
|
+
return answer;
|
|
68
|
+
}
|
|
69
|
+
function reached(locator, roomVersion, target) {
|
|
70
|
+
const scripted = scripts.reached;
|
|
71
|
+
if (typeof scripted === 'boolean') return scripted;
|
|
72
|
+
if (scripted !== undefined) return scripted(locator, roomVersion, target);
|
|
73
|
+
if (roomVersion === target) return true;
|
|
74
|
+
const held = ordinals.get(`${locator}\u0000${roomVersion}`);
|
|
75
|
+
const wanted = ordinals.get(`${locator}\u0000${target}`);
|
|
76
|
+
return held !== undefined && wanted !== undefined && held >= wanted;
|
|
77
|
+
}
|
|
37
78
|
function retain(entries) {
|
|
38
79
|
for (const room of entries){
|
|
80
|
+
note(room.locator, room);
|
|
39
81
|
const versions = served.get(room.locator) ?? new Map();
|
|
40
82
|
versions.set(room.roomVersion, room);
|
|
41
83
|
served.set(room.locator, versions);
|
|
@@ -47,7 +89,15 @@ export function createMemoryAdapter(options = {}) {
|
|
|
47
89
|
name: room.name,
|
|
48
90
|
locator: room.locator,
|
|
49
91
|
roomVersion: room.roomVersion,
|
|
50
|
-
|
|
92
|
+
operations: room.operations,
|
|
93
|
+
replica: room.replica,
|
|
94
|
+
attachedModel: room.attachedModel,
|
|
95
|
+
...room.typedSelection === undefined ? {} : {
|
|
96
|
+
typedSelection: room.typedSelection
|
|
97
|
+
},
|
|
98
|
+
...room.untypedFolders === undefined ? {} : {
|
|
99
|
+
untypedFolders: room.untypedFolders
|
|
100
|
+
},
|
|
51
101
|
providerOwnedPaths: room.providerOwnedPaths
|
|
52
102
|
};
|
|
53
103
|
}
|
|
@@ -56,12 +106,20 @@ export function createMemoryAdapter(options = {}) {
|
|
|
56
106
|
const size = pageSize ?? paths.length;
|
|
57
107
|
const taken = paths.slice(from, from + size);
|
|
58
108
|
const next = from + taken.length;
|
|
109
|
+
const targets = from === 0 ? room.binaryTargets ?? [] : [];
|
|
59
110
|
return {
|
|
60
111
|
kind: 'bootstrap',
|
|
61
112
|
roomVersion: room.roomVersion,
|
|
62
113
|
documents: named(room.documents ?? {}, taken),
|
|
63
114
|
revisions: named(room.revisions ?? {}, taken),
|
|
64
|
-
|
|
115
|
+
changes: named(room.changes ?? {}, [
|
|
116
|
+
...taken,
|
|
117
|
+
...targets
|
|
118
|
+
]),
|
|
119
|
+
binaryTargets: targets,
|
|
120
|
+
...from === 0 && room.attachments !== undefined ? {
|
|
121
|
+
attachments: room.attachments
|
|
122
|
+
} : {},
|
|
65
123
|
...next < paths.length ? {
|
|
66
124
|
pageToken: String(next)
|
|
67
125
|
} : {}
|
|
@@ -72,7 +130,8 @@ export function createMemoryAdapter(options = {}) {
|
|
|
72
130
|
const previous = from.documents ?? {};
|
|
73
131
|
const currentTargets = new Set(room.binaryTargets ?? []);
|
|
74
132
|
const previousTargets = new Set(from.binaryTargets ?? []);
|
|
75
|
-
const
|
|
133
|
+
const headMoved = (path)=>room.revisions?.[path] !== from.revisions?.[path] || !sameChange(room.changes?.[path], from.changes?.[path]);
|
|
134
|
+
const changed = Object.keys(current).filter((path)=>current[path] !== previous[path] || headMoved(path)).sort();
|
|
76
135
|
const size = pageSize ?? changed.length;
|
|
77
136
|
const taken = changed.slice(at, at + size);
|
|
78
137
|
const next = at + taken.length;
|
|
@@ -83,25 +142,141 @@ export function createMemoryAdapter(options = {}) {
|
|
|
83
142
|
from,
|
|
84
143
|
at: next
|
|
85
144
|
});
|
|
145
|
+
const targets = opening ? [
|
|
146
|
+
...currentTargets
|
|
147
|
+
].filter((target)=>!previousTargets.has(target) || headMoved(target)) : [];
|
|
148
|
+
const attachments = room.attachments ?? [];
|
|
149
|
+
const declared = opening && JSON.stringify(attachments) !== JSON.stringify(from.attachments ?? []);
|
|
86
150
|
return {
|
|
87
151
|
kind: 'net-advancement',
|
|
88
152
|
roomVersion: room.roomVersion,
|
|
89
153
|
documents: named(current, taken),
|
|
90
154
|
revisions: named(room.revisions ?? {}, taken),
|
|
91
|
-
|
|
92
|
-
...
|
|
93
|
-
|
|
155
|
+
changes: named(room.changes ?? {}, [
|
|
156
|
+
...taken,
|
|
157
|
+
...targets
|
|
158
|
+
]),
|
|
159
|
+
binaryTargets: targets,
|
|
94
160
|
removals: opening ? [
|
|
95
161
|
...Object.keys(previous).filter((path)=>!(path in current) && !currentTargets.has(path)),
|
|
96
162
|
...[
|
|
97
163
|
...previousTargets
|
|
98
164
|
].filter((target)=>!currentTargets.has(target) && !(target in current))
|
|
99
165
|
].sort() : [],
|
|
166
|
+
...declared ? {
|
|
167
|
+
attachments
|
|
168
|
+
} : {},
|
|
100
169
|
...pageToken === undefined ? {} : {
|
|
101
170
|
pageToken
|
|
102
171
|
}
|
|
103
172
|
};
|
|
104
173
|
}
|
|
174
|
+
function pageOf(conversation, after) {
|
|
175
|
+
const messages = conversation.messages ?? [];
|
|
176
|
+
const first = typeof after === 'string' ? messages.findIndex((message)=>message.position > after) : 0;
|
|
177
|
+
const from = first === -1 ? messages.length : first;
|
|
178
|
+
const page = messages.slice(from, from + (historyPageSize ?? messages.length));
|
|
179
|
+
const last = page.at(-1);
|
|
180
|
+
return {
|
|
181
|
+
conversation: conversation.conversation,
|
|
182
|
+
messages: page,
|
|
183
|
+
...last !== undefined && from + page.length < messages.length ? {
|
|
184
|
+
next: last.position
|
|
185
|
+
} : {}
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function historiesOf(input) {
|
|
189
|
+
const asked = input?.conversations;
|
|
190
|
+
if (!Array.isArray(asked)) return {
|
|
191
|
+
kind: 'rejected',
|
|
192
|
+
code: 'invalid_request',
|
|
193
|
+
fields: {}
|
|
194
|
+
};
|
|
195
|
+
const histories = [];
|
|
196
|
+
for (const entry of asked){
|
|
197
|
+
const conversation = typeof entry.conversation === 'string' ? scripted.get(entry.conversation) : undefined;
|
|
198
|
+
if (conversation === undefined) continue;
|
|
199
|
+
const outcome = conversation.outcomes?.['conversation.history'];
|
|
200
|
+
if (outcome !== undefined) return outcome;
|
|
201
|
+
histories.push(pageOf(conversation, entry.after));
|
|
202
|
+
}
|
|
203
|
+
const result = {
|
|
204
|
+
histories
|
|
205
|
+
};
|
|
206
|
+
return {
|
|
207
|
+
kind: 'action',
|
|
208
|
+
result
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function conversationAction(request) {
|
|
212
|
+
const name = request.name;
|
|
213
|
+
const input = request.input ?? {};
|
|
214
|
+
if (name === 'conversation.history') return historiesOf(request.input);
|
|
215
|
+
if (name === 'conversation.create') {
|
|
216
|
+
issued += 1;
|
|
217
|
+
const conversation = `conversation-${issued}`;
|
|
218
|
+
scripted.set(conversation, {
|
|
219
|
+
conversation
|
|
220
|
+
});
|
|
221
|
+
return {
|
|
222
|
+
kind: 'action',
|
|
223
|
+
result: {
|
|
224
|
+
conversation
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
const named = typeof input.conversation === 'string' ? input.conversation : '';
|
|
229
|
+
const conversation = scripted.get(named);
|
|
230
|
+
if (conversation === undefined) {
|
|
231
|
+
return {
|
|
232
|
+
kind: 'rejected',
|
|
233
|
+
code: 'unknown-conversation',
|
|
234
|
+
fields: {
|
|
235
|
+
conversation: named
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
const outcome = conversation.outcomes?.[name];
|
|
240
|
+
if (outcome !== undefined) return outcome;
|
|
241
|
+
if (name === 'conversation.send') {
|
|
242
|
+
issued += 1;
|
|
243
|
+
const turn = `turn-${issued}`;
|
|
244
|
+
unsealed.set(turn, named);
|
|
245
|
+
return {
|
|
246
|
+
kind: 'action',
|
|
247
|
+
result: {
|
|
248
|
+
turn
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
if (name === 'conversation.cancel') {
|
|
253
|
+
const turn = typeof input.turn === 'string' ? input.turn : '';
|
|
254
|
+
if (sealed.has(turn) || !unsealed.has(turn)) {
|
|
255
|
+
return {
|
|
256
|
+
kind: 'rejected',
|
|
257
|
+
code: 'turn-sealed',
|
|
258
|
+
fields: {
|
|
259
|
+
turn
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
unsealed.delete(turn);
|
|
264
|
+
return {
|
|
265
|
+
kind: 'action',
|
|
266
|
+
result: {
|
|
267
|
+
turn,
|
|
268
|
+
cancelled: true
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
if (name === 'conversation.delete') scripted.delete(named);
|
|
273
|
+
return {
|
|
274
|
+
kind: 'action',
|
|
275
|
+
result: {
|
|
276
|
+
conversation: named
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
}
|
|
105
280
|
function discovery() {
|
|
106
281
|
return {
|
|
107
282
|
kind: 'discovery',
|
|
@@ -110,8 +285,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
110
285
|
rooms: rooms.map(declared),
|
|
111
286
|
capabilities,
|
|
112
287
|
providerLimits,
|
|
113
|
-
retention
|
|
114
|
-
origins
|
|
288
|
+
retention
|
|
115
289
|
};
|
|
116
290
|
}
|
|
117
291
|
return {
|
|
@@ -121,16 +295,86 @@ export function createMemoryAdapter(options = {}) {
|
|
|
121
295
|
];
|
|
122
296
|
retain(rooms);
|
|
123
297
|
},
|
|
298
|
+
setConversations (next) {
|
|
299
|
+
scriptConversations(next);
|
|
300
|
+
},
|
|
301
|
+
notifyRoomVersion (notification) {
|
|
302
|
+
for (const observer of observers)observer(notification);
|
|
303
|
+
},
|
|
304
|
+
notifyConversation (event) {
|
|
305
|
+
if (event.kind === 'accepted-message') {
|
|
306
|
+
sealed.add(event.message.turn);
|
|
307
|
+
unsealed.delete(event.message.turn);
|
|
308
|
+
}
|
|
309
|
+
for (const listener of listeners)listener(event);
|
|
310
|
+
},
|
|
311
|
+
notifyServiceMode (mode) {
|
|
312
|
+
for (const observer of modeObservers)observer(mode);
|
|
313
|
+
},
|
|
314
|
+
selectedRooms () {
|
|
315
|
+
return selected;
|
|
316
|
+
},
|
|
317
|
+
replicatedConversations () {
|
|
318
|
+
return replicated;
|
|
319
|
+
},
|
|
320
|
+
conversations: {
|
|
321
|
+
replicate (next) {
|
|
322
|
+
replicated = [
|
|
323
|
+
...next
|
|
324
|
+
];
|
|
325
|
+
},
|
|
326
|
+
observe (notify) {
|
|
327
|
+
listeners.add(notify);
|
|
328
|
+
return ()=>{
|
|
329
|
+
listeners.delete(notify);
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
serviceMode: {
|
|
334
|
+
observe (notify) {
|
|
335
|
+
modeObservers.add(notify);
|
|
336
|
+
return ()=>{
|
|
337
|
+
modeObservers.delete(notify);
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
roomVersions: {
|
|
342
|
+
select (locators) {
|
|
343
|
+
selected = [
|
|
344
|
+
...locators
|
|
345
|
+
];
|
|
346
|
+
},
|
|
347
|
+
observe (notify) {
|
|
348
|
+
observers.add(notify);
|
|
349
|
+
return ()=>{
|
|
350
|
+
observers.delete(notify);
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
},
|
|
124
354
|
script (operation, answer) {
|
|
125
355
|
if (answer === undefined) delete scripts[operation];
|
|
126
356
|
else scripts[operation] = answer;
|
|
127
357
|
},
|
|
358
|
+
async model (_authorization, request) {
|
|
359
|
+
return resolveScript(scripts.model, ()=>{
|
|
360
|
+
const room = rooms.find((entry)=>entry.locator === request.locator);
|
|
361
|
+
const answer = request.attached === 'collection' ? room?.model : room?.selectionModel;
|
|
362
|
+
return answer ?? {
|
|
363
|
+
kind: 'model-unavailable',
|
|
364
|
+
reason: 'not-readable'
|
|
365
|
+
};
|
|
366
|
+
}, request);
|
|
367
|
+
},
|
|
128
368
|
async authorize () {
|
|
129
369
|
return resolveScript(scripts.authorize, ()=>({}), undefined);
|
|
130
370
|
},
|
|
131
371
|
async discover (_authorization) {
|
|
132
|
-
return resolveScript(scripts.discover, discovery, undefined)
|
|
372
|
+
return resolveScript(scripts.discover, discovery, undefined).then((answer)=>{
|
|
373
|
+
if (answer.kind === 'discovery') for (const room of answer.rooms)note(room.locator, room);
|
|
374
|
+
return answer;
|
|
375
|
+
});
|
|
133
376
|
},
|
|
377
|
+
reached,
|
|
134
378
|
async bootstrap (_authorization, request) {
|
|
135
379
|
return resolveScript(scripts.bootstrap, ()=>{
|
|
136
380
|
const room = rooms.find((entry)=>entry.locator === request.locator);
|
|
@@ -141,7 +385,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
141
385
|
};
|
|
142
386
|
}
|
|
143
387
|
return page(room, request.pageToken === undefined ? 0 : Number(request.pageToken));
|
|
144
|
-
}, request);
|
|
388
|
+
}, request).then((answer)=>note(request.locator, answer));
|
|
145
389
|
},
|
|
146
390
|
async refresh (_authorization, request) {
|
|
147
391
|
return resolveScript(scripts.refresh, ()=>{
|
|
@@ -159,6 +403,13 @@ export function createMemoryAdapter(options = {}) {
|
|
|
159
403
|
}
|
|
160
404
|
return advancement(continuation.room, continuation.from, continuation.at);
|
|
161
405
|
}
|
|
406
|
+
if (request.minPosition !== undefined && !reached(room.locator, room.roomVersion, request.minPosition)) {
|
|
407
|
+
return {
|
|
408
|
+
kind: 'retryable-refusal',
|
|
409
|
+
code: 'replica_behind',
|
|
410
|
+
fields: {}
|
|
411
|
+
};
|
|
412
|
+
}
|
|
162
413
|
if (request.fromRoomVersion === room.roomVersion) {
|
|
163
414
|
return {
|
|
164
415
|
kind: 'still-current'
|
|
@@ -169,7 +420,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
169
420
|
kind: 'beyond-horizon'
|
|
170
421
|
};
|
|
171
422
|
return advancement(room, from, 0);
|
|
172
|
-
}, request);
|
|
423
|
+
}, request).then((answer)=>note(request.locator, answer));
|
|
173
424
|
},
|
|
174
425
|
async mutate (_authorization, request) {
|
|
175
426
|
return resolveScript(scripts.mutate, ()=>{
|
|
@@ -182,10 +433,11 @@ export function createMemoryAdapter(options = {}) {
|
|
|
182
433
|
}
|
|
183
434
|
return {
|
|
184
435
|
kind: 'rejected',
|
|
185
|
-
|
|
436
|
+
code: 'unscripted-mutation',
|
|
437
|
+
fields: {},
|
|
186
438
|
affected: {}
|
|
187
439
|
};
|
|
188
|
-
}, request);
|
|
440
|
+
}, request).then((answer)=>note(request.locator, answer));
|
|
189
441
|
},
|
|
190
442
|
async history (_authorization, request) {
|
|
191
443
|
return resolveScript(scripts.history, ()=>{
|
|
@@ -203,10 +455,17 @@ export function createMemoryAdapter(options = {}) {
|
|
|
203
455
|
}, request);
|
|
204
456
|
},
|
|
205
457
|
async action (_authorization, request) {
|
|
206
|
-
return resolveScript(scripts.action, ()=>
|
|
458
|
+
return resolveScript(scripts.action, ()=>{
|
|
459
|
+
if (request.name.startsWith('conversation.')) return conversationAction(request);
|
|
460
|
+
return {
|
|
207
461
|
kind: 'rejected',
|
|
208
|
-
|
|
209
|
-
|
|
462
|
+
code: 'unscripted-action',
|
|
463
|
+
fields: {}
|
|
464
|
+
};
|
|
465
|
+
}, request).then((answer)=>{
|
|
466
|
+
if (answer.kind === 'action' && answer.at !== undefined) note(answer.at.locator, answer.at);
|
|
467
|
+
return answer;
|
|
468
|
+
});
|
|
210
469
|
}
|
|
211
470
|
};
|
|
212
471
|
}
|