@agentshouse/mdruntime 0.1.0-c94cfdbdb6f68 → 0.1.0-c95dc33df5c05

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 (364) 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 +140 -85
  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/binary.d.ts +0 -5
  14. package/dist/binary.d.ts.map +1 -1
  15. package/dist/binary.js +1 -1
  16. package/dist/bootstrap.d.ts +30 -11
  17. package/dist/bootstrap.d.ts.map +1 -1
  18. package/dist/bootstrap.js +319 -111
  19. package/dist/cell.d.ts +6 -0
  20. package/dist/cell.d.ts.map +1 -0
  21. package/dist/cell.js +9 -0
  22. package/dist/chain.d.ts +12 -0
  23. package/dist/chain.d.ts.map +1 -0
  24. package/dist/chain.js +64 -0
  25. package/dist/change-set.d.ts +9 -16
  26. package/dist/change-set.d.ts.map +1 -1
  27. package/dist/change-set.js +11 -89
  28. package/dist/change.d.ts +32 -1
  29. package/dist/change.d.ts.map +1 -1
  30. package/dist/change.js +10 -1
  31. package/dist/chat-types.d.ts +5 -0
  32. package/dist/chat-types.d.ts.map +1 -0
  33. package/dist/chat-types.js +13 -0
  34. package/dist/client.d.ts +30 -11
  35. package/dist/client.d.ts.map +1 -1
  36. package/dist/client.js +83 -7
  37. package/dist/collection.d.ts +11 -21
  38. package/dist/collection.d.ts.map +1 -1
  39. package/dist/collection.js +39 -321
  40. package/dist/compile.d.ts +16 -0
  41. package/dist/compile.d.ts.map +1 -0
  42. package/dist/compile.js +717 -0
  43. package/dist/connection.d.ts +7 -137
  44. package/dist/connection.d.ts.map +1 -1
  45. package/dist/connection.js +98 -3600
  46. package/dist/context.d.ts +2 -0
  47. package/dist/context.d.ts.map +1 -0
  48. package/dist/{chat/context.js → context.js} +1 -4
  49. package/dist/conversation-row.d.ts +33 -0
  50. package/dist/conversation-row.d.ts.map +1 -0
  51. package/dist/conversation-row.js +53 -0
  52. package/dist/conversation.d.ts +37 -18
  53. package/dist/conversation.d.ts.map +1 -1
  54. package/dist/conversation.js +573 -287
  55. package/dist/digest.d.ts +7 -0
  56. package/dist/digest.d.ts.map +1 -0
  57. package/dist/digest.js +113 -0
  58. package/dist/discovery.d.ts +10 -0
  59. package/dist/discovery.d.ts.map +1 -0
  60. package/dist/discovery.js +175 -0
  61. package/dist/durability.d.ts +16 -4
  62. package/dist/durability.d.ts.map +1 -1
  63. package/dist/durability.js +5 -0
  64. package/dist/entry.d.ts +5 -2
  65. package/dist/entry.d.ts.map +1 -1
  66. package/dist/entry.js +33 -29
  67. package/dist/figures.d.ts +48 -0
  68. package/dist/figures.d.ts.map +1 -0
  69. package/dist/figures.js +197 -0
  70. package/dist/file.d.ts +2 -19
  71. package/dist/file.d.ts.map +1 -1
  72. package/dist/file.js +7 -122
  73. package/dist/holdings.d.ts +29 -0
  74. package/dist/holdings.d.ts.map +1 -0
  75. package/dist/holdings.js +95 -0
  76. package/dist/host.d.ts +4 -7
  77. package/dist/host.d.ts.map +1 -1
  78. package/dist/host.js +67 -39
  79. package/dist/identity.d.ts +0 -2
  80. package/dist/identity.d.ts.map +1 -1
  81. package/dist/identity.js +0 -6
  82. package/dist/index.d.ts +31 -13
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +10 -2
  85. package/dist/install.d.ts +56 -0
  86. package/dist/install.d.ts.map +1 -0
  87. package/dist/install.js +560 -0
  88. package/dist/job.d.ts +33 -0
  89. package/dist/job.d.ts.map +1 -0
  90. package/dist/job.js +54 -0
  91. package/dist/lifecycle.d.ts +7 -0
  92. package/dist/lifecycle.d.ts.map +1 -0
  93. package/dist/lifecycle.js +267 -0
  94. package/dist/listing.d.ts +53 -0
  95. package/dist/listing.d.ts.map +1 -0
  96. package/dist/listing.js +175 -0
  97. package/dist/live.d.ts +23 -0
  98. package/dist/live.d.ts.map +1 -0
  99. package/dist/live.js +165 -0
  100. package/dist/locks.d.ts +9 -0
  101. package/dist/locks.d.ts.map +1 -0
  102. package/dist/locks.js +61 -0
  103. package/dist/log.d.ts +1 -0
  104. package/dist/log.d.ts.map +1 -1
  105. package/dist/lost.d.ts +5 -0
  106. package/dist/lost.d.ts.map +1 -0
  107. package/dist/lost.js +61 -0
  108. package/dist/media.d.ts +8 -0
  109. package/dist/media.d.ts.map +1 -0
  110. package/dist/media.js +218 -0
  111. package/dist/memory.d.ts +14 -6
  112. package/dist/memory.d.ts.map +1 -1
  113. package/dist/memory.js +237 -105
  114. package/dist/messages.d.ts +52 -0
  115. package/dist/messages.d.ts.map +1 -0
  116. package/dist/messages.js +168 -0
  117. package/dist/model.d.ts +8 -10
  118. package/dist/model.d.ts.map +1 -1
  119. package/dist/model.js +6 -18
  120. package/dist/models.d.ts +14 -0
  121. package/dist/models.d.ts.map +1 -0
  122. package/dist/models.js +193 -0
  123. package/dist/name.d.ts +4 -0
  124. package/dist/name.d.ts.map +1 -0
  125. package/dist/name.js +122 -0
  126. package/dist/observation.d.ts +15 -2
  127. package/dist/observation.d.ts.map +1 -1
  128. package/dist/observation.js +91 -2
  129. package/dist/opened.d.ts +22 -0
  130. package/dist/opened.d.ts.map +1 -0
  131. package/dist/opened.js +107 -0
  132. package/dist/opening.d.ts +4 -0
  133. package/dist/opening.d.ts.map +1 -0
  134. package/dist/opening.js +56 -0
  135. package/dist/outcome.d.ts +44 -9
  136. package/dist/outcome.d.ts.map +1 -1
  137. package/dist/outcome.js +41 -2
  138. package/dist/overlay.d.ts +3 -5
  139. package/dist/overlay.d.ts.map +1 -1
  140. package/dist/overlay.js +98 -172
  141. package/dist/{chat/parts.d.ts → parts.d.ts} +11 -9
  142. package/dist/parts.d.ts.map +1 -0
  143. package/dist/{chat/parts.js → parts.js} +45 -46
  144. package/dist/paths.d.ts +1 -0
  145. package/dist/paths.d.ts.map +1 -1
  146. package/dist/paths.js +4 -0
  147. package/dist/preparation.d.ts +20 -0
  148. package/dist/preparation.d.ts.map +1 -0
  149. package/dist/preparation.js +226 -0
  150. package/dist/queries.d.ts +16 -0
  151. package/dist/queries.d.ts.map +1 -0
  152. package/dist/queries.js +272 -0
  153. package/dist/query.d.ts +21 -206
  154. package/dist/query.d.ts.map +1 -1
  155. package/dist/query.js +3 -493
  156. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -2
  157. package/dist/questions.d.ts.map +1 -0
  158. package/dist/{chat/questions.js → questions.js} +12 -1
  159. package/dist/reach.d.ts +20 -9
  160. package/dist/reach.d.ts.map +1 -1
  161. package/dist/reach.js +278 -103
  162. package/dist/react.d.ts +10 -2
  163. package/dist/react.d.ts.map +1 -1
  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 +14 -17
  168. package/dist/readiness.d.ts.map +1 -1
  169. package/dist/readiness.js +2 -8
  170. package/dist/reads.d.ts +35 -10
  171. package/dist/reads.d.ts.map +1 -1
  172. package/dist/reads.js +136 -84
  173. package/dist/recovery.d.ts +3 -2
  174. package/dist/recovery.d.ts.map +1 -1
  175. package/dist/recovery.js +43 -8
  176. package/dist/refresh.d.ts +18 -15
  177. package/dist/refresh.d.ts.map +1 -1
  178. package/dist/refresh.js +143 -58
  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 +54 -36
  183. package/dist/replica.d.ts.map +1 -1
  184. package/dist/replica.js +313 -188
  185. package/dist/room-draft.d.ts +25 -6
  186. package/dist/room-draft.d.ts.map +1 -1
  187. package/dist/room-draft.js +158 -71
  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 +31 -31
  192. package/dist/rows.d.ts.map +1 -1
  193. package/dist/rows.js +59 -123
  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 -14
  198. package/dist/save.d.ts.map +1 -1
  199. package/dist/save.js +518 -185
  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 +12 -95
  204. package/dist/search.d.ts.map +1 -1
  205. package/dist/search.js +10 -266
  206. package/dist/seed.d.ts +11 -2
  207. package/dist/seed.d.ts.map +1 -1
  208. package/dist/seed.js +71 -0
  209. package/dist/shared.d.ts +7 -3
  210. package/dist/shared.d.ts.map +1 -1
  211. package/dist/shared.js +119 -66
  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 +4 -5
  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 -164
  267. package/dist/store.d.ts.map +1 -1
  268. package/dist/store.js +136 -752
  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 +4 -2
  287. package/dist/turn.d.ts.map +1 -1
  288. package/dist/turn.js +46 -22
  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 +1 -16
  293. package/dist/windows.d.ts.map +1 -1
  294. package/dist/windows.js +2 -79
  295. package/dist/wire.d.ts +34 -6
  296. package/dist/wire.d.ts.map +1 -1
  297. package/dist/wire.js +12 -2
  298. package/package.json +18 -19
  299. package/AGENTS.md +0 -299
  300. package/dist/chat/acts.d.ts +0 -33
  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/earlier.d.ts +0 -10
  306. package/dist/chat/earlier.d.ts.map +0 -1
  307. package/dist/chat/earlier.js +0 -54
  308. package/dist/chat/input.d.ts +0 -9
  309. package/dist/chat/input.d.ts.map +0 -1
  310. package/dist/chat/input.js +0 -99
  311. package/dist/chat/kit.d.ts +0 -61
  312. package/dist/chat/kit.d.ts.map +0 -1
  313. package/dist/chat/kit.js +0 -123
  314. package/dist/chat/lasting.d.ts +0 -6
  315. package/dist/chat/lasting.d.ts.map +0 -1
  316. package/dist/chat/lasting.js +0 -19
  317. package/dist/chat/list.d.ts +0 -27
  318. package/dist/chat/list.d.ts.map +0 -1
  319. package/dist/chat/list.js +0 -99
  320. package/dist/chat/markdown.d.ts +0 -20
  321. package/dist/chat/markdown.d.ts.map +0 -1
  322. package/dist/chat/markdown.js +0 -188
  323. package/dist/chat/message.d.ts +0 -6
  324. package/dist/chat/message.d.ts.map +0 -1
  325. package/dist/chat/message.js +0 -192
  326. package/dist/chat/messages.d.ts +0 -22
  327. package/dist/chat/messages.d.ts.map +0 -1
  328. package/dist/chat/messages.js +0 -155
  329. package/dist/chat/name.d.ts +0 -6
  330. package/dist/chat/name.d.ts.map +0 -1
  331. package/dist/chat/name.js +0 -37
  332. package/dist/chat/opened.d.ts +0 -11
  333. package/dist/chat/opened.d.ts.map +0 -1
  334. package/dist/chat/opened.js +0 -17
  335. package/dist/chat/overlay.d.ts +0 -31
  336. package/dist/chat/overlay.d.ts.map +0 -1
  337. package/dist/chat/overlay.js +0 -97
  338. package/dist/chat/parts.d.ts.map +0 -1
  339. package/dist/chat/process.d.ts +0 -20
  340. package/dist/chat/process.d.ts.map +0 -1
  341. package/dist/chat/process.js +0 -32
  342. package/dist/chat/provider.d.ts +0 -63
  343. package/dist/chat/provider.d.ts.map +0 -1
  344. package/dist/chat/provider.js +0 -628
  345. package/dist/chat/question.d.ts +0 -9
  346. package/dist/chat/question.d.ts.map +0 -1
  347. package/dist/chat/question.js +0 -69
  348. package/dist/chat/questions.d.ts.map +0 -1
  349. package/dist/chat/read.d.ts.map +0 -1
  350. package/dist/chat/ready.d.ts +0 -34
  351. package/dist/chat/ready.d.ts.map +0 -1
  352. package/dist/chat/ready.js +0 -91
  353. package/dist/chat/style.d.ts +0 -4
  354. package/dist/chat/style.d.ts.map +0 -1
  355. package/dist/chat/style.js +0 -302
  356. package/dist/chat.d.ts +0 -14
  357. package/dist/chat.d.ts.map +0 -1
  358. package/dist/chat.js +0 -8
  359. package/dist/fence.d.ts +0 -6
  360. package/dist/fence.d.ts.map +0 -1
  361. package/dist/fence.js +0 -10
  362. package/dist/read-side.d.ts +0 -27
  363. package/dist/read-side.d.ts.map +0 -1
  364. package/dist/read-side.js +0 -824
