@agentshouse/mdruntime 0.1.0-ca4dc698bd0c4 → 0.1.0-ca6edc1abd618

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 (224) hide show
  1. package/README.md +18 -15
  2. package/dist/adapter.d.ts +77 -41
  3. package/dist/adapter.d.ts.map +1 -1
  4. package/dist/attached-model.d.ts +5 -1
  5. package/dist/attached-model.d.ts.map +1 -1
  6. package/dist/attached-model.js +21 -4
  7. package/dist/binary.d.ts +0 -5
  8. package/dist/binary.d.ts.map +1 -1
  9. package/dist/binary.js +1 -1
  10. package/dist/bootstrap.d.ts +26 -8
  11. package/dist/bootstrap.d.ts.map +1 -1
  12. package/dist/bootstrap.js +150 -81
  13. package/dist/chain.d.ts +11 -0
  14. package/dist/chain.d.ts.map +1 -0
  15. package/dist/chain.js +64 -0
  16. package/dist/change-set.d.ts +9 -16
  17. package/dist/change-set.d.ts.map +1 -1
  18. package/dist/change-set.js +11 -88
  19. package/dist/change.d.ts +31 -1
  20. package/dist/change.d.ts.map +1 -1
  21. package/dist/change.js +10 -1
  22. package/dist/client.d.ts +15 -6
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +47 -8
  25. package/dist/collection.d.ts +6 -19
  26. package/dist/collection.d.ts.map +1 -1
  27. package/dist/collection.js +31 -289
  28. package/dist/compile.d.ts +16 -0
  29. package/dist/compile.d.ts.map +1 -0
  30. package/dist/compile.js +721 -0
  31. package/dist/connection.d.ts +25 -12
  32. package/dist/connection.d.ts.map +1 -1
  33. package/dist/connection.js +2664 -1031
  34. package/dist/conversation.d.ts +18 -3
  35. package/dist/conversation.d.ts.map +1 -1
  36. package/dist/conversation.js +346 -109
  37. package/dist/digest.d.ts +7 -0
  38. package/dist/digest.d.ts.map +1 -0
  39. package/dist/digest.js +113 -0
  40. package/dist/durability.d.ts +3 -5
  41. package/dist/durability.d.ts.map +1 -1
  42. package/dist/durability.js +5 -0
  43. package/dist/entry.d.ts +3 -1
  44. package/dist/entry.d.ts.map +1 -1
  45. package/dist/entry.js +18 -23
  46. package/dist/file.d.ts +2 -10
  47. package/dist/file.d.ts.map +1 -1
  48. package/dist/file.js +3 -120
  49. package/dist/fulltext.d.ts +27 -0
  50. package/dist/fulltext.d.ts.map +1 -0
  51. package/dist/fulltext.js +368 -0
  52. package/dist/host.d.ts +10 -8
  53. package/dist/host.d.ts.map +1 -1
  54. package/dist/host.js +95 -18
  55. package/dist/identity.d.ts +0 -1
  56. package/dist/identity.d.ts.map +1 -1
  57. package/dist/identity.js +0 -3
  58. package/dist/index.d.ts +15 -11
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +5 -1
  61. package/dist/live.d.ts +22 -0
  62. package/dist/live.d.ts.map +1 -0
  63. package/dist/live.js +123 -0
  64. package/dist/memory.d.ts +9 -4
  65. package/dist/memory.d.ts.map +1 -1
  66. package/dist/memory.js +45 -31
  67. package/dist/messages.d.ts +28 -0
  68. package/dist/messages.d.ts.map +1 -0
  69. package/dist/messages.js +90 -0
  70. package/dist/model.d.ts +3 -2
  71. package/dist/model.d.ts.map +1 -1
  72. package/dist/model.js +2 -2
  73. package/dist/name.d.ts +4 -0
  74. package/dist/name.d.ts.map +1 -0
  75. package/dist/name.js +122 -0
  76. package/dist/observation.d.ts +14 -0
  77. package/dist/observation.d.ts.map +1 -1
  78. package/dist/observation.js +93 -3
  79. package/dist/opened.d.ts +22 -0
  80. package/dist/opened.d.ts.map +1 -0
  81. package/dist/opened.js +107 -0
  82. package/dist/outcome.d.ts +34 -4
  83. package/dist/outcome.d.ts.map +1 -1
  84. package/dist/outcome.js +25 -0
  85. package/dist/overlay.d.ts +3 -5
  86. package/dist/overlay.d.ts.map +1 -1
  87. package/dist/overlay.js +95 -156
  88. package/dist/query.d.ts +33 -2
  89. package/dist/query.d.ts.map +1 -1
  90. package/dist/query.js +48 -7
  91. package/dist/reach.d.ts +6 -5
  92. package/dist/reach.d.ts.map +1 -1
  93. package/dist/reach.js +170 -62
  94. package/dist/react.d.ts +3 -3
  95. package/dist/react.d.ts.map +1 -1
  96. package/dist/react.js +7 -17
  97. package/dist/readiness.d.ts +20 -9
  98. package/dist/readiness.d.ts.map +1 -1
  99. package/dist/readiness.js +6 -6
  100. package/dist/reads.d.ts +11 -0
  101. package/dist/reads.d.ts.map +1 -0
  102. package/dist/reads.js +100 -0
  103. package/dist/recovery.d.ts +2 -2
  104. package/dist/recovery.d.ts.map +1 -1
  105. package/dist/recovery.js +8 -7
  106. package/dist/refresh.d.ts +16 -15
  107. package/dist/refresh.d.ts.map +1 -1
  108. package/dist/refresh.js +113 -50
  109. package/dist/replica.d.ts +56 -33
  110. package/dist/replica.d.ts.map +1 -1
  111. package/dist/replica.js +297 -179
  112. package/dist/room-draft.d.ts +17 -2
  113. package/dist/room-draft.d.ts.map +1 -1
  114. package/dist/room-draft.js +65 -25
  115. package/dist/rows.d.ts +29 -29
  116. package/dist/rows.d.ts.map +1 -1
  117. package/dist/rows.js +113 -62
  118. package/dist/save.d.ts +51 -14
  119. package/dist/save.d.ts.map +1 -1
  120. package/dist/save.js +518 -180
  121. package/dist/search.d.ts +32 -43
  122. package/dist/search.d.ts.map +1 -1
  123. package/dist/search.js +37 -168
  124. package/dist/seed.d.ts +16 -0
  125. package/dist/seed.d.ts.map +1 -0
  126. package/dist/seed.js +75 -0
  127. package/dist/shared.d.ts +8 -3
  128. package/dist/shared.d.ts.map +1 -1
  129. package/dist/shared.js +129 -66
  130. package/dist/store.d.ts +98 -89
  131. package/dist/store.d.ts.map +1 -1
  132. package/dist/store.js +337 -655
  133. package/dist/stored.d.ts +145 -0
  134. package/dist/stored.d.ts.map +1 -0
  135. package/dist/stored.js +567 -0
  136. package/dist/tables.d.ts +354 -0
  137. package/dist/tables.d.ts.map +1 -0
  138. package/dist/tables.js +624 -0
  139. package/dist/turn.d.ts +5 -3
  140. package/dist/turn.d.ts.map +1 -1
  141. package/dist/turn.js +51 -21
  142. package/dist/validation.d.ts +30 -0
  143. package/dist/validation.d.ts.map +1 -0
  144. package/dist/validation.js +162 -0
  145. package/dist/windows.d.ts +22 -0
  146. package/dist/windows.d.ts.map +1 -0
  147. package/dist/windows.js +89 -0
  148. package/dist/wire.d.ts +163 -33
  149. package/dist/wire.d.ts.map +1 -1
  150. package/dist/wire.js +54 -32
  151. package/dist/words.d.ts +19 -0
  152. package/dist/words.d.ts.map +1 -0
  153. package/dist/words.js +150 -0
  154. package/package.json +18 -19
  155. package/AGENTS.md +0 -300
  156. package/dist/acquisition.d.ts +0 -14
  157. package/dist/acquisition.d.ts.map +0 -1
  158. package/dist/acquisition.js +0 -24
  159. package/dist/chat/acts.d.ts +0 -33
  160. package/dist/chat/acts.d.ts.map +0 -1
  161. package/dist/chat/acts.js +0 -36
  162. package/dist/chat/context.d.ts +0 -3
  163. package/dist/chat/context.d.ts.map +0 -1
  164. package/dist/chat/context.js +0 -10
  165. package/dist/chat/input.d.ts +0 -9
  166. package/dist/chat/input.d.ts.map +0 -1
  167. package/dist/chat/input.js +0 -99
  168. package/dist/chat/kit.d.ts +0 -60
  169. package/dist/chat/kit.d.ts.map +0 -1
  170. package/dist/chat/kit.js +0 -123
  171. package/dist/chat/lasting.d.ts +0 -6
  172. package/dist/chat/lasting.d.ts.map +0 -1
  173. package/dist/chat/lasting.js +0 -19
  174. package/dist/chat/list.d.ts +0 -26
  175. package/dist/chat/list.d.ts.map +0 -1
  176. package/dist/chat/list.js +0 -62
  177. package/dist/chat/markdown.d.ts +0 -20
  178. package/dist/chat/markdown.d.ts.map +0 -1
  179. package/dist/chat/markdown.js +0 -188
  180. package/dist/chat/message.d.ts +0 -6
  181. package/dist/chat/message.d.ts.map +0 -1
  182. package/dist/chat/message.js +0 -192
  183. package/dist/chat/messages.d.ts +0 -21
  184. package/dist/chat/messages.d.ts.map +0 -1
  185. package/dist/chat/messages.js +0 -151
  186. package/dist/chat/name.d.ts +0 -6
  187. package/dist/chat/name.d.ts.map +0 -1
  188. package/dist/chat/name.js +0 -37
  189. package/dist/chat/opened.d.ts +0 -11
  190. package/dist/chat/opened.d.ts.map +0 -1
  191. package/dist/chat/opened.js +0 -17
  192. package/dist/chat/overlay.d.ts +0 -31
  193. package/dist/chat/overlay.d.ts.map +0 -1
  194. package/dist/chat/overlay.js +0 -97
  195. package/dist/chat/parts.d.ts +0 -57
  196. package/dist/chat/parts.d.ts.map +0 -1
  197. package/dist/chat/parts.js +0 -119
  198. package/dist/chat/process.d.ts +0 -20
  199. package/dist/chat/process.d.ts.map +0 -1
  200. package/dist/chat/process.js +0 -32
  201. package/dist/chat/provider.d.ts +0 -63
  202. package/dist/chat/provider.d.ts.map +0 -1
  203. package/dist/chat/provider.js +0 -620
  204. package/dist/chat/question.d.ts +0 -9
  205. package/dist/chat/question.d.ts.map +0 -1
  206. package/dist/chat/question.js +0 -80
  207. package/dist/chat/questions.d.ts +0 -31
  208. package/dist/chat/questions.d.ts.map +0 -1
  209. package/dist/chat/questions.js +0 -111
  210. package/dist/chat/read.d.ts +0 -5
  211. package/dist/chat/read.d.ts.map +0 -1
  212. package/dist/chat/read.js +0 -13
  213. package/dist/chat/ready.d.ts +0 -33
  214. package/dist/chat/ready.d.ts.map +0 -1
  215. package/dist/chat/ready.js +0 -91
  216. package/dist/chat/style.d.ts +0 -4
  217. package/dist/chat/style.d.ts.map +0 -1
  218. package/dist/chat/style.js +0 -302
  219. package/dist/chat.d.ts +0 -14
  220. package/dist/chat.d.ts.map +0 -1
  221. package/dist/chat.js +0 -8
  222. package/dist/read-side.d.ts +0 -25
  223. package/dist/read-side.d.ts.map +0 -1
  224. package/dist/read-side.js +0 -639
