@amalgm/shell 0.1.164-preview.36072132286 → 0.1.164-preview.36809057014

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 (475) hide show
  1. package/PURPOSE.md +642 -128
  2. package/README.md +10 -8
  3. package/dist/accepted-tail.d.ts +26 -0
  4. package/dist/accepted-tail.js +37 -0
  5. package/dist/accepted-tail.js.map +1 -0
  6. package/dist/agent-execution.d.ts +16 -1
  7. package/dist/agent-execution.js +13 -5
  8. package/dist/agent-execution.js.map +1 -1
  9. package/dist/apply-cleanup.d.ts +28 -0
  10. package/dist/apply-cleanup.js +166 -0
  11. package/dist/apply-cleanup.js.map +1 -0
  12. package/dist/apply-recovery.d.ts +47 -0
  13. package/dist/apply-recovery.js +99 -0
  14. package/dist/apply-recovery.js.map +1 -0
  15. package/dist/apply-rows.d.ts +72 -0
  16. package/dist/apply-rows.js +150 -0
  17. package/dist/apply-rows.js.map +1 -0
  18. package/dist/apply-saves.d.ts +85 -0
  19. package/dist/apply-saves.js +238 -0
  20. package/dist/apply-saves.js.map +1 -0
  21. package/dist/boot.js +2 -1
  22. package/dist/boot.js.map +1 -1
  23. package/dist/capture-work.d.ts +8 -0
  24. package/dist/capture-work.js +67 -0
  25. package/dist/capture-work.js.map +1 -0
  26. package/dist/cargo-group.d.ts +45 -0
  27. package/dist/cargo-group.js +88 -0
  28. package/dist/cargo-group.js.map +1 -0
  29. package/dist/channel-session.d.ts +4 -2
  30. package/dist/channel-session.js +4 -3
  31. package/dist/channel-session.js.map +1 -1
  32. package/dist/chat-composition.d.ts +2 -0
  33. package/dist/chat-composition.js +1 -0
  34. package/dist/chat-composition.js.map +1 -1
  35. package/dist/cli.js +20 -1
  36. package/dist/cli.js.map +1 -1
  37. package/dist/construct-apply-host.d.ts +4 -2
  38. package/dist/construct-apply-host.js +8 -3
  39. package/dist/construct-apply-host.js.map +1 -1
  40. package/dist/construct-door.js +1 -1
  41. package/dist/construct-door.js.map +1 -1
  42. package/dist/construct-ledger.d.ts +6 -1
  43. package/dist/construct-ledger.js +21 -33
  44. package/dist/construct-ledger.js.map +1 -1
  45. package/dist/content-cache-collection.d.ts +18 -0
  46. package/dist/content-cache-collection.js +99 -0
  47. package/dist/content-cache-collection.js.map +1 -0
  48. package/dist/content-cache-host.d.ts +83 -17
  49. package/dist/content-cache-host.js +335 -95
  50. package/dist/content-cache-host.js.map +1 -1
  51. package/dist/content-cache-namespace.d.ts +59 -0
  52. package/dist/content-cache-namespace.js +210 -0
  53. package/dist/content-cache-namespace.js.map +1 -0
  54. package/dist/content-cache-ownership.d.ts +13 -0
  55. package/dist/content-cache-ownership.js +75 -0
  56. package/dist/content-cache-ownership.js.map +1 -0
  57. package/dist/content-cache-retention.d.ts +23 -0
  58. package/dist/content-cache-retention.js +195 -0
  59. package/dist/content-cache-retention.js.map +1 -0
  60. package/dist/content-capture-pool.d.ts +287 -0
  61. package/dist/content-capture-pool.js +461 -0
  62. package/dist/content-capture-pool.js.map +1 -0
  63. package/dist/content-capture-worker.d.ts +8 -0
  64. package/dist/content-capture-worker.js +109 -0
  65. package/dist/content-capture-worker.js.map +1 -0
  66. package/dist/content-clock.d.ts +42 -0
  67. package/dist/content-clock.js +166 -0
  68. package/dist/content-clock.js.map +1 -0
  69. package/dist/content-direct.d.ts +2 -0
  70. package/dist/content-direct.js +12 -0
  71. package/dist/content-direct.js.map +1 -1
  72. package/dist/content-failure.d.ts +18 -0
  73. package/dist/content-failure.js +38 -0
  74. package/dist/content-failure.js.map +1 -0
  75. package/dist/content-stream-thread.d.ts +60 -0
  76. package/dist/content-stream-thread.js +95 -0
  77. package/dist/content-stream-thread.js.map +1 -0
  78. package/dist/content-stream-worker.d.ts +7 -0
  79. package/dist/content-stream-worker.js +52 -0
  80. package/dist/content-stream-worker.js.map +1 -0
  81. package/dist/declaration-absorption.d.ts +37 -0
  82. package/dist/declaration-absorption.js +119 -0
  83. package/dist/declaration-absorption.js.map +1 -0
  84. package/dist/declaration-chain.d.ts +36 -0
  85. package/dist/declaration-chain.js +96 -0
  86. package/dist/declaration-chain.js.map +1 -0
  87. package/dist/declaration-commit.d.ts +31 -0
  88. package/dist/declaration-commit.js +49 -0
  89. package/dist/declaration-commit.js.map +1 -0
  90. package/dist/declaration-hold.d.ts +22 -0
  91. package/dist/declaration-hold.js +24 -0
  92. package/dist/declaration-hold.js.map +1 -0
  93. package/dist/declaration-journal.d.ts +62 -0
  94. package/dist/declaration-journal.js +99 -0
  95. package/dist/declaration-journal.js.map +1 -0
  96. package/dist/declaration-save.d.ts +31 -0
  97. package/dist/declaration-save.js +134 -0
  98. package/dist/declaration-save.js.map +1 -0
  99. package/dist/detection/accepted-result.d.ts +19 -1
  100. package/dist/detection/accepted-result.js +36 -5
  101. package/dist/detection/accepted-result.js.map +1 -1
  102. package/dist/detection/admission-save.d.ts +55 -0
  103. package/dist/detection/admission-save.js +48 -0
  104. package/dist/detection/admission-save.js.map +1 -0
  105. package/dist/detection/admission-units.d.ts +66 -0
  106. package/dist/detection/admission-units.js +322 -0
  107. package/dist/detection/admission-units.js.map +1 -0
  108. package/dist/detection/alias-discovery.d.ts +12 -0
  109. package/dist/detection/alias-discovery.js +80 -0
  110. package/dist/detection/alias-discovery.js.map +1 -0
  111. package/dist/detection/alias-examination.d.ts +30 -0
  112. package/dist/detection/alias-examination.js +49 -0
  113. package/dist/detection/alias-examination.js.map +1 -0
  114. package/dist/detection/apply-ownership.d.ts +81 -0
  115. package/dist/detection/apply-ownership.js +232 -0
  116. package/dist/detection/apply-ownership.js.map +1 -0
  117. package/dist/detection/basis-advanced.d.ts +11 -0
  118. package/dist/detection/basis-advanced.js +26 -0
  119. package/dist/detection/basis-advanced.js.map +1 -0
  120. package/dist/detection/capture-outcome.d.ts +16 -0
  121. package/dist/detection/capture-outcome.js +92 -0
  122. package/dist/detection/capture-outcome.js.map +1 -0
  123. package/dist/detection/container-membership.d.ts +32 -0
  124. package/dist/detection/container-membership.js +49 -0
  125. package/dist/detection/container-membership.js.map +1 -0
  126. package/dist/detection/detect-cancelled.d.ts +6 -0
  127. package/dist/detection/detect-cancelled.js +10 -0
  128. package/dist/detection/detect-cancelled.js.map +1 -0
  129. package/dist/detection/directory-proof.d.ts +47 -0
  130. package/dist/detection/directory-proof.js +77 -0
  131. package/dist/detection/directory-proof.js.map +1 -0
  132. package/dist/detection/disposition-rows.d.ts +18 -0
  133. package/dist/detection/disposition-rows.js +29 -0
  134. package/dist/detection/disposition-rows.js.map +1 -0
  135. package/dist/detection/dispositions.d.ts +130 -0
  136. package/dist/detection/dispositions.js +248 -0
  137. package/dist/detection/dispositions.js.map +1 -0
  138. package/dist/detection/git-notice.d.ts +88 -0
  139. package/dist/detection/git-notice.js +444 -0
  140. package/dist/detection/git-notice.js.map +1 -0
  141. package/dist/detection/ground-proof.d.ts +130 -0
  142. package/dist/detection/ground-proof.js +274 -0
  143. package/dist/detection/ground-proof.js.map +1 -0
  144. package/dist/detection/ground-reader.d.ts +29 -0
  145. package/dist/detection/ground-reader.js +102 -0
  146. package/dist/detection/ground-reader.js.map +1 -0
  147. package/dist/detection/held-territory.d.ts +51 -0
  148. package/dist/detection/held-territory.js +205 -0
  149. package/dist/detection/held-territory.js.map +1 -0
  150. package/dist/detection/identity-discovery.d.ts +45 -0
  151. package/dist/detection/identity-discovery.js +287 -0
  152. package/dist/detection/identity-discovery.js.map +1 -0
  153. package/dist/detection/maintenance-sweep.d.ts +108 -0
  154. package/dist/detection/maintenance-sweep.js +325 -0
  155. package/dist/detection/maintenance-sweep.js.map +1 -0
  156. package/dist/detection/name-reach.d.ts +12 -0
  157. package/dist/detection/name-reach.js +28 -0
  158. package/dist/detection/name-reach.js.map +1 -0
  159. package/dist/detection/notebook-basis.d.ts +5 -7
  160. package/dist/detection/notebook-basis.js +6 -7
  161. package/dist/detection/notebook-basis.js.map +1 -1
  162. package/dist/detection/owed-selection.d.ts +51 -0
  163. package/dist/detection/owed-selection.js +169 -0
  164. package/dist/detection/owed-selection.js.map +1 -0
  165. package/dist/detection/portable.d.ts +34 -34
  166. package/dist/detection/portable.js +67 -93
  167. package/dist/detection/portable.js.map +1 -1
  168. package/dist/detection/reconciliation-coverage.d.ts +7 -0
  169. package/dist/detection/reconciliation-coverage.js +16 -0
  170. package/dist/detection/reconciliation-coverage.js.map +1 -0
  171. package/dist/detection/repository-publication.d.ts +20 -0
  172. package/dist/detection/repository-publication.js +79 -0
  173. package/dist/detection/repository-publication.js.map +1 -0
  174. package/dist/detection/repository-routes.d.ts +43 -0
  175. package/dist/detection/repository-routes.js +97 -0
  176. package/dist/detection/repository-routes.js.map +1 -0
  177. package/dist/detection/root-examination.d.ts +94 -0
  178. package/dist/detection/root-examination.js +523 -0
  179. package/dist/detection/root-examination.js.map +1 -0
  180. package/dist/detection/runtime.d.ts +131 -64
  181. package/dist/detection/runtime.js +808 -1103
  182. package/dist/detection/runtime.js.map +1 -1
  183. package/dist/detection/scoped-identity-port.d.ts +34 -0
  184. package/dist/detection/scoped-identity-port.js +81 -0
  185. package/dist/detection/scoped-identity-port.js.map +1 -0
  186. package/dist/detection/seal-law.d.ts +66 -0
  187. package/dist/detection/seal-law.js +116 -0
  188. package/dist/detection/seal-law.js.map +1 -0
  189. package/dist/detection/sharing-policy.d.ts +11 -0
  190. package/dist/detection/sharing-policy.js +32 -0
  191. package/dist/detection/sharing-policy.js.map +1 -0
  192. package/dist/detection/thread-database.d.ts +4 -0
  193. package/dist/detection/thread-database.js +30 -0
  194. package/dist/detection/thread-database.js.map +1 -0
  195. package/dist/detection/unreadable.d.ts +11 -0
  196. package/dist/detection/unreadable.js +9 -0
  197. package/dist/detection/unreadable.js.map +1 -0
  198. package/dist/detection/verified-content.d.ts +6 -0
  199. package/dist/detection/verified-content.js +12 -0
  200. package/dist/detection/verified-content.js.map +1 -0
  201. package/dist/detection/walk-law.d.ts +34 -0
  202. package/dist/detection/walk-law.js +55 -0
  203. package/dist/detection/walk-law.js.map +1 -0
  204. package/dist/development/fly-guest.js +2 -1
  205. package/dist/development/fly-guest.js.map +1 -1
  206. package/dist/entity-apply-host.d.ts +29 -13
  207. package/dist/entity-apply-host.js +1426 -461
  208. package/dist/entity-apply-host.js.map +1 -1
  209. package/dist/entity-apply-store.d.ts +77 -30
  210. package/dist/entity-apply-store.js +221 -516
  211. package/dist/entity-apply-store.js.map +1 -1
  212. package/dist/entity-record-observability.js +2 -0
  213. package/dist/entity-record-observability.js.map +1 -1
  214. package/dist/entity-record-saves.d.ts +20 -0
  215. package/dist/entity-record-saves.js +91 -0
  216. package/dist/entity-record-saves.js.map +1 -0
  217. package/dist/entity-record-store.d.ts +15 -7
  218. package/dist/entity-record-store.js +57 -117
  219. package/dist/entity-record-store.js.map +1 -1
  220. package/dist/files-register-host.d.ts +22 -3
  221. package/dist/files-register-host.js +70 -31
  222. package/dist/files-register-host.js.map +1 -1
  223. package/dist/filesystem.js +3 -2
  224. package/dist/filesystem.js.map +1 -1
  225. package/dist/git-binding.d.ts +65 -0
  226. package/dist/git-binding.js +220 -0
  227. package/dist/git-binding.js.map +1 -0
  228. package/dist/git-capture.d.ts +39 -0
  229. package/dist/git-capture.js +86 -0
  230. package/dist/git-capture.js.map +1 -0
  231. package/dist/git-card.d.ts +12 -0
  232. package/dist/git-card.js +123 -0
  233. package/dist/git-card.js.map +1 -0
  234. package/dist/git-checkpoint-construction.d.ts +41 -0
  235. package/dist/git-checkpoint-construction.js +96 -0
  236. package/dist/git-checkpoint-construction.js.map +1 -0
  237. package/dist/git-checkpoint-preparation.d.ts +37 -0
  238. package/dist/git-checkpoint-preparation.js +145 -0
  239. package/dist/git-checkpoint-preparation.js.map +1 -0
  240. package/dist/git-command.d.ts +61 -8
  241. package/dist/git-command.js +217 -63
  242. package/dist/git-command.js.map +1 -1
  243. package/dist/git-configuration.d.ts +40 -0
  244. package/dist/git-configuration.js +217 -0
  245. package/dist/git-configuration.js.map +1 -0
  246. package/dist/git-evidence.d.ts +61 -0
  247. package/dist/git-evidence.js +181 -0
  248. package/dist/git-evidence.js.map +1 -0
  249. package/dist/git-index-entries.d.ts +15 -0
  250. package/dist/git-index-entries.js +44 -0
  251. package/dist/git-index-entries.js.map +1 -0
  252. package/dist/git-index-format.d.ts +35 -0
  253. package/dist/git-index-format.js +293 -0
  254. package/dist/git-index-format.js.map +1 -0
  255. package/dist/git-index-witness.d.ts +33 -0
  256. package/dist/git-index-witness.js +69 -0
  257. package/dist/git-index-witness.js.map +1 -0
  258. package/dist/git-literal-host.d.ts +82 -0
  259. package/dist/git-literal-host.js +172 -0
  260. package/dist/git-literal-host.js.map +1 -0
  261. package/dist/git-literal-read.d.ts +88 -0
  262. package/dist/git-literal-read.js +170 -0
  263. package/dist/git-literal-read.js.map +1 -0
  264. package/dist/git-literal-replay.d.ts +33 -0
  265. package/dist/git-literal-replay.js +268 -0
  266. package/dist/git-literal-replay.js.map +1 -0
  267. package/dist/git-native-file.d.ts +42 -0
  268. package/dist/git-native-file.js +145 -0
  269. package/dist/git-native-file.js.map +1 -0
  270. package/dist/git-native-index.d.ts +21 -0
  271. package/dist/git-native-index.js +44 -0
  272. package/dist/git-native-index.js.map +1 -0
  273. package/dist/git-operation-host.d.ts +48 -0
  274. package/dist/git-operation-host.js +127 -0
  275. package/dist/git-operation-host.js.map +1 -0
  276. package/dist/git-private-index.d.ts +11 -0
  277. package/dist/git-private-index.js +42 -0
  278. package/dist/git-private-index.js.map +1 -0
  279. package/dist/git-private-repository.d.ts +4 -0
  280. package/dist/git-private-repository.js +69 -0
  281. package/dist/git-private-repository.js.map +1 -0
  282. package/dist/git-private-view.d.ts +39 -0
  283. package/dist/git-private-view.js +162 -0
  284. package/dist/git-private-view.js.map +1 -0
  285. package/dist/git-ref-store.d.ts +12 -0
  286. package/dist/git-ref-store.js +68 -0
  287. package/dist/git-ref-store.js.map +1 -0
  288. package/dist/git-registration-host.d.ts +20 -30
  289. package/dist/git-registration-host.js +86 -249
  290. package/dist/git-registration-host.js.map +1 -1
  291. package/dist/git-repository-host.d.ts +148 -22
  292. package/dist/git-repository-host.js +633 -650
  293. package/dist/git-repository-host.js.map +1 -1
  294. package/dist/git-worktree-host.d.ts +2 -0
  295. package/dist/git-worktree-host.js +16 -0
  296. package/dist/git-worktree-host.js.map +1 -0
  297. package/dist/graph-publication.d.ts +75 -0
  298. package/dist/graph-publication.js +203 -0
  299. package/dist/graph-publication.js.map +1 -0
  300. package/dist/ground-basis.d.ts +242 -0
  301. package/dist/ground-basis.js +1023 -0
  302. package/dist/ground-basis.js.map +1 -0
  303. package/dist/ground-checkpoint-worker.d.ts +1 -0
  304. package/dist/ground-checkpoint-worker.js +84 -0
  305. package/dist/ground-checkpoint-worker.js.map +1 -0
  306. package/dist/ground-checkpoints.d.ts +16 -0
  307. package/dist/ground-checkpoints.js +45 -0
  308. package/dist/ground-checkpoints.js.map +1 -0
  309. package/dist/ground-coordination.d.ts +107 -3
  310. package/dist/ground-coordination.js +249 -24
  311. package/dist/ground-coordination.js.map +1 -1
  312. package/dist/ground-database.d.ts +42 -0
  313. package/dist/ground-database.js +290 -0
  314. package/dist/ground-database.js.map +1 -0
  315. package/dist/ground-differences.d.ts +23 -0
  316. package/dist/ground-differences.js +47 -0
  317. package/dist/ground-differences.js.map +1 -0
  318. package/dist/ground-holders.d.ts +4 -0
  319. package/dist/ground-holders.js +15 -0
  320. package/dist/ground-holders.js.map +1 -0
  321. package/dist/ground-initialization-worker.d.ts +1 -0
  322. package/dist/ground-initialization-worker.js +20 -0
  323. package/dist/ground-initialization-worker.js.map +1 -0
  324. package/dist/ground-initialization.d.ts +35 -0
  325. package/dist/ground-initialization.js +102 -0
  326. package/dist/ground-initialization.js.map +1 -0
  327. package/dist/ground-install-saves.d.ts +63 -0
  328. package/dist/ground-install-saves.js +139 -0
  329. package/dist/ground-install-saves.js.map +1 -0
  330. package/dist/ground-inventory-schema.d.ts +18 -0
  331. package/dist/ground-inventory-schema.js +168 -0
  332. package/dist/ground-inventory-schema.js.map +1 -0
  333. package/dist/ground-profile.d.ts +7 -0
  334. package/dist/ground-profile.js +52 -0
  335. package/dist/ground-profile.js.map +1 -0
  336. package/dist/ground-root-index.d.ts +2 -1
  337. package/dist/ground-root-index.js +16 -14
  338. package/dist/ground-root-index.js.map +1 -1
  339. package/dist/ground-row.d.ts +62 -0
  340. package/dist/ground-row.js +70 -0
  341. package/dist/ground-row.js.map +1 -0
  342. package/dist/ground-save-ops.d.ts +44 -0
  343. package/dist/ground-save-ops.js +41 -0
  344. package/dist/ground-save-ops.js.map +1 -0
  345. package/dist/ground-saver-worker.d.ts +1 -0
  346. package/dist/ground-saver-worker.js +156 -0
  347. package/dist/ground-saver-worker.js.map +1 -0
  348. package/dist/ground-saver.d.ts +75 -0
  349. package/dist/ground-saver.js +216 -0
  350. package/dist/ground-saver.js.map +1 -0
  351. package/dist/ground-store.d.ts +84 -0
  352. package/dist/ground-store.js +473 -0
  353. package/dist/ground-store.js.map +1 -0
  354. package/dist/ground-territory.d.ts +130 -0
  355. package/dist/ground-territory.js +511 -0
  356. package/dist/ground-territory.js.map +1 -0
  357. package/dist/index.d.ts +1 -1
  358. package/dist/index.js.map +1 -1
  359. package/dist/installation/ownership.d.ts +0 -2
  360. package/dist/installation/ownership.js +3 -15
  361. package/dist/installation/ownership.js.map +1 -1
  362. package/dist/machine-host.d.ts +3 -2
  363. package/dist/machine-host.js +28 -16
  364. package/dist/machine-host.js.map +1 -1
  365. package/dist/materialized-graph.d.ts +7 -7
  366. package/dist/materialized-graph.js +11 -23
  367. package/dist/materialized-graph.js.map +1 -1
  368. package/dist/module-thread.d.ts +9 -0
  369. package/dist/module-thread.js +10 -0
  370. package/dist/module-thread.js.map +1 -0
  371. package/dist/native/fsevents-stream.node +0 -0
  372. package/dist/physical-path-witness.d.ts +64 -0
  373. package/dist/physical-path-witness.js +168 -0
  374. package/dist/physical-path-witness.js.map +1 -0
  375. package/dist/register-upload-fusion.d.ts +5 -4
  376. package/dist/register-upload-fusion.js +9 -6
  377. package/dist/register-upload-fusion.js.map +1 -1
  378. package/dist/registry-graph.d.ts +3 -2
  379. package/dist/registry-graph.js +9 -6
  380. package/dist/registry-graph.js.map +1 -1
  381. package/dist/registry-page-cache.d.ts +5 -2
  382. package/dist/registry-page-cache.js.map +1 -1
  383. package/dist/repository-identity-steps.d.ts +5 -0
  384. package/dist/repository-identity-steps.js +33 -0
  385. package/dist/repository-identity-steps.js.map +1 -0
  386. package/dist/runtime-node-flags.d.ts +10 -0
  387. package/dist/runtime-node-flags.js +11 -0
  388. package/dist/runtime-node-flags.js.map +1 -0
  389. package/dist/service/adapter.d.ts +1 -1
  390. package/dist/service/adapter.js +1 -1
  391. package/dist/service/adapter.js.map +1 -1
  392. package/dist/service/cli.js +16 -20
  393. package/dist/service/cli.js.map +1 -1
  394. package/dist/service/control.d.ts +2 -2
  395. package/dist/service/keepalive.d.ts +4 -11
  396. package/dist/service/keepalive.js +65 -118
  397. package/dist/service/keepalive.js.map +1 -1
  398. package/dist/service/policy.d.ts +36 -0
  399. package/dist/service/policy.js +25 -0
  400. package/dist/service/policy.js.map +1 -0
  401. package/dist/service/portable.d.ts +1 -1
  402. package/dist/service/portable.js +1 -1
  403. package/dist/service/portable.js.map +1 -1
  404. package/dist/service/recovery.d.ts +10 -9
  405. package/dist/service/recovery.js +29 -19
  406. package/dist/service/recovery.js.map +1 -1
  407. package/dist/service/windows-action.d.ts +5 -3
  408. package/dist/service/windows-action.js +6 -9
  409. package/dist/service/windows-action.js.map +1 -1
  410. package/dist/service/windows-task.js +5 -5
  411. package/dist/service/windows-task.js.map +1 -1
  412. package/dist/sharing-admission.d.ts +17 -0
  413. package/dist/sharing-admission.js +128 -0
  414. package/dist/sharing-admission.js.map +1 -0
  415. package/dist/snapshot-delivery-baseline.d.ts +12 -3
  416. package/dist/snapshot-delivery-baseline.js +41 -42
  417. package/dist/snapshot-delivery-baseline.js.map +1 -1
  418. package/dist/source-proof.d.ts +36 -0
  419. package/dist/source-proof.js +70 -0
  420. package/dist/source-proof.js.map +1 -0
  421. package/dist/source-signature.d.ts +56 -0
  422. package/dist/source-signature.js +56 -0
  423. package/dist/source-signature.js.map +1 -0
  424. package/dist/source-witness.d.ts +15 -0
  425. package/dist/source-witness.js +29 -0
  426. package/dist/source-witness.js.map +1 -0
  427. package/dist/sqlite-durability.d.ts +31 -0
  428. package/dist/sqlite-durability.js +28 -0
  429. package/dist/sqlite-durability.js.map +1 -0
  430. package/dist/sqlite.d.ts +8 -2
  431. package/dist/sqlite.js +27 -4
  432. package/dist/sqlite.js.map +1 -1
  433. package/dist/sync-address.d.ts +19 -0
  434. package/dist/sync-address.js +52 -0
  435. package/dist/sync-address.js.map +1 -0
  436. package/dist/sync-setting.d.ts +15 -0
  437. package/dist/sync-setting.js +13 -0
  438. package/dist/sync-setting.js.map +1 -1
  439. package/dist/turns.d.ts +42 -0
  440. package/dist/turns.js +112 -0
  441. package/dist/turns.js.map +1 -0
  442. package/dist/updates/bootstrap.d.ts +53 -7
  443. package/dist/updates/bootstrap.js +224 -137
  444. package/dist/updates/bootstrap.js.map +1 -1
  445. package/dist/updates/controller.d.ts +8 -0
  446. package/dist/updates/controller.js +27 -3
  447. package/dist/updates/controller.js.map +1 -1
  448. package/dist/updates/store.d.ts +3 -0
  449. package/dist/updates/store.js +12 -0
  450. package/dist/updates/store.js.map +1 -1
  451. package/dist/user-ground-host.d.ts +364 -69
  452. package/dist/user-ground-host.js +5231 -3366
  453. package/dist/user-ground-host.js.map +1 -1
  454. package/dist/watching/fsevents.d.ts +52 -1
  455. package/dist/watching/fsevents.js +60 -25
  456. package/dist/watching/fsevents.js.map +1 -1
  457. package/dist/watching/host.d.ts +129 -5
  458. package/dist/watching/host.js +433 -80
  459. package/dist/watching/host.js.map +1 -1
  460. package/dist/watching/index.d.ts +1 -1
  461. package/dist/wire-binary.d.ts +3 -2
  462. package/dist/wire-binary.js +10 -8
  463. package/dist/wire-binary.js.map +1 -1
  464. package/dist/wire-client.d.ts +3 -4
  465. package/dist/wire-client.js +18 -44
  466. package/dist/wire-client.js.map +1 -1
  467. package/dist/wire-outbox.d.ts +34 -0
  468. package/dist/wire-outbox.js +127 -0
  469. package/dist/wire-outbox.js.map +1 -0
  470. package/dist/workspace-host.d.ts +4 -0
  471. package/dist/workspace-host.js +12 -1
  472. package/dist/workspace-host.js.map +1 -1
  473. package/examinations/fixtures/private-wire-authority.js +133 -10
  474. package/npm-shrinkwrap.json +43 -56
  475. package/package.json +26 -13
