@agentshouse/mdruntime 0.1.0-caee7332d2235 → 0.1.0-caf080a9a9c60

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 (394) hide show
  1. package/README.md +19 -16
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +318 -0
  5. package/dist/act-lanes.d.ts +29 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +177 -0
  8. package/dist/actions.d.ts +25 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +261 -0
  11. package/dist/adapter.d.ts +162 -122
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +7 -10
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +40 -41
  16. package/dist/binary.d.ts +0 -5
  17. package/dist/binary.d.ts.map +1 -1
  18. package/dist/binary.js +1 -1
  19. package/dist/bootstrap.d.ts +30 -11
  20. package/dist/bootstrap.d.ts.map +1 -1
  21. package/dist/bootstrap.js +309 -113
  22. package/dist/cell.d.ts +6 -0
  23. package/dist/cell.d.ts.map +1 -0
  24. package/dist/cell.js +9 -0
  25. package/dist/chain.d.ts +12 -0
  26. package/dist/chain.d.ts.map +1 -0
  27. package/dist/chain.js +64 -0
  28. package/dist/change-set.d.ts +10 -16
  29. package/dist/change-set.d.ts.map +1 -1
  30. package/dist/change-set.js +17 -94
  31. package/dist/change.d.ts +32 -1
  32. package/dist/change.d.ts.map +1 -1
  33. package/dist/change.js +14 -3
  34. package/dist/chat-types.d.ts +5 -0
  35. package/dist/chat-types.d.ts.map +1 -0
  36. package/dist/chat-types.js +13 -0
  37. package/dist/client.d.ts +33 -19
  38. package/dist/client.d.ts.map +1 -1
  39. package/dist/client.js +112 -21
  40. package/dist/collection.d.ts +29 -22
  41. package/dist/collection.d.ts.map +1 -1
  42. package/dist/collection.js +47 -354
  43. package/dist/compile.d.ts +18 -0
  44. package/dist/compile.d.ts.map +1 -0
  45. package/dist/compile.js +724 -0
  46. package/dist/connection.d.ts +7 -137
  47. package/dist/connection.d.ts.map +1 -1
  48. package/dist/connection.js +111 -3623
  49. package/dist/context.d.ts +2 -0
  50. package/dist/context.d.ts.map +1 -0
  51. package/dist/{chat/context.js → context.js} +1 -4
  52. package/dist/conversation-live.d.ts +138 -0
  53. package/dist/conversation-live.d.ts.map +1 -0
  54. package/dist/conversation-live.js +249 -0
  55. package/dist/conversation-row.d.ts +33 -0
  56. package/dist/conversation-row.d.ts.map +1 -0
  57. package/dist/conversation-row.js +53 -0
  58. package/dist/conversation.d.ts +66 -49
  59. package/dist/conversation.d.ts.map +1 -1
  60. package/dist/conversation.js +962 -799
  61. package/dist/declaration.d.ts +10 -0
  62. package/dist/declaration.d.ts.map +1 -0
  63. package/dist/declaration.js +24 -0
  64. package/dist/digest.d.ts +7 -0
  65. package/dist/digest.d.ts.map +1 -0
  66. package/dist/digest.js +113 -0
  67. package/dist/discovery.d.ts +10 -0
  68. package/dist/discovery.d.ts.map +1 -0
  69. package/dist/discovery.js +153 -0
  70. package/dist/durability.d.ts +19 -4
  71. package/dist/durability.d.ts.map +1 -1
  72. package/dist/durability.js +5 -0
  73. package/dist/entry.d.ts +5 -2
  74. package/dist/entry.d.ts.map +1 -1
  75. package/dist/entry.js +33 -29
  76. package/dist/expectation.d.ts +26 -13
  77. package/dist/expectation.d.ts.map +1 -1
  78. package/dist/expectation.js +72 -19
  79. package/dist/failure.d.ts +3 -0
  80. package/dist/failure.d.ts.map +1 -1
  81. package/dist/failure.js +6 -0
  82. package/dist/figures.d.ts +49 -0
  83. package/dist/figures.d.ts.map +1 -0
  84. package/dist/figures.js +197 -0
  85. package/dist/file.d.ts +2 -19
  86. package/dist/file.d.ts.map +1 -1
  87. package/dist/file.js +7 -122
  88. package/dist/holdings.d.ts +29 -0
  89. package/dist/holdings.d.ts.map +1 -0
  90. package/dist/holdings.js +95 -0
  91. package/dist/host.d.ts +20 -8
  92. package/dist/host.d.ts.map +1 -1
  93. package/dist/host.js +103 -45
  94. package/dist/identity.d.ts +0 -2
  95. package/dist/identity.d.ts.map +1 -1
  96. package/dist/identity.js +0 -6
  97. package/dist/index.d.ts +39 -15
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +18 -4
  100. package/dist/install.d.ts +54 -0
  101. package/dist/install.d.ts.map +1 -0
  102. package/dist/install.js +539 -0
  103. package/dist/lifecycle.d.ts +7 -0
  104. package/dist/lifecycle.d.ts.map +1 -0
  105. package/dist/lifecycle.js +279 -0
  106. package/dist/listing.d.ts +48 -0
  107. package/dist/listing.d.ts.map +1 -0
  108. package/dist/listing.js +139 -0
  109. package/dist/live.d.ts +23 -0
  110. package/dist/live.d.ts.map +1 -0
  111. package/dist/live.js +165 -0
  112. package/dist/locks.d.ts +7 -0
  113. package/dist/locks.d.ts.map +1 -0
  114. package/dist/locks.js +33 -0
  115. package/dist/log.d.ts +1 -0
  116. package/dist/log.d.ts.map +1 -1
  117. package/dist/lost.d.ts +5 -0
  118. package/dist/lost.d.ts.map +1 -0
  119. package/dist/lost.js +50 -0
  120. package/dist/media.d.ts +8 -0
  121. package/dist/media.d.ts.map +1 -0
  122. package/dist/media.js +218 -0
  123. package/dist/memory.d.ts +17 -7
  124. package/dist/memory.d.ts.map +1 -1
  125. package/dist/memory.js +272 -118
  126. package/dist/messages.d.ts +49 -0
  127. package/dist/messages.d.ts.map +1 -0
  128. package/dist/messages.js +150 -0
  129. package/dist/model.d.ts +8 -11
  130. package/dist/model.d.ts.map +1 -1
  131. package/dist/model.js +6 -23
  132. package/dist/models.d.ts +10 -0
  133. package/dist/models.d.ts.map +1 -0
  134. package/dist/models.js +156 -0
  135. package/dist/name.d.ts +4 -0
  136. package/dist/name.d.ts.map +1 -0
  137. package/dist/name.js +122 -0
  138. package/dist/observation.d.ts +15 -2
  139. package/dist/observation.d.ts.map +1 -1
  140. package/dist/observation.js +98 -14
  141. package/dist/opened.d.ts +22 -0
  142. package/dist/opened.d.ts.map +1 -0
  143. package/dist/opened.js +107 -0
  144. package/dist/opening.d.ts +4 -0
  145. package/dist/opening.d.ts.map +1 -0
  146. package/dist/opening.js +59 -0
  147. package/dist/outcome.d.ts +47 -9
  148. package/dist/outcome.d.ts.map +1 -1
  149. package/dist/outcome.js +56 -2
  150. package/dist/overlay.d.ts +7 -5
  151. package/dist/overlay.d.ts.map +1 -1
  152. package/dist/overlay.js +69 -169
  153. package/dist/page-metadata.d.ts +8 -0
  154. package/dist/page-metadata.d.ts.map +1 -0
  155. package/dist/page-metadata.js +19 -0
  156. package/dist/parts.d.ts +3 -0
  157. package/dist/parts.d.ts.map +1 -0
  158. package/dist/parts.js +10 -0
  159. package/dist/paths.d.ts +2 -0
  160. package/dist/paths.d.ts.map +1 -1
  161. package/dist/paths.js +26 -0
  162. package/dist/preparation.d.ts +20 -0
  163. package/dist/preparation.d.ts.map +1 -0
  164. package/dist/preparation.js +233 -0
  165. package/dist/presence.d.ts +52 -0
  166. package/dist/presence.d.ts.map +1 -0
  167. package/dist/presence.js +220 -0
  168. package/dist/queries.d.ts +16 -0
  169. package/dist/queries.d.ts.map +1 -0
  170. package/dist/queries.js +285 -0
  171. package/dist/query.d.ts +21 -207
  172. package/dist/query.d.ts.map +1 -1
  173. package/dist/query.js +3 -493
  174. package/dist/{chat/questions.d.ts → questions.d.ts} +5 -7
  175. package/dist/questions.d.ts.map +1 -0
  176. package/dist/{chat/questions.js → questions.js} +11 -7
  177. package/dist/queue.d.ts +40 -0
  178. package/dist/queue.d.ts.map +1 -0
  179. package/dist/queue.js +465 -0
  180. package/dist/reach.d.ts +20 -9
  181. package/dist/reach.d.ts.map +1 -1
  182. package/dist/reach.js +306 -111
  183. package/dist/react.d.ts +15 -2
  184. package/dist/react.d.ts.map +1 -1
  185. package/dist/react.js +33 -1
  186. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  187. package/dist/read.d.ts.map +1 -0
  188. package/dist/{chat/read.js → read.js} +4 -0
  189. package/dist/readiness.d.ts +13 -17
  190. package/dist/readiness.d.ts.map +1 -1
  191. package/dist/readiness.js +2 -8
  192. package/dist/reads.d.ts +38 -10
  193. package/dist/reads.d.ts.map +1 -1
  194. package/dist/reads.js +163 -83
  195. package/dist/recovery.d.ts +5 -2
  196. package/dist/recovery.d.ts.map +1 -1
  197. package/dist/recovery.js +65 -8
  198. package/dist/refresh.d.ts +18 -15
  199. package/dist/refresh.d.ts.map +1 -1
  200. package/dist/refresh.js +145 -79
  201. package/dist/refusal.d.ts +5 -0
  202. package/dist/refusal.d.ts.map +1 -0
  203. package/dist/refusal.js +57 -0
  204. package/dist/replica.d.ts +50 -39
  205. package/dist/replica.d.ts.map +1 -1
  206. package/dist/replica.js +319 -208
  207. package/dist/retried.d.ts +30 -0
  208. package/dist/retried.d.ts.map +1 -0
  209. package/dist/retried.js +72 -0
  210. package/dist/room-draft.d.ts +28 -11
  211. package/dist/room-draft.d.ts.map +1 -1
  212. package/dist/room-draft.js +194 -117
  213. package/dist/room-drafts.d.ts +24 -0
  214. package/dist/room-drafts.d.ts.map +1 -0
  215. package/dist/room-drafts.js +217 -0
  216. package/dist/rows.d.ts +31 -31
  217. package/dist/rows.d.ts.map +1 -1
  218. package/dist/rows.js +60 -125
  219. package/dist/runtime.d.ts +36 -0
  220. package/dist/runtime.d.ts.map +1 -0
  221. package/dist/runtime.js +1 -0
  222. package/dist/save.d.ts +43 -50
  223. package/dist/save.d.ts.map +1 -1
  224. package/dist/save.js +661 -228
  225. package/dist/saves.d.ts +32 -0
  226. package/dist/saves.d.ts.map +1 -0
  227. package/dist/saves.js +413 -0
  228. package/dist/search.d.ts +12 -95
  229. package/dist/search.d.ts.map +1 -1
  230. package/dist/search.js +10 -266
  231. package/dist/seed.d.ts +11 -2
  232. package/dist/seed.d.ts.map +1 -1
  233. package/dist/seed.js +71 -1
  234. package/dist/shared.d.ts +4 -9
  235. package/dist/shared.d.ts.map +1 -1
  236. package/dist/shared.js +61 -120
  237. package/dist/shown.d.ts +32 -0
  238. package/dist/shown.d.ts.map +1 -0
  239. package/dist/shown.js +290 -0
  240. package/dist/socket/admission.d.ts +7 -0
  241. package/dist/socket/admission.d.ts.map +1 -0
  242. package/dist/socket/admission.js +39 -0
  243. package/dist/socket/answers.d.ts +6 -0
  244. package/dist/socket/answers.d.ts.map +1 -0
  245. package/dist/socket/answers.js +20 -0
  246. package/dist/socket/lanes.d.ts +21 -0
  247. package/dist/socket/lanes.d.ts.map +1 -0
  248. package/dist/socket/lanes.js +80 -0
  249. package/dist/socket/reads.d.ts +10 -0
  250. package/dist/socket/reads.d.ts.map +1 -0
  251. package/dist/socket/reads.js +31 -0
  252. package/dist/socket/session.d.ts +38 -0
  253. package/dist/socket/session.d.ts.map +1 -0
  254. package/dist/socket/session.js +23 -0
  255. package/dist/socket.d.ts +68 -0
  256. package/dist/socket.d.ts.map +1 -0
  257. package/dist/socket.js +171 -0
  258. package/dist/source.d.ts +54 -0
  259. package/dist/source.d.ts.map +1 -0
  260. package/dist/source.js +82 -0
  261. package/dist/status.d.ts +4 -5
  262. package/dist/status.d.ts.map +1 -1
  263. package/dist/status.js +3 -7
  264. package/dist/store/installs.d.ts +30 -0
  265. package/dist/store/installs.d.ts.map +1 -0
  266. package/dist/store/installs.js +34 -0
  267. package/dist/store/readiness.d.ts +10 -0
  268. package/dist/store/readiness.d.ts.map +1 -0
  269. package/dist/store/readiness.js +52 -0
  270. package/dist/store/records.d.ts +212 -0
  271. package/dist/store/records.d.ts.map +1 -0
  272. package/dist/store/records.js +430 -0
  273. package/dist/store/room-held.d.ts +8 -0
  274. package/dist/store/room-held.d.ts.map +1 -0
  275. package/dist/store/room-held.js +17 -0
  276. package/dist/store/space.d.ts +11 -0
  277. package/dist/store/space.d.ts.map +1 -0
  278. package/dist/store/space.js +41 -0
  279. package/dist/store/watchers.d.ts +17 -0
  280. package/dist/store/watchers.d.ts.map +1 -0
  281. package/dist/store/watchers.js +56 -0
  282. package/dist/store/writes.d.ts +24 -0
  283. package/dist/store/writes.d.ts.map +1 -0
  284. package/dist/store/writes.js +125 -0
  285. package/dist/store.d.ts +111 -166
  286. package/dist/store.d.ts.map +1 -1
  287. package/dist/store.js +158 -797
  288. package/dist/stored.d.ts +156 -0
  289. package/dist/stored.d.ts.map +1 -0
  290. package/dist/stored.js +649 -0
  291. package/dist/surface.d.ts +88 -0
  292. package/dist/surface.d.ts.map +1 -0
  293. package/dist/surface.js +223 -0
  294. package/dist/sync.d.ts +19 -0
  295. package/dist/sync.d.ts.map +1 -0
  296. package/dist/sync.js +540 -0
  297. package/dist/tables.d.ts +412 -0
  298. package/dist/tables.d.ts.map +1 -0
  299. package/dist/tables.js +737 -0
  300. package/dist/tallies.d.ts +18 -0
  301. package/dist/tallies.d.ts.map +1 -0
  302. package/dist/tallies.js +129 -0
  303. package/dist/transfer.d.ts +0 -5
  304. package/dist/transfer.d.ts.map +1 -1
  305. package/dist/turn.d.ts +1 -1
  306. package/dist/turn.d.ts.map +1 -1
  307. package/dist/turn.js +31 -20
  308. package/dist/validation.d.ts +29 -0
  309. package/dist/validation.d.ts.map +1 -0
  310. package/dist/validation.js +104 -0
  311. package/dist/windows.d.ts +1 -16
  312. package/dist/windows.d.ts.map +1 -1
  313. package/dist/windows.js +2 -79
  314. package/dist/wire.d.ts +72 -8
  315. package/dist/wire.d.ts.map +1 -1
  316. package/dist/wire.js +24 -5
  317. package/package.json +19 -19
  318. package/AGENTS.md +0 -299
  319. package/dist/attempt.d.ts +0 -16
  320. package/dist/attempt.d.ts.map +0 -1
  321. package/dist/attempt.js +0 -70
  322. package/dist/chat/acts.d.ts +0 -33
  323. package/dist/chat/acts.d.ts.map +0 -1
  324. package/dist/chat/acts.js +0 -36
  325. package/dist/chat/context.d.ts +0 -3
  326. package/dist/chat/context.d.ts.map +0 -1
  327. package/dist/chat/earlier.d.ts +0 -10
  328. package/dist/chat/earlier.d.ts.map +0 -1
  329. package/dist/chat/earlier.js +0 -54
  330. package/dist/chat/input.d.ts +0 -9
  331. package/dist/chat/input.d.ts.map +0 -1
  332. package/dist/chat/input.js +0 -99
  333. package/dist/chat/kit.d.ts +0 -61
  334. package/dist/chat/kit.d.ts.map +0 -1
  335. package/dist/chat/kit.js +0 -123
  336. package/dist/chat/lasting.d.ts +0 -6
  337. package/dist/chat/lasting.d.ts.map +0 -1
  338. package/dist/chat/lasting.js +0 -19
  339. package/dist/chat/list.d.ts +0 -27
  340. package/dist/chat/list.d.ts.map +0 -1
  341. package/dist/chat/list.js +0 -99
  342. package/dist/chat/markdown.d.ts +0 -21
  343. package/dist/chat/markdown.d.ts.map +0 -1
  344. package/dist/chat/markdown.js +0 -246
  345. package/dist/chat/message.d.ts +0 -6
  346. package/dist/chat/message.d.ts.map +0 -1
  347. package/dist/chat/message.js +0 -192
  348. package/dist/chat/messages.d.ts +0 -22
  349. package/dist/chat/messages.d.ts.map +0 -1
  350. package/dist/chat/messages.js +0 -171
  351. package/dist/chat/name.d.ts +0 -6
  352. package/dist/chat/name.d.ts.map +0 -1
  353. package/dist/chat/name.js +0 -37
  354. package/dist/chat/opened.d.ts +0 -11
  355. package/dist/chat/opened.d.ts.map +0 -1
  356. package/dist/chat/opened.js +0 -17
  357. package/dist/chat/overlay.d.ts +0 -31
  358. package/dist/chat/overlay.d.ts.map +0 -1
  359. package/dist/chat/overlay.js +0 -97
  360. package/dist/chat/parts.d.ts +0 -57
  361. package/dist/chat/parts.d.ts.map +0 -1
  362. package/dist/chat/parts.js +0 -119
  363. package/dist/chat/pieces.d.ts +0 -62
  364. package/dist/chat/pieces.d.ts.map +0 -1
  365. package/dist/chat/pieces.js +0 -1110
  366. package/dist/chat/process.d.ts +0 -20
  367. package/dist/chat/process.d.ts.map +0 -1
  368. package/dist/chat/process.js +0 -32
  369. package/dist/chat/provider.d.ts +0 -63
  370. package/dist/chat/provider.d.ts.map +0 -1
  371. package/dist/chat/provider.js +0 -630
  372. package/dist/chat/question.d.ts +0 -9
  373. package/dist/chat/question.d.ts.map +0 -1
  374. package/dist/chat/question.js +0 -69
  375. package/dist/chat/questions.d.ts.map +0 -1
  376. package/dist/chat/read.d.ts.map +0 -1
  377. package/dist/chat/ready.d.ts +0 -34
  378. package/dist/chat/ready.d.ts.map +0 -1
  379. package/dist/chat/ready.js +0 -91
  380. package/dist/chat/steady.d.ts +0 -3
  381. package/dist/chat/steady.d.ts.map +0 -1
  382. package/dist/chat/steady.js +0 -26
  383. package/dist/chat/style.d.ts +0 -4
  384. package/dist/chat/style.d.ts.map +0 -1
  385. package/dist/chat/style.js +0 -302
  386. package/dist/chat.d.ts +0 -14
  387. package/dist/chat.d.ts.map +0 -1
  388. package/dist/chat.js +0 -8
  389. package/dist/fence.d.ts +0 -6
  390. package/dist/fence.d.ts.map +0 -1
  391. package/dist/fence.js +0 -10
  392. package/dist/read-side.d.ts +0 -27
  393. package/dist/read-side.d.ts.map +0 -1
  394. package/dist/read-side.js +0 -826
