@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.
Files changed (129) hide show
  1. package/AGENTS.md +210 -0
  2. package/README.md +44 -0
  3. package/dist/adapter.d.ts +253 -19
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +2 -1
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/attachment.d.ts +3 -0
  8. package/dist/attachment.d.ts.map +1 -0
  9. package/dist/attachment.js +11 -0
  10. package/dist/attachment.js.map +1 -0
  11. package/dist/bootstrap.d.ts +7 -6
  12. package/dist/bootstrap.d.ts.map +1 -1
  13. package/dist/bootstrap.js +30 -10
  14. package/dist/bootstrap.js.map +1 -1
  15. package/dist/change-set.d.ts +33 -0
  16. package/dist/change-set.d.ts.map +1 -0
  17. package/dist/change-set.js +95 -0
  18. package/dist/change-set.js.map +1 -0
  19. package/dist/change.d.ts +10 -0
  20. package/dist/change.d.ts.map +1 -1
  21. package/dist/change.js.map +1 -1
  22. package/dist/client.d.ts +75 -0
  23. package/dist/client.d.ts.map +1 -0
  24. package/dist/client.js +237 -0
  25. package/dist/client.js.map +1 -0
  26. package/dist/collection.d.ts +26 -12
  27. package/dist/collection.d.ts.map +1 -1
  28. package/dist/collection.js +78 -31
  29. package/dist/collection.js.map +1 -1
  30. package/dist/connection.d.ts +85 -28
  31. package/dist/connection.d.ts.map +1 -1
  32. package/dist/connection.js +1756 -510
  33. package/dist/connection.js.map +1 -1
  34. package/dist/conversation.d.ts +79 -0
  35. package/dist/conversation.d.ts.map +1 -0
  36. package/dist/conversation.js +635 -0
  37. package/dist/conversation.js.map +1 -0
  38. package/dist/durability.d.ts +8 -3
  39. package/dist/durability.d.ts.map +1 -1
  40. package/dist/durability.js +8 -62
  41. package/dist/durability.js.map +1 -1
  42. package/dist/file.d.ts +20 -0
  43. package/dist/file.d.ts.map +1 -0
  44. package/dist/file.js +149 -0
  45. package/dist/file.js.map +1 -0
  46. package/dist/host.d.ts +14 -0
  47. package/dist/host.d.ts.map +1 -0
  48. package/dist/host.js +213 -0
  49. package/dist/host.js.map +1 -0
  50. package/dist/identity.d.ts +3 -0
  51. package/dist/identity.d.ts.map +1 -0
  52. package/dist/identity.js +23 -0
  53. package/dist/identity.js.map +1 -0
  54. package/dist/index.d.ts +15 -7
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +1 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/memory.d.ts +19 -2
  59. package/dist/memory.d.ts.map +1 -1
  60. package/dist/memory.js +283 -24
  61. package/dist/memory.js.map +1 -1
  62. package/dist/model.d.ts +55 -0
  63. package/dist/model.d.ts.map +1 -0
  64. package/dist/model.js +36 -0
  65. package/dist/model.js.map +1 -0
  66. package/dist/observation.d.ts +25 -0
  67. package/dist/observation.d.ts.map +1 -0
  68. package/dist/observation.js +92 -0
  69. package/dist/observation.js.map +1 -0
  70. package/dist/outcome.d.ts +22 -18
  71. package/dist/outcome.d.ts.map +1 -1
  72. package/dist/outcome.js +1 -11
  73. package/dist/outcome.js.map +1 -1
  74. package/dist/overlay.d.ts +9 -2
  75. package/dist/overlay.d.ts.map +1 -1
  76. package/dist/overlay.js +145 -6
  77. package/dist/overlay.js.map +1 -1
  78. package/dist/paths.d.ts +0 -1
  79. package/dist/paths.d.ts.map +1 -1
  80. package/dist/paths.js +0 -4
  81. package/dist/paths.js.map +1 -1
  82. package/dist/query.d.ts +213 -0
  83. package/dist/query.d.ts.map +1 -0
  84. package/dist/query.js +470 -0
  85. package/dist/query.js.map +1 -0
  86. package/dist/read-side.d.ts +14 -0
  87. package/dist/read-side.d.ts.map +1 -0
  88. package/dist/read-side.js +457 -0
  89. package/dist/read-side.js.map +1 -0
  90. package/dist/refresh.d.ts +4 -4
  91. package/dist/refresh.d.ts.map +1 -1
  92. package/dist/refresh.js +40 -10
  93. package/dist/refresh.js.map +1 -1
  94. package/dist/replica.d.ts +27 -4
  95. package/dist/replica.d.ts.map +1 -1
  96. package/dist/replica.js +255 -13
  97. package/dist/replica.js.map +1 -1
  98. package/dist/room-draft.d.ts +124 -0
  99. package/dist/room-draft.d.ts.map +1 -0
  100. package/dist/room-draft.js +406 -0
  101. package/dist/room-draft.js.map +1 -0
  102. package/dist/rows.d.ts +41 -0
  103. package/dist/rows.d.ts.map +1 -0
  104. package/dist/rows.js +102 -0
  105. package/dist/rows.js.map +1 -0
  106. package/dist/save.d.ts +11 -2
  107. package/dist/save.d.ts.map +1 -1
  108. package/dist/save.js +116 -128
  109. package/dist/save.js.map +1 -1
  110. package/dist/search.d.ts +61 -0
  111. package/dist/search.d.ts.map +1 -0
  112. package/dist/search.js +155 -0
  113. package/dist/search.js.map +1 -0
  114. package/dist/status.d.ts +9 -2
  115. package/dist/status.d.ts.map +1 -1
  116. package/dist/status.js +5 -4
  117. package/dist/status.js.map +1 -1
  118. package/dist/store.d.ts +90 -18
  119. package/dist/store.d.ts.map +1 -1
  120. package/dist/store.js +492 -67
  121. package/dist/store.js.map +1 -1
  122. package/dist/transfer.d.ts +5 -0
  123. package/dist/transfer.d.ts.map +1 -1
  124. package/dist/transfer.js.map +1 -1
  125. package/dist/wire.d.ts +64 -0
  126. package/dist/wire.d.ts.map +1 -0
  127. package/dist/wire.js +145 -0
  128. package/dist/wire.js.map +1 -0
  129. package/package.json +15 -13