@@ -0,0 +1,44 @@
1
+ /** Every save a ground file's saver thread runs (ground-saver.ts), by name.
2
+ * Each is synchronous and runs inside its own savepoint of the batch. */
3
+ import type Database from "better-sqlite3";
4
+ import { acknowledgeCleanup, adoptSnapshotHistory, beginIntent, bindRecovery, relocateRows, renameSignatures, resolveOwnPublication, retire, setIntentPhase } from "./apply-saves.js";
5
+ import { retireProofs } from "./content-clock.js";
6
+ import { rememberConstruct } from "./construct-ledger.js";
7
+ import { clearDeclaration, markDeclarationRejected, markDeclarationSubmitted } from "./declaration-journal.js";
8
+ import { saveDeclaration } from "./declaration-save.js";
9
+ import { saveAdmission } from "./detection/admission-save.js";
10
+ import { pruneDispositions } from "./detection/disposition-rows.js";
11
+ import { appendRecord, receiveRecords, stampAccepted } from "./entity-record-saves.js";
12
+ import { adoptSnapshotDeliveryBaseline } from "./snapshot-delivery-baseline.js";
13
+ import { beginAddIntent, clearAddIntent, clearRoot, installReferences, installRows, refreshRoot } from "./ground-install-saves.js";
14
+ export declare const GROUND_SAVE_OPS: {
15
+ "add.beginIntent": typeof beginAddIntent;
16
+ "add.clearIntent": typeof clearAddIntent;
17
+ "apply.acknowledgeCleanup": typeof acknowledgeCleanup;
18
+ "apply.adoptSnapshotHistory": typeof adoptSnapshotHistory;
19
+ "apply.beginIntent": typeof beginIntent;
20
+ "apply.bindRecovery": typeof bindRecovery;
21
+ "apply.relocateRows": typeof relocateRows;
22
+ "apply.renameSignatures": typeof renameSignatures;
23
+ "apply.resolveOwnPublication": typeof resolveOwnPublication;
24
+ "apply.retire": typeof retire;
25
+ "apply.setIntentPhase": typeof setIntentPhase;
26
+ "constructs.remember": typeof rememberConstruct;
27
+ "detect.admit": typeof saveAdmission;
28
+ "detect.dispositions": (database: Database.Database, events: readonly import("@amalgm/live").DetectDispositionEvent[]) => readonly import("./detection/disposition-rows.js").DispositionRow[];
29
+ "detect.prune": typeof pruneDispositions;
30
+ "ground.retireProofs": typeof retireProofs;
31
+ "install.clearRoot": typeof clearRoot;
32
+ "install.references": typeof installReferences;
33
+ "install.refreshRoot": typeof refreshRoot;
34
+ "install.rows": typeof installRows;
35
+ "record.adoptSnapshotBaseline": typeof adoptSnapshotDeliveryBaseline;
36
+ "record.append": typeof appendRecord;
37
+ "record.receive": typeof receiveRecords;
38
+ "record.stamp": typeof stampAccepted;
39
+ "register.cleared": typeof clearDeclaration;
40
+ "register.declare": typeof saveDeclaration;
41
+ "register.rejected": typeof markDeclarationRejected;
42
+ "register.submitted": typeof markDeclarationSubmitted;
43
+ };
44
+ export type GroundSaveOps = typeof GROUND_SAVE_OPS;
@@ -0,0 +1,41 @@
1
+ import { acknowledgeCleanup, adoptSnapshotHistory, beginIntent, bindRecovery, relocateRows, renameSignatures, resolveOwnPublication, retire, setIntentPhase, } from "./apply-saves.js";
2
+ import { retireProofs } from "./content-clock.js";
3
+ import { rememberConstruct } from "./construct-ledger.js";
4
+ import { clearDeclaration, markDeclarationRejected, markDeclarationSubmitted } from "./declaration-journal.js";
5
+ import { saveDeclaration } from "./declaration-save.js";
6
+ import { saveAdmission } from "./detection/admission-save.js";
7
+ import { pruneDispositions, saveDispositions } from "./detection/disposition-rows.js";
8
+ import { appendRecord, receiveRecords, stampAccepted } from "./entity-record-saves.js";
9
+ import { adoptSnapshotDeliveryBaseline } from "./snapshot-delivery-baseline.js";
10
+ import { beginAddIntent, clearAddIntent, clearRoot, installReferences, installRows, refreshRoot } from "./ground-install-saves.js";
11
+ export const GROUND_SAVE_OPS = {
12
+ "add.beginIntent": beginAddIntent,
13
+ "add.clearIntent": clearAddIntent,
14
+ "apply.acknowledgeCleanup": acknowledgeCleanup,
15
+ "apply.adoptSnapshotHistory": adoptSnapshotHistory,
16
+ "apply.beginIntent": beginIntent,
17
+ "apply.bindRecovery": bindRecovery,
18
+ "apply.relocateRows": relocateRows,
19
+ "apply.renameSignatures": renameSignatures,
20
+ "apply.resolveOwnPublication": resolveOwnPublication,
21
+ "apply.retire": retire,
22
+ "apply.setIntentPhase": setIntentPhase,
23
+ "constructs.remember": rememberConstruct,
24
+ "detect.admit": saveAdmission,
25
+ "detect.dispositions": saveDispositions,
26
+ "detect.prune": pruneDispositions,
27
+ "ground.retireProofs": retireProofs,
28
+ "install.clearRoot": clearRoot,
29
+ "install.references": installReferences,
30
+ "install.refreshRoot": refreshRoot,
31
+ "install.rows": installRows,
32
+ "record.adoptSnapshotBaseline": adoptSnapshotDeliveryBaseline,
33
+ "record.append": appendRecord,
34
+ "record.receive": receiveRecords,
35
+ "record.stamp": stampAccepted,
36
+ "register.cleared": clearDeclaration,
37
+ "register.declare": saveDeclaration,
38
+ "register.rejected": markDeclarationRejected,
39
+ "register.submitted": markDeclarationSubmitted,
40
+ };
41
+ //# sourceMappingURL=ground-save-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-save-ops.js","sourceRoot":"","sources":["../src/ground-save-ops.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,EACN,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAEnI,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,iBAAiB,EAAE,cAAc;IACjC,iBAAiB,EAAE,cAAc;IACjC,0BAA0B,EAAE,kBAAkB;IAC9C,4BAA4B,EAAE,oBAAoB;IAClD,mBAAmB,EAAE,WAAW;IAChC,oBAAoB,EAAE,YAAY;IAClC,oBAAoB,EAAE,YAAY;IAClC,wBAAwB,EAAE,gBAAgB;IAC1C,6BAA6B,EAAE,qBAAqB;IACpD,cAAc,EAAE,MAAM;IACtB,sBAAsB,EAAE,cAAc;IACtC,qBAAqB,EAAE,iBAAiB;IACxC,cAAc,EAAE,aAAa;IAC7B,qBAAqB,EAAE,gBAAgB;IACvC,cAAc,EAAE,iBAAiB;IACjC,qBAAqB,EAAE,YAAY;IACnC,mBAAmB,EAAE,SAAS;IAC9B,oBAAoB,EAAE,iBAAiB;IACvC,qBAAqB,EAAE,WAAW;IAClC,cAAc,EAAE,WAAW;IAC3B,8BAA8B,EAAE,6BAA6B;IAC7D,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,cAAc;IAChC,cAAc,EAAE,aAAa;IAC7B,kBAAkB,EAAE,gBAAgB;IACpC,kBAAkB,EAAE,eAAe;IACnC,mBAAmB,EAAE,uBAAuB;IAC5C,oBAAoB,EAAE,wBAAwB;CACkC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,156 @@
1
+ /**
2
+ * A ground file's saver thread (ground-saver.ts). Saves that arrive while it
3
+ * commits wait, and form the next batch: one IMMEDIATE transaction, each
4
+ * save in its own savepoint, one commit at synchronous=FULL, so the drive
5
+ * holds every save in the batch before any is answered. A failed save rolls
6
+ * back only its own savepoint; a failed commit fails the whole batch.
7
+ *
8
+ * A request whose long arrays follow it (ground-saver.ts) waits in its place
9
+ * until the last item arrives, and every save posted after it waits with it.
10
+ *
11
+ * Each ground sequence a save stamps has its receipt, checked inside that
12
+ * save's savepoint; receipts reach the main thread with the batch's answers,
13
+ * only after its commit.
14
+ */
15
+ import { statSync } from "node:fs";
16
+ import { workerData } from "node:worker_threads";
17
+ import { currentSequence, saveGroundReceipts } from "./ground-basis.js";
18
+ import { configureGroundConnection } from "./ground-database.js";
19
+ import { GROUND_SAVE_OPS } from "./ground-save-ops.js";
20
+ import { saveFailure } from "./ground-saver.js";
21
+ import { certifyGroundSaver } from "./ground-store.js";
22
+ import { physicalKey } from "./source-signature.js";
23
+ import { durabilityProfile } from "./sqlite-durability.js";
24
+ import { openFileDatabase } from "./sqlite.js";
25
+ const { file, key, port } = workerData;
26
+ const database = configureGroundConnection(openFileDatabase(file, { fileMustExist: true }));
27
+ if (physicalKey(statSync(file, { bigint: true })) !== key) {
28
+ database.close();
29
+ throw new Error(`the ground database ${JSON.stringify(file)} was replaced before its saver thread opened`);
30
+ }
31
+ const receipts = [];
32
+ saveGroundReceipts(database, receipt => receipts.push(receipt));
33
+ certifyGroundSaver(database);
34
+ port.postMessage({ durability: durabilityProfile(database) });
35
+ /** Absolute time, comparable across threads. */
36
+ const now = () => performance.timeOrigin + performance.now();
37
+ /** Inside the batch transaction, a savepoint. */
38
+ const savepoint = database.transaction((run) => run());
39
+ const arriving = new Map();
40
+ const queue = [];
41
+ let scheduled = false;
42
+ let stopping = false;
43
+ port.on("message", (message) => {
44
+ if (message === "stop")
45
+ stopping = true;
46
+ else if ("name" in message) {
47
+ queue.push(message);
48
+ if (message.parts.length)
49
+ arriving.set(message.id, { items: message.parts.map(() => []), failure: null });
50
+ }
51
+ else if ("failure" in message)
52
+ arriving.get(message.id).failure = message.failure;
53
+ else
54
+ arriving.get(message.id).items[message.part].push(...message.items);
55
+ if (!scheduled) {
56
+ scheduled = true;
57
+ setImmediate(run);
58
+ }
59
+ });
60
+ const ready = ({ id, parts }) => {
61
+ const entry = arriving.get(id);
62
+ return !entry || entry.failure !== null || parts.every(({ length }, part) => entry.items[part].length === length);
63
+ };
64
+ /** Its whole input, each part back in its place; or why a part never came. */
65
+ function assembled({ id, input, parts }) {
66
+ const entry = arriving.get(id);
67
+ if (!entry)
68
+ return { input };
69
+ if (entry.failure)
70
+ return { failure: entry.failure };
71
+ const root = { input };
72
+ parts.forEach(({ path }, part) => {
73
+ const keys = ["input", ...path];
74
+ let at = root;
75
+ for (const key of keys.slice(0, -1))
76
+ at = at[key];
77
+ at[keys.at(-1)] = entry.items[part];
78
+ });
79
+ return { input: root.input };
80
+ }
81
+ function run() {
82
+ scheduled = false;
83
+ let complete = 0;
84
+ while (complete < queue.length && ready(queue[complete]))
85
+ complete += 1;
86
+ const batch = queue.splice(0, complete);
87
+ if (batch.length)
88
+ commit(batch);
89
+ for (const { id } of batch)
90
+ arriving.delete(id);
91
+ if (stopping && queue.length === 0) {
92
+ port.close();
93
+ database.close();
94
+ }
95
+ }
96
+ function saveOne(request) {
97
+ const { id, name } = request, began = now(), mark = receipts.length;
98
+ const whole = assembled(request);
99
+ if ("failure" in whole)
100
+ return { id, ok: false, failure: whole.failure, began };
101
+ const { input } = whole;
102
+ try {
103
+ const from = currentSequence(database);
104
+ let through = from;
105
+ const value = savepoint(() => {
106
+ const value = GROUND_SAVE_OPS[name](database, input);
107
+ if (value && typeof value.then === "function")
108
+ throw new Error(`ground save ${name} is asynchronous`);
109
+ through = currentSequence(database);
110
+ const own = receipts.slice(mark);
111
+ if (BigInt(own.length) !== through - from || own.some((receipt, at) => receipt.sequence !== from + BigInt(at + 1))) {
112
+ throw new Error(`ground save ${name} stamped sequences without receipts`);
113
+ }
114
+ return value;
115
+ });
116
+ return { id, ok: true, value, from, through, began };
117
+ }
118
+ catch (error) {
119
+ receipts.length = mark;
120
+ return { id, ok: false, failure: saveFailure(error), began };
121
+ }
122
+ }
123
+ function commit(batch) {
124
+ const began = now();
125
+ let replies = [];
126
+ let lost = false;
127
+ receipts.length = 0;
128
+ try {
129
+ database.exec("BEGIN IMMEDIATE");
130
+ lost = true;
131
+ for (const request of batch)
132
+ replies.push(saveOne(request));
133
+ database.exec("COMMIT");
134
+ lost = false;
135
+ }
136
+ catch (error) {
137
+ try {
138
+ if (database.inTransaction)
139
+ database.exec("ROLLBACK");
140
+ }
141
+ catch { /* the commit's own failure is reported */ }
142
+ const failed = saveFailure(error);
143
+ replies = batch.map(({ id }) => ({ id, ok: false, failure: failed, began }));
144
+ receipts.length = 0;
145
+ }
146
+ const answer = { replies, receipts: receipts.splice(0), began, ended: now(), lost };
147
+ try {
148
+ port.postMessage(answer);
149
+ }
150
+ catch (error) {
151
+ // A value the port cannot carry fails its saves; the receipts still go.
152
+ const failed = saveFailure(error);
153
+ port.postMessage({ ...answer, replies: replies.map(({ id, began }) => ({ id, ok: false, failure: failed, began })) });
154
+ }
155
+ }
156
+ //# sourceMappingURL=ground-saver-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-saver-worker.js","sourceRoot":"","sources":["../src/ground-saver-worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { type GroundReceipt } from "./ground-basis.js";
2
+ import type { GroundSaveOps } from "./ground-save-ops.js";
3
+ import type { DurabilityProfile } from "./sqlite-durability.js";
4
+ export type GroundSaveName = keyof GroundSaveOps;
5
+ export type GroundSaveInput<N extends GroundSaveName> = Parameters<GroundSaveOps[N]>[1];
6
+ export type GroundSaveValue<N extends GroundSaveName> = ReturnType<GroundSaveOps[N]>;
7
+ /** One committed save. Times are this thread's `performance.now()`. */
8
+ export interface Saved<T> {
9
+ readonly value: T;
10
+ /** The ground sequences it stamped: after `from`, through `through`. */
11
+ readonly from: bigint;
12
+ readonly through: bigint;
13
+ readonly posted: number;
14
+ /** Its savepoint began; its batch committed. */
15
+ readonly began: number;
16
+ readonly ended: number;
17
+ }
18
+ /** A long array taken out of a save's input: where it goes, and its length. */
19
+ export interface GroundSavePart {
20
+ readonly path: readonly string[];
21
+ readonly length: number;
22
+ }
23
+ export interface GroundSaveRequest {
24
+ readonly id: number;
25
+ readonly name: GroundSaveName;
26
+ readonly input: unknown;
27
+ readonly parts: readonly GroundSavePart[];
28
+ }
29
+ /** A request's next items for one part, in order; or why the rest never comes. */
30
+ export type GroundSaveItems = {
31
+ readonly id: number;
32
+ readonly part: number;
33
+ readonly items: readonly unknown[];
34
+ } | {
35
+ readonly id: number;
36
+ readonly failure: GroundSaveFailure;
37
+ };
38
+ export interface GroundSaveFailure {
39
+ readonly name: string;
40
+ readonly message: string;
41
+ readonly stack?: string;
42
+ readonly code?: string;
43
+ }
44
+ export type GroundSaveReply = {
45
+ readonly id: number;
46
+ readonly began: number;
47
+ } & ({
48
+ readonly ok: true;
49
+ readonly value: unknown;
50
+ readonly from: bigint;
51
+ readonly through: bigint;
52
+ } | {
53
+ readonly ok: false;
54
+ readonly failure: GroundSaveFailure;
55
+ });
56
+ export interface GroundSaveBatch {
57
+ readonly replies: readonly GroundSaveReply[];
58
+ readonly receipts: readonly GroundReceipt[];
59
+ /** Absolute times: the batch began and committed or rolled back. */
60
+ readonly began: number;
61
+ readonly ended: number;
62
+ /** The commit failed after writes began: its receipts may be missing. */
63
+ readonly lost: boolean;
64
+ }
65
+ export declare const saveFailure: (error: unknown) => GroundSaveFailure;
66
+ /** The first ordinary connection starts it; `stopGroundSaver` ends it. */
67
+ export declare function startGroundSaver(file: string, key: string): void;
68
+ /** After every other owner has closed: the thread finishes its queue, then
69
+ * closes. Settles once it has exited; it holds the process open until then. */
70
+ export declare function stopGroundSaver(file: string): Promise<void>;
71
+ export declare function save<N extends GroundSaveName>(file: string, name: N, input: GroundSaveInput<N>): Promise<Saved<GroundSaveValue<N>>>;
72
+ /** Settles once every save posted before the call has settled. */
73
+ export declare function saved(file: string): Promise<void>;
74
+ /** The settings the saver's commits run under, read back on its connection. */
75
+ export declare function groundSaveDurability(file: string): Promise<DurabilityProfile>;
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Every write to a ground file is a named save, run by that file's one saver
3
+ * thread (ground-saver-worker.ts); the main thread's connections only read
4
+ * (ground-database.ts), so it never waits for the drive. A save's promise settles once the drive holds it: its batch
5
+ * committed at synchronous=FULL. Saves commit in the order they were posted,
6
+ * so a caller checks its main-side preconditions when it posts. A reader
7
+ * whose decision must see every earlier save awaits `saved(file)`.
8
+ *
9
+ * A batch's receipts carry the main thread's warm territories forward before
10
+ * any of its saves settles. A read of the ground drains the receipts already
11
+ * delivered first (ground-basis.ts), so no warm view waits for an event turn.
12
+ * No save's copy holds the main thread: a long array anywhere in its input's
13
+ * object spine crosses after the rest, a bounded run of items per message
14
+ * across turns (turns.ts), and the thread runs the save once every item has
15
+ * arrived. Its place in the commit order is still the call's.
16
+ *
17
+ * The thread never keeps the process alive; a pending save does. A thread
18
+ * that dies fails its pending saves, and the next save starts another.
19
+ */
20
+ import { channel } from "node:diagnostics_channel";
21
+ import { MessageChannel, receiveMessageOnPort } from "node:worker_threads";
22
+ import { ITEMS_PER_BOUNDARY } from "@amalgm/live";
23
+ import { carryGroundReceipt, GroundBasisChangedError, registerReceiptSource, retireGroundViews } from "./ground-basis.js";
24
+ import { moduleThread } from "./module-thread.js";
25
+ import { databaseFileName } from "./sqlite.js";
26
+ import { turnBoundary } from "./turns.js";
27
+ const WORKER = new URL("./ground-saver-worker.js", import.meta.url);
28
+ const saves = channel("amalgm:ground-save");
29
+ /** Keyed by databaseFileName, the name every connection reports. */
30
+ const savers = new Map();
31
+ let nextId = 0;
32
+ const local = (absolute) => absolute - performance.timeOrigin;
33
+ export const saveFailure = (error) => error instanceof Error
34
+ ? { name: error.name, message: error.message, stack: error.stack, code: error.code }
35
+ : { name: "Error", message: String(error) };
36
+ function restore(failure) {
37
+ const error = failure.name === GroundBasisChangedError.name ? new GroundBasisChangedError(failure.message) : new Error(failure.message);
38
+ if (failure.name !== error.name)
39
+ error.name = failure.name;
40
+ if (failure.stack)
41
+ error.stack = failure.stack;
42
+ if (failure.code)
43
+ error.code = failure.code;
44
+ return error;
45
+ }
46
+ /** Receipts first, then each save in order. */
47
+ function answer(name, saver, batch) {
48
+ for (const receipt of batch.receipts)
49
+ carryGroundReceipt(name, receipt);
50
+ if (batch.lost)
51
+ retireGroundViews(name);
52
+ const ended = local(batch.ended);
53
+ for (const reply of batch.replies) {
54
+ const pending = saver.pending.get(reply.id);
55
+ if (!pending)
56
+ continue;
57
+ saver.pending.delete(reply.id);
58
+ if (saves.hasSubscribers) {
59
+ saves.publish({ file: name, save: pending.name, ok: reply.ok, posted: pending.posted, began: local(reply.began), ended,
60
+ batch: batch.replies.length });
61
+ }
62
+ if (reply.ok) {
63
+ pending.resolve({ value: reply.value, from: reply.from, through: reply.through, posted: pending.posted,
64
+ began: local(reply.began), ended });
65
+ }
66
+ else
67
+ pending.reject(restore(reply.failure));
68
+ }
69
+ if (saver.pending.size === 0)
70
+ saver.port?.unref();
71
+ }
72
+ /** What the thread already sent, without waiting for its event. */
73
+ function drain(saver) {
74
+ const port = saver.port;
75
+ if (!port)
76
+ return;
77
+ for (let message = receiveMessageOnPort(port); message; message = receiveMessageOnPort(port))
78
+ saver.receive(message.message);
79
+ }
80
+ function spawn(name, saver) {
81
+ const { port1, port2 } = new MessageChannel();
82
+ const worker = moduleThread(WORKER, { workerData: { file: name, key: saver.key, port: port2 }, transferList: [port2] });
83
+ saver.worker = worker;
84
+ saver.port = port1;
85
+ let durable, failed;
86
+ saver.durability = new Promise((resolve, reject) => { durable = resolve; failed = reject; });
87
+ saver.durability.catch(() => { });
88
+ saver.receive = message => { if ("durability" in message)
89
+ durable(message.durability);
90
+ else
91
+ answer(name, saver, message); };
92
+ port1.on("message", saver.receive);
93
+ let fault = new Error(`the ground saver thread for ${JSON.stringify(name)} stopped`);
94
+ worker.on("error", error => { fault = error; });
95
+ worker.once("exit", () => {
96
+ // Answers it sent before it stopped still count; the rest fail, and any
97
+ // receipt it could not send leaves every warm view unproven.
98
+ drain(saver);
99
+ failed(fault);
100
+ port1.close();
101
+ if (saver.worker === worker) {
102
+ saver.worker = null;
103
+ saver.port = null;
104
+ }
105
+ if (saver.pending.size)
106
+ retireGroundViews(name);
107
+ for (const [id, pending] of saver.pending) {
108
+ saver.pending.delete(id);
109
+ pending.reject(fault);
110
+ }
111
+ });
112
+ // Last: a listener added after unref refs its handle again.
113
+ worker.unref();
114
+ port1.unref();
115
+ }
116
+ /** The first ordinary connection starts it; `stopGroundSaver` ends it. */
117
+ export function startGroundSaver(file, key) {
118
+ const name = databaseFileName(file);
119
+ if (savers.has(name))
120
+ return;
121
+ const saver = { key, worker: null, port: null, receive: () => { }, durability: new Promise(() => { }),
122
+ pending: new Map(), last: Promise.resolve() };
123
+ savers.set(name, saver);
124
+ registerReceiptSource(name, () => drain(saver));
125
+ spawn(name, saver);
126
+ }
127
+ /** After every other owner has closed: the thread finishes its queue, then
128
+ * closes. Settles once it has exited; it holds the process open until then. */
129
+ export function stopGroundSaver(file) {
130
+ const name = databaseFileName(file);
131
+ const saver = savers.get(name);
132
+ savers.delete(name);
133
+ registerReceiptSource(name, null);
134
+ const worker = saver?.worker;
135
+ if (!worker)
136
+ return Promise.resolve();
137
+ const exited = new Promise(resolve => worker.once("exit", () => resolve()));
138
+ worker.ref();
139
+ saver.port.postMessage("stop");
140
+ return exited;
141
+ }
142
+ /** The input with each long array of its object spine (plain objects, never
143
+ * an array's items) left empty, and those arrays in the order they were met. */
144
+ function partitioned(input) {
145
+ const parts = [];
146
+ const take = (value, path) => {
147
+ if (Array.isArray(value)) {
148
+ if (value.length <= ITEMS_PER_BOUNDARY)
149
+ return value;
150
+ parts.push({ path, items: value });
151
+ return [];
152
+ }
153
+ if (value === null || typeof value !== "object" || Object.getPrototypeOf(value) !== Object.prototype)
154
+ return value;
155
+ const head = {};
156
+ for (const [key, entry] of Object.entries(value))
157
+ head[key] = take(entry, [...path, key]);
158
+ return head;
159
+ };
160
+ return { head: take(input, []), parts };
161
+ }
162
+ /** Each part's items, a bounded run per message, until the thread that holds
163
+ * the request stops, which fails the save; a run it cannot carry fails it too. */
164
+ async function stream(saver, port, id, parts) {
165
+ try {
166
+ for (const [part, { items }] of parts.entries()) {
167
+ for (let at = 0; at < items.length; at += ITEMS_PER_BOUNDARY) {
168
+ await turnBoundary();
169
+ if (saver.port !== port)
170
+ return;
171
+ port.postMessage({ id, part, items: items.slice(at, at + ITEMS_PER_BOUNDARY) });
172
+ }
173
+ }
174
+ }
175
+ catch (error) {
176
+ if (saver.port === port)
177
+ port.postMessage({ id, failure: saveFailure(error) });
178
+ }
179
+ }
180
+ export function save(file, name, input) {
181
+ const fileKey = databaseFileName(file);
182
+ const saver = savers.get(fileKey);
183
+ if (!saver)
184
+ return Promise.reject(new Error(`the ground database ${JSON.stringify(file)} has no saver`));
185
+ if (!saver.worker)
186
+ spawn(fileKey, saver);
187
+ const id = nextId++;
188
+ const posted = performance.now();
189
+ const saved = new Promise((resolve, reject) => {
190
+ saver.pending.set(id, { name, posted, resolve: resolve, reject });
191
+ });
192
+ const port = saver.port, { head, parts } = partitioned(input);
193
+ try {
194
+ port.postMessage({ id, name, input: head,
195
+ parts: parts.map(({ path, items }) => ({ path, length: items.length })) });
196
+ }
197
+ catch (error) {
198
+ saver.pending.delete(id);
199
+ return Promise.reject(error);
200
+ }
201
+ port.ref();
202
+ saver.last = saved.then(() => { }, () => { });
203
+ if (parts.length)
204
+ void stream(saver, port, id, parts);
205
+ return saved;
206
+ }
207
+ /** Settles once every save posted before the call has settled. */
208
+ export function saved(file) {
209
+ return savers.get(databaseFileName(file))?.last ?? Promise.resolve();
210
+ }
211
+ /** The settings the saver's commits run under, read back on its connection. */
212
+ export function groundSaveDurability(file) {
213
+ const saver = savers.get(databaseFileName(file));
214
+ return saver ? saver.durability : Promise.reject(new Error(`the ground database ${JSON.stringify(file)} has no saver`));
215
+ }
216
+ //# sourceMappingURL=ground-saver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ground-saver.js","sourceRoot":"","sources":["../src/ground-saver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type Database from "better-sqlite3";
2
+ import type { RepositoryObservationPair } from "./git-repository-host.js";
3
+ import type { LocalEntityRecord } from "@amalgm/live";
4
+ import { type SharingWrite } from "./sharing-admission.js";
5
+ import { GroundBasis, type GroundInventory, type GroundSnapshotReader, type GroundTransition, type GroundObservation } from "./ground-basis.js";
6
+ import { type GroundRow } from "./ground-row.js";
7
+ export type { GroundInventory } from "./ground-basis.js";
8
+ export type { GroundTransition } from "./ground-basis.js";
9
+ /** A saver thread's connection (ground-saver-worker.ts). */
10
+ export declare function certifyGroundSaver(database: Database.Database): void;
11
+ /** One owner per SQLite connection, including callers sharing Apply's handle. */
12
+ export declare function groundStore(database: Database.Database): GroundStore;
13
+ /** Optional phase evidence; counts describe this batch, not an outer commit. */
14
+ export interface GroundWriteEvidence {
15
+ readonly nested: boolean;
16
+ readonly transactionEntryMs: number;
17
+ readonly callbackMs: number;
18
+ readonly projectionMs: number;
19
+ readonly revisionMs: number;
20
+ readonly transactionFinishMs: number;
21
+ readonly rowsRead: number;
22
+ readonly upserts: number;
23
+ readonly removals: number;
24
+ readonly revisionWrites: number;
25
+ readonly verificationOnlyRows: number;
26
+ readonly physicalRows: number;
27
+ readonly logicalRows: number;
28
+ }
29
+ export interface GroundWriter {
30
+ /** Read-only, before acceptance: whether this basis's facts are unchanged
31
+ * now. It authorizes nothing; an unchanged answer lets this writer's one
32
+ * acceptance of those facts stand on it instead of reading them again. */
33
+ compareBasis(basis: GroundBasis): boolean;
34
+ /** Must precede all projection writes. False means re-observe; it never
35
+ * grants permission to overwrite a target absent from the original basis. */
36
+ acceptBasis(basis: GroundBasis): boolean;
37
+ /** Reads inside a write batch serve that operation, never a Detect read basis. */
38
+ get(inventory: GroundInventory, uuid: string): GroundRow | undefined;
39
+ /** Declare the actual repository capture whose existing source closer was
40
+ * included in this Record admission. A serialized stamp alone grants nothing.
41
+ * Its proof stays with the caller, who closed it before this write. */
42
+ observeRepository(pair: Omit<RepositoryObservationPair, "proof">): void;
43
+ replace(inventory: GroundInventory, rows: readonly GroundRow[], removals?: readonly string[], sharing?: SharingWrite): void;
44
+ update(inventory: GroundInventory, uuid: string, fields: Partial<Omit<GroundRow, "uuid">>, sharing?: SharingWrite): boolean;
45
+ remove(inventory: GroundInventory, uuid: string): boolean;
46
+ /** After all projection writes, insert and attach the exact new Outbox admission to B.
47
+ * Further sharing writes in this batch are forbidden. */
48
+ admitSharing(record: LocalEntityRecord): string;
49
+ }
50
+ declare class GroundStore {
51
+ #private;
52
+ constructor(database: Database.Database);
53
+ readSnapshot<T>(operation: (reader: GroundSnapshotReader) => T): {
54
+ value: T;
55
+ basis: GroundBasis;
56
+ };
57
+ observe(): GroundObservation;
58
+ /** Exact address subtree for an existing operation, not a retained Detect
59
+ * proof. Callers needing later admission must capture and validate a basis. */
60
+ rowsUnder(inventory: GroundInventory, rootUUID: string, relativePath: string): readonly GroundRow[];
61
+ /** Joins an existing SQLite transaction through a savepoint when necessary.
62
+ * A failed batch restores all rows; its writer cannot escape its lifetime. */
63
+ write<T>(operation: (writer: GroundWriter) => T): T;
64
+ /** Measurement is returned as data. Caller code never runs between the
65
+ * completed transaction and this owner's report of success. */
66
+ writeMeasured<T>(operation: (writer: GroundWriter) => T): {
67
+ value: T;
68
+ evidence: GroundWriteEvidence;
69
+ };
70
+ /** Passive examination evidence for one completed outer commit. Originals
71
+ * are captured by the writer before mutation; no later read may renew them.
72
+ * A savepoint cannot supply an honest committed receipt, except a saver's
73
+ * save: its batch commits all of it or answers none of it. */
74
+ writeObserved<T>(operation: (writer: GroundWriter) => T): {
75
+ value: T;
76
+ changes: readonly GroundTransition[];
77
+ activated: readonly string[];
78
+ evidence: GroundWriteEvidence;
79
+ };
80
+ /** Its one visible row. A UUID visible in two roots is a fault no write
81
+ * may build on. */
82
+ private visibleRow;
83
+ private performWrite;
84
+ }