@agentshouse/mdruntime 0.1.0-c8e110144a30a → 0.1.0-c8f07dbee1c62

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 (358) hide show
  1. package/README.md +19 -16
  2. package/dist/acceptance.d.ts +6 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +389 -0
  5. package/dist/actions.d.ts +20 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +250 -0
  8. package/dist/adapter.d.ts +154 -57
  9. package/dist/adapter.d.ts.map +1 -1
  10. package/dist/attached-model.d.ts +7 -10
  11. package/dist/attached-model.d.ts.map +1 -1
  12. package/dist/attached-model.js +40 -41
  13. package/dist/attempt.d.ts.map +1 -1
  14. package/dist/attempt.js +14 -1
  15. package/dist/binary.d.ts +0 -5
  16. package/dist/binary.d.ts.map +1 -1
  17. package/dist/binary.js +1 -1
  18. package/dist/bootstrap.d.ts +31 -11
  19. package/dist/bootstrap.d.ts.map +1 -1
  20. package/dist/bootstrap.js +323 -89
  21. package/dist/cell.d.ts +6 -0
  22. package/dist/cell.d.ts.map +1 -0
  23. package/dist/cell.js +9 -0
  24. package/dist/chain.d.ts +12 -0
  25. package/dist/chain.d.ts.map +1 -0
  26. package/dist/chain.js +64 -0
  27. package/dist/change-set.d.ts +9 -14
  28. package/dist/change-set.d.ts.map +1 -1
  29. package/dist/change-set.js +11 -63
  30. package/dist/change.d.ts +32 -1
  31. package/dist/change.d.ts.map +1 -1
  32. package/dist/change.js +10 -1
  33. package/dist/chat-types.d.ts +5 -0
  34. package/dist/chat-types.d.ts.map +1 -0
  35. package/dist/chat-types.js +13 -0
  36. package/dist/client.d.ts +43 -16
  37. package/dist/client.d.ts.map +1 -1
  38. package/dist/client.js +101 -12
  39. package/dist/collection.d.ts +11 -7
  40. package/dist/collection.d.ts.map +1 -1
  41. package/dist/collection.js +38 -79
  42. package/dist/compile.d.ts +16 -0
  43. package/dist/compile.d.ts.map +1 -0
  44. package/dist/compile.js +717 -0
  45. package/dist/connection.d.ts +8 -116
  46. package/dist/connection.d.ts.map +1 -1
  47. package/dist/connection.js +101 -2410
  48. package/dist/context.d.ts +2 -0
  49. package/dist/context.d.ts.map +1 -0
  50. package/dist/{chat/context.js → context.js} +1 -4
  51. package/dist/conversation-row.d.ts +33 -0
  52. package/dist/conversation-row.d.ts.map +1 -0
  53. package/dist/conversation-row.js +53 -0
  54. package/dist/conversation.d.ts +52 -20
  55. package/dist/conversation.d.ts.map +1 -1
  56. package/dist/conversation.js +900 -303
  57. package/dist/digest.d.ts +7 -0
  58. package/dist/digest.d.ts.map +1 -0
  59. package/dist/digest.js +113 -0
  60. package/dist/discovery.d.ts +10 -0
  61. package/dist/discovery.d.ts.map +1 -0
  62. package/dist/discovery.js +175 -0
  63. package/dist/durability.d.ts +19 -1
  64. package/dist/durability.d.ts.map +1 -1
  65. package/dist/durability.js +5 -0
  66. package/dist/entry.d.ts +20 -0
  67. package/dist/entry.d.ts.map +1 -0
  68. package/dist/entry.js +161 -0
  69. package/dist/figures.d.ts +48 -0
  70. package/dist/figures.d.ts.map +1 -0
  71. package/dist/figures.js +197 -0
  72. package/dist/file.d.ts +2 -19
  73. package/dist/file.d.ts.map +1 -1
  74. package/dist/file.js +7 -122
  75. package/dist/holdings.d.ts +29 -0
  76. package/dist/holdings.d.ts.map +1 -0
  77. package/dist/holdings.js +95 -0
  78. package/dist/host.d.ts +11 -2
  79. package/dist/host.d.ts.map +1 -1
  80. package/dist/host.js +128 -18
  81. package/dist/index.d.ts +32 -11
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +10 -0
  84. package/dist/install.d.ts +56 -0
  85. package/dist/install.d.ts.map +1 -0
  86. package/dist/install.js +560 -0
  87. package/dist/job.d.ts +33 -0
  88. package/dist/job.d.ts.map +1 -0
  89. package/dist/job.js +54 -0
  90. package/dist/lifecycle.d.ts +7 -0
  91. package/dist/lifecycle.d.ts.map +1 -0
  92. package/dist/lifecycle.js +267 -0
  93. package/dist/listing.d.ts +53 -0
  94. package/dist/listing.d.ts.map +1 -0
  95. package/dist/listing.js +175 -0
  96. package/dist/live.d.ts +23 -0
  97. package/dist/live.d.ts.map +1 -0
  98. package/dist/live.js +165 -0
  99. package/dist/locks.d.ts +9 -0
  100. package/dist/locks.d.ts.map +1 -0
  101. package/dist/locks.js +61 -0
  102. package/dist/log.d.ts +1 -0
  103. package/dist/log.d.ts.map +1 -1
  104. package/dist/lost.d.ts +5 -0
  105. package/dist/lost.d.ts.map +1 -0
  106. package/dist/lost.js +61 -0
  107. package/dist/media.d.ts +8 -0
  108. package/dist/media.d.ts.map +1 -0
  109. package/dist/media.js +218 -0
  110. package/dist/memory.d.ts +19 -5
  111. package/dist/memory.d.ts.map +1 -1
  112. package/dist/memory.js +253 -94
  113. package/dist/messages.d.ts +52 -0
  114. package/dist/messages.d.ts.map +1 -0
  115. package/dist/messages.js +168 -0
  116. package/dist/model.d.ts +11 -11
  117. package/dist/model.d.ts.map +1 -1
  118. package/dist/model.js +7 -10
  119. package/dist/models.d.ts +14 -0
  120. package/dist/models.d.ts.map +1 -0
  121. package/dist/models.js +193 -0
  122. package/dist/name.d.ts +4 -0
  123. package/dist/name.d.ts.map +1 -0
  124. package/dist/name.js +122 -0
  125. package/dist/observation.d.ts +22 -4
  126. package/dist/observation.d.ts.map +1 -1
  127. package/dist/observation.js +120 -14
  128. package/dist/opened.d.ts +22 -0
  129. package/dist/opened.d.ts.map +1 -0
  130. package/dist/opened.js +107 -0
  131. package/dist/opening.d.ts +4 -0
  132. package/dist/opening.d.ts.map +1 -0
  133. package/dist/opening.js +56 -0
  134. package/dist/outcome.d.ts +53 -8
  135. package/dist/outcome.d.ts.map +1 -1
  136. package/dist/outcome.js +43 -0
  137. package/dist/overlay.d.ts +4 -4
  138. package/dist/overlay.d.ts.map +1 -1
  139. package/dist/overlay.js +111 -182
  140. package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
  141. package/dist/parts.d.ts.map +1 -0
  142. package/dist/{chat/parts.js → parts.js} +45 -46
  143. package/dist/paths.d.ts +1 -0
  144. package/dist/paths.d.ts.map +1 -1
  145. package/dist/paths.js +4 -0
  146. package/dist/preparation.d.ts +20 -0
  147. package/dist/preparation.d.ts.map +1 -0
  148. package/dist/preparation.js +226 -0
  149. package/dist/queries.d.ts +16 -0
  150. package/dist/queries.d.ts.map +1 -0
  151. package/dist/queries.js +272 -0
  152. package/dist/query.d.ts +50 -183
  153. package/dist/query.d.ts.map +1 -1
  154. package/dist/query.js +3 -464
  155. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  156. package/dist/questions.d.ts.map +1 -0
  157. package/dist/{chat/questions.js → questions.js} +12 -1
  158. package/dist/reach.d.ts +21 -7
  159. package/dist/reach.d.ts.map +1 -1
  160. package/dist/reach.js +289 -89
  161. package/dist/react.d.ts +16 -6
  162. package/dist/react.d.ts.map +1 -1
  163. package/dist/react.js +7 -17
  164. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  165. package/dist/read.d.ts.map +1 -0
  166. package/dist/{chat/read.js → read.js} +4 -0
  167. package/dist/readiness.d.ts +50 -0
  168. package/dist/readiness.d.ts.map +1 -0
  169. package/dist/readiness.js +27 -0
  170. package/dist/reads.d.ts +36 -0
  171. package/dist/reads.d.ts.map +1 -0
  172. package/dist/reads.js +150 -0
  173. package/dist/recovery.d.ts +26 -0
  174. package/dist/recovery.d.ts.map +1 -0
  175. package/dist/recovery.js +232 -0
  176. package/dist/refresh.d.ts +17 -14
  177. package/dist/refresh.d.ts.map +1 -1
  178. package/dist/refresh.js +143 -51
  179. package/dist/refusal.d.ts +5 -0
  180. package/dist/refusal.d.ts.map +1 -0
  181. package/dist/refusal.js +56 -0
  182. package/dist/replica.d.ts +55 -33
  183. package/dist/replica.d.ts.map +1 -1
  184. package/dist/replica.js +333 -154
  185. package/dist/room-draft.d.ts +37 -6
  186. package/dist/room-draft.d.ts.map +1 -1
  187. package/dist/room-draft.js +161 -74
  188. package/dist/room-drafts.d.ts +24 -0
  189. package/dist/room-drafts.d.ts.map +1 -0
  190. package/dist/room-drafts.js +216 -0
  191. package/dist/rows.d.ts +30 -37
  192. package/dist/rows.d.ts.map +1 -1
  193. package/dist/rows.js +59 -126
  194. package/dist/runtime.d.ts +42 -0
  195. package/dist/runtime.d.ts.map +1 -0
  196. package/dist/runtime.js +1 -0
  197. package/dist/save.d.ts +52 -9
  198. package/dist/save.d.ts.map +1 -1
  199. package/dist/save.js +544 -173
  200. package/dist/saves.d.ts +70 -0
  201. package/dist/saves.d.ts.map +1 -0
  202. package/dist/saves.js +1004 -0
  203. package/dist/search.d.ts +15 -55
  204. package/dist/search.d.ts.map +1 -1
  205. package/dist/search.js +10 -121
  206. package/dist/seed.d.ts +25 -0
  207. package/dist/seed.d.ts.map +1 -0
  208. package/dist/seed.js +146 -0
  209. package/dist/shared.d.ts +15 -0
  210. package/dist/shared.d.ts.map +1 -0
  211. package/dist/shared.js +425 -0
  212. package/dist/shown.d.ts +31 -0
  213. package/dist/shown.d.ts.map +1 -0
  214. package/dist/shown.js +294 -0
  215. package/dist/socket/admission.d.ts +7 -0
  216. package/dist/socket/admission.d.ts.map +1 -0
  217. package/dist/socket/admission.js +39 -0
  218. package/dist/socket/answers.d.ts +6 -0
  219. package/dist/socket/answers.d.ts.map +1 -0
  220. package/dist/socket/answers.js +20 -0
  221. package/dist/socket/lanes.d.ts +20 -0
  222. package/dist/socket/lanes.d.ts.map +1 -0
  223. package/dist/socket/lanes.js +77 -0
  224. package/dist/socket/reads.d.ts +10 -0
  225. package/dist/socket/reads.d.ts.map +1 -0
  226. package/dist/socket/reads.js +31 -0
  227. package/dist/socket/rooms.d.ts +43 -0
  228. package/dist/socket/rooms.d.ts.map +1 -0
  229. package/dist/socket/rooms.js +90 -0
  230. package/dist/socket/session.d.ts +39 -0
  231. package/dist/socket/session.d.ts.map +1 -0
  232. package/dist/socket/session.js +23 -0
  233. package/dist/socket.d.ts +70 -0
  234. package/dist/socket.d.ts.map +1 -0
  235. package/dist/socket.js +175 -0
  236. package/dist/source.d.ts +61 -0
  237. package/dist/source.d.ts.map +1 -0
  238. package/dist/source.js +81 -0
  239. package/dist/status.d.ts +5 -2
  240. package/dist/status.d.ts.map +1 -1
  241. package/dist/status.js +3 -7
  242. package/dist/store/fences.d.ts +16 -0
  243. package/dist/store/fences.d.ts.map +1 -0
  244. package/dist/store/fences.js +26 -0
  245. package/dist/store/installs.d.ts +30 -0
  246. package/dist/store/installs.d.ts.map +1 -0
  247. package/dist/store/installs.js +34 -0
  248. package/dist/store/readiness.d.ts +10 -0
  249. package/dist/store/readiness.d.ts.map +1 -0
  250. package/dist/store/readiness.js +52 -0
  251. package/dist/store/records.d.ts +212 -0
  252. package/dist/store/records.d.ts.map +1 -0
  253. package/dist/store/records.js +408 -0
  254. package/dist/store/room-held.d.ts +8 -0
  255. package/dist/store/room-held.d.ts.map +1 -0
  256. package/dist/store/room-held.js +17 -0
  257. package/dist/store/space.d.ts +11 -0
  258. package/dist/store/space.d.ts.map +1 -0
  259. package/dist/store/space.js +43 -0
  260. package/dist/store/watchers.d.ts +17 -0
  261. package/dist/store/watchers.d.ts.map +1 -0
  262. package/dist/store/watchers.js +57 -0
  263. package/dist/store/writes.d.ts +24 -0
  264. package/dist/store/writes.d.ts.map +1 -0
  265. package/dist/store/writes.js +125 -0
  266. package/dist/store.d.ts +106 -119
  267. package/dist/store.d.ts.map +1 -1
  268. package/dist/store.js +136 -525
  269. package/dist/stored.d.ts +156 -0
  270. package/dist/stored.d.ts.map +1 -0
  271. package/dist/stored.js +637 -0
  272. package/dist/surface.d.ts +88 -0
  273. package/dist/surface.d.ts.map +1 -0
  274. package/dist/surface.js +222 -0
  275. package/dist/sync.d.ts +20 -0
  276. package/dist/sync.d.ts.map +1 -0
  277. package/dist/sync.js +531 -0
  278. package/dist/tables.d.ts +415 -0
  279. package/dist/tables.d.ts.map +1 -0
  280. package/dist/tables.js +740 -0
  281. package/dist/tallies.d.ts +18 -0
  282. package/dist/tallies.d.ts.map +1 -0
  283. package/dist/tallies.js +129 -0
  284. package/dist/transfer.d.ts +0 -5
  285. package/dist/transfer.d.ts.map +1 -1
  286. package/dist/turn.d.ts +9 -0
  287. package/dist/turn.d.ts.map +1 -0
  288. package/dist/turn.js +75 -0
  289. package/dist/validation.d.ts +29 -0
  290. package/dist/validation.d.ts.map +1 -0
  291. package/dist/validation.js +104 -0
  292. package/dist/windows.d.ts +11 -0
  293. package/dist/windows.d.ts.map +1 -0
  294. package/dist/windows.js +16 -0
  295. package/dist/wire.d.ts +181 -33
  296. package/dist/wire.d.ts.map +1 -1
  297. package/dist/wire.js +62 -31
  298. package/package.json +22 -19
  299. package/AGENTS.md +0 -299
  300. package/dist/chat/acts.d.ts +0 -34
  301. package/dist/chat/acts.d.ts.map +0 -1
  302. package/dist/chat/acts.js +0 -36
  303. package/dist/chat/context.d.ts +0 -3
  304. package/dist/chat/context.d.ts.map +0 -1
  305. package/dist/chat/input.d.ts +0 -9
  306. package/dist/chat/input.d.ts.map +0 -1
  307. package/dist/chat/input.js +0 -99
  308. package/dist/chat/kit.d.ts +0 -60
  309. package/dist/chat/kit.d.ts.map +0 -1
  310. package/dist/chat/kit.js +0 -123
  311. package/dist/chat/lasting.d.ts +0 -6
  312. package/dist/chat/lasting.d.ts.map +0 -1
  313. package/dist/chat/lasting.js +0 -19
  314. package/dist/chat/list.d.ts +0 -20
  315. package/dist/chat/list.d.ts.map +0 -1
  316. package/dist/chat/list.js +0 -59
  317. package/dist/chat/markdown.d.ts +0 -19
  318. package/dist/chat/markdown.d.ts.map +0 -1
  319. package/dist/chat/markdown.js +0 -187
  320. package/dist/chat/message.d.ts +0 -6
  321. package/dist/chat/message.d.ts.map +0 -1
  322. package/dist/chat/message.js +0 -192
  323. package/dist/chat/messages.d.ts +0 -21
  324. package/dist/chat/messages.d.ts.map +0 -1
  325. package/dist/chat/messages.js +0 -151
  326. package/dist/chat/name.d.ts +0 -6
  327. package/dist/chat/name.d.ts.map +0 -1
  328. package/dist/chat/name.js +0 -37
  329. package/dist/chat/opened.d.ts +0 -11
  330. package/dist/chat/opened.d.ts.map +0 -1
  331. package/dist/chat/opened.js +0 -17
  332. package/dist/chat/overlay.d.ts +0 -31
  333. package/dist/chat/overlay.d.ts.map +0 -1
  334. package/dist/chat/overlay.js +0 -97
  335. package/dist/chat/parts.d.ts.map +0 -1
  336. package/dist/chat/process.d.ts +0 -20
  337. package/dist/chat/process.d.ts.map +0 -1
  338. package/dist/chat/process.js +0 -32
  339. package/dist/chat/provider.d.ts +0 -63
  340. package/dist/chat/provider.d.ts.map +0 -1
  341. package/dist/chat/provider.js +0 -645
  342. package/dist/chat/question.d.ts +0 -9
  343. package/dist/chat/question.d.ts.map +0 -1
  344. package/dist/chat/question.js +0 -80
  345. package/dist/chat/questions.d.ts.map +0 -1
  346. package/dist/chat/read.d.ts.map +0 -1
  347. package/dist/chat/ready.d.ts +0 -33
  348. package/dist/chat/ready.d.ts.map +0 -1
  349. package/dist/chat/ready.js +0 -91
  350. package/dist/chat/style.d.ts +0 -4
  351. package/dist/chat/style.d.ts.map +0 -1
  352. package/dist/chat/style.js +0 -302
  353. package/dist/chat.d.ts +0 -14
  354. package/dist/chat.d.ts.map +0 -1
  355. package/dist/chat.js +0 -8
  356. package/dist/read-side.d.ts +0 -18
  357. package/dist/read-side.d.ts.map +0 -1
  358. package/dist/read-side.js +0 -440