@@ -1,11 +1,30 @@
1
- import { checkDocument, parseFrontmatter, references, sectionReferences, target, parse, resolves, validate, VERSION, } from '@agentshouse/mdmodel';
1
+ import { parse, VERSION } from '@agentshouse/mdmodel';
2
2
  import { beneath, normalize } from './paths.js';
3
- import { sameTyping } from './model.js';
4
- import { differing, patched, shared, sizeOf } from './shared.js';
5
- import { after, inUnits, ROW_WEIGHT } from './turn.js';
3
+ import { hashed } from './observation.js';
4
+ import { sortedKeys } from './shared.js';
6
5
  export const MD_MODEL = { identity: '@agentshouse/mdmodel', version: VERSION };
7
- const NO_TYPES = { types: {} };
8
- function selected(composition, path) {
6
+ const typesPrinted = new WeakMap();
7
+ function typesPrint(model) {
8
+ if (model.status === 'unavailable')
9
+ return '';
10
+ let print = typesPrinted.get(model.types);
11
+ if (print === undefined) {
12
+ print = hashed(JSON.stringify(model.types)).toString(36);
13
+ typesPrinted.set(model.types, print);
14
+ }
15
+ return print;
16
+ }
17
+ export function composedOf(composition) {
18
+ const { model, selection } = composition;
19
+ return {
20
+ composition,
21
+ fingerprint: JSON.stringify([
22
+ typesPrint(model),
23
+ selection === null ? null : [selection.roots, typesPrint(selection.model)],
24
+ ]),
25
+ };
26
+ }
27
+ export function selected(composition, path) {
9
28
  return (composition.selection !== null &&
10
29
  composition.selection.roots.some((root) => beneath(root, path)));
11
30
  }
@@ -14,337 +33,36 @@ export function governing(composition, path) {
14
33
  ? composition.selection.model
15
34
  : composition.model;
16
35
  }
17
- const parsedIn = new WeakMap();
18
- function carried(previous, text) {
19
- const held = parsedIn.get(previous);
20
- if (held === undefined)
21
- return shared({});
22
- const kept = patched(held.base, held.added);
23
- held.base = kept;
24
- held.added = new Map();
25
- return patched(kept, [], differing(previous.text, text));
26
- }
27
- function cachedIn(collection, path) {
28
- const held = parsedIn.get(collection);
29
- if (held === undefined)
30
- return undefined;
31
- if (held.added.has(path))
32
- return held.added.get(path);
33
- return Object.hasOwn(held.base, path) ? held.base[path] : undefined;
34
- }
35
- export function collectionOf(text, composition, previous) {
36
- const parsed = {
37
- base: previous === undefined ? shared({}) : carried(previous, text),
38
- added: new Map(),
39
- };
40
- const collection = {
36
+ export function collectionOf(text, composition) {
37
+ const parsed = new Map();
38
+ return {
41
39
  text,
42
40
  composition,
43
41
  document(path) {
44
- const held = cachedIn(collection, path);
45
- if (held !== undefined)
46
- return held ?? undefined;
42
+ if (parsed.has(path))
43
+ return parsed.get(path) ?? undefined;
47
44
  const content = text[path];
48
45
  if (content === undefined)
49
46
  return undefined;
50
47
  const read = parse(content, path);
51
- parsed.added.set(path, read.ok ? read.document : null);
48
+ parsed.set(path, read.ok ? read.document : null);
52
49
  return read.ok ? read.document : undefined;
53
50
  },
54
51
  };
55
- parsedIn.set(collection, parsed);
56
- return collection;
57
- }
58
- export function passingFrontmatter(collection, path) {
59
- const held = cachedIn(collection, path);
60
- if (held !== undefined)
61
- return held ?? undefined;
62
- const content = collection.text[path];
63
- if (content === undefined)
64
- return undefined;
65
- const read = parseFrontmatter(content, path);
66
- return read.ok ? read.frontmatter : undefined;
67
52
  }
68
53
  export function* documentsOf(collection) {
69
- for (const path of Object.keys(collection.text).sort()) {
70
- const held = cachedIn(collection, path);
71
- if (held === null)
72
- continue;
73
- if (held !== undefined) {
74
- yield [path, held];
75
- continue;
54
+ const paths = yield* sortedKeys(collection.text);
55
+ return (function* () {
56
+ for (const path of paths) {
57
+ const document = collection.document(path);
58
+ if (document !== undefined)
59
+ yield [path, document];
76
60
  }
77
- const read = parse(collection.text[path], path);
78
- if (read.ok)
79
- yield [path, read.document];
80
- }
81
- }
82
- export function unreadable(text, previous) {
83
- const paths = previous === undefined
84
- ? Object.keys(text)
85
- : [...differing(previous, text)].filter((path) => text[path] !== undefined);
86
- for (const path of paths.sort()) {
87
- const read = parse(text[path], path);
88
- if (!read.ok)
89
- return { kind: 'refused', refusal: read.refusal };
90
- }
91
- return null;
61
+ })();
92
62
  }
93
63
  export function validRoot(root) {
94
64
  return typeof root === 'string' && normalize(root) === root;
95
65
  }
96
- function validateAgainst(documents, binaryTargets, model) {
97
- if (model.status === 'unavailable') {
98
- const typed = Object.entries(documents).find(([, content]) => {
99
- const parsed = parse(content);
100
- return parsed.ok && parsed.document.type !== undefined && parsed.document.type !== 'any';
101
- });
102
- if (typed !== undefined)
103
- return { verdict: 'refuse', rule: 'model-unavailable', file: typed[0] };
104
- }
105
- return validate(documents, { binaryTargets }, model.status === 'unavailable' ? NO_TYPES : { types: model.types });
106
- }
107
- export function validateCollection(text, binaryTargets, composition) {
108
- const collection = {};
109
- const selection = {};
110
- for (const [path, content] of Object.entries(text)) {
111
- if (selected(composition, path))
112
- selection[path] = content;
113
- else
114
- collection[path] = content;
115
- }
116
- const verdicts = [
117
- validateAgainst(collection, binaryTargets.filter((path) => !selected(composition, path)), composition.model),
118
- ];
119
- if (composition.selection !== null) {
120
- verdicts.push(validateAgainst(selection, binaryTargets.filter((path) => selected(composition, path)), composition.selection.model));
121
- }
122
- const refusals = verdicts.filter((verdict) => verdict.verdict === 'refuse');
123
- if (refusals.length === 0)
124
- return verdicts[0];
125
- return refusals.find((refusal) => refusal.rule !== 'model-unavailable') ?? refusals[0];
126
- }
127
- const NO_REFERRERS = shared({});
128
- const referrersOf = new WeakMap();
129
- function typing(left, right) {
130
- return (sameTyping(left.model, right.model) &&
131
- (left.selection === null || right.selection === null
132
- ? left.selection === right.selection
133
- : sameTyping(left.selection.model, right.selection.model)) &&
134
- JSON.stringify(left.selection?.roots ?? null) === JSON.stringify(right.selection?.roots ?? null));
135
- }
136
- function declared(content) {
137
- if (content === undefined)
138
- return undefined;
139
- const read = parseFrontmatter(content);
140
- return read.ok ? (read.frontmatter.type ?? 'any') : undefined;
141
- }
142
- function typedIn(content) {
143
- const type = declared(content);
144
- return type !== undefined && type !== 'any';
145
- }
146
- function modelOf(composition, path) {
147
- const model = governing(composition, path);
148
- return model.status === 'unavailable' ? null : { types: model.types };
149
- }
150
- function checked(path, content, composition) {
151
- return checkDocument(path, content, modelOf(composition, path) ?? NO_TYPES);
152
- }
153
- function targetsOf(check) {
154
- if (!check.ok)
155
- return [];
156
- return [...new Set(check.references.flatMap(({ target }) => (target === null ? [] : [target])))];
157
- }
158
- function referencedBy(path, content, composition) {
159
- const model = modelOf(composition, path);
160
- if (model === null)
161
- return [];
162
- const read = parseFrontmatter(content, path);
163
- const type = read.ok ? read.frontmatter.type : undefined;
164
- if (!read.ok || type === undefined || !Object.hasOwn(model.types, type))
165
- return [];
166
- const definition = model.types[type];
167
- return [
168
- ...new Set([
169
- ...references(read.frontmatter, definition).flatMap(({ value }) => {
170
- const found = target(path, value);
171
- return found === null ? [] : [found];
172
- }),
173
- ...sectionReferences(path, content, definition).flatMap(({ target }) => target === null ? [] : [target]),
174
- ]),
175
- ];
176
- }
177
- function referrersOfTarget(index, target) {
178
- return Object.hasOwn(index.referrers, target) ? index.referrers[target] : NO_REFERRERS;
179
- }
180
- function reindexed(index, changed) {
181
- const referrers = new Map();
182
- const held = (target) => referrers.get(target) ?? referrersOfTarget(index, target);
183
- for (const [path, found] of changed) {
184
- const before = Object.hasOwn(index.targets, path) ? index.targets[path] : [];
185
- for (const target of before) {
186
- if (!found.includes(target))
187
- referrers.set(target, patched(held(target), [], [path]));
188
- }
189
- for (const target of found) {
190
- if (!before.includes(target))
191
- referrers.set(target, patched(held(target), [[path, true]]));
192
- }
193
- }
194
- return {
195
- composition: index.composition,
196
- targets: patched(index.targets, [...changed].filter(([, found]) => found.length > 0), [...changed].filter(([, found]) => found.length === 0).map(([path]) => path)),
197
- referrers: patched(index.referrers, [...referrers].filter(([, files]) => sizeOf(files) > 0), [...referrers].filter(([, files]) => sizeOf(files) === 0).map(([target]) => target)),
198
- };
199
- }
200
- function storedIn(entries) {
201
- let stored = shared({});
202
- let unit = [];
203
- return after(inUnits(entries, (entry) => {
204
- unit.push(entry);
205
- return ROW_WEIGHT;
206
- }, () => {
207
- stored = patched(stored, unit);
208
- unit = [];
209
- }), () => stored);
210
- }
211
- function storedReferrers(referrers) {
212
- const sets = new Map();
213
- let unit = new Map();
214
- const pairs = function* () {
215
- for (const [target, files] of referrers)
216
- for (const file of files)
217
- yield [target, file];
218
- };
219
- return after(inUnits(pairs(), ([target, file]) => {
220
- const files = unit.get(target);
221
- if (files === undefined)
222
- unit.set(target, [file]);
223
- else
224
- files.push(file);
225
- return ROW_WEIGHT;
226
- }, () => {
227
- for (const [target, files] of unit) {
228
- sets.set(target, patched(sets.get(target) ?? NO_REFERRERS, files.map((file) => [file, true])));
229
- }
230
- unit = new Map();
231
- }), () => storedIn(sets));
232
- }
233
- function heldIndex(held, composition) {
234
- const index = referrersOf.get(held.text);
235
- return index !== undefined && typing(index.composition, composition) ? index : null;
236
- }
237
- const indexing = new WeakMap();
238
- export function indexReferrers(held, composition) {
239
- if (heldIndex(held, composition) !== null)
240
- return;
241
- const running = indexing.get(held.text);
242
- if (running !== undefined)
243
- return running;
244
- const targets = new Map();
245
- const referrers = new Map();
246
- const filled = inUnits(Object.keys(held.text), (path) => {
247
- const content = held.text[path];
248
- const found = referencedBy(path, content, composition);
249
- if (found.length > 0)
250
- targets.set(path, found);
251
- for (const target of found) {
252
- const files = referrers.get(target);
253
- if (files === undefined)
254
- referrers.set(target, [path]);
255
- else
256
- files.push(path);
257
- }
258
- return ROW_WEIGHT + content.length;
259
- });
260
- const indexed = after(filled, () => after(storedIn(targets), (storedTargets) => after(storedReferrers(referrers), (stored) => {
261
- referrersOf.set(held.text, { composition, targets: storedTargets, referrers: stored });
262
- })));
263
- if (!(indexed instanceof Promise))
264
- return;
265
- const building = indexed.finally(() => indexing.delete(held.text));
266
- indexing.set(held.text, building);
267
- return building;
268
- }
269
- export function referencesIndexed(held, composition) {
270
- return heldIndex(held, composition) !== null;
271
- }
272
- export function referring(held, composition, targets) {
273
- const index = heldIndex(held, composition);
274
- if (index === null)
275
- return null;
276
- const found = new Set();
277
- for (const target of targets) {
278
- for (const file of Object.keys(referrersOfTarget(index, target)))
279
- found.add(file);
280
- }
281
- return found;
282
- }
283
66
  export function available(composition) {
284
- return (composition.model.status !== 'unavailable' &&
285
- (composition.selection === null || composition.selection.model.status !== 'unavailable'));
286
- }
287
- export function changedCleanly(next, previous, composition) {
288
- if (!typing(previous.composition, composition))
289
- return false;
290
- const paths = new Set([
291
- ...differing(previous.text, next.text),
292
- ...differing(previous.binaries, next.binaries, () => true),
293
- ]);
294
- const binary = (path) => Object.hasOwn(next.binaries, path);
295
- const within = (file) => (path) => selected(composition, path) === selected(composition, file);
296
- const reaching = (file, check) => {
297
- if (!check.ok)
298
- return false;
299
- const part = within(file);
300
- return check.references.every((reference) => resolves(reference, (path) => (part(path) ? declared(next.text[path]) : undefined), (path) => part(path) && binary(path)));
301
- };
302
- const changedTargets = new Map();
303
- const shifted = [];
304
- for (const path of paths) {
305
- const now = next.text[path];
306
- const was = previous.text[path];
307
- const modeled = modelOf(composition, path) !== null;
308
- if ((now === undefined) !== (was === undefined) ||
309
- declared(now) !== declared(was) ||
310
- binary(path) !== Object.hasOwn(previous.binaries, path)) {
311
- shifted.push(path);
312
- }
313
- if (!modeled && typedIn(was) && !typedIn(now))
314
- return false;
315
- if (now === undefined) {
316
- if (modeled)
317
- changedTargets.set(path, []);
318
- continue;
319
- }
320
- if (binary(path))
321
- return false;
322
- if (!modeled) {
323
- if (declared(now) === undefined)
324
- return false;
325
- if (!typedIn(now) && !checked(path, now, composition).ok)
326
- return false;
327
- continue;
328
- }
329
- const check = checked(path, now, composition);
330
- if (!reaching(path, check))
331
- return false;
332
- changedTargets.set(path, targetsOf(check));
333
- }
334
- const index = heldIndex(previous, composition);
335
- if (index === null && shifted.length > 0)
336
- return false;
337
- for (const target of shifted) {
338
- const files = index === null ? [] : Object.keys(referrersOfTarget(index, target));
339
- for (const file of files) {
340
- if (paths.has(file))
341
- continue;
342
- if (!reaching(file, checked(file, next.text[file], composition)))
343
- return false;
344
- }
345
- }
346
- if (index !== null) {
347
- referrersOf.set(next.text, changedTargets.size === 0 ? index : reindexed(index, changedTargets));
348
- }
349
- return true;
67
+ return composition.model.status !== 'unavailable';
350
68
  }
@@ -0,0 +1,16 @@
1
+ import { sql } from '@agentshouse/mdmodel';
2
+ import type { Plan, QueryRows } from './query.js';
3
+ import type { Connection } from './tables.js';
4
+ export type QueryRoom = {
5
+ readonly locator: string;
6
+ readonly key: number;
7
+ };
8
+ type Fragment = sql.Fragment;
9
+ export declare const VISIBLE: (alias: string) => string;
10
+ export declare function within(alias: string, path: string): Fragment;
11
+ export type QueryAnswer = QueryRows & {
12
+ readonly more?: string;
13
+ };
14
+ export declare function answerQuery(connection: Connection, plan: Plan, rooms: readonly QueryRoom[], budget?: number | null): QueryAnswer;
15
+ export {};
16
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,GAAG,EAOJ,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,IAAI,EAAuC,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvF,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,KAAK,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAI7B,eAAO,MAAM,OAAO,UAAW,MAAM,KAAG,MACkC,CAAC;AAa3E,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAM5D;AA0cD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAmajE,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,SAAS,SAAS,EAAE,EAC3B,MAAM,GAAE,MAAM,GAAG,IAAW,GAC3B,WAAW,CAUb"}