package/dist/overlay.js CHANGED
@@ -1,8 +1,10 @@
1
- import { apply, frontmatterValue, parse, serialize, } from '@agentshouse/mdmodel';
2
- import { differences, drafted, patching, settling } from './shared.js';
1
+ import { apply, create, frontmatterValue, parse, serialize, TYPE_FIELD, } from '@agentshouse/mdmodel';
2
+ import { definitionsAt } from './collection.js';
3
+ import { drafted, entriesIn, settling } from './shared.js';
3
4
  import { ROW_WEIGHT } from './turn.js';
4
- export function acceptedBinaries(files) {
5
- return Object.fromEntries(Object.entries(files).map(([path, file]) => [path, { state: 'accepted', ...file }]));
5
+ export function* acceptedBinaries(files) {
6
+ for (const [path, file] of entriesIn(files))
7
+ yield [path, { state: 'accepted', ...file }];
6
8
  }
7
9
  export function sameBinary(left, right) {
8
10
  if (left === undefined || right === undefined)
@@ -12,7 +14,7 @@ export function sameBinary(left, right) {
12
14
  left.mediaType === right.mediaType &&
13
15
  left.sha256 === right.sha256 &&
14
16
  (left.state === 'accepted'
15
- ? right.state === 'accepted' && left.fileRef === right.fileRef
17
+ ? right.state === 'accepted'
16
18
  : right.state === 'pending' && left.localId === right.localId));
17
19
  }
18
20
  export function sameChange(left, right) {
@@ -23,7 +25,6 @@ export function sameChange(left, right) {
23
25
  left.author?.id === right.author?.id &&
24
26
  left.author?.name === right.author?.name);
25
27
  }
26
- const EMPTY_FRONTMATTER = '---\n---\n';
27
28
  function isPart(change) {
28
29
  return change.kind === 'field' || change.kind === 'section' || change.kind === 'preamble';
29
30
  }
@@ -52,16 +53,27 @@ function* priorsOf(preconditions) {
52
53
  preamble: (path) => preambles.get(path) ?? '',
53
54
  };
54
55
  }
