@agentshouse/mdruntime 0.1.0-alpha.47 → 0.1.0-alpha.48
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/dist/adapter.d.ts +8 -2
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js.map +1 -1
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +70 -28
- package/dist/conversation.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +23 -3
- package/dist/memory.js.map +1 -1
- package/package.json +1 -1
package/dist/adapter.d.ts
CHANGED
|
@@ -55,13 +55,19 @@ export type AcceptedMessage = ConversationMessage & {
|
|
|
55
55
|
position: string;
|
|
56
56
|
};
|
|
57
57
|
export type ConversationHistoryRequest = {
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
conversations: readonly {
|
|
59
|
+
conversation: string;
|
|
60
|
+
after?: string;
|
|
61
|
+
}[];
|
|
60
62
|
};
|
|
61
63
|
export type ConversationHistoryPage = {
|
|
64
|
+
conversation: string;
|
|
62
65
|
messages: readonly AcceptedMessage[];
|
|
63
66
|
next?: string;
|
|
64
67
|
};
|
|
68
|
+
export type ConversationHistories = {
|
|
69
|
+
histories: readonly ConversationHistoryPage[];
|
|
70
|
+
};
|
|
65
71
|
export type WorkingNote = {
|
|
66
72
|
noteId: string;
|
|
67
73
|
text: string;
|
package/dist/adapter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 conversation: string;\n after?: string;\n};\n\nexport type ConversationHistoryPage = {\n messages: readonly AcceptedMessage[];\n next?: string;\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 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 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 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"}
|
|
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 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 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 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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../src/conversation.ts"],"names":[],"mappings":"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"}
|
package/dist/conversation.js
CHANGED
|
@@ -38,12 +38,10 @@ function acceptedMessage(value) {
|
|
|
38
38
|
message: structuredClone(record.message)
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
-
function historyPage(
|
|
42
|
-
if (
|
|
43
|
-
const
|
|
44
|
-
if (typeof
|
|
45
|
-
const record = answer;
|
|
46
|
-
if (!Array.isArray(record.messages)) return null;
|
|
41
|
+
function historyPage(value) {
|
|
42
|
+
if (typeof value !== 'object' || value === null) return null;
|
|
43
|
+
const record = value;
|
|
44
|
+
if (typeof record.conversation !== 'string' || !Array.isArray(record.messages)) return null;
|
|
47
45
|
if (record.next !== undefined && typeof record.next !== 'string') return null;
|
|
48
46
|
const messages = [];
|
|
49
47
|
for (const entry of record.messages){
|
|
@@ -52,12 +50,27 @@ function historyPage(result) {
|
|
|
52
50
|
messages.push(message);
|
|
53
51
|
}
|
|
54
52
|
return {
|
|
53
|
+
conversation: record.conversation,
|
|
55
54
|
messages,
|
|
56
55
|
...record.next === undefined ? {} : {
|
|
57
56
|
next: record.next
|
|
58
57
|
}
|
|
59
58
|
};
|
|
60
59
|
}
|
|
60
|
+
function historyPages(result) {
|
|
61
|
+
if (result.kind !== 'action') return null;
|
|
62
|
+
const answer = result.result;
|
|
63
|
+
if (typeof answer !== 'object' || answer === null) return null;
|
|
64
|
+
const { histories } = answer;
|
|
65
|
+
if (!Array.isArray(histories)) return null;
|
|
66
|
+
const pages = [];
|
|
67
|
+
for (const entry of histories){
|
|
68
|
+
const page = historyPage(entry);
|
|
69
|
+
if (page === null) return null;
|
|
70
|
+
pages.push(page);
|
|
71
|
+
}
|
|
72
|
+
return pages;
|
|
73
|
+
}
|
|
61
74
|
function turnOf(result) {
|
|
62
75
|
if (result.kind !== 'action') return null;
|
|
63
76
|
const answer = result.result;
|
|
@@ -246,25 +259,56 @@ export function createConversationStore(deps) {
|
|
|
246
259
|
]));
|
|
247
260
|
});
|
|
248
261
|
}
|
|
249
|
-
async function
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
262
|
+
async function readHistories(conversations) {
|
|
263
|
+
const generations = new Map(conversations.map((one)=>[
|
|
264
|
+
one,
|
|
265
|
+
gaps.get(one) ?? 0
|
|
266
|
+
]));
|
|
267
|
+
const starts = new Map(conversations.map((one)=>[
|
|
268
|
+
one,
|
|
269
|
+
reads.get(one)
|
|
270
|
+
]));
|
|
271
|
+
const arriving = new Map();
|
|
272
|
+
const complete = new Set();
|
|
273
|
+
let asking = conversations.map((conversation)=>({
|
|
256
274
|
conversation,
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
275
|
+
after: starts.get(conversation) ?? undefined
|
|
276
|
+
}));
|
|
277
|
+
while(asking.length > 0){
|
|
278
|
+
const result = await deps.call('conversation.history', {
|
|
279
|
+
conversations: asking.map(({ conversation, after })=>({
|
|
280
|
+
conversation,
|
|
281
|
+
...after === undefined ? {} : {
|
|
282
|
+
after
|
|
283
|
+
}
|
|
284
|
+
}))
|
|
260
285
|
});
|
|
261
|
-
const
|
|
262
|
-
if (
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
286
|
+
const pages = historyPages(result);
|
|
287
|
+
if (pages === null) return result;
|
|
288
|
+
const asked = new Set(asking.map(({ conversation })=>conversation));
|
|
289
|
+
const following = [];
|
|
290
|
+
for (const page of pages){
|
|
291
|
+
if (!asked.has(page.conversation)) continue;
|
|
292
|
+
arriving.set(page.conversation, [
|
|
293
|
+
...arriving.get(page.conversation) ?? [],
|
|
294
|
+
...page.messages
|
|
295
|
+
]);
|
|
296
|
+
if (page.next === undefined) complete.add(page.conversation);
|
|
297
|
+
else following.push({
|
|
298
|
+
conversation: page.conversation,
|
|
299
|
+
after: page.next
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
asking = following;
|
|
266
303
|
}
|
|
267
|
-
|
|
304
|
+
for (const [conversation, held] of arriving){
|
|
305
|
+
if (!complete.has(conversation)) continue;
|
|
306
|
+
await keepHistory(conversation, held, starts.get(conversation), generations.get(conversation) ?? 0);
|
|
307
|
+
}
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
function keepHistory(conversation, arriving, from, generation) {
|
|
311
|
+
return deps.durably(async (local)=>{
|
|
268
312
|
if (!replicated.has(conversation)) return;
|
|
269
313
|
const newest = arriving.reduce((top, message)=>top === null || message.position > top ? message.position : top, from ?? null);
|
|
270
314
|
const turn = drafts.get(conversation)?.turn;
|
|
@@ -289,7 +333,6 @@ export function createConversationStore(deps) {
|
|
|
289
333
|
]));
|
|
290
334
|
}
|
|
291
335
|
});
|
|
292
|
-
return null;
|
|
293
336
|
}
|
|
294
337
|
function withDraft(conversation, next) {
|
|
295
338
|
return deps.durably(async (local)=>{
|
|
@@ -449,12 +492,11 @@ export function createConversationStore(deps) {
|
|
|
449
492
|
if (leaving.length > 0) await remove(leaving);
|
|
450
493
|
},
|
|
451
494
|
async catchUp (progress) {
|
|
452
|
-
|
|
495
|
+
const reading = [
|
|
453
496
|
...behind
|
|
454
|
-
].sort()
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
const failed = await readHistory(conversation);
|
|
497
|
+
].filter((conversation)=>replicated.has(conversation)).sort();
|
|
498
|
+
if (reading.length > 0 && !deps.closed()) {
|
|
499
|
+
const failed = await readHistories(reading);
|
|
458
500
|
if (failed?.kind === 'transport-uncertainty') progress.reachable = false;
|
|
459
501
|
}
|
|
460
502
|
if (behind.size > 0) progress.complete = false;
|
package/dist/conversation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/conversation.ts"],"sourcesContent":["import type {\n AcceptedMessage,\n ConversationAction,\n ConversationCards,\n ConversationEvent,\n ConversationHistoryPage,\n ConversationMessage,\n ConversationStream,\n PlanStep,\n ProcessCommand,\n SessionOption,\n WorkingNote,\n} from './adapter.js';\nimport { conversationChangeSet, type ChangeSet, type MessageChange } from './change-set.js';\nimport { declaredFile, type ChatDraftFile } from './file.js';\nimport type { CallResult } from './outcome.js';\nimport type { DocumentResult, QueryDocument } from './query.js';\nimport type { SearchedMessage } from './search.js';\nimport type { CycleProgress } from './status.js';\nimport type { ChatDraftRecord, HeldConversation, RuntimeStore } from './store.js';\n\nexport type ConversationEntry = {\n conversation: string;\n card: Required<QueryDocument>;\n agent: Required<QueryDocument> | null;\n};\n\nexport type GrowingText = { turn: string; text: string };\n\nexport type ChatDraft = {\n text: string;\n files: readonly ChatDraftFile[];\n};\n\nexport type ConversationOptions = { limit?: number };\n\nexport type ConversationView = {\n conversation: string;\n messages: readonly ConversationMessage[];\n growingText: GrowingText | null;\n workingNote: WorkingNote | null;\n plan: readonly PlanStep[] | null;\n questions: readonly unknown[];\n process: { running: boolean } | null;\n commands: readonly ProcessCommand[];\n options: readonly SessionOption[];\n chatDraft: ChatDraft | null;\n};\n\nexport type ConversationSurface = {\n list(): Promise<readonly ConversationEntry[]>;\n read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;\n create(input: unknown): Promise<CallResult>;\n send(conversation: string): Promise<CallResult>;\n answer(conversation: string, answer: unknown): Promise<CallResult>;\n interrupt(conversation: string): Promise<CallResult>;\n kill(conversation: string): Promise<CallResult>;\n cancel(conversation: string, turn: string): Promise<CallResult>;\n delete(conversation: string): Promise<CallResult>;\n};\n\nexport type ChatDraftSurface = {\n write(conversation: string, draft: ChatDraft): Promise<void>;\n discard(conversation: string): Promise<void>;\n};\n\nexport type ConversationDependencies = {\n cards(): ConversationCards | undefined;\n documents(locator: string): Promise<DocumentResult>;\n call(name: ConversationAction, input: unknown): Promise<CallResult>;\n durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;\n stream(): ConversationStream | undefined;\n publish(set: ChangeSet): void;\n closed(): boolean;\n};\n\nexport type ConversationStore = {\n surface: ConversationSurface;\n chatDraft: ChatDraftSurface;\n hydrate(held: readonly HeldConversation[], drafts: readonly ChatDraftRecord[]): void;\n reconcile(): Promise<void>;\n catchUp(progress: CycleProgress): Promise<void>;\n current(): boolean;\n reconnected(): void;\n watch(\n conversation: string,\n options: ConversationOptions,\n deliver: (view: ConversationView) => void,\n ): () => void;\n changed(set: ChangeSet): void;\n receive(event: ConversationEvent): void;\n messages(): readonly SearchedMessage[];\n message(conversation: string, identity: string): SearchedMessage | null;\n close(): void;\n};\n\ntype Watcher = {\n notify: (view: ConversationView) => void;\n ready: boolean;\n};\n\ntype Sending = { draft: ChatDraftRecord };\n\ntype Live = {\n growingText: GrowingText | null;\n plan: { turn: string; plan: readonly PlanStep[] } | null;\n workingNote: WorkingNote | null;\n questions: readonly unknown[];\n process: { running: boolean } | null;\n commands: readonly ProcessCommand[];\n options: readonly SessionOption[];\n};\n\nconst QUIET: Live = {\n growingText: null,\n plan: null,\n workingNote: null,\n questions: [],\n process: null,\n commands: [],\n options: [],\n};\n\ntype SharedView = {\n conversation: string;\n limit: number | undefined;\n watchers: Set<Watcher>;\n};\n\nfunction ordered(left: AcceptedMessage, right: AcceptedMessage): number {\n if (left.position !== right.position) return left.position < right.position ? -1 : 1;\n if (left.identity !== right.identity) return left.identity < right.identity ? -1 : 1;\n return 0;\n}\n\nfunction merged(\n held: readonly AcceptedMessage[],\n arriving: readonly AcceptedMessage[],\n): readonly AcceptedMessage[] {\n const byIdentity = new Map(held.map((message) => [message.identity, message]));\n for (const message of arriving) byIdentity.set(message.identity, message);\n return [...byIdentity.values()].sort(ordered);\n}\n\nfunction acceptedMessage(value: unknown): AcceptedMessage | null {\n if (typeof value !== 'object' || value === null) return null;\n const record = value as Partial<Record<keyof AcceptedMessage, unknown>>;\n if (\n typeof record.identity !== 'string' ||\n typeof record.turn !== 'string' ||\n typeof record.position !== 'string' ||\n typeof record.text !== 'string'\n ) {\n return null;\n }\n return {\n identity: record.identity,\n turn: record.turn,\n position: record.position,\n text: record.text,\n message: structuredClone(record.message),\n };\n}\n\nfunction historyPage(result: CallResult): ConversationHistoryPage | null {\n if (result.kind !== 'action') return null;\n const answer = result.result;\n if (typeof answer !== 'object' || answer === null) return null;\n const record = answer as { messages?: unknown; next?: unknown };\n if (!Array.isArray(record.messages)) return null;\n if (record.next !== undefined && typeof record.next !== 'string') return null;\n const messages: AcceptedMessage[] = [];\n for (const entry of record.messages) {\n const message = acceptedMessage(entry);\n if (message === null) return null;\n messages.push(message);\n }\n return { messages, ...(record.next === undefined ? {} : { next: record.next }) };\n}\n\nfunction turnOf(result: CallResult): string | null {\n if (result.kind !== 'action') return null;\n const answer = result.result;\n if (typeof answer !== 'object' || answer === null) return null;\n const record = answer as { turn?: unknown };\n return typeof record.turn === 'string' ? record.turn : null;\n}\n\nfunction limitOf(options: ConversationOptions): number | undefined {\n const { limit } = options;\n if (limit === undefined) return undefined;\n if (!Number.isInteger(limit) || limit < 0) {\n throw new Error(`conversation limit must be a non-negative integer, got ${String(limit)}`);\n }\n return limit;\n}\n\nexport function createConversationStore(deps: ConversationDependencies): ConversationStore {\n const messages = new Map<string, readonly AcceptedMessage[]>();\n const reads = new Map<string, string | null>();\n const drafts = new Map<string, ChatDraftRecord>();\n const sending = new Map<string, Sending>();\n const behind = new Set<string>();\n const gaps = new Map<string, number>();\n const lives = new Map<string, Live>();\n const views = new Map<string, SharedView>();\n let replicated: ReadonlySet<string> = new Set();\n let handedReplicated: string | undefined;\n\n function liveOf(conversation: string): Live {\n return lives.get(conversation) ?? QUIET;\n }\n\n function viewOf(conversation: string, limit: number | undefined): ConversationView {\n const held = messages.get(conversation) ?? [];\n const shown = limit === undefined ? held : held.slice(Math.max(0, held.length - limit));\n const draft = drafts.get(conversation);\n const facts = liveOf(conversation);\n return {\n conversation,\n messages: shown.map(({ identity, turn, text, message }) => ({\n identity,\n turn,\n text,\n message: structuredClone(message),\n })),\n growingText: facts.growingText === null ? null : { ...facts.growingText },\n workingNote: facts.workingNote === null ? null : { ...facts.workingNote },\n plan: structuredClone(facts.plan?.plan ?? null),\n questions: structuredClone(facts.questions),\n process: facts.process === null ? null : { ...facts.process },\n commands: structuredClone(facts.commands),\n options: structuredClone(facts.options),\n chatDraft:\n draft === undefined || draft.turn !== null || sending.get(conversation)?.draft === draft\n ? null\n : { text: draft.text, files: [...draft.files] },\n };\n }\n\n function emit(conversation: string) {\n if (deps.closed()) return;\n for (const view of views.values()) {\n if (view.conversation !== conversation) continue;\n const ready = [...view.watchers].filter((watcher) => watcher.ready);\n if (ready.length === 0) continue;\n const value = viewOf(conversation, view.limit);\n for (const watcher of ready) watcher.notify(value);\n }\n }\n\n function live(conversation: string, change: Partial<Live>) {\n lives.set(conversation, { ...liveOf(conversation), ...change });\n emit(conversation);\n }\n\n function sealTurns(conversation: string, turns: ReadonlySet<string>): boolean {\n const held = lives.get(conversation);\n if (held === undefined) return false;\n const growingText =\n held.growingText !== null && turns.has(held.growingText.turn) ? null : held.growingText;\n const plan = held.plan !== null && turns.has(held.plan.turn) ? null : held.plan;\n if (growingText === held.growingText && plan === held.plan) return false;\n lives.set(conversation, { ...held, growingText, plan });\n return true;\n }\n\n function handReplicated() {\n const stream = deps.stream();\n if (stream === undefined) return;\n const held = [...replicated].sort();\n const named = JSON.stringify(held);\n if (named === handedReplicated) return;\n handedReplicated = named;\n stream.replicate(held);\n }\n\n async function documented(): Promise<readonly Required<QueryDocument>[]> {\n const declaration = deps.cards();\n if (declaration === undefined) return [];\n const { documents } = await deps.documents(declaration.locator);\n return documents.filter(\n (document): document is Required<QueryDocument> => typeof document.type === 'string',\n );\n }\n\n function carded(\n documents: readonly Required<QueryDocument>[],\n ): readonly { conversation: string; card: Required<QueryDocument> }[] {\n const declaration = deps.cards();\n if (declaration === undefined) return [];\n const cards: { conversation: string; card: Required<QueryDocument> }[] = [];\n for (const card of documents) {\n if (card.type !== declaration.type) continue;\n const identity = card.fields[declaration.identity];\n if (typeof identity === 'string') cards.push({ conversation: identity, card });\n }\n return cards;\n }\n\n async function remove(leaving: readonly string[]) {\n await deps.durably(async (local) => {\n await local.dropConversations(leaving);\n const removed: MessageChange[] = [];\n const changed: string[] = [];\n for (const conversation of leaving) {\n for (const message of messages.get(conversation) ?? []) {\n removed.push({ conversation, identity: message.identity });\n }\n if (messages.has(conversation) || drafts.has(conversation) || lives.has(conversation)) {\n changed.push(conversation);\n }\n messages.delete(conversation);\n reads.delete(conversation);\n drafts.delete(conversation);\n behind.delete(conversation);\n lives.delete(conversation);\n }\n if (changed.length > 0) deps.publish(conversationChangeSet(removed, changed));\n });\n }\n\n function gap(conversation: string) {\n gaps.set(conversation, (gaps.get(conversation) ?? 0) + 1);\n behind.add(conversation);\n }\n\n function keep(conversation: string, message: AcceptedMessage) {\n return deps.durably(async (local) => {\n if (!replicated.has(conversation)) return;\n const read = reads.get(conversation);\n const advances =\n read !== undefined &&\n !behind.has(conversation) &&\n (read === null || message.position > read);\n const sealed = drafts.get(conversation)?.turn === message.turn;\n await local.keepMessages({\n conversation,\n messages: [message],\n ...(advances ? { read: message.position } : {}),\n sealed,\n });\n messages.set(conversation, merged(messages.get(conversation) ?? [], [message]));\n if (advances) reads.set(conversation, message.position);\n if (sealed) drafts.delete(conversation);\n sealTurns(conversation, new Set([message.turn]));\n deps.publish(\n conversationChangeSet([{ conversation, identity: message.identity }], [conversation]),\n );\n });\n }\n\n async function readHistory(conversation: string): Promise<CallResult | null> {\n const generation = gaps.get(conversation) ?? 0;\n const from = reads.get(conversation);\n const arriving: AcceptedMessage[] = [];\n let after = from ?? undefined;\n for (;;) {\n const result = await deps.call('conversation.history', {\n conversation,\n ...(after === undefined ? {} : { after }),\n });\n const page = historyPage(result);\n if (page === null) return result;\n arriving.push(...page.messages);\n if (page.next === undefined) break;\n after = page.next;\n }\n await deps.durably(async (local) => {\n if (!replicated.has(conversation)) return;\n const newest = arriving.reduce<string | null>(\n (top, message) => (top === null || message.position > top ? message.position : top),\n from ?? null,\n );\n const turn = drafts.get(conversation)?.turn;\n const sealed = arriving.some((message) => message.turn === turn);\n await local.keepMessages({ conversation, messages: arriving, read: newest, sealed });\n messages.set(conversation, merged(messages.get(conversation) ?? [], arriving));\n reads.set(conversation, newest);\n if (sealed) drafts.delete(conversation);\n sealTurns(conversation, new Set(arriving.map((message) => message.turn)));\n if ((gaps.get(conversation) ?? 0) === generation) behind.delete(conversation);\n if (arriving.length > 0 || sealed) {\n deps.publish(\n conversationChangeSet(\n arriving.map((message) => ({ conversation, identity: message.identity })),\n [conversation],\n ),\n );\n }\n });\n return null;\n }\n\n function withDraft(\n conversation: string,\n next: (draft: ChatDraftRecord | undefined) => ChatDraftRecord | null | undefined,\n ): Promise<void> {\n return deps.durably(async (local) => {\n const following = next(drafts.get(conversation));\n if (following === undefined) return;\n if (following === null) {\n await local.dropChatDraft(conversation);\n drafts.delete(conversation);\n } else {\n await local.keepChatDraft(following);\n drafts.set(conversation, following);\n }\n deps.publish(conversationChangeSet([], [conversation]));\n });\n }\n\n function invoke(\n name: ConversationAction,\n conversation: string,\n extra: Readonly<Record<string, unknown>> = {},\n ): Promise<CallResult> {\n return deps.call(name, { conversation, ...extra });\n }\n\n const surface: ConversationSurface = {\n async list() {\n const declaration = deps.cards();\n if (declaration === undefined) return [];\n const documents = await documented();\n const entries: ConversationEntry[] = carded(documents).map(({ conversation, card }) => ({\n conversation,\n card,\n agent:\n documents.find((document) =>\n document.backlinks.some(\n (backlink) => backlink.path === card.path && backlink.field === declaration.agent,\n ),\n ) ?? null,\n }));\n entries.sort((left, right) => (left.conversation < right.conversation ? -1 : 1));\n return entries;\n },\n async read(conversation: string, options: ConversationOptions = {}) {\n const limit = limitOf(options);\n return deps.durably(() => Promise.resolve(viewOf(conversation, limit)));\n },\n create(input: unknown) {\n return deps.call('conversation.create', input);\n },\n async send(conversation: string) {\n const draft = drafts.get(conversation);\n const pending: Sending | undefined = draft === undefined ? undefined : { draft };\n if (pending !== undefined) {\n sending.set(conversation, pending);\n deps.publish(conversationChangeSet([], [conversation]));\n }\n try {\n const files = await Promise.all(\n (draft?.files ?? []).map(async (file) => ({\n ...(await declaredFile(file)),\n blob: file.blob,\n })),\n );\n const result = await invoke('conversation.send', conversation, {\n text: draft?.text ?? '',\n files,\n });\n const turn = turnOf(result);\n if (turn === null || draft === undefined) return result;\n await withDraft(conversation, (current) => {\n if (current !== draft) return undefined;\n const sealed = (messages.get(conversation) ?? []).some(\n (message) => message.turn === turn,\n );\n return sealed ? null : { ...draft, turn };\n });\n return result;\n } finally {\n if (pending !== undefined && sending.get(conversation) === pending) {\n sending.delete(conversation);\n if (drafts.get(conversation) === draft) {\n deps.publish(conversationChangeSet([], [conversation]));\n }\n }\n }\n },\n answer(conversation: string, answer: unknown) {\n return invoke('conversation.answer', conversation, { answer });\n },\n interrupt(conversation: string) {\n return invoke('conversation.interrupt', conversation);\n },\n kill(conversation: string) {\n return invoke('conversation.kill', conversation);\n },\n async cancel(conversation: string, turn: string) {\n const result = await invoke('conversation.cancel', conversation, { turn });\n if (result.kind !== 'action') return result;\n await withDraft(conversation, (current) =>\n current === undefined || current.turn !== turn ? undefined : { ...current, turn: null },\n );\n return result;\n },\n delete(conversation: string) {\n return invoke('conversation.delete', conversation);\n },\n };\n\n const chatDraft: ChatDraftSurface = {\n write(conversation: string, draft: ChatDraft) {\n return withDraft(conversation, () => ({\n conversation,\n text: draft.text,\n files: [...draft.files],\n turn: null,\n }));\n },\n discard(conversation: string) {\n return withDraft(conversation, (current) => (current === undefined ? undefined : null));\n },\n };\n\n return {\n surface,\n chatDraft,\n hydrate(held, stored) {\n messages.clear();\n reads.clear();\n for (const entry of held) {\n messages.set(entry.conversation, [...entry.messages].sort(ordered));\n if (entry.read !== undefined) reads.set(entry.conversation, entry.read);\n }\n drafts.clear();\n for (const record of stored) drafts.set(record.conversation, record);\n },\n async reconcile() {\n const named = new Set(carded(await documented()).map((entry) => entry.conversation));\n const leaving = [\n ...new Set([...replicated, ...messages.keys(), ...reads.keys(), ...drafts.keys()]),\n ].filter((conversation) => !named.has(conversation));\n for (const conversation of named) {\n if (!replicated.has(conversation)) behind.add(conversation);\n }\n replicated = named;\n handReplicated();\n if (leaving.length > 0) await remove(leaving);\n },\n async catchUp(progress) {\n for (const conversation of [...behind].sort()) {\n if (deps.closed()) return;\n if (!replicated.has(conversation)) continue;\n const failed = await readHistory(conversation);\n if (failed?.kind === 'transport-uncertainty') progress.reachable = false;\n }\n if (behind.size > 0) progress.complete = false;\n },\n current() {\n return behind.size === 0;\n },\n reconnected() {\n for (const conversation of replicated) gap(conversation);\n },\n watch(conversation, options, deliver) {\n const limit = limitOf(options);\n const key = JSON.stringify([conversation, limit ?? null]);\n const view = views.get(key) ?? { conversation, limit, watchers: new Set<Watcher>() };\n views.set(key, view);\n const watcher: Watcher = { notify: deliver, ready: false };\n view.watchers.add(watcher);\n void deps\n .durably(() => Promise.resolve())\n .then(() => {\n if (deps.closed() || !view.watchers.has(watcher)) return;\n watcher.ready = true;\n watcher.notify(viewOf(conversation, limit));\n })\n .catch(() => {});\n return () => {\n if (!view.watchers.delete(watcher)) return;\n if (view.watchers.size === 0) views.delete(key);\n };\n },\n changed(set) {\n for (const conversation of set.conversations) emit(conversation);\n },\n receive(event) {\n if (deps.closed()) return;\n const { conversation } = event;\n if (event.kind === 'gap') {\n if (replicated.has(conversation)) gap(conversation);\n if (lives.delete(conversation)) emit(conversation);\n return;\n }\n if (event.kind === 'growing-text') {\n live(conversation, { growingText: { turn: event.turn, text: event.text } });\n return;\n }\n if (event.kind === 'plan') {\n live(conversation, { plan: { turn: event.turn, plan: structuredClone(event.plan) } });\n return;\n }\n if (event.kind === 'working-note') {\n live(conversation, {\n workingNote:\n event.note === null ? null : { noteId: event.note.noteId, text: event.note.text },\n });\n return;\n }\n if (event.kind === 'questions') {\n live(conversation, { questions: structuredClone(event.questions) });\n return;\n }\n if (event.kind === 'process') {\n live(conversation, { process: { running: event.running } });\n return;\n }\n if (event.kind === 'commands') {\n live(conversation, { commands: structuredClone(event.commands) });\n return;\n }\n if (event.kind === 'options') {\n live(conversation, { options: structuredClone(event.options) });\n return;\n }\n const arriving = acceptedMessage(event.message);\n if (arriving === null) return;\n if (replicated.has(conversation)) {\n void keep(conversation, arriving).catch(() => {});\n return;\n }\n if (sealTurns(conversation, new Set([arriving.turn]))) emit(conversation);\n },\n messages() {\n return [...messages].flatMap(([conversation, held]) =>\n held.map(({ identity, text }) => ({ conversation, identity, text })),\n );\n },\n message(conversation, identity) {\n const held = messages.get(conversation)?.find((message) => message.identity === identity);\n return held === undefined ? null : { conversation, identity, text: held.text };\n },\n close() {\n views.clear();\n lives.clear();\n },\n };\n}\n"],"names":["conversationChangeSet","declaredFile","QUIET","growingText","plan","workingNote","questions","process","commands","options","ordered","left","right","position","identity","merged","held","arriving","byIdentity","Map","map","message","set","values","sort","acceptedMessage","value","record","turn","text","structuredClone","historyPage","result","kind","answer","Array","isArray","messages","next","undefined","entry","push","turnOf","limitOf","limit","Number","isInteger","Error","String","createConversationStore","deps","reads","drafts","sending","behind","Set","gaps","lives","views","replicated","handedReplicated","liveOf","conversation","get","viewOf","shown","slice","Math","max","length","draft","facts","chatDraft","files","emit","closed","view","ready","watchers","filter","watcher","notify","live","change","sealTurns","turns","has","handReplicated","stream","named","JSON","stringify","replicate","documented","declaration","cards","documents","locator","document","type","carded","card","fields","remove","leaving","durably","local","dropConversations","removed","changed","delete","publish","gap","add","keep","read","advances","sealed","keepMessages","readHistory","generation","from","after","call","page","newest","reduce","top","some","withDraft","following","dropChatDraft","keepChatDraft","invoke","name","extra","surface","list","entries","agent","find","backlinks","backlink","path","field","Promise","resolve","create","input","send","pending","all","file","blob","current","interrupt","kill","cancel","write","discard","hydrate","stored","clear","reconcile","keys","catchUp","progress","failed","reachable","size","complete","reconnected","watch","deliver","key","then","catch","conversations","receive","event","note","noteId","running","flatMap","close"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/conversation.ts"],"sourcesContent":["import type {\n AcceptedMessage,\n ConversationAction,\n ConversationCards,\n ConversationEvent,\n ConversationHistoryPage,\n ConversationMessage,\n ConversationStream,\n PlanStep,\n ProcessCommand,\n SessionOption,\n WorkingNote,\n} from './adapter.js';\nimport { conversationChangeSet, type ChangeSet, type MessageChange } from './change-set.js';\nimport { declaredFile, type ChatDraftFile } from './file.js';\nimport type { CallResult } from './outcome.js';\nimport type { DocumentResult, QueryDocument } from './query.js';\nimport type { SearchedMessage } from './search.js';\nimport type { CycleProgress } from './status.js';\nimport type { ChatDraftRecord, HeldConversation, RuntimeStore } from './store.js';\n\nexport type ConversationEntry = {\n conversation: string;\n card: Required<QueryDocument>;\n agent: Required<QueryDocument> | null;\n};\n\nexport type GrowingText = { turn: string; text: string };\n\nexport type ChatDraft = {\n text: string;\n files: readonly ChatDraftFile[];\n};\n\nexport type ConversationOptions = { limit?: number };\n\nexport type ConversationView = {\n conversation: string;\n messages: readonly ConversationMessage[];\n growingText: GrowingText | null;\n workingNote: WorkingNote | null;\n plan: readonly PlanStep[] | null;\n questions: readonly unknown[];\n process: { running: boolean } | null;\n commands: readonly ProcessCommand[];\n options: readonly SessionOption[];\n chatDraft: ChatDraft | null;\n};\n\nexport type ConversationSurface = {\n list(): Promise<readonly ConversationEntry[]>;\n read(conversation: string, options?: ConversationOptions): Promise<ConversationView>;\n create(input: unknown): Promise<CallResult>;\n send(conversation: string): Promise<CallResult>;\n answer(conversation: string, answer: unknown): Promise<CallResult>;\n interrupt(conversation: string): Promise<CallResult>;\n kill(conversation: string): Promise<CallResult>;\n cancel(conversation: string, turn: string): Promise<CallResult>;\n delete(conversation: string): Promise<CallResult>;\n};\n\nexport type ChatDraftSurface = {\n write(conversation: string, draft: ChatDraft): Promise<void>;\n discard(conversation: string): Promise<void>;\n};\n\nexport type ConversationDependencies = {\n cards(): ConversationCards | undefined;\n documents(locator: string): Promise<DocumentResult>;\n call(name: ConversationAction, input: unknown): Promise<CallResult>;\n durably<T>(work: (local: RuntimeStore) => Promise<T>): Promise<T>;\n stream(): ConversationStream | undefined;\n publish(set: ChangeSet): void;\n closed(): boolean;\n};\n\nexport type ConversationStore = {\n surface: ConversationSurface;\n chatDraft: ChatDraftSurface;\n hydrate(held: readonly HeldConversation[], drafts: readonly ChatDraftRecord[]): void;\n reconcile(): Promise<void>;\n catchUp(progress: CycleProgress): Promise<void>;\n current(): boolean;\n reconnected(): void;\n watch(\n conversation: string,\n options: ConversationOptions,\n deliver: (view: ConversationView) => void,\n ): () => void;\n changed(set: ChangeSet): void;\n receive(event: ConversationEvent): void;\n messages(): readonly SearchedMessage[];\n message(conversation: string, identity: string): SearchedMessage | null;\n close(): void;\n};\n\ntype Watcher = {\n notify: (view: ConversationView) => void;\n ready: boolean;\n};\n\ntype Sending = { draft: ChatDraftRecord };\n\ntype Live = {\n growingText: GrowingText | null;\n plan: { turn: string; plan: readonly PlanStep[] } | null;\n workingNote: WorkingNote | null;\n questions: readonly unknown[];\n process: { running: boolean } | null;\n commands: readonly ProcessCommand[];\n options: readonly SessionOption[];\n};\n\nconst QUIET: Live = {\n growingText: null,\n plan: null,\n workingNote: null,\n questions: [],\n process: null,\n commands: [],\n options: [],\n};\n\ntype SharedView = {\n conversation: string;\n limit: number | undefined;\n watchers: Set<Watcher>;\n};\n\nfunction ordered(left: AcceptedMessage, right: AcceptedMessage): number {\n if (left.position !== right.position) return left.position < right.position ? -1 : 1;\n if (left.identity !== right.identity) return left.identity < right.identity ? -1 : 1;\n return 0;\n}\n\nfunction merged(\n held: readonly AcceptedMessage[],\n arriving: readonly AcceptedMessage[],\n): readonly AcceptedMessage[] {\n const byIdentity = new Map(held.map((message) => [message.identity, message]));\n for (const message of arriving) byIdentity.set(message.identity, message);\n return [...byIdentity.values()].sort(ordered);\n}\n\nfunction acceptedMessage(value: unknown): AcceptedMessage | null {\n if (typeof value !== 'object' || value === null) return null;\n const record = value as Partial<Record<keyof AcceptedMessage, unknown>>;\n if (\n typeof record.identity !== 'string' ||\n typeof record.turn !== 'string' ||\n typeof record.position !== 'string' ||\n typeof record.text !== 'string'\n ) {\n return null;\n }\n return {\n identity: record.identity,\n turn: record.turn,\n position: record.position,\n text: record.text,\n message: structuredClone(record.message),\n };\n}\n\nfunction historyPage(value: unknown): ConversationHistoryPage | null {\n if (typeof value !== 'object' || value === null) return null;\n const record = value as { conversation?: unknown; messages?: unknown; next?: unknown };\n if (typeof record.conversation !== 'string' || !Array.isArray(record.messages)) return null;\n if (record.next !== undefined && typeof record.next !== 'string') return null;\n const messages: AcceptedMessage[] = [];\n for (const entry of record.messages) {\n const message = acceptedMessage(entry);\n if (message === null) return null;\n messages.push(message);\n }\n return {\n conversation: record.conversation,\n messages,\n ...(record.next === undefined ? {} : { next: record.next }),\n };\n}\n\nfunction historyPages(result: CallResult): readonly ConversationHistoryPage[] | null {\n if (result.kind !== 'action') return null;\n const answer = result.result;\n if (typeof answer !== 'object' || answer === null) return null;\n const { histories } = answer as { histories?: unknown };\n if (!Array.isArray(histories)) return null;\n const pages: ConversationHistoryPage[] = [];\n for (const entry of histories) {\n const page = historyPage(entry);\n if (page === null) return null;\n pages.push(page);\n }\n return pages;\n}\n\nfunction turnOf(result: CallResult): string | null {\n if (result.kind !== 'action') return null;\n const answer = result.result;\n if (typeof answer !== 'object' || answer === null) return null;\n const record = answer as { turn?: unknown };\n return typeof record.turn === 'string' ? record.turn : null;\n}\n\nfunction limitOf(options: ConversationOptions): number | undefined {\n const { limit } = options;\n if (limit === undefined) return undefined;\n if (!Number.isInteger(limit) || limit < 0) {\n throw new Error(`conversation limit must be a non-negative integer, got ${String(limit)}`);\n }\n return limit;\n}\n\nexport function createConversationStore(deps: ConversationDependencies): ConversationStore {\n const messages = new Map<string, readonly AcceptedMessage[]>();\n const reads = new Map<string, string | null>();\n const drafts = new Map<string, ChatDraftRecord>();\n const sending = new Map<string, Sending>();\n const behind = new Set<string>();\n const gaps = new Map<string, number>();\n const lives = new Map<string, Live>();\n const views = new Map<string, SharedView>();\n let replicated: ReadonlySet<string> = new Set();\n let handedReplicated: string | undefined;\n\n function liveOf(conversation: string): Live {\n return lives.get(conversation) ?? QUIET;\n }\n\n function viewOf(conversation: string, limit: number | undefined): ConversationView {\n const held = messages.get(conversation) ?? [];\n const shown = limit === undefined ? held : held.slice(Math.max(0, held.length - limit));\n const draft = drafts.get(conversation);\n const facts = liveOf(conversation);\n return {\n conversation,\n messages: shown.map(({ identity, turn, text, message }) => ({\n identity,\n turn,\n text,\n message: structuredClone(message),\n })),\n growingText: facts.growingText === null ? null : { ...facts.growingText },\n workingNote: facts.workingNote === null ? null : { ...facts.workingNote },\n plan: structuredClone(facts.plan?.plan ?? null),\n questions: structuredClone(facts.questions),\n process: facts.process === null ? null : { ...facts.process },\n commands: structuredClone(facts.commands),\n options: structuredClone(facts.options),\n chatDraft:\n draft === undefined || draft.turn !== null || sending.get(conversation)?.draft === draft\n ? null\n : { text: draft.text, files: [...draft.files] },\n };\n }\n\n function emit(conversation: string) {\n if (deps.closed()) return;\n for (const view of views.values()) {\n if (view.conversation !== conversation) continue;\n const ready = [...view.watchers].filter((watcher) => watcher.ready);\n if (ready.length === 0) continue;\n const value = viewOf(conversation, view.limit);\n for (const watcher of ready) watcher.notify(value);\n }\n }\n\n function live(conversation: string, change: Partial<Live>) {\n lives.set(conversation, { ...liveOf(conversation), ...change });\n emit(conversation);\n }\n\n function sealTurns(conversation: string, turns: ReadonlySet<string>): boolean {\n const held = lives.get(conversation);\n if (held === undefined) return false;\n const growingText =\n held.growingText !== null && turns.has(held.growingText.turn) ? null : held.growingText;\n const plan = held.plan !== null && turns.has(held.plan.turn) ? null : held.plan;\n if (growingText === held.growingText && plan === held.plan) return false;\n lives.set(conversation, { ...held, growingText, plan });\n return true;\n }\n\n function handReplicated() {\n const stream = deps.stream();\n if (stream === undefined) return;\n const held = [...replicated].sort();\n const named = JSON.stringify(held);\n if (named === handedReplicated) return;\n handedReplicated = named;\n stream.replicate(held);\n }\n\n async function documented(): Promise<readonly Required<QueryDocument>[]> {\n const declaration = deps.cards();\n if (declaration === undefined) return [];\n const { documents } = await deps.documents(declaration.locator);\n return documents.filter(\n (document): document is Required<QueryDocument> => typeof document.type === 'string',\n );\n }\n\n function carded(\n documents: readonly Required<QueryDocument>[],\n ): readonly { conversation: string; card: Required<QueryDocument> }[] {\n const declaration = deps.cards();\n if (declaration === undefined) return [];\n const cards: { conversation: string; card: Required<QueryDocument> }[] = [];\n for (const card of documents) {\n if (card.type !== declaration.type) continue;\n const identity = card.fields[declaration.identity];\n if (typeof identity === 'string') cards.push({ conversation: identity, card });\n }\n return cards;\n }\n\n async function remove(leaving: readonly string[]) {\n await deps.durably(async (local) => {\n await local.dropConversations(leaving);\n const removed: MessageChange[] = [];\n const changed: string[] = [];\n for (const conversation of leaving) {\n for (const message of messages.get(conversation) ?? []) {\n removed.push({ conversation, identity: message.identity });\n }\n if (messages.has(conversation) || drafts.has(conversation) || lives.has(conversation)) {\n changed.push(conversation);\n }\n messages.delete(conversation);\n reads.delete(conversation);\n drafts.delete(conversation);\n behind.delete(conversation);\n lives.delete(conversation);\n }\n if (changed.length > 0) deps.publish(conversationChangeSet(removed, changed));\n });\n }\n\n function gap(conversation: string) {\n gaps.set(conversation, (gaps.get(conversation) ?? 0) + 1);\n behind.add(conversation);\n }\n\n function keep(conversation: string, message: AcceptedMessage) {\n return deps.durably(async (local) => {\n if (!replicated.has(conversation)) return;\n const read = reads.get(conversation);\n const advances =\n read !== undefined &&\n !behind.has(conversation) &&\n (read === null || message.position > read);\n const sealed = drafts.get(conversation)?.turn === message.turn;\n await local.keepMessages({\n conversation,\n messages: [message],\n ...(advances ? { read: message.position } : {}),\n sealed,\n });\n messages.set(conversation, merged(messages.get(conversation) ?? [], [message]));\n if (advances) reads.set(conversation, message.position);\n if (sealed) drafts.delete(conversation);\n sealTurns(conversation, new Set([message.turn]));\n deps.publish(\n conversationChangeSet([{ conversation, identity: message.identity }], [conversation]),\n );\n });\n }\n\n async function readHistories(conversations: readonly string[]): Promise<CallResult | null> {\n const generations = new Map(conversations.map((one) => [one, gaps.get(one) ?? 0]));\n const starts = new Map(conversations.map((one) => [one, reads.get(one)]));\n const arriving = new Map<string, AcceptedMessage[]>();\n const complete = new Set<string>();\n let asking = conversations.map((conversation) => ({\n conversation,\n after: starts.get(conversation) ?? undefined,\n }));\n while (asking.length > 0) {\n const result = await deps.call('conversation.history', {\n conversations: asking.map(({ conversation, after }) => ({\n conversation,\n ...(after === undefined ? {} : { after }),\n })),\n });\n const pages = historyPages(result);\n if (pages === null) return result;\n const asked = new Set(asking.map(({ conversation }) => conversation));\n const following: { conversation: string; after: string | undefined }[] = [];\n for (const page of pages) {\n if (!asked.has(page.conversation)) continue;\n arriving.set(page.conversation, [\n ...(arriving.get(page.conversation) ?? []),\n ...page.messages,\n ]);\n if (page.next === undefined) complete.add(page.conversation);\n else following.push({ conversation: page.conversation, after: page.next });\n }\n asking = following;\n }\n for (const [conversation, held] of arriving) {\n if (!complete.has(conversation)) continue;\n await keepHistory(\n conversation,\n held,\n starts.get(conversation),\n generations.get(conversation) ?? 0,\n );\n }\n return null;\n }\n\n function keepHistory(\n conversation: string,\n arriving: readonly AcceptedMessage[],\n from: string | null | undefined,\n generation: number,\n ): Promise<void> {\n return deps.durably(async (local) => {\n if (!replicated.has(conversation)) return;\n const newest = arriving.reduce<string | null>(\n (top, message) => (top === null || message.position > top ? message.position : top),\n from ?? null,\n );\n const turn = drafts.get(conversation)?.turn;\n const sealed = arriving.some((message) => message.turn === turn);\n await local.keepMessages({ conversation, messages: arriving, read: newest, sealed });\n messages.set(conversation, merged(messages.get(conversation) ?? [], arriving));\n reads.set(conversation, newest);\n if (sealed) drafts.delete(conversation);\n sealTurns(conversation, new Set(arriving.map((message) => message.turn)));\n if ((gaps.get(conversation) ?? 0) === generation) behind.delete(conversation);\n if (arriving.length > 0 || sealed) {\n deps.publish(\n conversationChangeSet(\n arriving.map((message) => ({ conversation, identity: message.identity })),\n [conversation],\n ),\n );\n }\n });\n }\n\n function withDraft(\n conversation: string,\n next: (draft: ChatDraftRecord | undefined) => ChatDraftRecord | null | undefined,\n ): Promise<void> {\n return deps.durably(async (local) => {\n const following = next(drafts.get(conversation));\n if (following === undefined) return;\n if (following === null) {\n await local.dropChatDraft(conversation);\n drafts.delete(conversation);\n } else {\n await local.keepChatDraft(following);\n drafts.set(conversation, following);\n }\n deps.publish(conversationChangeSet([], [conversation]));\n });\n }\n\n function invoke(\n name: ConversationAction,\n conversation: string,\n extra: Readonly<Record<string, unknown>> = {},\n ): Promise<CallResult> {\n return deps.call(name, { conversation, ...extra });\n }\n\n const surface: ConversationSurface = {\n async list() {\n const declaration = deps.cards();\n if (declaration === undefined) return [];\n const documents = await documented();\n const entries: ConversationEntry[] = carded(documents).map(({ conversation, card }) => ({\n conversation,\n card,\n agent:\n documents.find((document) =>\n document.backlinks.some(\n (backlink) => backlink.path === card.path && backlink.field === declaration.agent,\n ),\n ) ?? null,\n }));\n entries.sort((left, right) => (left.conversation < right.conversation ? -1 : 1));\n return entries;\n },\n async read(conversation: string, options: ConversationOptions = {}) {\n const limit = limitOf(options);\n return deps.durably(() => Promise.resolve(viewOf(conversation, limit)));\n },\n create(input: unknown) {\n return deps.call('conversation.create', input);\n },\n async send(conversation: string) {\n const draft = drafts.get(conversation);\n const pending: Sending | undefined = draft === undefined ? undefined : { draft };\n if (pending !== undefined) {\n sending.set(conversation, pending);\n deps.publish(conversationChangeSet([], [conversation]));\n }\n try {\n const files = await Promise.all(\n (draft?.files ?? []).map(async (file) => ({\n ...(await declaredFile(file)),\n blob: file.blob,\n })),\n );\n const result = await invoke('conversation.send', conversation, {\n text: draft?.text ?? '',\n files,\n });\n const turn = turnOf(result);\n if (turn === null || draft === undefined) return result;\n await withDraft(conversation, (current) => {\n if (current !== draft) return undefined;\n const sealed = (messages.get(conversation) ?? []).some(\n (message) => message.turn === turn,\n );\n return sealed ? null : { ...draft, turn };\n });\n return result;\n } finally {\n if (pending !== undefined && sending.get(conversation) === pending) {\n sending.delete(conversation);\n if (drafts.get(conversation) === draft) {\n deps.publish(conversationChangeSet([], [conversation]));\n }\n }\n }\n },\n answer(conversation: string, answer: unknown) {\n return invoke('conversation.answer', conversation, { answer });\n },\n interrupt(conversation: string) {\n return invoke('conversation.interrupt', conversation);\n },\n kill(conversation: string) {\n return invoke('conversation.kill', conversation);\n },\n async cancel(conversation: string, turn: string) {\n const result = await invoke('conversation.cancel', conversation, { turn });\n if (result.kind !== 'action') return result;\n await withDraft(conversation, (current) =>\n current === undefined || current.turn !== turn ? undefined : { ...current, turn: null },\n );\n return result;\n },\n delete(conversation: string) {\n return invoke('conversation.delete', conversation);\n },\n };\n\n const chatDraft: ChatDraftSurface = {\n write(conversation: string, draft: ChatDraft) {\n return withDraft(conversation, () => ({\n conversation,\n text: draft.text,\n files: [...draft.files],\n turn: null,\n }));\n },\n discard(conversation: string) {\n return withDraft(conversation, (current) => (current === undefined ? undefined : null));\n },\n };\n\n return {\n surface,\n chatDraft,\n hydrate(held, stored) {\n messages.clear();\n reads.clear();\n for (const entry of held) {\n messages.set(entry.conversation, [...entry.messages].sort(ordered));\n if (entry.read !== undefined) reads.set(entry.conversation, entry.read);\n }\n drafts.clear();\n for (const record of stored) drafts.set(record.conversation, record);\n },\n async reconcile() {\n const named = new Set(carded(await documented()).map((entry) => entry.conversation));\n const leaving = [\n ...new Set([...replicated, ...messages.keys(), ...reads.keys(), ...drafts.keys()]),\n ].filter((conversation) => !named.has(conversation));\n for (const conversation of named) {\n if (!replicated.has(conversation)) behind.add(conversation);\n }\n replicated = named;\n handReplicated();\n if (leaving.length > 0) await remove(leaving);\n },\n async catchUp(progress) {\n const reading = [...behind].filter((conversation) => replicated.has(conversation)).sort();\n if (reading.length > 0 && !deps.closed()) {\n const failed = await readHistories(reading);\n if (failed?.kind === 'transport-uncertainty') progress.reachable = false;\n }\n if (behind.size > 0) progress.complete = false;\n },\n current() {\n return behind.size === 0;\n },\n reconnected() {\n for (const conversation of replicated) gap(conversation);\n },\n watch(conversation, options, deliver) {\n const limit = limitOf(options);\n const key = JSON.stringify([conversation, limit ?? null]);\n const view = views.get(key) ?? { conversation, limit, watchers: new Set<Watcher>() };\n views.set(key, view);\n const watcher: Watcher = { notify: deliver, ready: false };\n view.watchers.add(watcher);\n void deps\n .durably(() => Promise.resolve())\n .then(() => {\n if (deps.closed() || !view.watchers.has(watcher)) return;\n watcher.ready = true;\n watcher.notify(viewOf(conversation, limit));\n })\n .catch(() => {});\n return () => {\n if (!view.watchers.delete(watcher)) return;\n if (view.watchers.size === 0) views.delete(key);\n };\n },\n changed(set) {\n for (const conversation of set.conversations) emit(conversation);\n },\n receive(event) {\n if (deps.closed()) return;\n const { conversation } = event;\n if (event.kind === 'gap') {\n if (replicated.has(conversation)) gap(conversation);\n if (lives.delete(conversation)) emit(conversation);\n return;\n }\n if (event.kind === 'growing-text') {\n live(conversation, { growingText: { turn: event.turn, text: event.text } });\n return;\n }\n if (event.kind === 'plan') {\n live(conversation, { plan: { turn: event.turn, plan: structuredClone(event.plan) } });\n return;\n }\n if (event.kind === 'working-note') {\n live(conversation, {\n workingNote:\n event.note === null ? null : { noteId: event.note.noteId, text: event.note.text },\n });\n return;\n }\n if (event.kind === 'questions') {\n live(conversation, { questions: structuredClone(event.questions) });\n return;\n }\n if (event.kind === 'process') {\n live(conversation, { process: { running: event.running } });\n return;\n }\n if (event.kind === 'commands') {\n live(conversation, { commands: structuredClone(event.commands) });\n return;\n }\n if (event.kind === 'options') {\n live(conversation, { options: structuredClone(event.options) });\n return;\n }\n const arriving = acceptedMessage(event.message);\n if (arriving === null) return;\n if (replicated.has(conversation)) {\n void keep(conversation, arriving).catch(() => {});\n return;\n }\n if (sealTurns(conversation, new Set([arriving.turn]))) emit(conversation);\n },\n messages() {\n return [...messages].flatMap(([conversation, held]) =>\n held.map(({ identity, text }) => ({ conversation, identity, text })),\n );\n },\n message(conversation, identity) {\n const held = messages.get(conversation)?.find((message) => message.identity === identity);\n return held === undefined ? null : { conversation, identity, text: held.text };\n },\n close() {\n views.clear();\n lives.clear();\n },\n };\n}\n"],"names":["conversationChangeSet","declaredFile","QUIET","growingText","plan","workingNote","questions","process","commands","options","ordered","left","right","position","identity","merged","held","arriving","byIdentity","Map","map","message","set","values","sort","acceptedMessage","value","record","turn","text","structuredClone","historyPage","conversation","Array","isArray","messages","next","undefined","entry","push","historyPages","result","kind","answer","histories","pages","page","turnOf","limitOf","limit","Number","isInteger","Error","String","createConversationStore","deps","reads","drafts","sending","behind","Set","gaps","lives","views","replicated","handedReplicated","liveOf","get","viewOf","shown","slice","Math","max","length","draft","facts","chatDraft","files","emit","closed","view","ready","watchers","filter","watcher","notify","live","change","sealTurns","turns","has","handReplicated","stream","named","JSON","stringify","replicate","documented","declaration","cards","documents","locator","document","type","carded","card","fields","remove","leaving","durably","local","dropConversations","removed","changed","delete","publish","gap","add","keep","read","advances","sealed","keepMessages","readHistories","conversations","generations","one","starts","complete","asking","after","call","asked","following","keepHistory","from","generation","newest","reduce","top","some","withDraft","dropChatDraft","keepChatDraft","invoke","name","extra","surface","list","entries","agent","find","backlinks","backlink","path","field","Promise","resolve","create","input","send","pending","all","file","blob","current","interrupt","kill","cancel","write","discard","hydrate","stored","clear","reconcile","keys","catchUp","progress","reading","failed","reachable","size","reconnected","watch","deliver","key","then","catch","receive","event","note","noteId","running","flatMap","close"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { AcceptedMessage, ActionDeclaration, ActionRequest, ActionResult, Adapter, AdapterFailure, Authorization, BootstrapPage, BootstrapRequest, BootstrapResult, Capability, ChangeAuthor, ContractUnavailable, ConversationAction, ConversationCards, ConversationEvent, 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, RoomNotReadable, RoomVersionAt, RoomVersionNotification, SelectedRooms, ServiceMode, ServiceModeSignal, TransportUncertainty, TypedSelection, WorkingNote, } from './adapter.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, RoomNotReadable, RoomVersionAt, RoomVersionNotification, SelectedRooms, ServiceMode, ServiceModeSignal, TransportUncertainty, TypedSelection, WorkingNote, } from './adapter.js';
|
|
2
2
|
export type { Change, ChangeBatch, Precondition, WrittenBy } from './change.js';
|
|
3
3
|
export type { ChatDraft, ChatDraftSurface, ConversationEntry, ConversationOptions, ConversationSurface, ConversationView, GrowingText, } from './conversation.js';
|
|
4
4
|
export type { ChatDraftFile, FileDeclaration } from './file.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,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,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,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"}
|
|
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,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.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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 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 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":"
|
|
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 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":"AA0GA,SAASA,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,eAAe,QAAQ,kBAAkB"}
|
package/dist/memory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"AAAA,OAAO,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,
|
|
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,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;CACnC,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,CA6YrF"}
|
package/dist/memory.js
CHANGED
|
@@ -163,18 +163,38 @@ export function createMemoryAdapter(options = {}) {
|
|
|
163
163
|
}
|
|
164
164
|
};
|
|
165
165
|
}
|
|
166
|
-
function
|
|
166
|
+
function pageOf(conversation, after) {
|
|
167
167
|
const messages = conversation.messages ?? [];
|
|
168
168
|
const first = typeof after === 'string' ? messages.findIndex((message)=>message.position > after) : 0;
|
|
169
169
|
const from = first === -1 ? messages.length : first;
|
|
170
170
|
const page = messages.slice(from, from + (historyPageSize ?? messages.length));
|
|
171
171
|
const last = page.at(-1);
|
|
172
|
-
|
|
172
|
+
return {
|
|
173
|
+
conversation: conversation.conversation,
|
|
173
174
|
messages: page,
|
|
174
175
|
...last !== undefined && from + page.length < messages.length ? {
|
|
175
176
|
next: last.position
|
|
176
177
|
} : {}
|
|
177
178
|
};
|
|
179
|
+
}
|
|
180
|
+
function historiesOf(input) {
|
|
181
|
+
const asked = input?.conversations;
|
|
182
|
+
if (!Array.isArray(asked)) return {
|
|
183
|
+
kind: 'rejected',
|
|
184
|
+
code: 'invalid_request',
|
|
185
|
+
fields: {}
|
|
186
|
+
};
|
|
187
|
+
const histories = [];
|
|
188
|
+
for (const entry of asked){
|
|
189
|
+
const conversation = typeof entry.conversation === 'string' ? scripted.get(entry.conversation) : undefined;
|
|
190
|
+
if (conversation === undefined) continue;
|
|
191
|
+
const outcome = conversation.outcomes?.['conversation.history'];
|
|
192
|
+
if (outcome !== undefined) return outcome;
|
|
193
|
+
histories.push(pageOf(conversation, entry.after));
|
|
194
|
+
}
|
|
195
|
+
const result = {
|
|
196
|
+
histories
|
|
197
|
+
};
|
|
178
198
|
return {
|
|
179
199
|
kind: 'action',
|
|
180
200
|
result
|
|
@@ -183,6 +203,7 @@ export function createMemoryAdapter(options = {}) {
|
|
|
183
203
|
function conversationAction(request) {
|
|
184
204
|
const name = request.name;
|
|
185
205
|
const input = request.input ?? {};
|
|
206
|
+
if (name === 'conversation.history') return historiesOf(request.input);
|
|
186
207
|
if (name === 'conversation.create') {
|
|
187
208
|
issued += 1;
|
|
188
209
|
const conversation = `conversation-${issued}`;
|
|
@@ -209,7 +230,6 @@ export function createMemoryAdapter(options = {}) {
|
|
|
209
230
|
}
|
|
210
231
|
const outcome = conversation.outcomes?.[name];
|
|
211
232
|
if (outcome !== undefined) return outcome;
|
|
212
|
-
if (name === 'conversation.history') return historyOf(conversation, input.after);
|
|
213
233
|
if (name === 'conversation.send') {
|
|
214
234
|
issued += 1;
|
|
215
235
|
const turn = `turn-${issued}`;
|
package/dist/memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/workspace/packages/mdruntime/src/memory.ts"],"sourcesContent":["import type { ModelResult } from './model.js';\nimport {\n ROOM_CONTRACT_VERSION,\n type AcceptedMessage,\n type ActionRequest,\n type ActionResult,\n type Adapter,\n type Authorization,\n type BootstrapRequest,\n type BootstrapResult,\n type Capability,\n type ConversationAction,\n type ConversationEvent,\n type ConversationHistoryPage,\n type DiscoverResult,\n type DiscoveredRoom,\n type HeadChange,\n type HistoryRequest,\n type HistoryResult,\n type MdModelIdentity,\n type MutationRequest,\n type MutationResult,\n type ProviderLimit,\n type RefreshRequest,\n type RefreshResult,\n type Retention,\n type RoomVersionNotification,\n type ServiceMode,\n} from './adapter.js';\nimport { MD_MODEL } from './collection.js';\nimport { sameChange } from './overlay.js';\n\nconst FIXTURE_RETENTION: Retention = {\n history: { kind: 'duration', seconds: 1 },\n outcome: 1,\n refreshHorizon: 1,\n};\n\nfunction declaredRetention(value: Retention | undefined): Retention {\n const retention = value ?? FIXTURE_RETENTION;\n if (retention.history.kind === 'no-declared-time-bound') return retention;\n if (Number.isFinite(retention.history.seconds) && retention.history.seconds > 0) {\n return retention;\n }\n throw new Error('history retention duration must be a finite positive number of seconds');\n}\n\nexport type MemoryRoom = DiscoveredRoom & {\n model?: ModelResult;\n selectionModel?: ModelResult;\n documents?: Readonly<Record<string, string>>;\n revisions?: Readonly<Record<string, string>>;\n changes?: Readonly<Record<string, HeadChange>>;\n binaryTargets?: readonly string[];\n};\n\nexport type MemoryConversation = {\n conversation: string;\n messages?: readonly AcceptedMessage[];\n outcomes?: Partial<Record<ConversationAction, ActionResult>>;\n};\n\nexport type MemoryAdapterOptions = {\n rooms?: readonly MemoryRoom[];\n conversations?: readonly MemoryConversation[];\n historyPageSize?: number;\n pageSize?: number;\n mdModel?: MdModelIdentity;\n supportedVersions?: readonly number[];\n capabilities?: readonly Capability[];\n providerLimits?: readonly ProviderLimit[];\n retention?: Retention;\n};\n\nexport type MemoryAdapter = Adapter & {\n setRooms(rooms: readonly MemoryRoom[]): void;\n setConversations(conversations: readonly MemoryConversation[]): void;\n script(operation: keyof Adapter, answer: unknown): void;\n notifyRoomVersion(notification: RoomVersionNotification): void;\n notifyConversation(event: ConversationEvent): void;\n notifyServiceMode(mode: ServiceMode): void;\n selectedRooms(): readonly string[];\n replicatedConversations(): readonly string[];\n};\n\ntype Script<T, R> = T | ((request: R) => T | Promise<T>);\n\ntype RefreshContinuation = {\n room: MemoryRoom;\n from: MemoryRoom;\n at: number;\n};\n\nfunction named<T>(\n source: Readonly<Record<string, T>>,\n paths: readonly string[],\n): Readonly<Record<string, T>> {\n const taken: Record<string, T> = {};\n for (const path of paths) {\n const value = source[path];\n if (value !== undefined) taken[path] = value;\n }\n return taken;\n}\n\nasync function resolveScript<T, R>(\n answer: Script<T, R> | undefined,\n fallback: () => T | Promise<T>,\n request: R,\n) {\n if (answer === undefined) return fallback();\n return typeof answer === 'function' ? (answer as (value: R) => T | Promise<T>)(request) : answer;\n}\n\nexport function createMemoryAdapter(options: MemoryAdapterOptions = {}): MemoryAdapter {\n let rooms = options.rooms === undefined ? [] : [...options.rooms];\n const mdModel = options.mdModel ?? MD_MODEL;\n const supportedVersions = options.supportedVersions ?? [ROOM_CONTRACT_VERSION];\n const capabilities = options.capabilities ?? [];\n const providerLimits = options.providerLimits ?? [];\n const retention = declaredRetention(options.retention);\n const pageSize = options.pageSize;\n const scripts: Partial<Record<keyof Adapter, unknown>> = {};\n const served = new Map<string, Map<string, MemoryRoom>>();\n const refreshPages = new Map<string, RefreshContinuation>();\n const observers = new Set<(notification: RoomVersionNotification) => void>();\n const listeners = new Set<(event: ConversationEvent) => void>();\n const modeObservers = new Set<(mode: ServiceMode) => void>();\n const scripted = new Map<string, MemoryConversation>();\n const unsealed = new Map<string, string>();\n const sealed = new Set<string>();\n const historyPageSize = options.historyPageSize;\n let selected: readonly string[] = [];\n let replicated: readonly string[] = [];\n let issued = 0;\n\n function scriptConversations(entries: readonly MemoryConversation[]) {\n scripted.clear();\n for (const entry of entries) scripted.set(entry.conversation, entry);\n }\n\n scriptConversations(options.conversations ?? []);\n\n const ordinals = new Map<string, number>();\n\n function note<T>(locator: string, answer: T): T {\n const roomVersion = (answer as { roomVersion?: unknown }).roomVersion;\n const key = `${locator}\\u0000${String(roomVersion)}`;\n if (typeof roomVersion === 'string' && !ordinals.has(key)) ordinals.set(key, ordinals.size);\n return answer;\n }\n\n function reached(locator: string, roomVersion: string, target: string): boolean {\n const scripted = scripts.reached as\n | boolean\n | ((locator: string, roomVersion: string, target: string) => boolean)\n | undefined;\n if (typeof scripted === 'boolean') return scripted;\n if (scripted !== undefined) return scripted(locator, roomVersion, target);\n if (roomVersion === target) return true;\n const held = ordinals.get(`${locator}\\u0000${roomVersion}`);\n const wanted = ordinals.get(`${locator}\\u0000${target}`);\n return held !== undefined && wanted !== undefined && held >= wanted;\n }\n\n function retain(entries: readonly MemoryRoom[]) {\n for (const room of entries) {\n note(room.locator, room);\n const versions = served.get(room.locator) ?? new Map<string, MemoryRoom>();\n versions.set(room.roomVersion, room);\n served.set(room.locator, versions);\n }\n }\n\n retain(rooms);\n\n function declared(room: MemoryRoom): DiscoveredRoom {\n return {\n name: room.name,\n locator: room.locator,\n roomVersion: room.roomVersion,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n ...(room.typedSelection === undefined ? {} : { typedSelection: room.typedSelection }),\n ...(room.untypedFolders === undefined ? {} : { untypedFolders: room.untypedFolders }),\n providerOwnedPaths: room.providerOwnedPaths,\n };\n }\n\n function page(room: MemoryRoom, from: number): BootstrapResult {\n const paths = Object.keys(room.documents ?? {}).sort();\n const size = pageSize ?? paths.length;\n const taken = paths.slice(from, from + size);\n const next = from + taken.length;\n const targets = from === 0 ? (room.binaryTargets ?? []) : [];\n return {\n kind: 'bootstrap',\n roomVersion: room.roomVersion,\n documents: named(room.documents ?? {}, taken),\n revisions: named(room.revisions ?? {}, taken),\n changes: named(room.changes ?? {}, [...taken, ...targets]),\n binaryTargets: targets,\n ...(next < paths.length ? { pageToken: String(next) } : {}),\n };\n }\n\n function advancement(room: MemoryRoom, from: MemoryRoom, at: number): RefreshResult {\n const current = room.documents ?? {};\n const previous = from.documents ?? {};\n const currentTargets = new Set(room.binaryTargets ?? []);\n const previousTargets = new Set(from.binaryTargets ?? []);\n const headMoved = (path: string) =>\n room.revisions?.[path] !== from.revisions?.[path] ||\n !sameChange(room.changes?.[path], from.changes?.[path]);\n const changed = Object.keys(current)\n .filter((path) => current[path] !== previous[path] || headMoved(path))\n .sort();\n const size = pageSize ?? changed.length;\n const taken = changed.slice(at, at + size);\n const next = at + taken.length;\n const opening = at === 0;\n const pageToken = next < changed.length ? `refresh-${refreshPages.size}` : undefined;\n if (pageToken !== undefined) refreshPages.set(pageToken, { room, from, at: next });\n const targets = opening\n ? [...currentTargets].filter((target) => !previousTargets.has(target) || headMoved(target))\n : [];\n return {\n kind: 'net-advancement',\n roomVersion: room.roomVersion,\n documents: named(current, taken),\n revisions: named(room.revisions ?? {}, taken),\n changes: named(room.changes ?? {}, [...taken, ...targets]),\n binaryTargets: targets,\n removals: opening\n ? [\n ...Object.keys(previous).filter(\n (path) => !(path in current) && !currentTargets.has(path),\n ),\n ...[...previousTargets].filter(\n (target) => !currentTargets.has(target) && !(target in current),\n ),\n ].sort()\n : [],\n ...(pageToken === undefined ? {} : { pageToken }),\n };\n }\n\n function historyOf(conversation: MemoryConversation, after: unknown): ActionResult {\n const messages = conversation.messages ?? [];\n const first =\n typeof after === 'string' ? messages.findIndex((message) => message.position > after) : 0;\n const from = first === -1 ? messages.length : first;\n const page = messages.slice(from, from + (historyPageSize ?? messages.length));\n const last = page.at(-1);\n const result: ConversationHistoryPage = {\n messages: page,\n ...(last !== undefined && from + page.length < messages.length\n ? { next: last.position }\n : {}),\n };\n return { kind: 'action', result };\n }\n\n function conversationAction(request: ActionRequest): ActionResult {\n const name = request.name as ConversationAction;\n const input = (request.input ?? {}) as {\n conversation?: unknown;\n turn?: unknown;\n after?: unknown;\n };\n if (name === 'conversation.create') {\n issued += 1;\n const conversation = `conversation-${issued}`;\n scripted.set(conversation, { conversation });\n return { kind: 'action', result: { conversation } };\n }\n const named = typeof input.conversation === 'string' ? input.conversation : '';\n const conversation = scripted.get(named);\n if (conversation === undefined) {\n return { kind: 'rejected', code: 'unknown-conversation', fields: { conversation: named } };\n }\n const outcome = conversation.outcomes?.[name];\n if (outcome !== undefined) return outcome;\n if (name === 'conversation.history') return historyOf(conversation, input.after);\n if (name === 'conversation.send') {\n issued += 1;\n const turn = `turn-${issued}`;\n unsealed.set(turn, named);\n return { kind: 'action', result: { turn } };\n }\n if (name === 'conversation.cancel') {\n const turn = typeof input.turn === 'string' ? input.turn : '';\n if (sealed.has(turn) || !unsealed.has(turn)) {\n return { kind: 'rejected', code: 'turn-sealed', fields: { turn } };\n }\n unsealed.delete(turn);\n return { kind: 'action', result: { turn, cancelled: true } };\n }\n if (name === 'conversation.delete') scripted.delete(named);\n return { kind: 'action', result: { conversation: named } };\n }\n\n function discovery(): DiscoverResult {\n return {\n kind: 'discovery',\n supportedVersions,\n mdModel,\n rooms: rooms.map(declared),\n capabilities,\n providerLimits,\n retention,\n };\n }\n\n return {\n setRooms(next) {\n rooms = [...next];\n retain(rooms);\n },\n setConversations(next) {\n scriptConversations(next);\n },\n notifyRoomVersion(notification) {\n for (const observer of observers) observer(notification);\n },\n notifyConversation(event) {\n if (event.kind === 'accepted-message') {\n sealed.add(event.message.turn);\n unsealed.delete(event.message.turn);\n }\n for (const listener of listeners) listener(event);\n },\n notifyServiceMode(mode) {\n for (const observer of modeObservers) observer(mode);\n },\n selectedRooms() {\n return selected;\n },\n replicatedConversations() {\n return replicated;\n },\n conversations: {\n replicate(next) {\n replicated = [...next];\n },\n observe(notify) {\n listeners.add(notify);\n return () => {\n listeners.delete(notify);\n };\n },\n },\n serviceMode: {\n observe(notify) {\n modeObservers.add(notify);\n return () => {\n modeObservers.delete(notify);\n };\n },\n },\n roomVersions: {\n select(locators) {\n selected = [...locators];\n },\n observe(notify) {\n observers.add(notify);\n return () => {\n observers.delete(notify);\n };\n },\n },\n script(operation, answer) {\n if (answer === undefined) delete scripts[operation];\n else scripts[operation] = answer;\n },\n async model(_authorization, request) {\n return resolveScript(\n scripts.model as Script<ModelResult, typeof request> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n const answer = request.attached === 'collection' ? room?.model : room?.selectionModel;\n return answer ?? { kind: 'model-unavailable', reason: 'not-readable' };\n },\n request,\n );\n },\n async authorize() {\n return resolveScript<Authorization, void>(\n scripts.authorize as Script<Authorization, void> | undefined,\n () => ({}),\n undefined,\n );\n },\n async discover(_authorization: Authorization) {\n return resolveScript<DiscoverResult, void>(\n scripts.discover as Script<DiscoverResult, void> | undefined,\n discovery,\n undefined,\n ).then((answer) => {\n if (answer.kind === 'discovery') for (const room of answer.rooms) note(room.locator, room);\n return answer;\n });\n },\n reached,\n async bootstrap(_authorization: Authorization, request: BootstrapRequest) {\n return resolveScript<BootstrapResult, BootstrapRequest>(\n scripts.bootstrap as Script<BootstrapResult, BootstrapRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n return page(room, request.pageToken === undefined ? 0 : Number(request.pageToken));\n },\n request,\n ).then((answer) => note(request.locator, answer));\n },\n async refresh(_authorization: Authorization, request: RefreshRequest) {\n return resolveScript<RefreshResult, RefreshRequest>(\n scripts.refresh as Script<RefreshResult, RefreshRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n if (request.pageToken !== undefined) {\n const continuation = refreshPages.get(request.pageToken);\n if (\n continuation === undefined ||\n continuation.room.locator !== request.locator ||\n continuation.from.roomVersion !== request.fromRoomVersion\n ) {\n throw new Error('Invalid Refresh Page Token');\n }\n return advancement(continuation.room, continuation.from, continuation.at);\n }\n if (\n request.minPosition !== undefined &&\n !reached(room.locator, room.roomVersion, request.minPosition)\n ) {\n return { kind: 'retryable-refusal', code: 'replica_behind', fields: {} };\n }\n if (request.fromRoomVersion === room.roomVersion) {\n return { kind: 'still-current' };\n }\n const from = served.get(room.locator)?.get(request.fromRoomVersion);\n if (from === undefined) return { kind: 'beyond-horizon' };\n return advancement(room, from, 0);\n },\n request,\n ).then((answer) => note(request.locator, answer));\n },\n async mutate(_authorization: Authorization, request: MutationRequest) {\n return resolveScript<MutationResult, MutationRequest>(\n scripts.mutate as Script<MutationResult, MutationRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n return { kind: 'rejected', code: 'unscripted-mutation', fields: {}, affected: {} };\n },\n request,\n ).then((answer) => note(request.locator, answer));\n },\n async history(_authorization: Authorization, request: HistoryRequest) {\n return resolveScript<HistoryResult, HistoryRequest>(\n scripts.history as Script<HistoryResult, HistoryRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n return {\n kind: 'history',\n revisions: [],\n };\n },\n request,\n );\n },\n async action(_authorization: Authorization, request: ActionRequest) {\n return resolveScript<ActionResult, ActionRequest>(\n scripts.action as Script<ActionResult, ActionRequest> | undefined,\n () => {\n if (request.name.startsWith('conversation.')) return conversationAction(request);\n return { kind: 'rejected', code: 'unscripted-action', fields: {} };\n },\n request,\n ).then((answer) => {\n if (answer.kind === 'action' && answer.at !== undefined) note(answer.at.locator, answer.at);\n return answer;\n });\n },\n };\n}\n"],"names":["ROOM_CONTRACT_VERSION","MD_MODEL","sameChange","FIXTURE_RETENTION","history","kind","seconds","outcome","refreshHorizon","declaredRetention","value","retention","Number","isFinite","Error","named","source","paths","taken","path","undefined","resolveScript","answer","fallback","request","createMemoryAdapter","options","rooms","mdModel","supportedVersions","capabilities","providerLimits","pageSize","scripts","served","Map","refreshPages","observers","Set","listeners","modeObservers","scripted","unsealed","sealed","historyPageSize","selected","replicated","issued","scriptConversations","entries","clear","entry","set","conversation","conversations","ordinals","note","locator","roomVersion","key","String","has","size","reached","target","held","get","wanted","retain","room","versions","declared","name","operations","replica","attachedModel","typedSelection","untypedFolders","providerOwnedPaths","page","from","Object","keys","documents","sort","length","slice","next","targets","binaryTargets","revisions","changes","pageToken","advancement","at","current","previous","currentTargets","previousTargets","headMoved","changed","filter","opening","removals","historyOf","after","messages","first","findIndex","message","position","last","result","conversationAction","input","code","fields","outcomes","turn","delete","cancelled","discovery","map","setRooms","setConversations","notifyRoomVersion","notification","observer","notifyConversation","event","add","listener","notifyServiceMode","mode","selectedRooms","replicatedConversations","replicate","observe","notify","serviceMode","roomVersions","select","locators","script","operation","model","_authorization","find","attached","selectionModel","reason","authorize","discover","then","bootstrap","refresh","continuation","fromRoomVersion","minPosition","mutate","affected","action","startsWith"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["/workspace/packages/mdruntime/src/memory.ts"],"sourcesContent":["import type { ModelResult } from './model.js';\nimport {\n ROOM_CONTRACT_VERSION,\n type AcceptedMessage,\n type ActionRequest,\n type ActionResult,\n type Adapter,\n type Authorization,\n type BootstrapRequest,\n type BootstrapResult,\n type Capability,\n type ConversationAction,\n type ConversationEvent,\n type ConversationHistories,\n type ConversationHistoryPage,\n type DiscoverResult,\n type DiscoveredRoom,\n type HeadChange,\n type HistoryRequest,\n type HistoryResult,\n type MdModelIdentity,\n type MutationRequest,\n type MutationResult,\n type ProviderLimit,\n type RefreshRequest,\n type RefreshResult,\n type Retention,\n type RoomVersionNotification,\n type ServiceMode,\n} from './adapter.js';\nimport { MD_MODEL } from './collection.js';\nimport { sameChange } from './overlay.js';\n\nconst FIXTURE_RETENTION: Retention = {\n history: { kind: 'duration', seconds: 1 },\n outcome: 1,\n refreshHorizon: 1,\n};\n\nfunction declaredRetention(value: Retention | undefined): Retention {\n const retention = value ?? FIXTURE_RETENTION;\n if (retention.history.kind === 'no-declared-time-bound') return retention;\n if (Number.isFinite(retention.history.seconds) && retention.history.seconds > 0) {\n return retention;\n }\n throw new Error('history retention duration must be a finite positive number of seconds');\n}\n\nexport type MemoryRoom = DiscoveredRoom & {\n model?: ModelResult;\n selectionModel?: ModelResult;\n documents?: Readonly<Record<string, string>>;\n revisions?: Readonly<Record<string, string>>;\n changes?: Readonly<Record<string, HeadChange>>;\n binaryTargets?: readonly string[];\n};\n\nexport type MemoryConversation = {\n conversation: string;\n messages?: readonly AcceptedMessage[];\n outcomes?: Partial<Record<ConversationAction, ActionResult>>;\n};\n\nexport type MemoryAdapterOptions = {\n rooms?: readonly MemoryRoom[];\n conversations?: readonly MemoryConversation[];\n historyPageSize?: number;\n pageSize?: number;\n mdModel?: MdModelIdentity;\n supportedVersions?: readonly number[];\n capabilities?: readonly Capability[];\n providerLimits?: readonly ProviderLimit[];\n retention?: Retention;\n};\n\nexport type MemoryAdapter = Adapter & {\n setRooms(rooms: readonly MemoryRoom[]): void;\n setConversations(conversations: readonly MemoryConversation[]): void;\n script(operation: keyof Adapter, answer: unknown): void;\n notifyRoomVersion(notification: RoomVersionNotification): void;\n notifyConversation(event: ConversationEvent): void;\n notifyServiceMode(mode: ServiceMode): void;\n selectedRooms(): readonly string[];\n replicatedConversations(): readonly string[];\n};\n\ntype Script<T, R> = T | ((request: R) => T | Promise<T>);\n\ntype RefreshContinuation = {\n room: MemoryRoom;\n from: MemoryRoom;\n at: number;\n};\n\nfunction named<T>(\n source: Readonly<Record<string, T>>,\n paths: readonly string[],\n): Readonly<Record<string, T>> {\n const taken: Record<string, T> = {};\n for (const path of paths) {\n const value = source[path];\n if (value !== undefined) taken[path] = value;\n }\n return taken;\n}\n\nasync function resolveScript<T, R>(\n answer: Script<T, R> | undefined,\n fallback: () => T | Promise<T>,\n request: R,\n) {\n if (answer === undefined) return fallback();\n return typeof answer === 'function' ? (answer as (value: R) => T | Promise<T>)(request) : answer;\n}\n\nexport function createMemoryAdapter(options: MemoryAdapterOptions = {}): MemoryAdapter {\n let rooms = options.rooms === undefined ? [] : [...options.rooms];\n const mdModel = options.mdModel ?? MD_MODEL;\n const supportedVersions = options.supportedVersions ?? [ROOM_CONTRACT_VERSION];\n const capabilities = options.capabilities ?? [];\n const providerLimits = options.providerLimits ?? [];\n const retention = declaredRetention(options.retention);\n const pageSize = options.pageSize;\n const scripts: Partial<Record<keyof Adapter, unknown>> = {};\n const served = new Map<string, Map<string, MemoryRoom>>();\n const refreshPages = new Map<string, RefreshContinuation>();\n const observers = new Set<(notification: RoomVersionNotification) => void>();\n const listeners = new Set<(event: ConversationEvent) => void>();\n const modeObservers = new Set<(mode: ServiceMode) => void>();\n const scripted = new Map<string, MemoryConversation>();\n const unsealed = new Map<string, string>();\n const sealed = new Set<string>();\n const historyPageSize = options.historyPageSize;\n let selected: readonly string[] = [];\n let replicated: readonly string[] = [];\n let issued = 0;\n\n function scriptConversations(entries: readonly MemoryConversation[]) {\n scripted.clear();\n for (const entry of entries) scripted.set(entry.conversation, entry);\n }\n\n scriptConversations(options.conversations ?? []);\n\n const ordinals = new Map<string, number>();\n\n function note<T>(locator: string, answer: T): T {\n const roomVersion = (answer as { roomVersion?: unknown }).roomVersion;\n const key = `${locator}\\u0000${String(roomVersion)}`;\n if (typeof roomVersion === 'string' && !ordinals.has(key)) ordinals.set(key, ordinals.size);\n return answer;\n }\n\n function reached(locator: string, roomVersion: string, target: string): boolean {\n const scripted = scripts.reached as\n | boolean\n | ((locator: string, roomVersion: string, target: string) => boolean)\n | undefined;\n if (typeof scripted === 'boolean') return scripted;\n if (scripted !== undefined) return scripted(locator, roomVersion, target);\n if (roomVersion === target) return true;\n const held = ordinals.get(`${locator}\\u0000${roomVersion}`);\n const wanted = ordinals.get(`${locator}\\u0000${target}`);\n return held !== undefined && wanted !== undefined && held >= wanted;\n }\n\n function retain(entries: readonly MemoryRoom[]) {\n for (const room of entries) {\n note(room.locator, room);\n const versions = served.get(room.locator) ?? new Map<string, MemoryRoom>();\n versions.set(room.roomVersion, room);\n served.set(room.locator, versions);\n }\n }\n\n retain(rooms);\n\n function declared(room: MemoryRoom): DiscoveredRoom {\n return {\n name: room.name,\n locator: room.locator,\n roomVersion: room.roomVersion,\n operations: room.operations,\n replica: room.replica,\n attachedModel: room.attachedModel,\n ...(room.typedSelection === undefined ? {} : { typedSelection: room.typedSelection }),\n ...(room.untypedFolders === undefined ? {} : { untypedFolders: room.untypedFolders }),\n providerOwnedPaths: room.providerOwnedPaths,\n };\n }\n\n function page(room: MemoryRoom, from: number): BootstrapResult {\n const paths = Object.keys(room.documents ?? {}).sort();\n const size = pageSize ?? paths.length;\n const taken = paths.slice(from, from + size);\n const next = from + taken.length;\n const targets = from === 0 ? (room.binaryTargets ?? []) : [];\n return {\n kind: 'bootstrap',\n roomVersion: room.roomVersion,\n documents: named(room.documents ?? {}, taken),\n revisions: named(room.revisions ?? {}, taken),\n changes: named(room.changes ?? {}, [...taken, ...targets]),\n binaryTargets: targets,\n ...(next < paths.length ? { pageToken: String(next) } : {}),\n };\n }\n\n function advancement(room: MemoryRoom, from: MemoryRoom, at: number): RefreshResult {\n const current = room.documents ?? {};\n const previous = from.documents ?? {};\n const currentTargets = new Set(room.binaryTargets ?? []);\n const previousTargets = new Set(from.binaryTargets ?? []);\n const headMoved = (path: string) =>\n room.revisions?.[path] !== from.revisions?.[path] ||\n !sameChange(room.changes?.[path], from.changes?.[path]);\n const changed = Object.keys(current)\n .filter((path) => current[path] !== previous[path] || headMoved(path))\n .sort();\n const size = pageSize ?? changed.length;\n const taken = changed.slice(at, at + size);\n const next = at + taken.length;\n const opening = at === 0;\n const pageToken = next < changed.length ? `refresh-${refreshPages.size}` : undefined;\n if (pageToken !== undefined) refreshPages.set(pageToken, { room, from, at: next });\n const targets = opening\n ? [...currentTargets].filter((target) => !previousTargets.has(target) || headMoved(target))\n : [];\n return {\n kind: 'net-advancement',\n roomVersion: room.roomVersion,\n documents: named(current, taken),\n revisions: named(room.revisions ?? {}, taken),\n changes: named(room.changes ?? {}, [...taken, ...targets]),\n binaryTargets: targets,\n removals: opening\n ? [\n ...Object.keys(previous).filter(\n (path) => !(path in current) && !currentTargets.has(path),\n ),\n ...[...previousTargets].filter(\n (target) => !currentTargets.has(target) && !(target in current),\n ),\n ].sort()\n : [],\n ...(pageToken === undefined ? {} : { pageToken }),\n };\n }\n\n function pageOf(conversation: MemoryConversation, after: unknown): ConversationHistoryPage {\n const messages = conversation.messages ?? [];\n const first =\n typeof after === 'string' ? messages.findIndex((message) => message.position > after) : 0;\n const from = first === -1 ? messages.length : first;\n const page = messages.slice(from, from + (historyPageSize ?? messages.length));\n const last = page.at(-1);\n return {\n conversation: conversation.conversation,\n messages: page,\n ...(last !== undefined && from + page.length < messages.length\n ? { next: last.position }\n : {}),\n };\n }\n\n function historiesOf(input: unknown): ActionResult {\n const asked = (input as { conversations?: unknown } | null)?.conversations;\n if (!Array.isArray(asked)) return { kind: 'rejected', code: 'invalid_request', fields: {} };\n const histories: ConversationHistoryPage[] = [];\n for (const entry of asked as readonly { conversation?: unknown; after?: unknown }[]) {\n const conversation =\n typeof entry.conversation === 'string' ? scripted.get(entry.conversation) : undefined;\n if (conversation === undefined) continue;\n const outcome = conversation.outcomes?.['conversation.history'];\n if (outcome !== undefined) return outcome;\n histories.push(pageOf(conversation, entry.after));\n }\n const result: ConversationHistories = { histories };\n return { kind: 'action', result };\n }\n\n function conversationAction(request: ActionRequest): ActionResult {\n const name = request.name as ConversationAction;\n const input = (request.input ?? {}) as {\n conversation?: unknown;\n turn?: unknown;\n };\n if (name === 'conversation.history') return historiesOf(request.input);\n if (name === 'conversation.create') {\n issued += 1;\n const conversation = `conversation-${issued}`;\n scripted.set(conversation, { conversation });\n return { kind: 'action', result: { conversation } };\n }\n const named = typeof input.conversation === 'string' ? input.conversation : '';\n const conversation = scripted.get(named);\n if (conversation === undefined) {\n return { kind: 'rejected', code: 'unknown-conversation', fields: { conversation: named } };\n }\n const outcome = conversation.outcomes?.[name];\n if (outcome !== undefined) return outcome;\n if (name === 'conversation.send') {\n issued += 1;\n const turn = `turn-${issued}`;\n unsealed.set(turn, named);\n return { kind: 'action', result: { turn } };\n }\n if (name === 'conversation.cancel') {\n const turn = typeof input.turn === 'string' ? input.turn : '';\n if (sealed.has(turn) || !unsealed.has(turn)) {\n return { kind: 'rejected', code: 'turn-sealed', fields: { turn } };\n }\n unsealed.delete(turn);\n return { kind: 'action', result: { turn, cancelled: true } };\n }\n if (name === 'conversation.delete') scripted.delete(named);\n return { kind: 'action', result: { conversation: named } };\n }\n\n function discovery(): DiscoverResult {\n return {\n kind: 'discovery',\n supportedVersions,\n mdModel,\n rooms: rooms.map(declared),\n capabilities,\n providerLimits,\n retention,\n };\n }\n\n return {\n setRooms(next) {\n rooms = [...next];\n retain(rooms);\n },\n setConversations(next) {\n scriptConversations(next);\n },\n notifyRoomVersion(notification) {\n for (const observer of observers) observer(notification);\n },\n notifyConversation(event) {\n if (event.kind === 'accepted-message') {\n sealed.add(event.message.turn);\n unsealed.delete(event.message.turn);\n }\n for (const listener of listeners) listener(event);\n },\n notifyServiceMode(mode) {\n for (const observer of modeObservers) observer(mode);\n },\n selectedRooms() {\n return selected;\n },\n replicatedConversations() {\n return replicated;\n },\n conversations: {\n replicate(next) {\n replicated = [...next];\n },\n observe(notify) {\n listeners.add(notify);\n return () => {\n listeners.delete(notify);\n };\n },\n },\n serviceMode: {\n observe(notify) {\n modeObservers.add(notify);\n return () => {\n modeObservers.delete(notify);\n };\n },\n },\n roomVersions: {\n select(locators) {\n selected = [...locators];\n },\n observe(notify) {\n observers.add(notify);\n return () => {\n observers.delete(notify);\n };\n },\n },\n script(operation, answer) {\n if (answer === undefined) delete scripts[operation];\n else scripts[operation] = answer;\n },\n async model(_authorization, request) {\n return resolveScript(\n scripts.model as Script<ModelResult, typeof request> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n const answer = request.attached === 'collection' ? room?.model : room?.selectionModel;\n return answer ?? { kind: 'model-unavailable', reason: 'not-readable' };\n },\n request,\n );\n },\n async authorize() {\n return resolveScript<Authorization, void>(\n scripts.authorize as Script<Authorization, void> | undefined,\n () => ({}),\n undefined,\n );\n },\n async discover(_authorization: Authorization) {\n return resolveScript<DiscoverResult, void>(\n scripts.discover as Script<DiscoverResult, void> | undefined,\n discovery,\n undefined,\n ).then((answer) => {\n if (answer.kind === 'discovery') for (const room of answer.rooms) note(room.locator, room);\n return answer;\n });\n },\n reached,\n async bootstrap(_authorization: Authorization, request: BootstrapRequest) {\n return resolveScript<BootstrapResult, BootstrapRequest>(\n scripts.bootstrap as Script<BootstrapResult, BootstrapRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n return page(room, request.pageToken === undefined ? 0 : Number(request.pageToken));\n },\n request,\n ).then((answer) => note(request.locator, answer));\n },\n async refresh(_authorization: Authorization, request: RefreshRequest) {\n return resolveScript<RefreshResult, RefreshRequest>(\n scripts.refresh as Script<RefreshResult, RefreshRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n if (request.pageToken !== undefined) {\n const continuation = refreshPages.get(request.pageToken);\n if (\n continuation === undefined ||\n continuation.room.locator !== request.locator ||\n continuation.from.roomVersion !== request.fromRoomVersion\n ) {\n throw new Error('Invalid Refresh Page Token');\n }\n return advancement(continuation.room, continuation.from, continuation.at);\n }\n if (\n request.minPosition !== undefined &&\n !reached(room.locator, room.roomVersion, request.minPosition)\n ) {\n return { kind: 'retryable-refusal', code: 'replica_behind', fields: {} };\n }\n if (request.fromRoomVersion === room.roomVersion) {\n return { kind: 'still-current' };\n }\n const from = served.get(room.locator)?.get(request.fromRoomVersion);\n if (from === undefined) return { kind: 'beyond-horizon' };\n return advancement(room, from, 0);\n },\n request,\n ).then((answer) => note(request.locator, answer));\n },\n async mutate(_authorization: Authorization, request: MutationRequest) {\n return resolveScript<MutationResult, MutationRequest>(\n scripts.mutate as Script<MutationResult, MutationRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n return { kind: 'rejected', code: 'unscripted-mutation', fields: {}, affected: {} };\n },\n request,\n ).then((answer) => note(request.locator, answer));\n },\n async history(_authorization: Authorization, request: HistoryRequest) {\n return resolveScript<HistoryResult, HistoryRequest>(\n scripts.history as Script<HistoryResult, HistoryRequest> | undefined,\n () => {\n const room = rooms.find((entry) => entry.locator === request.locator);\n if (room === undefined) {\n return { kind: 'room-not-readable', locator: request.locator };\n }\n return {\n kind: 'history',\n revisions: [],\n };\n },\n request,\n );\n },\n async action(_authorization: Authorization, request: ActionRequest) {\n return resolveScript<ActionResult, ActionRequest>(\n scripts.action as Script<ActionResult, ActionRequest> | undefined,\n () => {\n if (request.name.startsWith('conversation.')) return conversationAction(request);\n return { kind: 'rejected', code: 'unscripted-action', fields: {} };\n },\n request,\n ).then((answer) => {\n if (answer.kind === 'action' && answer.at !== undefined) note(answer.at.locator, answer.at);\n return answer;\n });\n },\n };\n}\n"],"names":["ROOM_CONTRACT_VERSION","MD_MODEL","sameChange","FIXTURE_RETENTION","history","kind","seconds","outcome","refreshHorizon","declaredRetention","value","retention","Number","isFinite","Error","named","source","paths","taken","path","undefined","resolveScript","answer","fallback","request","createMemoryAdapter","options","rooms","mdModel","supportedVersions","capabilities","providerLimits","pageSize","scripts","served","Map","refreshPages","observers","Set","listeners","modeObservers","scripted","unsealed","sealed","historyPageSize","selected","replicated","issued","scriptConversations","entries","clear","entry","set","conversation","conversations","ordinals","note","locator","roomVersion","key","String","has","size","reached","target","held","get","wanted","retain","room","versions","declared","name","operations","replica","attachedModel","typedSelection","untypedFolders","providerOwnedPaths","page","from","Object","keys","documents","sort","length","slice","next","targets","binaryTargets","revisions","changes","pageToken","advancement","at","current","previous","currentTargets","previousTargets","headMoved","changed","filter","opening","removals","pageOf","after","messages","first","findIndex","message","position","last","historiesOf","input","asked","Array","isArray","code","fields","histories","outcomes","push","result","conversationAction","turn","delete","cancelled","discovery","map","setRooms","setConversations","notifyRoomVersion","notification","observer","notifyConversation","event","add","listener","notifyServiceMode","mode","selectedRooms","replicatedConversations","replicate","observe","notify","serviceMode","roomVersions","select","locators","script","operation","model","_authorization","find","attached","selectionModel","reason","authorize","discover","then","bootstrap","refresh","continuation","fromRoomVersion","minPosition","mutate","affected","action","startsWith"],"mappings":"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"}
|