@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/adapter.js
CHANGED
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/adapter.ts"],"sourcesContent":["import type { ChangeBatch } from './change.js';\n\nexport type Authorization = object;\n\nexport const ROOM_CONTRACT_VERSION = 1;\n\nexport const VERSION_1_CAPABILITIES = [\n 'stable-file-ids',\n 'ranked-provider-search',\n 'room-version-notifications',\n 'room-history',\n 'provider-actions',\n] as const;\n\nexport type MdModelIdentity = {\n identity: string;\n version: string;\n};\n\nexport type DiscoveredRoom = {\n name: string;\n locator: string;\n roomVersion: string;\n writeGrants: readonly string[];\n providerOwnedPaths: readonly string[];\n};\n\nexport type Capability = {\n name: string;\n limits?: readonly ProviderLimit[];\n actions?: readonly ActionDeclaration[];\n};\n\nexport type ActionDeclaration = {\n name: string;\n inputShape: unknown;\n resultKind: unknown;\n};\n\nexport type ProviderLimit = {\n name: string;\n value?: number | string;\n};\n\nexport type Retention = {\n history: number;\n outcome: number;\n refreshHorizon: number;\n};\n\nexport type Discovery = {\n kind: 'discovery';\n supportedVersions: readonly number[];\n mdModel: MdModelIdentity;\n rooms: readonly DiscoveredRoom[];\n capabilities: readonly Capability[];\n providerLimits: readonly ProviderLimit[];\n retention: Retention;\n origins: readonly string[];\n};\n\nexport type TransportUncertainty = { kind: 'transport-uncertainty' };\nexport type RoomNotReadable = { kind: 'room-not-readable'; locator: string };\nexport type RevokedAuthorization = { kind: 'revoked-authorization' };\n\nexport type AdapterFailure = TransportUncertainty | RoomNotReadable | RevokedAuthorization;\n\nexport type DiscoverResult = Discovery | TransportUncertainty | RevokedAuthorization;\n\nexport type PageToken = string;\n\nexport type BootstrapRequest = {\n locator: string;\n pageToken?: PageToken;\n};\n\nexport type BootstrapPage = {\n kind: 'bootstrap';\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n revisions: Readonly<Record<string, string>>;\n binaryTargets: readonly string[];\n pageToken?: PageToken;\n};\n\nexport type BootstrapResult = BootstrapPage | AdapterFailure;\n\nexport type RefreshRequest = {\n locator: string;\n fromRoomVersion: string;\n pageToken?: PageToken;\n};\n\nexport type RefreshPage = {\n kind: 'net-advancement';\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n revisions: Readonly<Record<string, string>>;\n binaryTargets: readonly string[];\n removals: readonly string[];\n pageToken?: PageToken;\n};\n\nexport type RefreshResult =\n | { kind: 'still-current' }\n | RefreshPage\n | { kind: 'beyond-horizon' }\n | AdapterFailure;\n\nexport type MutationRequest = {\n locator: string;\n changeBatch: ChangeBatch;\n};\n\nexport type MutationResult =\n | {\n kind: 'accepted';\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n revisions: Readonly<Record<string, string>>;\n removals: readonly string[];\n author: string;\n time: string;\n }\n | {\n kind: 'conflicted';\n roomVersion: string;\n affected: Readonly<Record<string, string>>;\n text: string;\n }\n | {\n kind: 'rejected';\n affected: Readonly<Record<string, string>>;\n text: string;\n }\n | { kind: 'expired' }\n | AdapterFailure;\n\nexport type HistoryRevision = {\n revision: string;\n author: string;\n time: string;\n};\n\nexport type HistoryRequest = {\n locator: string;\n path: string;\n revision?: string;\n pageToken?: PageToken;\n};\n\nexport type HistoryResult =\n | {\n kind: 'history';\n revisions: readonly HistoryRevision[];\n pageToken?: PageToken;\n }\n | {\n kind: 'revision';\n content: string;\n }\n | { kind: 'no-history' }\n | AdapterFailure;\n\nexport type ActionRequest = {\n name: string;\n input: unknown;\n};\n\nexport type ActionResult =\n | { kind: 'action'; result: unknown }\n | { kind: 'rejected'; text: string }\n | AdapterFailure;\n\nexport type Adapter = {\n authorize(): Promise<Authorization>;\n discover(authorization: Authorization): Promise<DiscoverResult>;\n bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;\n refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;\n mutate(authorization: Authorization, request: MutationRequest): Promise<MutationResult>;\n history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;\n action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;\n};\n"],"names":["ROOM_CONTRACT_VERSION","VERSION_1_CAPABILITIES"],"mappings":"AAIA,OAAO,MAAMA,wBAAwB,EAAE;AAEvC,OAAO,MAAMC,yBAAyB;IACpC;IACA;IACA;IACA;IACA;CACD,CAAU"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/adapter.ts"],"sourcesContent":["import type { ModelIdentity, ModelResult } from './model.js';\nimport type { ChangeBatch } from './change.js';\n\nexport type Authorization = object;\n\nexport const ROOM_CONTRACT_VERSION = 1;\n\nexport const VERSION_1_CAPABILITIES = [\n 'stable-file-ids',\n 'ranked-provider-search',\n 'room-version-notifications',\n 'room-history',\n 'provider-actions',\n 'move-reference-rewrites',\n] as const;\n\nexport type MdModelIdentity = {\n identity: string;\n version: string;\n};\n\nexport type TypedSelection = {\n roots: readonly string[];\n attachedModel: ModelIdentity | null;\n};\n\nexport type OperationScopes = {\n read: readonly string[];\n sync: readonly string[];\n write: readonly string[];\n delete: readonly string[];\n};\nexport type ReplicaAdmission = { selection: string; admission: 'admitted' | 'unavailable' };\n\nexport type DiscoveredRoom = {\n name: string;\n locator: string;\n roomVersion: string;\n operations: OperationScopes;\n replica: ReplicaAdmission;\n attachedModel: ModelIdentity | null;\n typedSelection?: TypedSelection;\n untypedFolders?: readonly string[];\n providerOwnedPaths: readonly string[];\n};\n\nexport type Capability = {\n name: string;\n limits?: readonly ProviderLimit[];\n actions?: readonly ActionDeclaration[];\n conversationCards?: ConversationCards;\n};\n\nexport type ConversationCards = {\n locator: string;\n type: string;\n identity: string;\n agent: string;\n};\n\nexport type ConversationAction =\n | 'conversation.create'\n | 'conversation.send'\n | 'conversation.answer'\n | 'conversation.interrupt'\n | 'conversation.kill'\n | 'conversation.cancel'\n | 'conversation.delete'\n | 'conversation.history';\n\nexport type ConversationMessage = {\n identity: string;\n turn: string;\n text: string;\n message: unknown;\n};\n\nexport type AcceptedMessage = ConversationMessage & { position: string };\n\nexport type ConversationHistoryRequest = {\n conversations: readonly { conversation: string; after?: string }[];\n};\n\nexport type ConversationHistoryPage = {\n conversation: string;\n messages: readonly AcceptedMessage[];\n next?: string;\n};\n\nexport type ConversationHistories = {\n histories: readonly ConversationHistoryPage[];\n};\n\nexport type WorkingNote = { noteId: string; text: string };\n\nexport type PlanStep = { label: string; priority?: string; status: string };\n\nexport type ProcessCommand = {\n [field: string]: unknown;\n name: string;\n description: string;\n input?: { [field: string]: unknown; hint: string } | null;\n};\n\ntype SelectValue = {\n [field: string]: unknown;\n value: string;\n name: string;\n description?: string | null;\n};\n\ntype SelectGroup = {\n [field: string]: unknown;\n group: string;\n name: string;\n options: readonly SelectValue[];\n};\n\ntype SessionOptionNaming = {\n [field: string]: unknown;\n id: string;\n name: string;\n description?: string | null;\n category?: string | null;\n};\n\nexport type SessionOption =\n | (SessionOptionNaming & {\n type: 'select';\n currentValue: string;\n options: readonly SelectValue[] | readonly SelectGroup[];\n })\n | (SessionOptionNaming & { type: 'boolean'; currentValue: boolean });\n\nexport type ConversationEvent =\n | { kind: 'growing-text'; conversation: string; turn: string; text: string }\n | { kind: 'plan'; conversation: string; turn: string; plan: readonly PlanStep[] }\n | { kind: 'working-note'; conversation: string; note: WorkingNote | null }\n | { kind: 'questions'; conversation: string; questions: readonly unknown[] }\n | { kind: 'process'; conversation: string; running: boolean }\n | { kind: 'commands'; conversation: string; commands: readonly ProcessCommand[] }\n | { kind: 'options'; conversation: string; options: readonly SessionOption[] }\n | { kind: 'accepted-message'; conversation: string; message: AcceptedMessage }\n | { kind: 'gap'; conversation: string };\n\nexport type ConversationStream = {\n replicate(conversations: readonly string[]): void;\n observe(notify: (event: ConversationEvent) => void): () => void;\n};\n\nexport type ActionDeclaration = {\n name: string;\n inputShape: unknown;\n resultKind: unknown;\n};\n\nexport type ProviderLimit = {\n name: string;\n value?: number | string;\n};\n\nexport type HistoryRetention =\n | { kind: 'duration'; seconds: number }\n | { kind: 'no-declared-time-bound' };\n\nexport type Retention = {\n history: HistoryRetention;\n outcome: number;\n refreshHorizon: number;\n};\n\nexport type Discovery = {\n kind: 'discovery';\n supportedVersions: readonly number[];\n mdModel: MdModelIdentity;\n rooms: readonly DiscoveredRoom[];\n slots?: readonly {\n slot: string;\n entries: readonly { locator: string; segment: string | null }[];\n }[];\n capabilities: readonly Capability[];\n providerLimits: readonly ProviderLimit[];\n retention: Retention;\n};\n\nexport type TransportUncertainty = { kind: 'transport-uncertainty' };\nexport type RoomNotReadable = { kind: 'room-not-readable'; locator: string };\nexport type RevokedAuthorization = { kind: 'revoked-authorization' };\n\nexport type ProviderRefusal = {\n code: string;\n fields: Readonly<Record<string, unknown>>;\n};\n\nexport type ScopedRefusal = ProviderRefusal & {\n kind: 'scoped-refusal';\n locator: string;\n scope: 'content' | 'sync' | 'model' | 'operation' | 'undisclosed';\n};\nexport type AdapterFailure =\n | TransportUncertainty\n | RoomNotReadable\n | RevokedAuthorization\n | ScopedRefusal;\n\nexport type ContractUnavailable = ProviderRefusal & { kind: 'contract-unavailable' };\n\nexport type DiscoverResult =\n | Discovery\n | TransportUncertainty\n | RevokedAuthorization\n | ContractUnavailable;\n\nexport type PageToken = string;\n\nexport type ChangeAuthor =\n | { kind: 'user'; id: string; name: string }\n | { kind: 'site'; id: string; name: string };\n\nexport type HeadChange = { author: ChangeAuthor | null; time: string };\n\nexport type RoomAttachment = {\n reference: string;\n name: string;\n byteLength: number;\n mediaType: string | null;\n entry: unknown;\n};\n\nexport type BootstrapRequest = {\n locator: string;\n selection: string;\n pageToken?: PageToken;\n};\n\nexport type BootstrapPage = {\n kind: 'bootstrap';\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n revisions: Readonly<Record<string, string>>;\n changes: Readonly<Record<string, HeadChange>>;\n binaryTargets: readonly string[];\n attachments?: readonly RoomAttachment[];\n pageToken?: PageToken;\n};\n\nexport type BootstrapResult = BootstrapPage | AdapterFailure;\n\nexport type RefreshRequest = {\n locator: string;\n selection: string;\n fromRoomVersion: string;\n minPosition?: string;\n pageToken?: PageToken;\n};\n\nexport type RefreshPage = {\n kind: 'net-advancement';\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n revisions: Readonly<Record<string, string>>;\n changes: Readonly<Record<string, HeadChange>>;\n binaryTargets: readonly string[];\n removals: readonly string[];\n attachments?: readonly RoomAttachment[];\n pageToken?: PageToken;\n};\n\nexport type RefreshResult =\n | { kind: 'still-current' }\n | RefreshPage\n | { kind: 'beyond-horizon' }\n | RetryableRefusal\n | AdapterFailure;\n\nexport type MutationRequest = {\n locator: string;\n changeBatch: ChangeBatch;\n upload?: unknown;\n};\n\nexport type RetryableRefusal = ProviderRefusal & {\n kind: 'retryable-refusal';\n reset?: string;\n};\n\nexport type ServiceMode = 'open' | 'write-halted';\n\nexport type ServiceModeSignal = {\n observe(notify: (mode: ServiceMode) => void): () => void;\n};\n\nexport type MutationResult =\n | {\n kind: 'accepted';\n roomVersion: string;\n documents: Readonly<Record<string, string>>;\n revisions: Readonly<Record<string, string>>;\n removals: readonly string[];\n author?: string;\n time?: string;\n }\n | (ProviderRefusal & {\n kind: 'conflicted';\n roomVersion?: string;\n affected: Readonly<Record<string, string>>;\n })\n | (ProviderRefusal & {\n kind: 'rejected';\n affected: Readonly<Record<string, string>>;\n })\n | RetryableRefusal\n | { kind: 'write-halted' }\n | { kind: 'expired' }\n | AdapterFailure;\n\nexport type HistoryAuthor =\n | { kind: 'user'; id: string }\n | { kind: 'site'; id: string; name: string };\n\nexport type HistoryRevision = {\n revision: string;\n author: HistoryAuthor;\n time: string;\n};\n\nexport type HistoryRequest = {\n locator: string;\n path: string;\n revision?: string;\n pageToken?: PageToken;\n};\n\nexport type HistoryResult =\n | {\n kind: 'history';\n revisions: readonly HistoryRevision[];\n pageToken?: PageToken;\n }\n | {\n kind: 'revision';\n content: string;\n }\n | { kind: 'no-history' }\n | AdapterFailure;\n\nexport type ActionRequest = {\n name: string;\n input: unknown;\n};\n\nexport type RoomVersionAt = {\n locator: string;\n roomVersion: string;\n};\n\nexport type ActionResult =\n | { kind: 'action'; result: unknown; at?: RoomVersionAt }\n | (ProviderRefusal & { kind: 'rejected' })\n | AdapterFailure;\n\nexport type ModelRequest =\n | { locator: string; attached: 'collection'; model: ModelIdentity | null }\n | {\n locator: string;\n attached: 'typed-selection';\n roots: readonly string[];\n model: ModelIdentity | null;\n };\n\nexport type RoomVersionNotification = {\n locator: string;\n roomVersion: string;\n modelChanged?: true;\n};\n\nexport type SelectedRooms = {\n select(locators: readonly string[]): void;\n observe(notify: (notification: RoomVersionNotification) => void): () => void;\n};\n\nexport type Adapter = {\n model(authorization: Authorization, request: ModelRequest): Promise<ModelResult>;\n authorize(): Promise<Authorization>;\n discover(authorization: Authorization): Promise<DiscoverResult>;\n bootstrap(authorization: Authorization, request: BootstrapRequest): Promise<BootstrapResult>;\n refresh(authorization: Authorization, request: RefreshRequest): Promise<RefreshResult>;\n mutate(\n authorization: Authorization,\n request: MutationRequest,\n keep: (upload: unknown) => Promise<void>,\n ): Promise<MutationResult>;\n history(authorization: Authorization, request: HistoryRequest): Promise<HistoryResult>;\n action(authorization: Authorization, request: ActionRequest): Promise<ActionResult>;\n reached(locator: string, roomVersion: string, target: string): boolean;\n roomVersions?: SelectedRooms;\n conversations?: ConversationStream;\n serviceMode?: ServiceModeSignal;\n};\n"],"names":["ROOM_CONTRACT_VERSION","VERSION_1_CAPABILITIES"],"mappings":"AAKA,OAAO,MAAMA,wBAAwB,EAAE;AAEvC,OAAO,MAAMC,yBAAyB;IACpC;IACA;IACA;IACA;IACA;IACA;CACD,CAAU"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../src/attachment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,CAAC,SAAS,cAAc,EAAE,CAAC,EAAE,GAC5C,SAAS,cAAc,EAAE,CAQ3B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function declaredAttachments(pages) {
|
|
2
|
+
const byReference = new Map();
|
|
3
|
+
for (const page of pages){
|
|
4
|
+
for (const attachment of page)byReference.set(attachment.reference, attachment);
|
|
5
|
+
}
|
|
6
|
+
return [
|
|
7
|
+
...byReference.values()
|
|
8
|
+
].sort((left, right)=>left.reference < right.reference ? -1 : left.reference > right.reference ? 1 : 0);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=attachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/attachment.ts"],"sourcesContent":["import type { RoomAttachment } from './adapter.js';\n\nexport function declaredAttachments(\n pages: readonly (readonly RoomAttachment[])[],\n): readonly RoomAttachment[] {\n const byReference = new Map<string, RoomAttachment>();\n for (const page of pages) {\n for (const attachment of page) byReference.set(attachment.reference, attachment);\n }\n return [...byReference.values()].sort((left, right) =>\n left.reference < right.reference ? -1 : left.reference > right.reference ? 1 : 0,\n );\n}\n"],"names":["declaredAttachments","pages","byReference","Map","page","attachment","set","reference","values","sort","left","right"],"mappings":"AAEA,OAAO,SAASA,oBACdC,KAA6C;IAE7C,MAAMC,cAAc,IAAIC;IACxB,KAAK,MAAMC,QAAQH,MAAO;QACxB,KAAK,MAAMI,cAAcD,KAAMF,YAAYI,GAAG,CAACD,WAAWE,SAAS,EAAEF;IACvE;IACA,OAAO;WAAIH,YAAYM,MAAM;KAAG,CAACC,IAAI,CAAC,CAACC,MAAMC,QAC3CD,KAAKH,SAAS,GAAGI,MAAMJ,SAAS,GAAG,CAAC,IAAIG,KAAKH,SAAS,GAAGI,MAAMJ,SAAS,GAAG,IAAI;AAEnF"}
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import type { ModelState } from './model.js';
|
|
1
2
|
import type { Adapter, AdapterFailure, Authorization, DiscoveredRoom } from './adapter.js';
|
|
2
|
-
import { type
|
|
3
|
+
import { type Staged } from './replica.js';
|
|
3
4
|
import { type Unconfirmed } from './transfer.js';
|
|
4
|
-
export type BootstrapOutcome =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export type BootstrapOutcome = Staged | Unconfirmed | AdapterFailure;
|
|
6
|
+
export declare function bootstrapRoom(adapter: Adapter, authorization: Authorization, room: DiscoveredRoom, models: {
|
|
7
|
+
collection: ModelState;
|
|
8
|
+
selection: ModelState;
|
|
9
|
+
}, continuing: () => boolean): Promise<BootstrapOutcome>;
|
|
9
10
|
//# sourceMappingURL=bootstrap.d.ts.map
|
package/dist/bootstrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EACV,OAAO,EACP,cAAc,EACd,aAAa,EACb,cAAc,EAGf,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9D,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,cAAc,CAAC;AAErE,wBAAsB,aAAa,CACjC,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,UAAU,CAAA;CAAE,EACzD,UAAU,EAAE,MAAM,OAAO,GACxB,OAAO,CAAC,gBAAgB,CAAC,CAgD3B"}
|
package/dist/bootstrap.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { declaredAttachments } from './attachment.js';
|
|
2
|
+
import { readStaged } from './replica.js';
|
|
2
3
|
import { unconfirmed } from './transfer.js';
|
|
3
|
-
export async function bootstrapRoom(adapter, authorization, room) {
|
|
4
|
+
export async function bootstrapRoom(adapter, authorization, room, models, continuing) {
|
|
4
5
|
const first = await adapter.bootstrap(authorization, {
|
|
5
|
-
locator: room.locator
|
|
6
|
+
locator: room.locator,
|
|
7
|
+
selection: room.replica.selection
|
|
6
8
|
});
|
|
7
9
|
if (first.kind !== 'bootstrap') return first;
|
|
8
10
|
const roomVersion = first.roomVersion;
|
|
@@ -12,36 +14,54 @@ export async function bootstrapRoom(adapter, authorization, room) {
|
|
|
12
14
|
const revisions = {
|
|
13
15
|
...first.revisions
|
|
14
16
|
};
|
|
17
|
+
const changes = {
|
|
18
|
+
...first.changes
|
|
19
|
+
};
|
|
15
20
|
const binaryTargets = new Set(first.binaryTargets);
|
|
21
|
+
const attachments = [
|
|
22
|
+
first.attachments ?? []
|
|
23
|
+
];
|
|
16
24
|
let pageToken = first.pageToken;
|
|
17
25
|
while(pageToken !== undefined){
|
|
26
|
+
if (!continuing()) return unconfirmed;
|
|
18
27
|
const page = await adapter.bootstrap(authorization, {
|
|
19
28
|
locator: room.locator,
|
|
29
|
+
selection: room.replica.selection,
|
|
20
30
|
pageToken
|
|
21
31
|
});
|
|
22
32
|
if (page.kind !== 'bootstrap') return page;
|
|
23
33
|
if (page.roomVersion !== roomVersion) return unconfirmed;
|
|
24
34
|
Object.assign(documents, page.documents);
|
|
25
35
|
Object.assign(revisions, page.revisions);
|
|
36
|
+
Object.assign(changes, page.changes);
|
|
26
37
|
for (const target of page.binaryTargets)binaryTargets.add(target);
|
|
38
|
+
attachments.push(page.attachments ?? []);
|
|
27
39
|
pageToken = page.pageToken;
|
|
28
40
|
}
|
|
29
|
-
|
|
41
|
+
return readStaged({
|
|
30
42
|
locator: room.locator,
|
|
31
43
|
name: room.name,
|
|
32
|
-
|
|
44
|
+
operations: room.operations,
|
|
45
|
+
replica: room.replica,
|
|
46
|
+
attachedModel: room.attachedModel,
|
|
47
|
+
model: models.collection,
|
|
48
|
+
typedSelection: room.typedSelection ?? null,
|
|
49
|
+
selectionModel: models.selection,
|
|
50
|
+
untypedFolders: room.untypedFolders ?? [],
|
|
33
51
|
providerOwnedPaths: room.providerOwnedPaths,
|
|
34
52
|
roomVersion,
|
|
35
53
|
documents,
|
|
36
54
|
binaryTargets: [
|
|
37
55
|
...binaryTargets
|
|
38
56
|
].sort(),
|
|
39
|
-
revisions
|
|
57
|
+
revisions,
|
|
58
|
+
changes,
|
|
59
|
+
written: Object.fromEntries(Object.keys(documents).map((path)=>[
|
|
60
|
+
path,
|
|
61
|
+
roomVersion
|
|
62
|
+
])),
|
|
63
|
+
attachments: declaredAttachments(attachments)
|
|
40
64
|
});
|
|
41
|
-
return confirmed === null ? unconfirmed : {
|
|
42
|
-
kind: 'staged',
|
|
43
|
-
confirmed
|
|
44
|
-
};
|
|
45
65
|
}
|
|
46
66
|
|
|
47
67
|
//# sourceMappingURL=bootstrap.js.map
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/bootstrap.ts"],"sourcesContent":["import type { Adapter
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/bootstrap.ts"],"sourcesContent":["import type { ModelState } from './model.js';\nimport type {\n Adapter,\n AdapterFailure,\n Authorization,\n DiscoveredRoom,\n HeadChange,\n RoomAttachment,\n} from './adapter.js';\nimport { declaredAttachments } from './attachment.js';\nimport { readStaged, type Staged } from './replica.js';\nimport { unconfirmed, type Unconfirmed } from './transfer.js';\n\nexport type BootstrapOutcome = Staged | Unconfirmed | AdapterFailure;\n\nexport async function bootstrapRoom(\n adapter: Adapter,\n authorization: Authorization,\n room: DiscoveredRoom,\n models: { collection: ModelState; selection: ModelState },\n continuing: () => boolean,\n): Promise<BootstrapOutcome> {\n const first = await adapter.bootstrap(authorization, {\n locator: room.locator,\n selection: room.replica.selection,\n });\n if (first.kind !== 'bootstrap') return first;\n const roomVersion = first.roomVersion;\n const documents: Record<string, string> = { ...first.documents };\n const revisions: Record<string, string> = { ...first.revisions };\n const changes: Record<string, HeadChange> = { ...first.changes };\n const binaryTargets = new Set(first.binaryTargets);\n const attachments: (readonly RoomAttachment[])[] = [first.attachments ?? []];\n let pageToken = first.pageToken;\n while (pageToken !== undefined) {\n if (!continuing()) return unconfirmed;\n const page = await adapter.bootstrap(authorization, {\n locator: room.locator,\n selection: room.replica.selection,\n pageToken,\n });\n if (page.kind !== 'bootstrap') return page;\n if (page.roomVersion !== roomVersion) return unconfirmed;\n Object.assign(documents, page.documents);\n Object.assign(revisions, page.revisions);\n Object.assign(changes, page.changes);\n for (const target of page.binaryTargets) binaryTargets.add(target);\n attachments.push(page.attachments ?? []);\n pageToken = page.pageToken;\n }\n return readStaged({\n locator: room.locator,\n name: room.name,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n model: models.collection,\n typedSelection: room.typedSelection ?? null,\n selectionModel: models.selection,\n untypedFolders: room.untypedFolders ?? [],\n providerOwnedPaths: room.providerOwnedPaths,\n roomVersion,\n documents,\n binaryTargets: [...binaryTargets].sort(),\n revisions,\n changes,\n written: Object.fromEntries(Object.keys(documents).map((path) => [path, roomVersion])),\n attachments: declaredAttachments(attachments),\n });\n}\n"],"names":["declaredAttachments","readStaged","unconfirmed","bootstrapRoom","adapter","authorization","room","models","continuing","first","bootstrap","locator","selection","replica","kind","roomVersion","documents","revisions","changes","binaryTargets","Set","attachments","pageToken","undefined","page","Object","assign","target","add","push","name","operations","attachedModel","model","collection","typedSelection","selectionModel","untypedFolders","providerOwnedPaths","sort","written","fromEntries","keys","map","path"],"mappings":"AASA,SAASA,mBAAmB,QAAQ,kBAAkB;AACtD,SAASC,UAAU,QAAqB,eAAe;AACvD,SAASC,WAAW,QAA0B,gBAAgB;AAI9D,OAAO,eAAeC,cACpBC,OAAgB,EAChBC,aAA4B,EAC5BC,IAAoB,EACpBC,MAAyD,EACzDC,UAAyB;IAEzB,MAAMC,QAAQ,MAAML,QAAQM,SAAS,CAACL,eAAe;QACnDM,SAASL,KAAKK,OAAO;QACrBC,WAAWN,KAAKO,OAAO,CAACD,SAAS;IACnC;IACA,IAAIH,MAAMK,IAAI,KAAK,aAAa,OAAOL;IACvC,MAAMM,cAAcN,MAAMM,WAAW;IACrC,MAAMC,YAAoC;QAAE,GAAGP,MAAMO,SAAS;IAAC;IAC/D,MAAMC,YAAoC;QAAE,GAAGR,MAAMQ,SAAS;IAAC;IAC/D,MAAMC,UAAsC;QAAE,GAAGT,MAAMS,OAAO;IAAC;IAC/D,MAAMC,gBAAgB,IAAIC,IAAIX,MAAMU,aAAa;IACjD,MAAME,cAA6C;QAACZ,MAAMY,WAAW,IAAI,EAAE;KAAC;IAC5E,IAAIC,YAAYb,MAAMa,SAAS;IAC/B,MAAOA,cAAcC,UAAW;QAC9B,IAAI,CAACf,cAAc,OAAON;QAC1B,MAAMsB,OAAO,MAAMpB,QAAQM,SAAS,CAACL,eAAe;YAClDM,SAASL,KAAKK,OAAO;YACrBC,WAAWN,KAAKO,OAAO,CAACD,SAAS;YACjCU;QACF;QACA,IAAIE,KAAKV,IAAI,KAAK,aAAa,OAAOU;QACtC,IAAIA,KAAKT,WAAW,KAAKA,aAAa,OAAOb;QAC7CuB,OAAOC,MAAM,CAACV,WAAWQ,KAAKR,SAAS;QACvCS,OAAOC,MAAM,CAACT,WAAWO,KAAKP,SAAS;QACvCQ,OAAOC,MAAM,CAACR,SAASM,KAAKN,OAAO;QACnC,KAAK,MAAMS,UAAUH,KAAKL,aAAa,CAAEA,cAAcS,GAAG,CAACD;QAC3DN,YAAYQ,IAAI,CAACL,KAAKH,WAAW,IAAI,EAAE;QACvCC,YAAYE,KAAKF,SAAS;IAC5B;IACA,OAAOrB,WAAW;QAChBU,SAASL,KAAKK,OAAO;QACrBmB,MAAMxB,KAAKwB,IAAI;QACfC,YAAYzB,KAAKyB,UAAU;QAC3BlB,SAASP,KAAKO,OAAO;QACrBmB,eAAe1B,KAAK0B,aAAa;QACjCC,OAAO1B,OAAO2B,UAAU;QACxBC,gBAAgB7B,KAAK6B,cAAc,IAAI;QACvCC,gBAAgB7B,OAAOK,SAAS;QAChCyB,gBAAgB/B,KAAK+B,cAAc,IAAI,EAAE;QACzCC,oBAAoBhC,KAAKgC,kBAAkB;QAC3CvB;QACAC;QACAG,eAAe;eAAIA;SAAc,CAACoB,IAAI;QACtCtB;QACAC;QACAsB,SAASf,OAAOgB,WAAW,CAAChB,OAAOiB,IAAI,CAAC1B,WAAW2B,GAAG,CAAC,CAACC,OAAS;gBAACA;gBAAM7B;aAAY;QACpFM,aAAarB,oBAAoBqB;IACnC;AACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Replica } from './replica.js';
|
|
2
|
+
import { type Row } from './rows.js';
|
|
3
|
+
export type DocumentChange = {
|
|
4
|
+
locator: string;
|
|
5
|
+
path: string;
|
|
6
|
+
before: readonly Row[];
|
|
7
|
+
after: readonly Row[];
|
|
8
|
+
};
|
|
9
|
+
export type MessageChange = {
|
|
10
|
+
conversation: string;
|
|
11
|
+
identity: string;
|
|
12
|
+
};
|
|
13
|
+
export type ChangeSet = {
|
|
14
|
+
documents: readonly DocumentChange[];
|
|
15
|
+
drafts: readonly {
|
|
16
|
+
locator: string;
|
|
17
|
+
path: string;
|
|
18
|
+
}[];
|
|
19
|
+
rooms: readonly string[];
|
|
20
|
+
queues: readonly string[];
|
|
21
|
+
presentations: readonly string[];
|
|
22
|
+
messages: readonly MessageChange[];
|
|
23
|
+
conversations: readonly string[];
|
|
24
|
+
};
|
|
25
|
+
export declare function changeSet(locator: string, before: Replica | null, after: Replica | null, changed?: {
|
|
26
|
+
drafts?: readonly string[];
|
|
27
|
+
room?: boolean;
|
|
28
|
+
queue?: boolean;
|
|
29
|
+
presentation?: string;
|
|
30
|
+
}): ChangeSet;
|
|
31
|
+
export declare function conversationChangeSet(messages: readonly MessageChange[], conversations: readonly string[]): ChangeSet;
|
|
32
|
+
export declare function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet;
|
|
33
|
+
//# sourceMappingURL=change-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"change-set.d.ts","sourceRoot":"","sources":["../src/change-set.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiC,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EAAU,KAAK,GAAG,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;IACvB,KAAK,EAAE,SAAS,GAAG,EAAE,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,SAAS,GAAG;IACtB,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrD,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC,CAAC;AAwBF,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,GAAG,IAAI,EACtB,KAAK,EAAE,OAAO,GAAG,IAAI,EACrB,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CAClB,GACL,SAAS,CAkDX;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAClC,aAAa,EAAE,SAAS,MAAM,EAAE,GAC/B,SAAS,CAUX;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAUrE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { untyped } from './collection.js';
|
|
2
|
+
import { sameChange } from './overlay.js';
|
|
3
|
+
import { beneath } from './paths.js';
|
|
4
|
+
import { compositionOf, sameMembership } from './replica.js';
|
|
5
|
+
import { rowsOf } from './rows.js';
|
|
6
|
+
function rowsAt(locator, replica, path) {
|
|
7
|
+
if (replica === null) return [];
|
|
8
|
+
const document = replica.visible.collection.documents[path];
|
|
9
|
+
const carried = Object.hasOwn(replica.visible.documents, path) && untyped(replica.confirmed.record.untypedFolders, path);
|
|
10
|
+
if (document === undefined && !carried && !replica.visible.binaryTargets.includes(path)) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
return rowsOf(locator, path, document ?? null, compositionOf(replica.confirmed.record), replica.visible.changes[path] ?? null);
|
|
14
|
+
}
|
|
15
|
+
function modelShape(model) {
|
|
16
|
+
return model.status === 'unavailable' ? 'unavailable' : JSON.stringify(model.types);
|
|
17
|
+
}
|
|
18
|
+
export function changeSet(locator, before, after, changed = {}) {
|
|
19
|
+
const paths = new Set([
|
|
20
|
+
...Object.keys(before?.visible.documents ?? {}),
|
|
21
|
+
...Object.keys(after?.visible.documents ?? {}),
|
|
22
|
+
...before?.visible.binaryTargets ?? [],
|
|
23
|
+
...after?.visible.binaryTargets ?? []
|
|
24
|
+
]);
|
|
25
|
+
const documents = [];
|
|
26
|
+
const oldRoom = before?.confirmed.record;
|
|
27
|
+
const newRoom = after?.confirmed.record;
|
|
28
|
+
const collectionChanged = oldRoom !== undefined && newRoom !== undefined && modelShape(oldRoom.model) !== modelShape(newRoom.model);
|
|
29
|
+
const selectionChanged = oldRoom !== undefined && newRoom !== undefined && modelShape(oldRoom.selectionModel) !== modelShape(newRoom.selectionModel);
|
|
30
|
+
const reclassified = oldRoom !== undefined && newRoom !== undefined && !sameMembership(oldRoom, newRoom);
|
|
31
|
+
for (const path of paths){
|
|
32
|
+
const selected = newRoom?.typedSelection?.roots.some((root)=>beneath(root, path)) ?? false;
|
|
33
|
+
const carried = newRoom !== undefined && untyped(newRoom.untypedFolders, path);
|
|
34
|
+
const retyped = selected ? selectionChanged : !carried && collectionChanged;
|
|
35
|
+
if (before?.visible.documents[path] === after?.visible.documents[path] && before?.visible.binaryTargets.includes(path) === after?.visible.binaryTargets.includes(path) && before?.visible.revisions[path] === after?.visible.revisions[path] && sameChange(before?.visible.changes[path], after?.visible.changes[path]) && !retyped && !reclassified) continue;
|
|
36
|
+
documents.push({
|
|
37
|
+
locator,
|
|
38
|
+
path,
|
|
39
|
+
before: rowsAt(locator, before, path),
|
|
40
|
+
after: rowsAt(locator, after, path)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
documents,
|
|
45
|
+
drafts: (changed.drafts ?? []).map((path)=>({
|
|
46
|
+
locator,
|
|
47
|
+
path
|
|
48
|
+
})),
|
|
49
|
+
rooms: changed.room ? [
|
|
50
|
+
locator
|
|
51
|
+
] : [],
|
|
52
|
+
queues: changed.queue ? [
|
|
53
|
+
locator
|
|
54
|
+
] : [],
|
|
55
|
+
presentations: changed.presentation === undefined ? [] : [
|
|
56
|
+
changed.presentation
|
|
57
|
+
],
|
|
58
|
+
messages: [],
|
|
59
|
+
conversations: []
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function conversationChangeSet(messages, conversations) {
|
|
63
|
+
return {
|
|
64
|
+
documents: [],
|
|
65
|
+
drafts: [],
|
|
66
|
+
rooms: [],
|
|
67
|
+
queues: [],
|
|
68
|
+
presentations: [],
|
|
69
|
+
messages,
|
|
70
|
+
conversations: [
|
|
71
|
+
...new Set(conversations)
|
|
72
|
+
]
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export function mergeChangeSets(sets) {
|
|
76
|
+
return {
|
|
77
|
+
documents: sets.flatMap((set)=>set.documents),
|
|
78
|
+
drafts: sets.flatMap((set)=>set.drafts),
|
|
79
|
+
rooms: [
|
|
80
|
+
...new Set(sets.flatMap((set)=>set.rooms))
|
|
81
|
+
],
|
|
82
|
+
queues: [
|
|
83
|
+
...new Set(sets.flatMap((set)=>set.queues))
|
|
84
|
+
],
|
|
85
|
+
presentations: [
|
|
86
|
+
...new Set(sets.flatMap((set)=>set.presentations))
|
|
87
|
+
],
|
|
88
|
+
messages: sets.flatMap((set)=>set.messages),
|
|
89
|
+
conversations: [
|
|
90
|
+
...new Set(sets.flatMap((set)=>set.conversations))
|
|
91
|
+
]
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=change-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/change-set.ts"],"sourcesContent":["import { untyped } from './collection.js';\nimport { sameChange } from './overlay.js';\nimport { beneath } from './paths.js';\nimport { compositionOf, sameMembership, type Replica } from './replica.js';\nimport { rowsOf, type Row } from './rows.js';\n\nexport type DocumentChange = {\n locator: string;\n path: string;\n before: readonly Row[];\n after: readonly Row[];\n};\n\nexport type MessageChange = { conversation: string; identity: string };\n\nexport type ChangeSet = {\n documents: readonly DocumentChange[];\n drafts: readonly { locator: string; path: string }[];\n rooms: readonly string[];\n queues: readonly string[];\n presentations: readonly string[];\n messages: readonly MessageChange[];\n conversations: readonly string[];\n};\n\nfunction rowsAt(locator: string, replica: Replica | null, path: string): readonly Row[] {\n if (replica === null) return [];\n const document = replica.visible.collection.documents[path];\n const carried =\n Object.hasOwn(replica.visible.documents, path) &&\n untyped(replica.confirmed.record.untypedFolders, path);\n if (document === undefined && !carried && !replica.visible.binaryTargets.includes(path)) {\n return [];\n }\n return rowsOf(\n locator,\n path,\n document ?? null,\n compositionOf(replica.confirmed.record),\n replica.visible.changes[path] ?? null,\n );\n}\n\nfunction modelShape(model: Replica['confirmed']['record']['model']): string {\n return model.status === 'unavailable' ? 'unavailable' : JSON.stringify(model.types);\n}\n\nexport function changeSet(\n locator: string,\n before: Replica | null,\n after: Replica | null,\n changed: {\n drafts?: readonly string[];\n room?: boolean;\n queue?: boolean;\n presentation?: string;\n } = {},\n): ChangeSet {\n const paths = new Set([\n ...Object.keys(before?.visible.documents ?? {}),\n ...Object.keys(after?.visible.documents ?? {}),\n ...(before?.visible.binaryTargets ?? []),\n ...(after?.visible.binaryTargets ?? []),\n ]);\n const documents: DocumentChange[] = [];\n const oldRoom = before?.confirmed.record;\n const newRoom = after?.confirmed.record;\n const collectionChanged =\n oldRoom !== undefined &&\n newRoom !== undefined &&\n modelShape(oldRoom.model) !== modelShape(newRoom.model);\n const selectionChanged =\n oldRoom !== undefined &&\n newRoom !== undefined &&\n modelShape(oldRoom.selectionModel) !== modelShape(newRoom.selectionModel);\n const reclassified =\n oldRoom !== undefined && newRoom !== undefined && !sameMembership(oldRoom, newRoom);\n for (const path of paths) {\n const selected = newRoom?.typedSelection?.roots.some((root) => beneath(root, path)) ?? false;\n const carried = newRoom !== undefined && untyped(newRoom.untypedFolders, path);\n const retyped = selected ? selectionChanged : !carried && collectionChanged;\n if (\n before?.visible.documents[path] === after?.visible.documents[path] &&\n before?.visible.binaryTargets.includes(path) ===\n after?.visible.binaryTargets.includes(path) &&\n before?.visible.revisions[path] === after?.visible.revisions[path] &&\n sameChange(before?.visible.changes[path], after?.visible.changes[path]) &&\n !retyped &&\n !reclassified\n )\n continue;\n documents.push({\n locator,\n path,\n before: rowsAt(locator, before, path),\n after: rowsAt(locator, after, path),\n });\n }\n return {\n documents,\n drafts: (changed.drafts ?? []).map((path) => ({ locator, path })),\n rooms: changed.room ? [locator] : [],\n queues: changed.queue ? [locator] : [],\n presentations: changed.presentation === undefined ? [] : [changed.presentation],\n messages: [],\n conversations: [],\n };\n}\n\nexport function conversationChangeSet(\n messages: readonly MessageChange[],\n conversations: readonly string[],\n): ChangeSet {\n return {\n documents: [],\n drafts: [],\n rooms: [],\n queues: [],\n presentations: [],\n messages,\n conversations: [...new Set(conversations)],\n };\n}\n\nexport function mergeChangeSets(sets: readonly ChangeSet[]): ChangeSet {\n return {\n documents: sets.flatMap((set) => set.documents),\n drafts: sets.flatMap((set) => set.drafts),\n rooms: [...new Set(sets.flatMap((set) => set.rooms))],\n queues: [...new Set(sets.flatMap((set) => set.queues))],\n presentations: [...new Set(sets.flatMap((set) => set.presentations))],\n messages: sets.flatMap((set) => set.messages),\n conversations: [...new Set(sets.flatMap((set) => set.conversations))],\n };\n}\n"],"names":["untyped","sameChange","beneath","compositionOf","sameMembership","rowsOf","rowsAt","locator","replica","path","document","visible","collection","documents","carried","Object","hasOwn","confirmed","record","untypedFolders","undefined","binaryTargets","includes","changes","modelShape","model","status","JSON","stringify","types","changeSet","before","after","changed","paths","Set","keys","oldRoom","newRoom","collectionChanged","selectionChanged","selectionModel","reclassified","selected","typedSelection","roots","some","root","retyped","revisions","push","drafts","map","rooms","room","queues","queue","presentations","presentation","messages","conversations","conversationChangeSet","mergeChangeSets","sets","flatMap","set"],"mappings":"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"}
|
package/dist/change.d.ts
CHANGED
|
@@ -17,6 +17,10 @@ export type Change = {
|
|
|
17
17
|
readonly path: string;
|
|
18
18
|
readonly fields: Readonly<Record<string, unknown>>;
|
|
19
19
|
readonly sections: Readonly<Record<string, string>>;
|
|
20
|
+
} | {
|
|
21
|
+
readonly kind: 'create';
|
|
22
|
+
readonly path: string;
|
|
23
|
+
readonly content: string;
|
|
20
24
|
} | {
|
|
21
25
|
readonly kind: 'replace';
|
|
22
26
|
readonly path: string;
|
|
@@ -54,11 +58,17 @@ export type Precondition = {
|
|
|
54
58
|
readonly kind: 'absent';
|
|
55
59
|
readonly path: string;
|
|
56
60
|
};
|
|
61
|
+
export type WrittenBy = {
|
|
62
|
+
readonly app: string;
|
|
63
|
+
readonly release: string;
|
|
64
|
+
};
|
|
57
65
|
export type ChangeBatch = {
|
|
66
|
+
validation?: import('./model.js').ValidationReceipt;
|
|
58
67
|
readonly id: string;
|
|
59
68
|
readonly baseRoomVersion: string;
|
|
60
69
|
readonly changes: readonly Change[];
|
|
61
70
|
readonly preconditions: readonly Precondition[];
|
|
71
|
+
readonly writtenBy?: WrittenBy;
|
|
62
72
|
};
|
|
63
73
|
export declare function immutable(batch: ChangeBatch): ChangeBatch;
|
|
64
74
|
//# sourceMappingURL=change.d.ts.map
|
package/dist/change.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../src/change.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GACd;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5E;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrD,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,YAAY,GACpB;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"change.d.ts","sourceRoot":"","sources":["../src/change.ts"],"names":[],"mappings":"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"}
|
package/dist/change.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/change.ts"],"sourcesContent":["export type Change =\n | {\n readonly kind: 'field';\n readonly path: string;\n readonly name: string;\n readonly value: unknown;\n }\n | {\n readonly kind: 'section';\n readonly path: string;\n readonly name: string;\n readonly value: string;\n }\n | { readonly kind: 'preamble'; readonly path: string; readonly value: string }\n | {\n readonly kind: 'create';\n readonly path: string;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly sections: Readonly<Record<string, string>>;\n }\n | { readonly kind: 'replace'; readonly path: string; readonly content: string }\n | { readonly kind: 'move'; readonly path: string; readonly to: string }\n | { readonly kind: 'remove'; readonly path: string };\n\nexport type Precondition =\n | {\n readonly kind: 'field';\n readonly path: string;\n readonly name: string;\n readonly value: unknown;\n }\n | {\n readonly kind: 'section';\n readonly path: string;\n readonly name: string;\n readonly value: string;\n }\n | { readonly kind: 'preamble'; readonly path: string; readonly value: string }\n | { readonly kind: 'revision'; readonly path: string; readonly revision: string }\n | { readonly kind: 'present'; readonly path: string }\n | { readonly kind: 'absent'; readonly path: string };\n\nexport type ChangeBatch = {\n readonly id: string;\n readonly baseRoomVersion: string;\n readonly changes: readonly Change[];\n readonly preconditions: readonly Precondition[];\n};\n\nfunction frozen<T>(value: T): T {\n if (Array.isArray(value)) return Object.freeze(value.map((item) => frozen(item))) as T;\n if (value === null || typeof value !== 'object') return value;\n const copy: Record<string, unknown> = {};\n for (const [name, item] of Object.entries(value)) copy[name] = frozen(item);\n return Object.freeze(copy) as T;\n}\n\nexport function immutable(batch: ChangeBatch): ChangeBatch {\n return frozen(batch);\n}\n"],"names":["frozen","value","Array","isArray","Object","freeze","map","item","copy","name","entries","immutable","batch"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/change.ts"],"sourcesContent":["export type Change =\n | {\n readonly kind: 'field';\n readonly path: string;\n readonly name: string;\n readonly value: unknown;\n }\n | {\n readonly kind: 'section';\n readonly path: string;\n readonly name: string;\n readonly value: string;\n }\n | { readonly kind: 'preamble'; readonly path: string; readonly value: string }\n | {\n readonly kind: 'create';\n readonly path: string;\n readonly fields: Readonly<Record<string, unknown>>;\n readonly sections: Readonly<Record<string, string>>;\n }\n | { readonly kind: 'create'; readonly path: string; readonly content: string }\n | { readonly kind: 'replace'; readonly path: string; readonly content: string }\n | { readonly kind: 'move'; readonly path: string; readonly to: string }\n | { readonly kind: 'remove'; readonly path: string };\n\nexport type Precondition =\n | {\n readonly kind: 'field';\n readonly path: string;\n readonly name: string;\n readonly value: unknown;\n }\n | {\n readonly kind: 'section';\n readonly path: string;\n readonly name: string;\n readonly value: string;\n }\n | { readonly kind: 'preamble'; readonly path: string; readonly value: string }\n | { readonly kind: 'revision'; readonly path: string; readonly revision: string }\n | { readonly kind: 'present'; readonly path: string }\n | { readonly kind: 'absent'; readonly path: string };\n\nexport type WrittenBy = { readonly app: string; readonly release: string };\n\nexport type ChangeBatch = {\n validation?: import('./model.js').ValidationReceipt;\n readonly id: string;\n readonly baseRoomVersion: string;\n readonly changes: readonly Change[];\n readonly preconditions: readonly Precondition[];\n readonly writtenBy?: WrittenBy;\n};\n\nfunction frozen<T>(value: T): T {\n if (Array.isArray(value)) return Object.freeze(value.map((item) => frozen(item))) as T;\n if (value === null || typeof value !== 'object') return value;\n const copy: Record<string, unknown> = {};\n for (const [name, item] of Object.entries(value)) copy[name] = frozen(item);\n return Object.freeze(copy) as T;\n}\n\nexport function immutable(batch: ChangeBatch): ChangeBatch {\n return frozen(batch);\n}\n"],"names":["frozen","value","Array","isArray","Object","freeze","map","item","copy","name","entries","immutable","batch"],"mappings":"AAsDA,SAASA,OAAUC,KAAQ;IACzB,IAAIC,MAAMC,OAAO,CAACF,QAAQ,OAAOG,OAAOC,MAAM,CAACJ,MAAMK,GAAG,CAAC,CAACC,OAASP,OAAOO;IAC1E,IAAIN,UAAU,QAAQ,OAAOA,UAAU,UAAU,OAAOA;IACxD,MAAMO,OAAgC,CAAC;IACvC,KAAK,MAAM,CAACC,MAAMF,KAAK,IAAIH,OAAOM,OAAO,CAACT,OAAQO,IAAI,CAACC,KAAK,GAAGT,OAAOO;IACtE,OAAOH,OAAOC,MAAM,CAACG;AACvB;AAEA,OAAO,SAASG,UAAUC,KAAkB;IAC1C,OAAOZ,OAAOY;AAChB"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { AppRoom, AppSlot, ConnectionRefusal, HistoryQuery, RoomTypes, SavedRoomDraft, SaveResult } from './connection.js';
|
|
2
|
+
import type { HistoryResult, ServiceMode } from './adapter.js';
|
|
3
|
+
import type { ChatDraft, ConversationEntry, ConversationOptions, ConversationView } from './conversation.js';
|
|
4
|
+
import { type Observation } from './observation.js';
|
|
5
|
+
import type { CallResult, QueueEntry, SubmissionOutcome } from './outcome.js';
|
|
6
|
+
import type { DocumentQuery, DocumentResult, GroupQuery, GroupResult } from './query.js';
|
|
7
|
+
import type { RoomDraft, RoomDraftParts, RoomDraftWrite } from './room-draft.js';
|
|
8
|
+
import type { SearchRequest, SearchResult } from './search.js';
|
|
9
|
+
import type { SyncStatus } from './status.js';
|
|
10
|
+
import { type RuntimePort } from './wire.js';
|
|
11
|
+
export type MdRuntimeClient = {
|
|
12
|
+
rooms(): Promise<readonly AppRoom[]>;
|
|
13
|
+
slots(): Promise<readonly AppSlot[]>;
|
|
14
|
+
query: {
|
|
15
|
+
(query: DocumentQuery): Promise<DocumentResult>;
|
|
16
|
+
(query: GroupQuery): Promise<GroupResult>;
|
|
17
|
+
};
|
|
18
|
+
search(request: SearchRequest): Promise<SearchResult>;
|
|
19
|
+
types(locator: string): Promise<RoomTypes>;
|
|
20
|
+
syncStatus(): Promise<SyncStatus>;
|
|
21
|
+
serviceMode(): Promise<ServiceMode>;
|
|
22
|
+
roomDraft: {
|
|
23
|
+
list(): Promise<readonly RoomDraft[]>;
|
|
24
|
+
read(room: string, path: string): Promise<RoomDraft | null>;
|
|
25
|
+
write(room: string, path: string, revision: string | null, parts: RoomDraftParts): Promise<RoomDraftWrite>;
|
|
26
|
+
discard(room: string, path: string, revision: string): Promise<RoomDraftWrite>;
|
|
27
|
+
};
|
|
28
|
+
save(room: string, roomDrafts: readonly SavedRoomDraft[]): Promise<SaveResult>;
|
|
29
|
+
outcome(identifier: string): Promise<SubmissionOutcome | null>;
|
|
30
|
+
presentation: {
|
|
31
|
+
read(): Promise<unknown>;
|
|
32
|
+
write(value: unknown): Promise<void>;
|
|
33
|
+
};
|
|
34
|
+
conversation: {
|
|
35
|
+
list(): Promise<readonly ConversationEntry[]>;
|
|
36
|
+
read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;
|
|
37
|
+
create(input: unknown): Promise<CallResult>;
|
|
38
|
+
send(conversation: string): Promise<CallResult>;
|
|
39
|
+
answer(conversation: string, answer: unknown): Promise<CallResult>;
|
|
40
|
+
interrupt(conversation: string): Promise<CallResult>;
|
|
41
|
+
kill(conversation: string): Promise<CallResult>;
|
|
42
|
+
cancel(conversation: string, turn: string): Promise<CallResult>;
|
|
43
|
+
delete(conversation: string): Promise<CallResult>;
|
|
44
|
+
};
|
|
45
|
+
chatDraft: {
|
|
46
|
+
write(conversation: string, draft: ChatDraft): Promise<void>;
|
|
47
|
+
discard(conversation: string): Promise<void>;
|
|
48
|
+
};
|
|
49
|
+
history(locator: string, path: string, query?: HistoryQuery): Promise<HistoryResult>;
|
|
50
|
+
call(name: string, input: unknown): Promise<CallResult>;
|
|
51
|
+
reached(locator: string, roomVersion: string, path?: string): Promise<boolean>;
|
|
52
|
+
log(): Promise<string>;
|
|
53
|
+
storageLoss(): Promise<string | null>;
|
|
54
|
+
persistence(): Promise<boolean>;
|
|
55
|
+
deploymentFacts(): Promise<unknown>;
|
|
56
|
+
observe: {
|
|
57
|
+
(topic: 'deployment-facts'): Promise<Observation<unknown>>;
|
|
58
|
+
(topic: 'rooms'): Promise<Observation<readonly AppRoom[]>>;
|
|
59
|
+
(topic: 'connection-refusal'): Promise<Observation<ConnectionRefusal | null>>;
|
|
60
|
+
(topic: 'storage-loss'): Promise<Observation<string | null>>;
|
|
61
|
+
(topic: 'sync-status'): Promise<Observation<SyncStatus>>;
|
|
62
|
+
(topic: 'service-mode'): Promise<Observation<ServiceMode>>;
|
|
63
|
+
(topic: 'query', query: DocumentQuery): Promise<Observation<DocumentResult>>;
|
|
64
|
+
(topic: 'query', query: GroupQuery): Promise<Observation<GroupResult>>;
|
|
65
|
+
(topic: 'queue', locator: string): Promise<Observation<readonly QueueEntry[]>>;
|
|
66
|
+
(topic: 'room-drafts'): Promise<Observation<readonly RoomDraft[]>>;
|
|
67
|
+
(topic: 'presentation'): Promise<Observation<unknown>>;
|
|
68
|
+
(topic: 'conversation', conversation: string, options: ConversationOptions): Promise<Observation<ConversationView>>;
|
|
69
|
+
};
|
|
70
|
+
reauthorize(): Promise<void>;
|
|
71
|
+
};
|
|
72
|
+
export declare function connectMdRuntime(port: RuntimePort): MdRuntimeClient;
|
|
73
|
+
export type { Observation } from './observation.js';
|
|
74
|
+
export type { RuntimePort } from './wire.js';
|
|
75
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|