package/dist/search.d.ts CHANGED
@@ -1,62 +1,22 @@
1
- import type { ChangeSet } from './change-set.js';
2
- import { type Filter } from './query.js';
3
- import type { Open } from './open.js';
4
- export type DocumentPart = Open<'fields' | 'sections' | 'preamble' | 'path'>;
1
+ import type { ProviderRefusal, SearchHit } from './adapter.js';
2
+ import type { Failure, Offline } from './outcome.js';
5
3
  export type SearchRequest = {
6
4
  text: string;
7
- documents?: Filter;
8
- conversations?: readonly string[];
9
- limit?: number;
10
- };
11
- export type DocumentHit = {
12
- room: string;
13
- path: string;
14
- type: string;
15
- score: number;
16
- matches: Readonly<Record<string, readonly DocumentPart[]>>;
17
- };
18
- export type MessageHit = {
19
- conversation: string;
20
- identity: string;
21
- score: number;
22
- matches: Readonly<Record<string, readonly Open<'text'>[]>>;
23
- };
24
- export type SearchResult = {
25
- documents: readonly DocumentHit[];
26
- messages: readonly MessageHit[];
27
- };
28
- export type SearchedDocument = {
29
- room: string;
30
- path: string;
31
- type: string;
32
- fields: Readonly<Record<string, unknown>>;
33
- preamble: string;
34
- sections: Readonly<Record<string, string>>;
35
- };
36
- export type SearchedMessage = {
37
- conversation: string;
38
- identity: string;
39
- text: string;
40
- };
41
- export type SearchSource = {
42
- documents(): readonly SearchedDocument[];
43
- document(room: string, path: string): SearchedDocument | null;
44
- messages(): readonly SearchedMessage[];
45
- message(conversation: string, identity: string): SearchedMessage | null;
46
- };
5
+ rooms?: readonly string[];
6
+ };
7
+ export type { SearchHit } from './adapter.js';
8
+ export type SearchFound = {
9
+ kind: 'found';
10
+ documents: readonly SearchHit[];
11
+ };
12
+ export type SearchResult = SearchFound | Offline | (ProviderRefusal & {
13
+ kind: 'rejected';
14
+ }) | (ProviderRefusal & {
15
+ kind: 'undeclared';
16
+ }) | Failure;
47
17
  export type SearchPlan = {
48
18
  text: string;
49
- documents: unknown;
50
- conversations: readonly string[] | null;
51
- limit: number | null;
52
- };
53
- export type SearchIndex = {
54
- changed(set: ChangeSet): void;
55
- search(plan: SearchPlan, documents: readonly {
56
- room: string;
57
- path: string;
58
- }[] | null): SearchResult;
19
+ rooms: readonly string[] | null;
59
20
  };
