@agentshouse/mdruntime 0.1.0-alpha.3 → 0.1.0-alpha.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/AGENTS.md +178 -0
  2. package/dist/adapter.d.ts +150 -18
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/adapter.js +2 -1
  5. package/dist/adapter.js.map +1 -1
  6. package/dist/bootstrap.d.ts +5 -1
  7. package/dist/bootstrap.d.ts.map +1 -1
  8. package/dist/bootstrap.js +13 -5
  9. package/dist/bootstrap.js.map +1 -1
  10. package/dist/change-set.d.ts +33 -0
  11. package/dist/change-set.d.ts.map +1 -0
  12. package/dist/change-set.js +89 -0
  13. package/dist/change-set.js.map +1 -0
  14. package/dist/change.d.ts +10 -0
  15. package/dist/change.d.ts.map +1 -1
  16. package/dist/change.js.map +1 -1
  17. package/dist/client.d.ts +72 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +231 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/collection.d.ts +22 -12
  22. package/dist/collection.d.ts.map +1 -1
  23. package/dist/collection.js +88 -30
  24. package/dist/collection.js.map +1 -1
  25. package/dist/connection.d.ts +90 -20
  26. package/dist/connection.d.ts.map +1 -1
  27. package/dist/connection.js +1732 -194
  28. package/dist/connection.js.map +1 -1
  29. package/dist/conversation.d.ts +72 -0
  30. package/dist/conversation.d.ts.map +1 -0
  31. package/dist/conversation.js +529 -0
  32. package/dist/conversation.js.map +1 -0
  33. package/dist/durability.d.ts +9 -0
  34. package/dist/durability.d.ts.map +1 -0
  35. package/dist/durability.js +11 -0
  36. package/dist/durability.js.map +1 -0
  37. package/dist/file.d.ts +20 -0
  38. package/dist/file.d.ts.map +1 -0
  39. package/dist/file.js +149 -0
  40. package/dist/file.js.map +1 -0
  41. package/dist/host.d.ts +13 -0
  42. package/dist/host.d.ts.map +1 -0
  43. package/dist/host.js +205 -0
  44. package/dist/host.js.map +1 -0
  45. package/dist/identity.d.ts +3 -0
  46. package/dist/identity.d.ts.map +1 -0
  47. package/dist/identity.js +23 -0
  48. package/dist/identity.js.map +1 -0
  49. package/dist/index.d.ts +15 -6
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +1 -0
  52. package/dist/index.js.map +1 -1
  53. package/dist/log.d.ts +5 -0
  54. package/dist/log.d.ts.map +1 -0
  55. package/dist/log.js +15 -0
  56. package/dist/log.js.map +1 -0
  57. package/dist/memory.d.ts +17 -2
  58. package/dist/memory.d.ts.map +1 -1
  59. package/dist/memory.js +201 -15
  60. package/dist/memory.js.map +1 -1
  61. package/dist/model.d.ts +56 -0
  62. package/dist/model.d.ts.map +1 -0
  63. package/dist/model.js +37 -0
  64. package/dist/model.js.map +1 -0
  65. package/dist/observation.d.ts +25 -0
  66. package/dist/observation.d.ts.map +1 -0
  67. package/dist/observation.js +92 -0
  68. package/dist/observation.js.map +1 -0
  69. package/dist/outcome.d.ts +34 -0
  70. package/dist/outcome.d.ts.map +1 -0
  71. package/dist/outcome.js +3 -0
  72. package/dist/outcome.js.map +1 -0
  73. package/dist/overlay.d.ts +2 -0
  74. package/dist/overlay.d.ts.map +1 -1
  75. package/dist/overlay.js +107 -1
  76. package/dist/overlay.js.map +1 -1
  77. package/dist/paths.d.ts +0 -1
  78. package/dist/paths.d.ts.map +1 -1
  79. package/dist/paths.js +0 -4
  80. package/dist/paths.js.map +1 -1
  81. package/dist/query.d.ts +209 -0
  82. package/dist/query.d.ts.map +1 -0
  83. package/dist/query.js +467 -0
  84. package/dist/query.js.map +1 -0
  85. package/dist/read-side.d.ts +14 -0
  86. package/dist/read-side.d.ts.map +1 -0
  87. package/dist/read-side.js +451 -0
  88. package/dist/read-side.js.map +1 -0
  89. package/dist/refresh.d.ts.map +1 -1
  90. package/dist/refresh.js +5 -3
  91. package/dist/refresh.js.map +1 -1
  92. package/dist/replica.d.ts +17 -3
  93. package/dist/replica.d.ts.map +1 -1
  94. package/dist/replica.js +160 -8
  95. package/dist/replica.js.map +1 -1
  96. package/dist/room-draft.d.ts +124 -0
  97. package/dist/room-draft.d.ts.map +1 -0
  98. package/dist/room-draft.js +406 -0
  99. package/dist/room-draft.js.map +1 -0
  100. package/dist/rows.d.ts +39 -0
  101. package/dist/rows.d.ts.map +1 -0
  102. package/dist/rows.js +100 -0
  103. package/dist/rows.js.map +1 -0
  104. package/dist/save.d.ts +11 -2
  105. package/dist/save.d.ts.map +1 -1
  106. package/dist/save.js +104 -128
  107. package/dist/save.js.map +1 -1
  108. package/dist/search.d.ts +61 -0
  109. package/dist/search.d.ts.map +1 -0
  110. package/dist/search.js +155 -0
  111. package/dist/search.js.map +1 -0
  112. package/dist/status.d.ts +9 -1
  113. package/dist/status.d.ts.map +1 -1
  114. package/dist/status.js +7 -4
  115. package/dist/status.js.map +1 -1
  116. package/dist/store.d.ts +87 -15
  117. package/dist/store.d.ts.map +1 -1
  118. package/dist/store.js +436 -54
  119. package/dist/store.js.map +1 -1
  120. package/dist/wire.d.ts +64 -0
  121. package/dist/wire.d.ts.map +1 -0
  122. package/dist/wire.js +142 -0
  123. package/dist/wire.js.map +1 -0
  124. package/package.json +14 -4