package/dist/search.d.ts CHANGED
@@ -1,12 +1,21 @@
1
- import type { ChangeSet } from './change-set.js';
1
+ import type { ProviderRefusal } from './adapter.js';
2
2
  import { type CoveredRoom, type Filter, type PendingRoom } from './query.js';
3
3
  import type { Open } from './open.js';
4
4
  export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
5
5
  export type SearchRequest = {
6
6
  text: string;
7
7
  documents?: Filter;
8
+ collection?: true;
8
9
  conversations?: readonly string[];
9
10
  limit?: number;
11
+ after?: string;
12
+ total?: true;
13
+ };
14
+ export type MessagePart = Open<'text'>;
15
+ export type Snippet<Part extends string> = {
16
+ part: Part;
17
+ text: string;
18
+ at: readonly [number, number];
10
19
  };
11
20
  export type DocumentHit = {
12
21
  room: string;
@@ -14,71 +23,51 @@ export type DocumentHit = {
14
23
  type: string;
15
24
  score: number;
16
25
  matches: Readonly<Record<string, readonly DocumentPart[]>>;
26
+ snippet?: Snippet<DocumentPart>;
17
27
  };
18
28
  export type MessageHit = {
19
29
  conversation: string;
20
30
  identity: string;
21
31
  score: number;
22
- matches: Readonly<Record<string, readonly Open<'text'>[]>>;
32
+ matches: Readonly<Record<string, readonly MessagePart[]>>;
33
+ snippet?: Snippet<MessagePart>;
23
34
  };
24
35
  export type SearchCoverage = {
25
36
  rooms: readonly CoveredRoom[];
26
37
  conversations: readonly string[];
27
- index: string;
28
38
  overlay: readonly string[];
29
39
  };
30
- export type PendingConversation = {
31
- conversation: string;
32
- awaits: 'index';
33
- };
34
- export type SearchPending = {
35
- pending: readonly (PendingRoom | PendingConversation)[];
36
- };
37
40
  export type SearchHits = {
38
41
  documents: readonly DocumentHit[];
39
42
  messages: readonly MessageHit[];
40
43
  };
41
- export type SearchResult = (SearchHits & {
42
- coverage: SearchCoverage;
43
- }) | SearchPending;
44
- export type SearchedDocument = {
45
- room: string;
46
- path: string;
47
- type: string;
48
- fields: Readonly<Record<string, unknown>>;
49
- preamble: string;
50
- sections: Readonly<Record<string, string>>;
44
+ export type SearchWindow = SearchHits & {
45
+ next?: string;
46
+ total?: {
47
+ documents: number;
48
+ messages: number;
49
+ };
51
50
  };
52
- export type SearchedMessage = {
53
- conversation: string;
54
- identity: string;
55
- text: string;
51
+ export type SearchPending = SearchHits & {
52
+ pending: readonly PendingRoom[];
53
+ coverage: SearchCoverage;
56
54
  };
57
- export type SearchSource = {
58
- room(room: string): readonly string[];
59
- document(room: string, path: string): SearchedDocument | null;
55
+ export type SearchUndeclared = ProviderRefusal & {
56
+ kind: 'undeclared';
60
57
  };
58
+ export type SearchResult = (SearchWindow & {
59
+ coverage: SearchCoverage;
60
+ }) | SearchPending | SearchUndeclared;
61
+ export declare function undeclaredSearch(): SearchUndeclared;
62
+ export type HitCursor = readonly [number, string, string] | readonly [] | null;
61
63
  export type SearchPlan = {
62
64
  text: string;
63
65
  documents: unknown;
66
+ collection: boolean;
64
67
  conversations: readonly string[] | null;
65
68
  limit: number | null;
66
- };
67
- export type SearchIndex = {
68
- generation(): string;
69
- rooms(): ReadonlySet<string>;
70
- conversations(): ReadonlySet<string>;
71
- indexRoom(room: string): Promise<void>;
72
- indexMessages(conversation: string, messages: readonly SearchedMessage[], whole: boolean): void;
73
- forget(rooms: readonly string[]): void;
74
- changed(set: ChangeSet): void;
75
- changes(): number;
76
- caughtUp(): Promise<void>;
77
- search(plan: SearchPlan, documents: readonly {
78
- room: string;
79
- path: string;
80
- }[] | null, conversations: readonly string[]): SearchHits;
69
+ after: readonly [HitCursor, HitCursor] | null;
70
+ total: boolean;
81
71
  };
82
72
  export declare function searchPlanOf(input: unknown): SearchPlan;
83
- export declare function createSearchIndex(source: SearchSource): SearchIndex;
84
73
  //# sourceMappingURL=search.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAML,KAAK,WAAW,EAChB,KAAK,MAAM,EACX,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGtC,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC;AAE7E,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,IAAI,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAEvC,MAAM,MAAM,OAAO,CAAC,IAAI,SAAS,MAAM,IAAI;IACzC,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,SAAS,EAAE,SAAS,WAAW,EAAE,CAAC;IAClC,QAAQ,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CACjD,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG;IACvC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAC;IAChC,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,YAAY,GACpB,CAAC,YAAY,GAAG;IAAE,QAAQ,EAAE,cAAc,CAAA;CAAE,CAAC,GAC7C,aAAa,GACb,gBAAgB,CAAC;AAErB,wBAAgB,gBAAgB,IAAI,gBAAgB,CAOnD;AAED,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAAE,GAAG,IAAI,CAAC;AAE/E,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AA0BF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAoBvD"}
package/dist/search.js CHANGED
@@ -1,27 +1,43 @@
1
- import MiniSearch from 'minisearch';
2
- import { indexGeneration } from './identity.js';
3
- import { invalid, known, limitOf, plain, } from './query.js';
4
- import { inUnits, ROW_WEIGHT } from './turn.js';
5
- const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
6
- function documentId(room, path) {
7
- return JSON.stringify(['document', room, path]);
8
- }
9
- function messageId(conversation, identity) {
10
- return JSON.stringify(['message', conversation, identity]);
1
+ import { flag, invalid, known, limitOf, plain, } from './query.js';
2
+ import { decodedCursor } from './windows.js';
3
+ export function undeclaredSearch() {
4
+ return {
5
+ kind: 'undeclared',
6
+ code: 'search-undeclared',
7
+ fields: { name: 'local_search' },
8
+ retryable: false,
9
+ };
11
10
  }
12
- function scalars(value) {
13
- if (value === null || value === undefined)
11
+ function hitCursor(input) {
12
+ if (input === null)
13
+ return null;
14
+ if (!Array.isArray(input))
15
+ return undefined;
16
+ if (input.length === 0)
14
17
  return [];
15
- if (Array.isArray(value))
16
- return value.flatMap(scalars);
17
- if (typeof value === 'object')
18
- return Object.values(value).flatMap(scalars);
19
- return [String(value)];
18
+ const [score, first, second] = input;
19
+ return input.length === 3 &&
20
+ typeof score === 'number' &&
21
+ typeof first === 'string' &&
22
+ typeof second === 'string'
23
+ ? [score, first, second]
24
+ : undefined;
25
+ }
26
+ function searchAfter(input) {
27
+ if (input === undefined)
28
+ return null;
29
+ const decoded = typeof input === 'string' ? decodedCursor(input) : null;
30
+ const documents = decoded?.length === 2 ? hitCursor(decoded[0]) : undefined;
31
+ const messages = decoded?.length === 2 ? hitCursor(decoded[1]) : undefined;
32
+ if (documents === undefined || messages === undefined) {
33
+ invalid('after', 'expects the next an earlier search returned');
34
+ }
35
+ return [documents, messages];
20
36
  }
21
37
  export function searchPlanOf(input) {
22
38
  if (!plain(input))
23
39
  invalid('search', 'expects a search object');
24
- known(input, ['text', 'documents', 'conversations', 'limit'], '');
40
+ known(input, ['text', 'documents', 'collection', 'conversations', 'limit', 'after', 'total'], '');
25
41
  if (typeof input.text !== 'string')
26
42
  invalid('text', 'expects text');
27
43
  const conversations = input.conversations;
@@ -32,157 +48,10 @@ export function searchPlanOf(input) {
32
48
  return {
33
49
  text: input.text,
34
50
  documents: input.documents,
51
+ collection: flag(input.collection, 'collection'),
35
52
  conversations: conversations ?? null,
36
53
  limit: limitOf(input.limit),
37
- };
38
- }
39
- export function createSearchIndex(source) {
40
- const generation = indexGeneration();
41
- const index = new MiniSearch({ fields: FIELDS });
42
- const documents = new Map();
43
- const messages = new Map();
44
- const rooms = new Set();
45
- const filling = new Set();
46
- const conversations = new Set();
47
- const acquiring = new Set();
48
- const changedDocuments = new Map();
49
- let changes = 0;
50
- function addDocument(document) {
51
- const id = documentId(document.room, document.path);
52
- discard(id, documents);
53
- index.add({
54
- id,
55
- fields: scalars(document.fields).join('\n'),
56
- sections: Object.entries(document.sections)
57
- .map(([heading, text]) => `${heading}\n${text}`)
58
- .join('\n'),
59
- preamble: document.preamble,
60
- path: document.path,
61
- });
62
- documents.set(id, { room: document.room, path: document.path, type: document.type });
63
- }
64
- function addMessage(message) {
65
- const id = messageId(message.conversation, message.identity);
66
- discard(id, messages);
67
- index.add({ id, text: message.text });
68
- messages.set(id, { conversation: message.conversation, identity: message.identity });
69
- }
70
- function discard(id, entries) {
71
- if (entries.delete(id))
72
- index.discard(id);
73
- }
74
- function* pending() {
75
- for (;;) {
76
- const next = changedDocuments.entries().next();
77
- if (next.done === true)
78
- return;
79
- changedDocuments.delete(next.value[0]);
80
- yield next.value;
81
- }
82
- }
83
- let catching = null;
84
- function caughtUp() {
85
- if (catching !== null)
86
- return catching;
87
- const running = inUnits(pending(), ([id, { room, path }]) => {
88
- discard(id, documents);
89
- const document = source.document(room, path);
90
- if (document === null)
91
- return ROW_WEIGHT;
92
- addDocument(document);
93
- return Object.values(document.sections).reduce((total, text) => total + text.length, ROW_WEIGHT + document.preamble.length);
94
- });
95
- if (!(running instanceof Promise))
96
- return Promise.resolve();
97
- catching = running.finally(() => {
98
- catching = null;
99
- });
100
- return catching;
101
- }
102
- function ranked(text, entries, keep, limit) {
103
- const found = index.search(text, {
104
- filter: ({ id }) => {
105
- const entry = entries.get(id);
106
- return entry !== undefined && keep(entry, id);
107
- },
108
- });
109
- return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match }) => ({
110
- ...entries.get(id),
111
- score,
112
- match,
113
- }));
114
- }
115
- return {
116
- generation: () => generation,
117
- rooms: () => rooms,
118
- conversations: () => conversations,
119
- async indexRoom(room) {
120
- if (rooms.has(room) || filling.has(room))
121
- return;
122
- filling.add(room);
123
- try {
124
- await inUnits(source.room(room), (path) => {
125
- const document = filling.has(room) ? source.document(room, path) : null;
126
- if (document === null)
127
- return ROW_WEIGHT;
128
- addDocument(document);
129
- return Object.values(document.sections).reduce((total, text) => total + text.length, ROW_WEIGHT + document.preamble.length);
130
- });
131
- if (filling.has(room))
132
- rooms.add(room);
133
- }
134
- finally {
135
- filling.delete(room);
136
- }
137
- },
138
- indexMessages(conversation, arriving, whole) {
139
- for (const message of arriving)
140
- addMessage(message);
141
- if (!whole) {
142
- acquiring.add(conversation);
143
- return;
144
- }
145
- acquiring.delete(conversation);
146
- conversations.add(conversation);
147
- },
148
- forget(leaving) {
149
- const gone = new Set(leaving);
150
- for (const [id, entry] of documents)
151
- if (gone.has(entry.room))
152
- discard(id, documents);
153
- for (const room of leaving) {
154
- rooms.delete(room);
155
- filling.delete(room);
156
- }
157
- },
158
- changed(set) {
159
- changes += 1;
160
- for (const { locator, path } of set.documents) {
161
- if (rooms.has(locator) || filling.has(locator)) {
162
- changedDocuments.set(documentId(locator, path), { room: locator, path });
163
- }
164
- }
165
- for (const { conversation, identity, text } of set.messages) {
166
- if (!conversations.has(conversation) && !acquiring.has(conversation))
167
- continue;
168
- const id = messageId(conversation, identity);
169
- if (text === null)
170
- discard(id, messages);
171
- else
172
- addMessage({ conversation, identity, text });
173
- }
174
- },
175
- changes: () => changes,
176
- caughtUp,
177
- search({ text, limit }, selected, named) {
178
- const chosen = selected === null
179
- ? null
180
- : new Set(selected.map(({ room, path }) => documentId(room, path)));
181
- const asked = new Set(named);
182
- return {
183
- documents: ranked(text, documents, (_entry, id) => chosen === null || chosen.has(id), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
184
- messages: ranked(text, messages, ({ conversation }) => asked.has(conversation), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
185
- };
186
- },
54
+ after: searchAfter(input.after),
55
+ total: flag(input.total, 'total'),
187
56
  };
188
57
  }
package/dist/seed.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { KeyedResult } from './observation.js';
2
+ import type { QueryRows } from './query.js';
3
+ export type EntrySeed = {
4
+ readonly at: Readonly<Record<string, string>>;
5
+ readonly queries: readonly {
6
+ readonly query: unknown;
7
+ readonly rows: QueryRows;
8
+ }[];
9
+ };
10
+ export type Seeded = {
11
+ readonly rows: QueryRows;
12
+ readonly at: Readonly<Record<string, string>>;
13
+ };
14
+ export declare function entrySeedOf(value: unknown): EntrySeed | null;
15
+ export declare function seededResult(seed: Seeded): KeyedResult;
16
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAA4C,SAAS,EAAE,MAAM,YAAY,CAAC;AAGtF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;KAAE,EAAE,CAAC;CACpF,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC;AAwCjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAe5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAoBtD"}
package/dist/seed.js ADDED
@@ -0,0 +1,75 @@
1
+ import { documentKey } from './rows.js';
2
+ function plain(value) {
3
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
4
+ }
5
+ function windowOf(value) {
6
+ const { next, total } = value;
7
+ if (next !== undefined && typeof next !== 'string')
8
+ return null;
9
+ if (total !== undefined && !Number.isSafeInteger(total))
10
+ return null;
11
+ return {
12
+ ...(next === undefined ? {} : { next }),
13
+ ...(total === undefined ? {} : { total: total }),
14
+ };
15
+ }
16
+ function rowsOf(value) {
17
+ if (!plain(value))
18
+ return null;
19
+ const window = windowOf(value);
20
+ if (window === null)
21
+ return null;
22
+ if (Array.isArray(value.groups)) {
23
+ const groups = value.groups;
24
+ return groups.every((group) => plain(group) && Array.isArray(group.key) && typeof group.count === 'number')
25
+ ? { groups: groups, ...window }
26
+ : null;
27
+ }
28
+ if (!Array.isArray(value.documents))
29
+ return null;
30
+ const documents = value.documents;
31
+ return documents.every((document) => plain(document) && typeof document.room === 'string' && typeof document.path === 'string')
32
+ ? { documents: documents, ...window }
33
+ : null;
34
+ }
35
+ export function entrySeedOf(value) {
36
+ if (!plain(value) || !plain(value.at) || !Array.isArray(value.queries))
37
+ return null;
38
+ const at = {};
39
+ for (const [room, version] of Object.entries(value.at)) {
40
+ if (typeof version !== 'string')
41
+ return null;
42
+ at[room] = version;
43
+ }
44
+ const queries = [];
45
+ for (const entry of value.queries) {
46
+ if (!plain(entry) || !plain(entry.query))
47
+ return null;
48
+ const rows = rowsOf(entry.rows);
49
+ if (rows === null)
50
+ return null;
51
+ queries.push({ query: entry.query, rows });
52
+ }
53
+ return { at, queries };
54
+ }
55
+ export function seededResult(seed) {
56
+ const coverage = {
57
+ rooms: Object.entries(seed.at).map(([room, generation]) => ({
58
+ room,
59
+ generation,
60
+ current: false,
61
+ })),
62
+ indexes: [],
63
+ overlay: [],
64
+ };
65
+ if ('groups' in seed.rows) {
66
+ return {
67
+ result: { ...seed.rows, coverage },
68
+ keys: seed.rows.groups.map((_group, index) => index),
69
+ };
70
+ }
71
+ return {
72
+ result: { ...seed.rows, coverage },
73
+ keys: seed.rows.documents.map((document) => documentKey(document.room, document.path)),
74
+ };
75
+ }
package/dist/shared.d.ts CHANGED
@@ -1,11 +1,16 @@
1
1
  export type Paths<V> = Readonly<Record<string, V>>;
2
- type Weigh<V> = (key: string, value: V) => number;
2
+ export declare function entriesIn<V>(map: Paths<V>): Generator<readonly [string, V]>;
3
+ export declare function keysIn(...maps: readonly Paths<unknown>[]): Generator<number, Set<string>, void>;
4
+ export declare function sortedKeys(map: Paths<unknown>): Generator<number, readonly string[], void>;
5
+ export declare function sorting(keys: Iterable<string>): Generator<number, readonly string[], void>;
6
+ export declare function sharing<V>(map: Paths<V>): Generator<number, Paths<V>, void>;
3
7
  export declare function shared<V>(map: Paths<V>): Paths<V>;
4
8
  export declare function patched<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Paths<V>;
5
- export declare function tally<V>(map: Paths<V>, weigh: Weigh<V>): number;
9
+ export declare function patching<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Generator<number, Paths<V>, void>;
6
10
  export declare function sizeOf<V>(map: Paths<V>): number;
11
+ export declare function differences<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): Generator<number, ReadonlySet<string>, void>;
7
12
  export declare function differing<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): ReadonlySet<string>;
8
13
  export declare function drafted<V>(base: Paths<V>): Record<string, V>;
9
14
  export declare function settled<V>(draft: Record<string, V>): Paths<V>;
10
- export {};
15
+ export declare function settling<V>(draft: Record<string, V>): Generator<number, Paths<V>, void>;
11
16
  //# sourceMappingURL=shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAkBnD,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;AA6LlD,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAEjD;AAED,wBAAgB,OAAO,CAAC,CAAC,EACvB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EACnC,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAM,GAC7B,KAAK,CAAC,CAAC,CAAC,CA8BV;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAY/D;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAE/C;AAuCD,wBAAgB,SAAS,CAAC,CAAC,EACzB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EACf,IAAI,GAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAmB,GAC/C,WAAW,CAAC,MAAM,CAAC,CAcrB;AAMD,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAiD5D;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAS7D"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}