60
21
  export declare function searchPlanOf(input: unknown): SearchPlan;
61
- export declare function createSearchIndex(source: SearchSource): SearchIndex;
62
22
  //# 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":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAExE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,OAAO,GACP,CAAC,eAAe,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,GACxC,CAAC,eAAe,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,GAC1C,OAAO,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAE3E,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAYvD"}
package/dist/search.js CHANGED
@@ -1,125 +1,14 @@
1
- import MiniSearch from 'minisearch';
2
- import { invalid, known, limitOf, plain } from './query.js';
3
- const FIELDS = ['fields', 'sections', 'preamble', 'path', 'text'];
4
- function documentId(room, path) {
5
- return JSON.stringify(['document', room, path]);
6
- }
7
- function messageId(conversation, identity) {
8
- return JSON.stringify(['message', conversation, identity]);
9
- }
10
- function scalars(value) {
11
- if (value === null || value === undefined)
12
- return [];
13
- if (Array.isArray(value))
14
- return value.flatMap(scalars);
15
- if (typeof value === 'object')
16
- return Object.values(value).flatMap(scalars);
17
- return [String(value)];
18
- }
1
+ import { invalid, known, plain } from '@agentshouse/mdmodel';
19
2
  export function searchPlanOf(input) {
20
3
  if (!plain(input))
21
4
  invalid('search', 'expects a search object');
22
- known(input, ['text', 'documents', 'conversations', 'limit'], '');
23
- if (typeof input.text !== 'string')
24
- invalid('text', 'expects text');
25
- const conversations = input.conversations;
26
- if (conversations !== undefined &&
27
- (!Array.isArray(conversations) || conversations.some((named) => typeof named !== 'string'))) {
28
- invalid('conversations', 'expects a list of conversations');
29
- }
30
- return {
31
- text: input.text,
32
- documents: input.documents,
33
- conversations: conversations ?? null,
34
- limit: limitOf(input.limit),
35
- };
36
- }
37
- export function createSearchIndex(source) {
38
- let index = null;
39
- const documents = new Map();
40
- const messages = new Map();
41
- const changedDocuments = new Map();
42
- const changedMessages = new Map();
43
- function addDocument(built, document) {
44
- const id = documentId(document.room, document.path);
45
- documents.set(id, { room: document.room, path: document.path, type: document.type });
46
- built.add({
47
- id,
48
- fields: scalars(document.fields).join('\n'),
49
- sections: Object.entries(document.sections)
50
- .map(([heading, text]) => `${heading}\n${text}`)
51
- .join('\n'),
52
- preamble: document.preamble,
53
- path: document.path,
54
- });
55
- }
56
- function addMessage(built, message) {
57
- const id = messageId(message.conversation, message.identity);
58
- messages.set(id, { conversation: message.conversation, identity: message.identity });
59
- built.add({ id, text: message.text });
60
- }
61
- function current() {
62
- if (index === null) {
63
- const built = new MiniSearch({ fields: FIELDS });
64
- for (const document of source.documents())
65
- addDocument(built, document);
66
- for (const message of source.messages())
67
- addMessage(built, message);
68
- index = built;
69
- return built;
70
- }
71
- const built = index;
72
- for (const [id, { room, path }] of changedDocuments) {
73
- if (documents.delete(id))
74
- built.discard(id);
75
- const document = source.document(room, path);
76
- if (document !== null)
77
- addDocument(built, document);
78
- }
79
- changedDocuments.clear();
80
- for (const [id, { conversation, identity }] of changedMessages) {
81
- if (messages.delete(id))
82
- built.discard(id);
83
- const message = source.message(conversation, identity);
84
- if (message !== null)
85
- addMessage(built, message);
86
- }
87
- changedMessages.clear();
88
- return built;
89
- }
90
- function ranked(built, text, entries, keep, limit) {
91
- const found = built.search(text, {
92
- filter: ({ id }) => {
93
- const entry = entries.get(id);
94
- return entry !== undefined && keep(entry, id);
95
- },
96
- });
97
- return (limit === null ? found : found.slice(0, limit)).map(({ id, score, match }) => ({
98
- ...entries.get(id),
99
- score,
100
- match,
101
- }));
102
- }
103
- return {
104
- changed(set) {
105
- if (index === null)
106
- return;
107
- for (const { locator, path } of set.documents) {
108
- changedDocuments.set(documentId(locator, path), { room: locator, path });
109
- }
110
- for (const { conversation, identity } of set.messages) {
111
- changedMessages.set(messageId(conversation, identity), { conversation, identity });
112
- }
113
- },
114
- search({ text, conversations, limit }, selected) {
115
- const built = current();
116
- const chosen = selected === null
117
- ? null
118
- : new Set(selected.map(({ room, path }) => documentId(room, path)));
119
- return {
120
- documents: ranked(built, text, documents, (_entry, id) => chosen === null || chosen.has(id), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
121
- messages: ranked(built, text, messages, ({ conversation }) => conversations === null || conversations.includes(conversation), limit).map(({ match, ...hit }) => ({ ...hit, matches: match })),
122
- };
123
- },
124
- };
5
+ known(input, ['text', 'rooms'], '');
6
+ if (typeof input.text !== 'string' || input.text.trim() === '')
7
+ invalid('text', 'expects words');
8
+ const rooms = input.rooms;
9
+ if (rooms !== undefined &&
10
+ (!Array.isArray(rooms) || rooms.some((named) => typeof named !== 'string'))) {
11
+ invalid('rooms', 'expects a list of Rooms');
12
+ }
13
+ return { text: input.text, rooms: rooms ?? null };
125
14
  }
package/dist/seed.d.ts ADDED
@@ -0,0 +1,25 @@
1
+ import type { Cover } from './live.js';
2
+ import { type KeyedResult } from './observation.js';
3
+ import type { Plan, QueryRows } from './query.js';
4
+ import type { Deliver } from './reach.js';
5
+ import type { Runtime } from './runtime.js';
6
+ import type { HeldCover, Store } from './store.js';
7
+ export type EntrySeed = {
8
+ readonly at: Readonly<Record<string, string>>;
9
+ readonly queries: readonly {
10
+ readonly query: unknown;
11
+ readonly rows: QueryRows;
12
+ }[];
13
+ };
14
+ export type Seeded = {
15
+ readonly rows: QueryRows;
16
+ readonly at: Readonly<Record<string, string>>;
17
+ };
18
+ type SeededWatch = (coverOf: (cover: Cover, held: HeldCover) => Cover, deliver: (message: unknown) => void) => () => void;
19
+ export declare function entrySeedOf(value: unknown): EntrySeed | null;
20
+ export declare function seededResult(seed: Seeded): KeyedResult;
21
+ export declare function seedApplies(runtime: Runtime, plan: Plan, held: HeldCover): Seeded | null;
22
+ export declare function keepEntrySeed(store: Store, entry: EntrySeed): void;
23
+ export declare function watchSeeded(runtime: Runtime, plan: Plan, deliver: Deliver, watch: SeededWatch): () => void;
24
+ export {};
25
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../src/seed.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAS,KAAK,WAAW,EAAqB,MAAM,kBAAkB,CAAC;AAC9E,OAAO,KAAK,EAAE,IAAI,EAA4C,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnD,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;AAEjG,KAAK,WAAW,GAAG,CACjB,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,KAAK,KAAK,EACjD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAChC,MAAM,IAAI,CAAC;AA0ChB,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAe5D;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAoBtD;AA+BD,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAOxF;AAYD,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAMlE;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,GACjB,MAAM,IAAI,CA4BZ"}
package/dist/seed.js ADDED
@@ -0,0 +1,146 @@
1
+ import { queryKey } from '@agentshouse/mdmodel';
2
+ import { whole } from './observation.js';
3
+ import { documentKey } from './rows.js';
4
+ const seedTopic = (key) => `seed\u0000${key}`;
5
+ function plain(value) {
6
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
7
+ }
8
+ function windowOf(value) {
9
+ const { next, total } = value;
10
+ if (next !== undefined && typeof next !== 'string')
11
+ return null;
12
+ if (total !== undefined && !Number.isSafeInteger(total))
13
+ return null;
14
+ return {
15
+ ...(next === undefined ? {} : { next }),
16
+ ...(total === undefined ? {} : { total: total }),
17
+ };
18
+ }
19
+ function rowsOf(value) {
20
+ if (!plain(value))
21
+ return null;
22
+ const window = windowOf(value);
23
+ if (window === null)
24
+ return null;
25
+ if (Array.isArray(value.groups)) {
26
+ const groups = value.groups;
27
+ return groups.every((group) => plain(group) && Array.isArray(group.key) && typeof group.count === 'number')
28
+ ? { groups: groups, ...window }
29
+ : null;
30
+ }
31
+ if (!Array.isArray(value.documents))
32
+ return null;
33
+ const documents = value.documents;
34
+ return documents.every((document) => plain(document) && typeof document.room === 'string' && typeof document.path === 'string')
35
+ ? { documents: documents, ...window }
36
+ : null;
37
+ }
38
+ export function entrySeedOf(value) {
39
+ if (!plain(value) || !plain(value.at) || !Array.isArray(value.queries))
40
+ return null;
41
+ const at = {};
42
+ for (const [room, version] of Object.entries(value.at)) {
43
+ if (typeof version !== 'string')
44
+ return null;
45
+ at[room] = version;
46
+ }
47
+ const queries = [];
48
+ for (const entry of value.queries) {
49
+ if (!plain(entry) || !plain(entry.query))
50
+ return null;
51
+ const rows = rowsOf(entry.rows);
52
+ if (rows === null)
53
+ return null;
54
+ queries.push({ query: entry.query, rows });
55
+ }
56
+ return { at, queries };
57
+ }
58
+ export function seededResult(seed) {
59
+ const coverage = {
60
+ rooms: Object.entries(seed.at).map(([room, generation]) => ({
61
+ room,
62
+ generation,
63
+ current: false,
64
+ })),
65
+ indexes: [],
66
+ overlay: [],
67
+ };
68
+ if ('groups' in seed.rows) {
69
+ return {
70
+ result: { ...seed.rows, coverage },
71
+ keys: seed.rows.groups.map((_group, index) => index),
72
+ };
73
+ }
74
+ return {
75
+ result: { ...seed.rows, coverage },
76
+ keys: seed.rows.documents.map((document) => documentKey(document.room, document.path)),
77
+ };
78
+ }
79
+ function seedRoomHeld({ socket }, room, version, held) {
80
+ const stored = held.rooms.get(room);
81
+ return (stored !== undefined &&
82
+ stored.indexed &&
83
+ socket.reads.reached(room, stored.roomVersion, version));
84
+ }
85
+ function seedHeld(runtime, at, held) {
86
+ const { socket } = runtime;
87
+ return Object.entries(at).every(([room, version]) => (socket.session.now().roomsListed &&
88
+ socket.rooms.declared(room) === undefined &&
89
+ !held.rooms.has(room)) ||
90
+ seedRoomHeld(runtime, room, version, held));
91
+ }
92
+ export function seedApplies(runtime, plan, held) {
93
+ const { seeds } = runtime.store;
94
+ const seed = seeds.of(plan.key);
95
+ if (seed === undefined)
96
+ return null;
97
+ if (!seedHeld(runtime, seed.at, held))
98
+ return seed;
99
+ seeds.drop(plan.key);
100
+ return null;
101
+ }
102
+ function seedBehind(runtime, plan, cover, held) {
103
+ const seed = seedApplies(runtime, plan, held);
104
+ if (seed === null || 'pending' in cover)
105
+ return cover;
106
+ return {
107
+ pending: Object.entries(seed.at)
108
+ .filter(([room, version]) => !seedRoomHeld(runtime, room, version, held))
109
+ .map(([room]) => ({ room, awaits: 'acquisition' })),
110
+ };
111
+ }
112
+ export function keepEntrySeed(store, entry) {
113
+ for (const { query, rows } of entry.queries) {
114
+ const key = queryKey(query);
115
+ store.seeds.keep(key, { rows, at: entry.at });
116
+ for (const watcher of store.watching(seedTopic(key)))
117
+ watcher.answer(null);
118
+ }
119
+ }
120
+ export function watchSeeded(runtime, plan, deliver, watch) {
121
+ const { store } = runtime;
122
+ let seeded = false;
123
+ let pending = true;
124
+ const shown = () => {
125
+ const seed = store.seeds.of(plan.key);
126
+ if (seed === undefined || seeded || !pending)
127
+ return;
128
+ seeded = true;
129
+ deliver(seededResult(seed));
130
+ };
131
+ const watcher = store.watch(seedTopic(plan.key), shown);
132
+ const stop = watch((cover, held) => seedBehind(runtime, plan, cover, held), (message) => {
133
+ const answered = message;
134
+ pending = whole(answered) && 'pending' in answered.result;
135
+ if (pending && store.seeds.of(plan.key) !== undefined) {
136
+ shown();
137
+ return;
138
+ }
139
+ seeded = false;
140
+ deliver(message);
141
+ });
142
+ return () => {
143
+ watcher.stop();
144
+ stop();
145
+ };
146
+ }
@@ -0,0 +1,15 @@
1
+ export type Paths<V> = Readonly<Record<string, V>>;
2
+ export declare function guarding<V>(values: Paths<V>, handler: ProxyHandler<Paths<V>>): Paths<V>;
3
+ export declare function entriesIn<V>(map: Paths<V>): Generator<readonly [string, V]>;
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>;
7
+ export declare function shared<V>(map: Paths<V>): Paths<V>;
8
+ export declare function patched<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Paths<V>;
9
+ export declare function patching<V>(base: Paths<V>, set: Iterable<readonly [string, V]>, removed?: Iterable<string>): Generator<number, Paths<V>, void>;
10
+ export declare function differences<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): Generator<number, ReadonlySet<string>, void>;
11
+ export declare function differing<V>(left: Paths<V>, right: Paths<V>, same?: (left: V, right: V) => boolean): ReadonlySet<string>;
12
+ export declare function drafted<V>(base: Paths<V>): Record<string, V>;
13
+ export declare function settled<V>(draft: Record<string, V>): Paths<V>;
14
+ export declare function settling<V>(draft: Record<string, V>): Generator<number, Paths<V>, void>;
15
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAiMnD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAIvF;AAED,wBAAiB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAQ5E;AAuCD,wBAAiB,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,CAE3F;AAED,wBAAiB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,CAAC,CAoB3F;AAED,wBAAiB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAE5E;AAED,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,CAEV;AAED,wBAAiB,QAAQ,CAAC,CAAC,EACzB,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,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAoBnC;AA8CD,wBAAiB,WAAW,CAAC,CAAC,EAC5B,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,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAkB9C;AAED,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,CAErB;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,CAE7D;AAED,wBAAiB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAUxF"}