package/dist/search.js ADDED
@@ -0,0 +1,155 @@
1
+ import MiniSearch from 'minisearch';
2
+ import { invalid, known, limitOf, plain } from './query.js';
3
+ const FIELDS = [
4
+ 'fields',
5
+ 'sections',
6
+ 'preamble',
7
+ 'path',
8
+ 'text'
9
+ ];
10
+ function documentId(room, path) {
11
+ return JSON.stringify([
12
+ 'document',
13
+ room,
14
+ path
15
+ ]);
16
+ }
17
+ function messageId(conversation, identity) {
18
+ return JSON.stringify([
19
+ 'message',
20
+ conversation,
21
+ identity
22
+ ]);
23
+ }
24
+ function scalars(value) {
25
+ if (value === null || value === undefined) return [];
26
+ if (Array.isArray(value)) return value.flatMap(scalars);
27
+ if (typeof value === 'object') return Object.values(value).flatMap(scalars);
28
+ return [
29
+ String(value)
30
+ ];
31
+ }
32
+ export function searchPlanOf(input) {
33
+ if (!plain(input)) invalid('search', 'expects a search object');
34
+ known(input, [
35
+ 'text',
36
+ 'documents',
37
+ 'conversations',
38
+ 'limit'
39
+ ], '');
40
+ if (typeof input.text !== 'string') invalid('text', 'expects text');
41
+ const conversations = input.conversations;
42
+ if (conversations !== undefined && (!Array.isArray(conversations) || conversations.some((named)=>typeof named !== 'string'))) {
43
+ invalid('conversations', 'expects a list of conversations');
44
+ }
45
+ return {
46
+ text: input.text,
47
+ documents: input.documents,
48
+ conversations: conversations ?? null,
49
+ limit: limitOf(input.limit)
50
+ };
51
+ }
52
+ export function createSearchIndex(source) {
53
+ let index = null;
54
+ const documents = new Map();
55
+ const messages = new Map();
56
+ const changedDocuments = new Map();
57
+ const changedMessages = new Map();
58
+ function addDocument(built, document) {
59
+ const id = documentId(document.room, document.path);
60
+ documents.set(id, {
61
+ room: document.room,
62
+ path: document.path,
63
+ type: document.type
64
+ });
65
+ built.add({
66
+ id,
67
+ fields: scalars(document.fields).join('\n'),
68
+ sections: Object.entries(document.sections).map(([heading, text])=>`${heading}\n${text}`).join('\n'),
69
+ preamble: document.preamble,
70
+ path: document.path
71
+ });
72
+ }
73
+ function addMessage(built, message) {
74
+ const id = messageId(message.conversation, message.identity);
75
+ messages.set(id, {
76
+ conversation: message.conversation,
77
+ identity: message.identity
78
+ });
79
+ built.add({
80
+ id,
81
+ text: message.text
82
+ });
83
+ }
84
+ function current() {
85
+ if (index === null) {
86
+ const built = new MiniSearch({
87
+ fields: FIELDS
88
+ });
89
+ for (const document of source.documents())addDocument(built, document);
90
+ for (const message of source.messages())addMessage(built, message);
91
+ index = built;
92
+ return built;
93
+ }
94
+ const built = index;
95
+ for (const [id, { room, path }] of changedDocuments){
96
+ if (documents.delete(id)) built.discard(id);
97
+ const document = source.document(room, path);
98
+ if (document !== null) addDocument(built, document);
99
+ }
100
+ changedDocuments.clear();
101
+ for (const [id, { conversation, identity }] of changedMessages){
102
+ if (messages.delete(id)) built.discard(id);
103
+ const message = source.message(conversation, identity);
104
+ if (message !== null) addMessage(built, message);
105
+ }
106
+ changedMessages.clear();
107
+ return built;
108
+ }
109
+ function ranked(built, text, entries, keep, limit) {
110
+ const found = built.search(text, {
111
+ filter: ({ id })=>{
112
+ const entry = entries.get(id);
113
+ return entry !== undefined && keep(entry, id);
114
+ }
115
+ });
116
+ return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match })=>({
117
+ ...entries.get(id),
118
+ score,
119
+ match
120
+ }));
121
+ }
122
+ return {
123
+ changed (set) {
124
+ if (index === null) return;
125
+ for (const { locator, path } of set.documents){
126
+ changedDocuments.set(documentId(locator, path), {
127
+ room: locator,
128
+ path
129
+ });
130
+ }
131
+ for (const { conversation, identity } of set.messages){
132
+ changedMessages.set(messageId(conversation, identity), {
133
+ conversation,
134
+ identity
135
+ });
136
+ }
137
+ },
138
+ search ({ text, conversations, limit }, selected) {
139
+ const built = current();
140
+ const chosen = selected === null ? null : new Set(selected.map(({ room, path })=>documentId(room, path)));
141
+ return {
142
+ documents: ranked(built, text, documents, (_entry, id)=>chosen === null || chosen.has(id), limit).map(({ match, ...hit })=>({
143
+ ...hit,
144
+ matches: match
145
+ })),
146
+ messages: ranked(built, text, messages, ({ conversation })=>conversations === null || conversations.includes(conversation), limit).map(({ match, ...hit })=>({
147
+ ...hit,
148
+ matches: match
149
+ }))
150
+ };
151
+ }
152
+ };
153
+ }
154
+
155
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/search.ts"],"sourcesContent":["import MiniSearch from 'minisearch';\nimport type { ChangeSet } from './change-set.js';\nimport { invalid, known, limitOf, plain, type Filter } from './query.js';\n\nexport type DocumentPart = 'fields' | 'sections' | 'preamble' | 'path';\n\nexport type SearchRequest = {\n text: string;\n documents?: Filter;\n conversations?: readonly string[];\n limit?: number;\n};\n\nexport type DocumentHit = {\n room: string;\n path: string;\n type: string;\n score: number;\n matches: Readonly<Record<string, readonly DocumentPart[]>>;\n};\n\nexport type MessageHit = {\n conversation: string;\n identity: string;\n score: number;\n matches: Readonly<Record<string, readonly 'text'[]>>;\n};\n\nexport type SearchResult = {\n documents: readonly DocumentHit[];\n messages: readonly MessageHit[];\n};\n\nexport type SearchedDocument = {\n room: string;\n path: string;\n type: string;\n fields: Readonly<Record<string, unknown>>;\n preamble: string;\n sections: Readonly<Record<string, string>>;\n};\n\nexport type SearchedMessage = { conversation: string; identity: string; text: string };\n\nexport type SearchSource = {\n documents(): readonly SearchedDocument[];\n document(room: string, path: string): SearchedDocument | null;\n messages(): readonly SearchedMessage[];\n message(conversation: string, identity: string): SearchedMessage | null;\n};\n\nexport type SearchPlan = {\n text: string;\n documents: unknown;\n conversations: readonly string[] | null;\n limit: number | null;\n};\n\nexport type SearchIndex = {\n changed(set: ChangeSet): void;\n search(\n plan: SearchPlan,\n documents: readonly { room: string; path: string }[] | null,\n ): SearchResult;\n};\n\ntype Indexed = {\n id: string;\n fields?: string;\n sections?: string;\n preamble?: string;\n path?: string;\n text?: string;\n};\n\nconst FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];\n\nfunction documentId(room: string, path: string): string {\n return JSON.stringify(['document', room, path]);\n}\n\nfunction messageId(conversation: string, identity: string): string {\n return JSON.stringify(['message', conversation, identity]);\n}\n\nfunction scalars(value: unknown): readonly string[] {\n if (value === null || value === undefined) return [];\n if (Array.isArray(value)) return value.flatMap(scalars);\n if (typeof value === 'object') return Object.values(value).flatMap(scalars);\n return [String(value)];\n}\n\nexport function searchPlanOf(input: unknown): SearchPlan {\n if (!plain(input)) invalid('search', 'expects a search object');\n known(input, ['text', 'documents', 'conversations', 'limit'], '');\n if (typeof input.text !== 'string') invalid('text', 'expects text');\n const conversations = input.conversations;\n if (\n conversations !== undefined &&\n (!Array.isArray(conversations) || conversations.some((named) => typeof named !== 'string'))\n ) {\n invalid('conversations', 'expects a list of conversations');\n }\n return {\n text: input.text,\n documents: input.documents,\n conversations: (conversations as readonly string[] | undefined) ?? null,\n limit: limitOf(input.limit),\n };\n}\n\ntype DocumentEntry = { room: string; path: string; type: string };\n\ntype MessageEntry = { conversation: string; identity: string };\n\nexport function createSearchIndex(source: SearchSource): SearchIndex {\n let index: MiniSearch<Indexed> | null = null;\n const documents = new Map<string, DocumentEntry>();\n const messages = new Map<string, MessageEntry>();\n const changedDocuments = new Map<string, { room: string; path: string }>();\n const changedMessages = new Map<string, MessageEntry>();\n\n function addDocument(built: MiniSearch<Indexed>, document: SearchedDocument) {\n const id = documentId(document.room, document.path);\n documents.set(id, { room: document.room, path: document.path, type: document.type });\n built.add({\n id,\n fields: scalars(document.fields).join('\\n'),\n sections: Object.entries(document.sections)\n .map(([heading, text]) => `${heading}\\n${text}`)\n .join('\\n'),\n preamble: document.preamble,\n path: document.path,\n });\n }\n\n function addMessage(built: MiniSearch<Indexed>, message: SearchedMessage) {\n const id = messageId(message.conversation, message.identity);\n messages.set(id, { conversation: message.conversation, identity: message.identity });\n built.add({ id, text: message.text });\n }\n\n function current(): MiniSearch<Indexed> {\n if (index === null) {\n const built = new MiniSearch<Indexed>({ fields: FIELDS });\n for (const document of source.documents()) addDocument(built, document);\n for (const message of source.messages()) addMessage(built, message);\n index = built;\n return built;\n }\n const built = index;\n for (const [id, { room, path }] of changedDocuments) {\n if (documents.delete(id)) built.discard(id);\n const document = source.document(room, path);\n if (document !== null) addDocument(built, document);\n }\n changedDocuments.clear();\n for (const [id, { conversation, identity }] of changedMessages) {\n if (messages.delete(id)) built.discard(id);\n const message = source.message(conversation, identity);\n if (message !== null) addMessage(built, message);\n }\n changedMessages.clear();\n return built;\n }\n\n function ranked<Entry>(\n built: MiniSearch<Indexed>,\n text: string,\n entries: ReadonlyMap<string, Entry>,\n keep: (entry: Entry, id: string) => boolean,\n limit: number | null,\n ) {\n const found = built.search(text, {\n filter: ({ id }) => {\n const entry = entries.get(id);\n return entry !== undefined && keep(entry, id);\n },\n });\n return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match }) => ({\n ...(entries.get(id) as Entry),\n score,\n match,\n }));\n }\n\n return {\n changed(set) {\n if (index === null) return;\n for (const { locator, path } of set.documents) {\n changedDocuments.set(documentId(locator, path), { room: locator, path });\n }\n for (const { conversation, identity } of set.messages) {\n changedMessages.set(messageId(conversation, identity), { conversation, identity });\n }\n },\n search({ text, conversations, limit }, selected) {\n const built = current();\n const chosen =\n selected === null\n ? null\n : new Set(selected.map(({ room, path }) => documentId(room, path)));\n return {\n documents: ranked(\n built,\n text,\n documents,\n (_entry, id) => chosen === null || chosen.has(id),\n limit,\n ).map(({ match, ...hit }) => ({ ...hit, matches: match as DocumentHit['matches'] })),\n messages: ranked(\n built,\n text,\n messages,\n ({ conversation }) => conversations === null || conversations.includes(conversation),\n limit,\n ).map(({ match, ...hit }) => ({ ...hit, matches: match as MessageHit['matches'] })),\n };\n },\n };\n}\n"],"names":["MiniSearch","invalid","known","limitOf","plain","FIELDS","documentId","room","path","JSON","stringify","messageId","conversation","identity","scalars","value","undefined","Array","isArray","flatMap","Object","values","String","searchPlanOf","input","text","conversations","some","named","documents","limit","createSearchIndex","source","index","Map","messages","changedDocuments","changedMessages","addDocument","built","document","id","set","type","add","fields","join","sections","entries","map","heading","preamble","addMessage","message","current","delete","discard","clear","ranked","keep","found","search","filter","entry","get","slice","score","match","changed","locator","selected","chosen","Set","_entry","has","hit","matches","includes"],"mappings":"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"}
package/dist/status.d.ts CHANGED
@@ -1,7 +1,15 @@
1
+ import type { ReturnReason } from './room-draft.js';
2
+ export type AttentionEntry = {
3
+ room: string;
4
+ path: string;
5
+ returned: ReturnReason;
6
+ };
1
7
  export type SyncStatus = {
2
8
  state: 'pending' | 'syncing' | 'synced';
3
9
  lastCompleted: string | null;
4
10
  providerUnreachable: boolean;
11
+ attentionRequired: readonly AttentionEntry[];
12
+ reset: string | null;
5
13
  };