55
- function compose(fields, sections) {
56
- const body = Object.entries(sections)
57
- .map(([name, value]) => `\n## ${name}\n${value}`)
58
- .join('');
59
- const skeleton = `${EMPTY_FRONTMATTER}${body}`;
60
- const opened = parse(skeleton);
61
- if (!opened.ok)
62
- return skeleton;
63
- const next = apply(opened.document, Object.entries(fields).flatMap(([name, value]) => frontmatterValue(value) ? [{ kind: 'field', name, value, prior: undefined }] : []));
64
- return serialize(next.outcome === 'applied' ? next.document : opened.document);
56
+ export function composed(path, fields, sections, composition) {
57
+ const declared = fields[TYPE_FIELD];
58
+ const type = typeof declared === 'string' && declared !== '' ? declared : undefined;
59
+ const definition = definitionsAt(composition, path)(type);
60
+ return apply(create(type, definition), [
61
+ ...Object.entries(fields).flatMap(([name, value]) => (name !== TYPE_FIELD || type === undefined) && frontmatterValue(value)
62
+ ? [{ kind: 'field', name, value, prior: undefined }]
63
+ : []),
64
+ ...Object.entries(sections).map(([name, value]) => ({
65
+ kind: 'section',
66
+ name,
67
+ value,
68
+ prior: undefined,
69
+ })),
70
+ ], definition);
71
+ }
72
+ export function compose(path, fields, sections, composition) {
73
+ const next = composed(path, fields, sections, composition);
74
+ if (next.outcome !== 'applied')
75
+ throw new Error(`the creation of ${path} writes no document`);
76
+ return serialize(next.document);
65
77
  }
66
78
  function edited(change, priors) {
67
79
  if (change.kind === 'field')
@@ -80,17 +92,19 @@ function edited(change, priors) {
80
92
  prior: priors.section(change.path, change.name),
81
93
  };
82
94
  }
83
- function edit(staged, changes, priors) {
95
+ function edit(staged, changes, priors, composition) {
84
96
  const path = changes[0].path;
85
97
  delete staged.revisions[path];
86
98
  const text = staged.documents[path];
87
99
  if (text === undefined)
88
100
  return changes.length;
89
- const parsed = parse(text, path);
101
+ const definitions = definitionsAt(composition, path);
102
+ const parsed = parse(text, path, definitions);
90
103
  if (!parsed.ok)
91
104
  return changes.length;
105
+ const definition = definitions(parsed.document.type);
92
106
  const wanted = changes.map((change) => edited(change, priors));
93
- const first = apply(parsed.document, wanted);
107
+ const first = apply(parsed.document, wanted, definition);
94
108
  if (first.outcome === 'refuse')
95
109
  return changes.length;
96
110
  if (first.outcome === 'applied') {
@@ -99,7 +113,7 @@ function edit(staged, changes, priors) {
99
113
  }
100
114
  const stale = new Set(first.stale);
101
115
  const kept = wanted.filter((_, at) => !stale.has(at));
102
- const rest = apply(parsed.document, kept);
116
+ const rest = apply(parsed.document, kept, definition);
103
117
  if (rest.outcome !== 'applied')
104
118
  return changes.length;
105
119
  staged.documents[path] = serialize(rest.document);
@@ -124,16 +138,21 @@ function relocate(staged, from, to) {
124
138
  function moveHead(heads, from, to) {
125
139
  const revision = heads.revisions[from];
126
140
  const fileId = heads.fileIds[from];
141
+ const created = heads.created[from];
127
142
  const change = heads.changes[from];
128
143
  delete heads.revisions[from];
129
144
  delete heads.fileIds[from];
145
+ delete heads.created[from];
130
146
  delete heads.changes[from];
131
147
  delete heads.fileIds[to];
148
+ delete heads.created[to];
132
149
  delete heads.changes[to];
133
150
  if (revision !== undefined)
134
151
  heads.revisions[to] = revision;
135
152
  if (fileId !== undefined)
136
153
  heads.fileIds[to] = fileId;
154
+ if (created !== undefined)
155
+ heads.created[to] = created;
137
156
  if (change !== undefined)
138
157
  heads.changes[to] = change;
139
158
  }
@@ -141,14 +160,18 @@ function erase(staged, path) {
141
160
  delete staged.documents[path];
142
161
  delete staged.revisions[path];
143
162
  delete staged.fileIds[path];
163
+ delete staged.created[path];
144
164
  delete staged.changes[path];
145
165
  delete staged.binaries[path];
146
166
  }
147
- function stage(staged, change) {
167
+ function stage(staged, change, composition) {
148
168
  if (change.kind === 'create') {
149
169
  staged.documents[change.path] =
150
- 'content' in change ? change.content : compose(change.fields, change.sections);
170
+ 'content' in change
171
+ ? change.content
172
+ : compose(change.path, change.fields, change.sections, composition);
151
173
  delete staged.fileIds[change.path];
174
+ delete staged.created[change.path];
152
175
  delete staged.changes[change.path];
153
176
  return true;
154
177
  }
@@ -176,15 +199,35 @@ function stage(staged, change) {
176
199
  if (change.kind === 'move') {
177
200
  return relocate(staged, change.path, change.to);
178
201
  }
202
+ if (change.kind === 'arrival') {
203
+ erase(staged, change.path);
204
+ if ('content' in change)
205
+ staged.documents[change.path] = change.content;
206
+ else
207
+ staged.binaries[change.path] = { state: 'accepted', ...change.binary };
208
+ arrive(staged, change);
209
+ return true;
210
+ }
179
211
  erase(staged, change.path);
180
212
  return true;
181
213
  }
182
- export function* overlaying(base, queue, unapplied) {
214
+ function arrive(heads, change) {
215
+ if (change.revision !== undefined)
216
+ heads.revisions[change.path] = change.revision;
217
+ if (change.fileId !== undefined)
218
+ heads.fileIds[change.path] = change.fileId;
219
+ if (change.created !== undefined)
220
+ heads.created[change.path] = change.created;
221
+ if (change.change !== undefined)
222
+ heads.changes[change.path] = change.change;
223
+ }
224
+ export function* overlaying(base, queue, composition, unapplied) {
183
225
  const staged = {
184
226
  documents: drafted(base.documents),
185
227
  binaries: drafted(base.binaries),
186
228
  revisions: drafted(base.revisions),
187
229
  fileIds: drafted(base.fileIds),
230
+ created: drafted(base.created),
188
231
  changes: drafted(base.changes),
189
232
  };
190
233
  for (const batch of queue) {
@@ -192,7 +235,7 @@ export function* overlaying(base, queue, unapplied) {
192
235
  for (let index = 0; index < batch.changes.length; index += 1) {
193
236
  const change = batch.changes[index];
194
237
  if (!isPart(change)) {
195
- if (!stage(staged, change))
238
+ if (!stage(staged, change, composition))
196
239
  unapplied?.();
197
240
  yield ROW_WEIGHT;
198
241
  continue;
@@ -206,7 +249,7 @@ export function* overlaying(base, queue, unapplied) {
206
249
  index += 1;
207
250
  }
208
251
  const text = staged.documents[change.path] ?? '';
209
- for (let left = edit(staged, run, priors); left > 0; left -= 1)
252
+ for (let left = edit(staged, run, priors, composition); left > 0; left -= 1)
210
253
  unapplied?.();
211
254
  yield ROW_WEIGHT + text.length;
212
255
  }
@@ -216,150 +259,7 @@ export function* overlaying(base, queue, unapplied) {
216
259
  binaries: yield* settling(staged.binaries),
217
260
  revisions: yield* settling(staged.revisions),
218
261
  fileIds: yield* settling(staged.fileIds),
262
+ created: yield* settling(staged.created),
219
263
  changes: yield* settling(staged.changes),
220
264
  };
221
265
  }
222
- function* pathsOf(batch) {
223
- const paths = new Set();
224
- for (const change of batch.changes) {
225
- paths.add(change.path);
226
- if (change.kind === 'move')
227
- paths.add(change.to);
228
- yield ROW_WEIGHT;
229
- }
230
- return paths;
231
- }
232
- export function* sameText(left, right) {
233
- return ((yield* differences(left.documents, right.documents)).size === 0 &&
234
- (yield* differences(left.binaries, right.binaries, sameBinary)).size === 0);
235
- }
236
- export function* changedPaths(left, right) {
237
- return new Set([
238
- ...(yield* differences(left.documents, right.documents)),
239
- ...(yield* differences(left.revisions, right.revisions)),
240
- ...(yield* differences(left.fileIds, right.fileIds)),
241
- ...(yield* differences(left.changes, right.changes, sameChange)),
242
- ...(yield* differences(left.binaries, right.binaries, sameBinary)),
243
- ]);
244
- }
245
- function* sameItems(left, right) {
246
- if (left.length !== right.length)
247
- return false;
248
- for (let index = 0; index < left.length; index += 1) {
249
- const item = JSON.stringify(left[index]);
250
- if (item !== JSON.stringify(right[index]))
251
- return false;
252
- yield ROW_WEIGHT + item.length;
253
- }
254
- return true;
255
- }
256
- function* sameBatch(left, right) {
257
- if (left === right)
258
- return true;
259
- const { changes, preconditions, ...rest } = left;
260
- const { changes: others, preconditions: priors, ...held } = right;
261
- return (JSON.stringify(rest) === JSON.stringify(held) &&
262
- (yield* sameItems(changes, others)) &&
263
- (yield* sameItems(preconditions, priors)));
264
- }
265
- function* replayHeads(base, batch) {
266
- const heads = {
267
- revisions: drafted(base.revisions),
268
- fileIds: drafted(base.fileIds),
269
- changes: drafted(base.changes),
270
- };
271
- for (const change of batch.changes) {
272
- if (change.kind === 'remove') {
273
- delete heads.revisions[change.path];
274
- delete heads.fileIds[change.path];
275
- delete heads.changes[change.path];
276
- }
277
- else if (change.kind === 'create') {
278
- delete heads.fileIds[change.path];
279
- delete heads.changes[change.path];
280
- }
281
- else if (change.kind === 'replace' ||
282
- change.kind === 'field' ||
283
- change.kind === 'section' ||
284
- change.kind === 'preamble') {
285
- delete heads.revisions[change.path];
286
- }
287
- else if (change.kind === 'binary') {
288
- delete heads.revisions[change.path];
289
- delete heads.changes[change.path];
290
- }
291
- else if (change.kind === 'move') {
292
- moveHead(heads, change.path, change.to);
293
- }
294
- yield ROW_WEIGHT;
295
- }
296
- return {
297
- revisions: yield* settling(heads.revisions),
298
- fileIds: yield* settling(heads.fileIds),
299
- changes: yield* settling(heads.changes),
300
- };
301
- }
302
- function* repatched(held, paths, value) {
303
- const set = [];
304
- const removed = [];
305
- for (const path of paths) {
306
- const found = value(path);
307
- if (found === undefined)
308
- removed.push(path);
309
- else
310
- set.push([path, found]);
311
- yield ROW_WEIGHT;
312
- }
313
- return yield* patching(held, set, removed);
314
- }
315
- export function* overlayChanged(base, batch, previousBase, previousBatch, previousVisible) {
316
- const same = yield* sameBatch(batch, previousBatch);
317
- if (same && (yield* sameText(base, previousBase))) {
318
- return {
319
- documents: previousVisible.documents,
320
- binaries: previousVisible.binaries,
321
- ...(yield* replayHeads(base, batch)),
322
- };
323
- }
324
- const affected = new Set(yield* changedPaths(base, previousBase));
325
- const touched = yield* pathsOf(batch);
326
- let replayed = !same;
327
- if (replayed)
328
- for (const path of yield* pathsOf(previousBatch))
329
- affected.add(path);
330
- for (const path of touched) {
331
- if (affected.has(path))
332
- replayed = true;
333
- yield ROW_WEIGHT;
334
- }
335
- const restricted = {
336
- documents: {},
337
- revisions: {},
338
- fileIds: {},
339
- changes: {},
340
- binaries: {},
341
- };
342
- for (const path of replayed ? touched : []) {
343
- affected.add(path);
344
- if (base.documents[path] !== undefined)
345
- restricted.documents[path] = base.documents[path];
346
- if (base.revisions[path] !== undefined)
347
- restricted.revisions[path] = base.revisions[path];
348
- if (base.fileIds[path] !== undefined)
349
- restricted.fileIds[path] = base.fileIds[path];
350
- if (base.changes[path] !== undefined)
351
- restricted.changes[path] = base.changes[path];
352
- if (base.binaries[path] !== undefined)
353
- restricted.binaries[path] = base.binaries[path];
354
- yield ROW_WEIGHT;
355
- }
356
- const staged = replayed ? yield* overlaying(restricted, [batch]) : base;
357
- const from = (path) => (touched.has(path) ? staged : base);
358
- return {
359
- documents: yield* repatched(previousVisible.documents, affected, (path) => from(path).documents[path]),
360
- revisions: yield* repatched(previousVisible.revisions, affected, (path) => from(path).revisions[path]),
361
- fileIds: yield* repatched(previousVisible.fileIds, affected, (path) => from(path).fileIds[path]),
362
- changes: yield* repatched(previousVisible.changes, affected, (path) => from(path).changes[path]),
363
- binaries: yield* repatched(previousVisible.binaries, affected, (path) => from(path).binaries[path]),
364
- };
365
- }
@@ -0,0 +1,8 @@
1
+ export declare const PAGE_METADATA_WORDS: {
2
+ readonly heading: 'Page metadata';
3
+ readonly app: 'App';
4
+ readonly address: 'Address';
5
+ readonly queries: 'Local Queries';
6
+ };
7
+ export declare function pageMetadataBlock(app: string, address: string, queries: readonly unknown[]): string;
8
+ //# sourceMappingURL=page-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-metadata.d.ts","sourceRoot":"","sources":["../src/page-metadata.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;aAC9B,OAAO,EAAE,eAAe;aACxB,GAAG,EAAE,KAAK;aACV,OAAO,EAAE,SAAS;aAClB,OAAO,EAAE,eAAe;CAChB,CAAC;AAIX,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,SAAS,OAAO,EAAE,GAC1B,MAAM,CAUR"}
@@ -0,0 +1,19 @@
1
+ import { queryKey } from '@agentshouse/mdmodel';
2
+ export const PAGE_METADATA_WORDS = {
3
+ heading: 'Page metadata',
4
+ app: 'App',
5
+ address: 'Address',
6
+ queries: 'Local Queries',
7
+ };
8
+ const PAGE_METADATA_QUERIES = 10;
9
+ export function pageMetadataBlock(app, address, queries) {
10
+ const held = [...new Set(queries.map(queryKey))];
11
+ return [
12
+ PAGE_METADATA_WORDS.heading,
13
+ `${PAGE_METADATA_WORDS.app}: ${app}`,
14
+ `${PAGE_METADATA_WORDS.address}: ${address}`,
15
+ ...(held.length === 0 || held.length > PAGE_METADATA_QUERIES
16
+ ? []
17
+ : [`${PAGE_METADATA_WORDS.queries}:`, ...held]),
18
+ ].join('\n');
19
+ }
@@ -0,0 +1,3 @@
1
+ import { type Part } from '@agentshouse/session-content';
2
+ export declare function runningLine(parts: readonly Part[]): string | null;
3
+ //# sourceMappingURL=parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parts.d.ts","sourceRoot":"","sources":["../src/parts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAGhE,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,MAAM,GAAG,IAAI,CAMjE"}
package/dist/parts.js ADDED
@@ -0,0 +1,10 @@
1
+ import { isOwn } from '@agentshouse/session-content';
2
+ import { excerpt } from './read.js';
3
+ export function runningLine(parts) {
4
+ const newest = parts.filter(isOwn).reverse();
5
+ const note = newest.find((part) => part.type === 'text' && part.text.trim() !== '');
6
+ if (note?.type === 'text')
7
+ return excerpt(note.text);
8
+ const call = newest.find((part) => part.type === 'call');
9
+ return call?.type === 'call' && call.line !== '' ? call.line : null;
10
+ }
package/dist/paths.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export declare function normalize(path: string): string | null;
2
2
  export declare function beneath(prefix: string, path: string): boolean;
3
3
  export declare function covered(prefixes: readonly string[], path: string): boolean;
4
+ export declare function authoredAt(patterns: readonly string[], path: string): boolean;
5
+ export declare function ancestors(path: string): readonly string[];
4
6
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAK1E;AAwBD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAGzD"}
package/dist/paths.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { isDocumentPath } from '@agentshouse/mdmodel';
1
2
  export function normalize(path) {
2
3
  const parts = [];
3
4
  for (const part of path.split('/')) {
@@ -22,3 +23,28 @@ export function covered(prefixes, path) {
22
23
  return normalized !== null && (normalized === '' || beneath(normalized, path));
23
24
  });
24
25
  }
26
+ function named(pattern, name) {
27
+ const star = pattern.indexOf('*');
28
+ if (star === -1)
29
+ return pattern === name;
30
+ const before = pattern.slice(0, star);
31
+ const after = pattern.slice(star + 1);
32
+ return (name.length > before.length + after.length && name.startsWith(before) && name.endsWith(after));
33
+ }
34
+ function matched(pattern, path) {
35
+ if (pattern === '/')
36
+ return isDocumentPath(path);
37
+ const wanted = pattern.split('/');
38
+ const names = path.split('/');
39
+ const open = wanted.at(-1) === '**';
40
+ const fixed = open ? wanted.slice(0, -1) : wanted;
41
+ return ((open ? names.length > fixed.length : names.length === fixed.length) &&
42
+ fixed.every((one, at) => named(one, names[at])));
43
+ }
44
+ export function authoredAt(patterns, path) {
45
+ return patterns.some((pattern) => matched(pattern, path));
46
+ }
47
+ export function ancestors(path) {
48
+ const parts = path.split('/');
49
+ return parts.slice(1).map((_, at) => parts.slice(0, at + 1).join('/'));
50
+ }
@@ -0,0 +1,20 @@
1
+ import type { PlanReach } from './query.js';
2
+ import { type PortReach } from './reach.js';
3
+ import { type CodeAvailability, type ConnectionAvailability, type Readiness } from './readiness.js';
4
+ import type { Runtime } from './runtime.js';
5
+ export type ReadinessPort = {
6
+ readonly target: string;
7
+ readonly code: CodeAvailability;
8
+ };
9
+ export type ReadinessWatch = {
10
+ readonly port: ReadinessPort;
11
+ readonly reach: PortReach | null;
12
+ readonly deliver: (readiness: Readiness) => void;
13
+ };
14
+ export declare function prepare(runtime: Runtime, locators?: readonly string[]): void;
15
+ export declare function roomsOfReach(reach: PlanReach): ReadonlySet<string>;
16
+ export declare function connectionNow(runtime: Runtime): Promise<ConnectionAvailability>;
17
+ export declare function deliverOwedReadiness(runtime: Runtime, owed: readonly ReadinessWatch[]): Promise<void>;
18
+ export declare function watchReadiness({ store }: Runtime, port: ReadinessPort, reach: PortReach | null, deliver: (readiness: Readiness) => void): () => void;
19
+ export declare function filled(runtime: Runtime): void;
20
+ //# sourceMappingURL=preparation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preparation.d.ts","sourceRoot":"","sources":["../src/preparation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAE3B,KAAK,SAAS,EAEf,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CAClD,CAAC;AAwCF,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAE,SAAS,MAAM,EAAO,QA+BzE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAElE;AAgDD,wBAAsB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAMrF;AAoFD,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,cAAc,EAAE,iBAI3F;AAED,wBAAgB,cAAc,CAC5B,EAAE,KAAK,EAAE,EAAE,OAAO,EAClB,IAAI,EAAE,aAAa,EACnB,KAAK,EAAE,SAAS,GAAG,IAAI,EACvB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GACtC,MAAM,IAAI,CAQZ;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,OAAO,QAMtC"}