@@ -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,3 @@
1
+ export declare function changeBatchIdentity(at?: number): string;
2
+ export declare function roomDraftRevision(): string;
3
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,EAAE,GAAE,MAAmB,GAAG,MAAM,CAWnE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C"}
@@ -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 { MdType } from './collection.js';
4
- export type { AppRoom, CallResult, ConnectionRefusal, ConnectionRefusalReason, DraftSurface, HistoryQuery, MdRuntime, MdRuntimeOptions, QueueSurface, SaveResult, } from './connection.js';
5
- export type { AcceptedOutcome, AffectedState, QueueEntry, QueueOutcome, SubmissionOutcome, } from './outcome.js';
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 { SyncStatus } from './status.js';
9
- export type { Backlink, QueryDocument, QueryGroup, QueryOptions, QueryResult, Selector, } from '@agentshouse/query';
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
@@ -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,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,YAAY,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,YAAY,EACV,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,uBAAuB,EACvB,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,eAAe,EACf,aAAa,EACb,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,oBAAoB,CAAC"}
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
@@ -1,3 +1,4 @@
1
+ export { changeBatchIdentity } from './identity.js';
1
2
  export { createMdRuntime } from './connection.js';
2
3
 
3
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/index.ts"],"sourcesContent":["export type {\n ActionDeclaration,\n ActionRequest,\n ActionResult,\n Adapter,\n AdapterFailure,\n Authorization,\n 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 { MdType } from './collection.js';\nexport type {\n AppRoom,\n CallResult,\n ConnectionRefusal,\n ConnectionRefusalReason,\n DraftSurface,\n HistoryQuery,\n MdRuntime,\n MdRuntimeOptions,\n QueueSurface,\n SaveResult,\n} from './connection.js';\nexport type {\n AcceptedOutcome,\n AffectedState,\n QueueEntry,\n QueueOutcome,\n SubmissionOutcome,\n} from './outcome.js';\nexport type { SaveRefusal } from './save.js';\nexport { createMdRuntime } from './connection.js';\nexport type { SyncStatus } from './status.js';\nexport type {\n Backlink,\n QueryDocument,\n QueryGroup,\n QueryOptions,\n QueryResult,\n Selector,\n} from '@agentshouse/query';\n"],"names":["createMdRuntime"],"mappings":"AAoDA,SAASA,eAAe,QAAQ,kBAAkB"}
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 { type Adapter, type Capability, type DiscoveredRoom, type MdModelIdentity, type ProviderLimit, type Retention } from './adapter.js';
1
+ import type { ModelResult } from './model.js';
2
+ import { type 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
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,OAAO,EAIZ,KAAK,UAAU,EAEf,KAAK,cAAc,EAGnB,KAAK,eAAe,EAGpB,KAAK,aAAa,EAGlB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAGtB,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG;IACxC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,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;IACtB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAAC;IAC7C,MAAM,CAAC,SAAS,EAAE,MAAM,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACzD,CAAC;AA+BF,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,oBAAyB,GAAG,aAAa,CA0MrF"}
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
- writeGrants: room.writeGrants,
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
- binaryTargets: from === 0 ? room.binaryTargets ?? [] : [],
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 changed = Object.keys(current).filter((path)=>current[path] !== previous[path]).sort();
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
- binaryTargets: opening ? [
92
- ...currentTargets
93
- ].filter((target)=>!previousTargets.has(target)) : [],
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
- text: '',
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
- text: ''
209
- }), request);
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
  }