6
14
  export type CycleProgress = {
7
15
  complete: boolean;
@@ -9,7 +17,7 @@ export type CycleProgress = {
9
17
  };
10
18
  export declare const STARTING: SyncStatus;
11
19
  export declare function transferring(status: SyncStatus): SyncStatus;
12
- export declare function settled(status: SyncStatus, progress: CycleProgress, at: string, queued: boolean): SyncStatus;
20
+ export declare function settled(status: SyncStatus, progress: CycleProgress, at: string | null, queued: boolean, attention: Pick<SyncStatus, 'attentionRequired' | 'reset'>): SyncStatus;
13
21
  export declare function saving(status: SyncStatus): SyncStatus;
14
22
  export declare function same(one: SyncStatus, other: SyncStatus): boolean;
15
23
  //# sourceMappingURL=status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,UAItB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,aAAa,EACvB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,OAAO,GACd,UAAU,CAMZ;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAErD;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAMhE"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,SAAS,cAAc,EAAE,CAAC;IAC7C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,UAMtB,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE3D;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,aAAa,EACvB,EAAE,EAAE,MAAM,GAAG,IAAI,EACjB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,GACzD,UAAU,CAOZ;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAErD;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,OAAO,CAQhE"}
package/dist/status.js CHANGED
@@ -1,7 +1,9 @@
1
1
  export const STARTING = {
2
2
  state: 'syncing',
3
3
  lastCompleted: null,
4
- providerUnreachable: false
4
+ providerUnreachable: false,
5
+ attentionRequired: [],
6
+ reset: null
5
7
  };
6
8
  export function transferring(status) {
7
9
  return {
@@ -9,11 +11,12 @@ export function transferring(status) {
9
11
  state: 'syncing'
10
12
  };
11
13
  }
12
- export function settled(status, progress, at, queued) {
14
+ export function settled(status, progress, at, queued, attention) {
13
15
  return {
14
16
  state: queued ? 'pending' : progress.complete ? 'synced' : status.state,
15
17
  lastCompleted: progress.complete ? at : status.lastCompleted,
16
- providerUnreachable: !progress.reachable
18
+ providerUnreachable: !progress.reachable,
19
+ ...attention
17
20
  };
18
21
  }
19
22
  export function saving(status) {
@@ -23,7 +26,7 @@ export function saving(status) {
23
26
  };
24
27
  }
25
28
  export function same(one, other) {
26
- return one.state === other.state && one.lastCompleted === other.lastCompleted && one.providerUnreachable === other.providerUnreachable;
29
+ return one.state === other.state && one.lastCompleted === other.lastCompleted && one.providerUnreachable === other.providerUnreachable && one.reset === other.reset && JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired);
27
30
  }
28
31
 
29
32
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/workspace/packages/mdruntime/src/status.ts"],"sourcesContent":["export type SyncStatus = {\n state: 'pending' | 'syncing' | 'synced';\n lastCompleted: string | null;\n providerUnreachable: boolean;\n};\n\nexport type CycleProgress = {\n complete: boolean;\n reachable: boolean;\n};\n\nexport const STARTING: SyncStatus = {\n state: 'syncing',\n lastCompleted: null,\n providerUnreachable: false,\n};\n\nexport function transferring(status: SyncStatus): SyncStatus {\n return { ...status, state: 'syncing' };\n}\n\nexport function settled(\n status: SyncStatus,\n progress: CycleProgress,\n at: string,\n queued: boolean,\n): SyncStatus {\n return {\n state: queued ? 'pending' : progress.complete ? 'synced' : status.state,\n lastCompleted: progress.complete ? at : status.lastCompleted,\n providerUnreachable: !progress.reachable,\n };\n}\n\nexport function saving(status: SyncStatus): SyncStatus {\n return { ...status, state: 'pending' };\n}\n\nexport function same(one: SyncStatus, other: SyncStatus): boolean {\n return (\n one.state === other.state &&\n one.lastCompleted === other.lastCompleted &&\n one.providerUnreachable === other.providerUnreachable\n );\n}\n"],"names":["STARTING","state","lastCompleted","providerUnreachable","transferring","status","settled","progress","at","queued","complete","reachable","saving","same","one","other"],"mappings":"AAWA,OAAO,MAAMA,WAAuB;IAClCC,OAAO;IACPC,eAAe;IACfC,qBAAqB;AACvB,EAAE;AAEF,OAAO,SAASC,aAAaC,MAAkB;IAC7C,OAAO;QAAE,GAAGA,MAAM;QAAEJ,OAAO;IAAU;AACvC;AAEA,OAAO,SAASK,QACdD,MAAkB,EAClBE,QAAuB,EACvBC,EAAU,EACVC,MAAe;IAEf,OAAO;QACLR,OAAOQ,SAAS,YAAYF,SAASG,QAAQ,GAAG,WAAWL,OAAOJ,KAAK;QACvEC,eAAeK,SAASG,QAAQ,GAAGF,KAAKH,OAAOH,aAAa;QAC5DC,qBAAqB,CAACI,SAASI,SAAS;IAC1C;AACF;AAEA,OAAO,SAASC,OAAOP,MAAkB;IACvC,OAAO;QAAE,GAAGA,MAAM;QAAEJ,OAAO;IAAU;AACvC;AAEA,OAAO,SAASY,KAAKC,GAAe,EAAEC,KAAiB;IACrD,OACED,IAAIb,KAAK,KAAKc,MAAMd,KAAK,IACzBa,IAAIZ,aAAa,KAAKa,MAAMb,aAAa,IACzCY,IAAIX,mBAAmB,KAAKY,MAAMZ,mBAAmB;AAEzD"}
1
+ {"version":3,"sources":["/workspace/packages/mdruntime/src/status.ts"],"sourcesContent":["import type { ReturnReason } from './room-draft.js';\n\nexport type AttentionEntry = {\n room: string;\n path: string;\n returned: ReturnReason;\n};\n\nexport type SyncStatus = {\n state: 'pending' | 'syncing' | 'synced';\n lastCompleted: string | null;\n providerUnreachable: boolean;\n attentionRequired: readonly AttentionEntry[];\n reset: string | null;\n};\n\nexport type CycleProgress = {\n complete: boolean;\n reachable: boolean;\n};\n\nexport const STARTING: SyncStatus = {\n state: 'syncing',\n lastCompleted: null,\n providerUnreachable: false,\n attentionRequired: [],\n reset: null,\n};\n\nexport function transferring(status: SyncStatus): SyncStatus {\n return { ...status, state: 'syncing' };\n}\n\nexport function settled(\n status: SyncStatus,\n progress: CycleProgress,\n at: string | null,\n queued: boolean,\n attention: Pick<SyncStatus, 'attentionRequired' | 'reset'>,\n): SyncStatus {\n return {\n state: queued ? 'pending' : progress.complete ? 'synced' : status.state,\n lastCompleted: progress.complete ? at : status.lastCompleted,\n providerUnreachable: !progress.reachable,\n ...attention,\n };\n}\n\nexport function saving(status: SyncStatus): SyncStatus {\n return { ...status, state: 'pending' };\n}\n\nexport function same(one: SyncStatus, other: SyncStatus): boolean {\n return (\n one.state === other.state &&\n one.lastCompleted === other.lastCompleted &&\n one.providerUnreachable === other.providerUnreachable &&\n one.reset === other.reset &&\n JSON.stringify(one.attentionRequired) === JSON.stringify(other.attentionRequired)\n );\n}\n"],"names":["STARTING","state","lastCompleted","providerUnreachable","attentionRequired","reset","transferring","status","settled","progress","at","queued","attention","complete","reachable","saving","same","one","other","JSON","stringify"],"mappings":"AAqBA,OAAO,MAAMA,WAAuB;IAClCC,OAAO;IACPC,eAAe;IACfC,qBAAqB;IACrBC,mBAAmB,EAAE;IACrBC,OAAO;AACT,EAAE;AAEF,OAAO,SAASC,aAAaC,MAAkB;IAC7C,OAAO;QAAE,GAAGA,MAAM;QAAEN,OAAO;IAAU;AACvC;AAEA,OAAO,SAASO,QACdD,MAAkB,EAClBE,QAAuB,EACvBC,EAAiB,EACjBC,MAAe,EACfC,SAA0D;IAE1D,OAAO;QACLX,OAAOU,SAAS,YAAYF,SAASI,QAAQ,GAAG,WAAWN,OAAON,KAAK;QACvEC,eAAeO,SAASI,QAAQ,GAAGH,KAAKH,OAAOL,aAAa;QAC5DC,qBAAqB,CAACM,SAASK,SAAS;QACxC,GAAGF,SAAS;IACd;AACF;AAEA,OAAO,SAASG,OAAOR,MAAkB;IACvC,OAAO;QAAE,GAAGA,MAAM;QAAEN,OAAO;IAAU;AACvC;AAEA,OAAO,SAASe,KAAKC,GAAe,EAAEC,KAAiB;IACrD,OACED,IAAIhB,KAAK,KAAKiB,MAAMjB,KAAK,IACzBgB,IAAIf,aAAa,KAAKgB,MAAMhB,aAAa,IACzCe,IAAId,mBAAmB,KAAKe,MAAMf,mBAAmB,IACrDc,IAAIZ,KAAK,KAAKa,MAAMb,KAAK,IACzBc,KAAKC,SAAS,CAACH,IAAIb,iBAAiB,MAAMe,KAAKC,SAAS,CAACF,MAAMd,iBAAiB;AAEpF"}
package/dist/store.d.ts CHANGED
@@ -1,37 +1,109 @@
1
- import type { ProviderLimit } from './adapter.js';
1
+ import type { ModelState } from './model.js';
2
+ import type { Capability, Discovery, OperationScopes, ProviderLimit, ReplicaAdmission, TypedSelection } from './adapter.js';
3
+ import type { AcceptedMessage } from './adapter.js';
2
4
  import type { ChangeBatch } from './change.js';
5
+ import type { ChatDraftFile } from './file.js';
6
+ import type { Submission, SubmissionOutcome } from './outcome.js';
7
+ import type { RoomDraftRecord, SavedDraft } from './room-draft.js';
3
8
  export type ReplicaRecord = {
9
+ collectionRoot: string;
4
10
  locator: string;
5
11
  name: string;
6
- writeGrants: readonly string[];
12
+ operations: OperationScopes;
13
+ replica: ReplicaAdmission;
14
+ model: ModelState;
15
+ attachedModel: import('./model.js').ModelIdentity | null;
16
+ typedSelection: TypedSelection | null;
17
+ selectionModel: ModelState;
7
18
  providerOwnedPaths: readonly string[];
8
19
  roomVersion: string;
9
20
  documents: Readonly<Record<string, string>>;
10
21
  binaryTargets: readonly string[];
11
22
  revisions: Readonly<Record<string, string>>;
12
23
  };
13
- export type QueueRecord = {
24
+ export type PendingState = {
25
+ readonly drafts: readonly SavedDraft[];
26
+ readonly submission: Submission;
27
+ readonly lost: boolean;
28
+ };
29
+ export type OutcomeRecord = {
14
30
  locator: string;
15
- batches: readonly ChangeBatch[];
31
+ id: string;
32
+ outcome: SubmissionOutcome;
16
33
  };
17
- export type DraftRecord = {
34
+ export type QueueRecord = {
18
35
  locator: string;
19
- path: string;
20
- content: unknown;
36
+ pending: readonly {
37
+ batch: ChangeBatch;
38
+ state: PendingState;
39
+ }[];
40
+ };
41
+ export type PresentationRecord = {
42
+ app: string;
43
+ value: unknown;
44
+ };
45
+ export type HeldConversation = {
46
+ conversation: string;
47
+ read: string | null | undefined;
48
+ messages: readonly AcceptedMessage[];
49
+ };
50
+ export type ConversationWrite = {
51
+ conversation: string;
52
+ messages: readonly AcceptedMessage[];
53
+ read?: string | null;
54
+ sealed?: boolean;
55
+ };
56
+ export type ChatDraftRecord = {
57
+ conversation: string;
58
+ text: string;
59
+ files: readonly ChatDraftFile[];
60
+ turn: string | null;
61
+ };
62
+ export type RecordWrite = {
63
+ next: ReplicaRecord;
64
+ previous: ReplicaRecord | null;
65
+ queue: readonly ChangeBatch[];
66
+ previousQueue?: readonly ChangeBatch[];
67
+ saved?: readonly SavedDraft[];
68
+ outcomes?: readonly {
69
+ id: string;
70
+ outcome: SubmissionOutcome | null;
71
+ }[];
72
+ roomDrafts?: readonly RoomDraftRecord[];
73
+ consumedRoomDrafts?: readonly string[];
21
74
  };
22
- export type ReplicaStore = {
75
+ export type RuntimeStore = {
23
76
  all(): Promise<readonly ReplicaRecord[]>;
24
- publish(record: ReplicaRecord): Promise<void>;
77
+ write(input: RecordWrite): Promise<void>;
78
+ revokeModels(records: readonly {
79
+ record: ReplicaRecord;
80
+ queue: readonly ChangeBatch[];
81
+ }[]): Promise<void>;
25
82
  lastCompleted(): Promise<string | null>;
26
83
  complete(at: string): Promise<void>;
27
84
  providerLimits(): Promise<readonly ProviderLimit[]>;
28
- declare(limits: readonly ProviderLimit[]): Promise<void>;
85
+ capabilities(): Promise<readonly Capability[]>;
86
+ slots(): Promise<NonNullable<Discovery['slots']>>;
87
+ declare(limits: readonly ProviderLimit[], capabilities: readonly Capability[], slots: NonNullable<Discovery['slots']>): Promise<void>;
29
88
  queues(): Promise<readonly QueueRecord[]>;
30
- drafts(): Promise<readonly DraftRecord[]>;
31
- keep(draft: DraftRecord): Promise<void>;
32
- discard(locator: string, path: string): Promise<void>;
33
- append(queue: QueueRecord, consumed: readonly string[]): Promise<void>;
89
+ outcomes(): Promise<readonly OutcomeRecord[]>;
90
+ submit(locator: string, id: string, submission: Submission, lost: boolean): Promise<void>;
91
+ roomDrafts(): Promise<readonly RoomDraftRecord[]>;
92
+ presentation(): Promise<readonly PresentationRecord[]>;
93
+ present(record: PresentationRecord): Promise<void>;
94
+ conversations(): Promise<readonly HeldConversation[]>;
95
+ keepMessages(write: ConversationWrite): Promise<void>;
96
+ dropConversations(conversations: readonly string[]): Promise<void>;
97
+ chatDrafts(): Promise<readonly ChatDraftRecord[]>;
98
+ keepChatDraft(record: ChatDraftRecord): Promise<void>;
99
+ dropChatDraft(conversation: string): Promise<void>;
100
+ keepRoomDraft(record: RoomDraftRecord): Promise<void>;
101
+ discardRoomDraft(locator: string, path: string): Promise<void>;
102
+ dropRooms(locators: readonly string[]): Promise<void>;
103
+ generation(): Promise<string | null>;
104
+ rememberGeneration(value: string): Promise<void>;
34
105
  close(): void;
35
106
  };
36
- export declare function openReplicaStore(): Promise<ReplicaStore>;
107
+ export declare function removeRuntimeStore(): Promise<void>;
108
+ export declare function openRuntimeStore(): Promise<RuntimeStore>;
37
109
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY/C,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,cAAc,IAAI,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CAAC;IACpD,OAAO,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,IAAI,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,OAAO,CAAC,SAAS,WAAW,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,KAAK,IAAI,IAAI,CAAC;CACf,CAAC;AAiBF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CA2E9D"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}