@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,86 @@
1
+ import { CaptureSourceChangedError } from "./content-cache-host.js";
2
+ import { collectGitBinding } from "./git-binding.js";
3
+ import { collectCard, collectStash } from "./git-card.js";
4
+ import { observeGitConfiguration } from "./git-configuration.js";
5
+ import { collectGitEvidence } from "./git-evidence.js";
6
+ import { assertGitPath, isGitControlPath } from "./git-index-entries.js";
7
+ import { NativeIndexSnapshot } from "./git-native-index.js";
8
+ import { semanticProof, sourceProofs } from "./source-proof.js";
9
+ const untrackedNames = (bytes) => bytes.toString("utf8").split("\0").filter(path => path && !path.endsWith("/") && !isGitControlPath(path));
10
+ /** A path lies in scope when it or one of its ancestors is a scope entry. */
11
+ function inScope(scope, path) {
12
+ for (let end = path.length; end > 0; end = path.lastIndexOf("/", end - 1)) {
13
+ if (scope.has(path.slice(0, end)))
14
+ return true;
15
+ }
16
+ return false;
17
+ }
18
+ export class GitCapture {
19
+ repository;
20
+ #facts = new Map();
21
+ constructor(repository) { this.repository = repository; }
22
+ #once(key, ask) {
23
+ let fact = this.#facts.get(key);
24
+ if (!fact) {
25
+ const asked = ask();
26
+ fact = asked;
27
+ this.#facts.set(key, asked);
28
+ asked.catch(() => { if (this.#facts.get(key) === asked)
29
+ this.#facts.delete(key); });
30
+ }
31
+ return fact;
32
+ }
33
+ binding() { return this.#once("binding", () => collectGitBinding(this.repository)); }
34
+ configuration() {
35
+ return this.#once("configuration", () => observeGitConfiguration(this.repository));
36
+ }
37
+ stash() { return this.#once("stash", () => collectStash(this.repository)); }
38
+ card() { return this.#once("card", () => collectCard(this)); }
39
+ evidence() { return this.#once("evidence", () => collectGitEvidence(this)); }
40
+ index() {
41
+ return this.#once("index", async () => NativeIndexSnapshot.observe(this.repository, (await this.binding()).binding));
42
+ }
43
+ /** A scope asked after the complete inventory is that inventory's filter,
44
+ * under the same proof: a stage listing never depends on the worktree, and
45
+ * Git lists each untracked file beneath its own path. */
46
+ inventory(scope) {
47
+ const full = this.#facts.get("inventory:null");
48
+ if (scope !== null && full) {
49
+ const selected = new Set(scope);
50
+ return full.then(({ index, untracked, proof }) => ({ proof,
51
+ index: index.filter(entry => inScope(selected, entry.path)),
52
+ untracked: untracked.filter(path => inScope(selected, path)) }));
53
+ }
54
+ return this.#once(`inventory:${JSON.stringify(scope)}`, () => this.#collectInventory(scope));
55
+ }
56
+ async #collectInventory(asked) {
57
+ // The closing re-ask names exactly this scope, whatever its caller does later.
58
+ const scope = asked === null ? null : Object.freeze([...asked]);
59
+ scope?.forEach(assertGitPath);
60
+ const binding = await this.binding();
61
+ const snapshot = await this.index();
62
+ if (scope?.length === 0)
63
+ return { index: [], untracked: [], proof: sourceProofs([binding, snapshot.proof]) };
64
+ // Both asks settle before either failure leaves this attempt.
65
+ const [indexAsk, untrackedAsk] = await Promise.allSettled([snapshot.entries(), snapshot.untracked(scope, false)]);
66
+ if (indexAsk.status === "rejected")
67
+ throw indexAsk.reason;
68
+ if (untrackedAsk.status === "rejected")
69
+ throw untrackedAsk.reason;
70
+ const listing = indexAsk.value, untrackedBytes = untrackedAsk.value;
71
+ const selected = scope === null ? null : new Set(scope);
72
+ const index = selected === null ? listing : listing.filter(entry => inScope(selected, entry.path));
73
+ const untracked = untrackedNames(untrackedBytes);
74
+ const answer = JSON.stringify(untracked);
75
+ // The index answer is its meaning, held by its witness; the untracked
76
+ // answer also depends on the worktree namespace, so Git lists it again
77
+ // over the same bytes.
78
+ const listed = semanticProof(async () => {
79
+ if (JSON.stringify(untrackedNames(await snapshot.untracked(scope, true))) !== answer) {
80
+ throw new CaptureSourceChangedError("repository untracked inventory changed during capture");
81
+ }
82
+ });
83
+ return { index, untracked, proof: sourceProofs([binding, snapshot.proof, listed]) };
84
+ }
85
+ }
86
+ //# sourceMappingURL=git-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-capture.js","sourceRoot":"","sources":["../src/git-capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type RepoStashEntry, type RepoState } from "@amalgm/live";
2
+ import type { GitCapture, GitFact } from "./git-capture.js";
3
+ /** The stash stack newest first, exactly as Git's reflog holds it. `%gs` is
4
+ * the reflog subject after Git's own whitespace normalization, so storing a
5
+ * captured message reads back unchanged. */
6
+ export declare function stashList(repository: string, closing?: boolean): Promise<RepoStashEntry[]>;
7
+ /** Git can follow a symbolic stash ref to a different reflog, and object
8
+ * availability can change its answer, so only Git's own answer closes it. */
9
+ export declare function collectStash(repository: string): Promise<GitFact<readonly RepoStashEntry[]>>;
10
+ /** HEAD, refs and the shallow boundary are this fact's own answers; the
11
+ * stash, remotes and object format are the capture's shared facts. */
12
+ export declare function collectCard(capture: GitCapture): Promise<GitFact<RepoState["card"]>>;
@@ -0,0 +1,123 @@
1
+ /** The Card: committed Git state as Git answers it. Each answer is one fact of
2
+ * a repository capture, closed by asking Git the same question again. */
3
+ import { readFile } from "node:fs/promises";
4
+ import { REPOSITORY_CARD_VERSION, portableRefName, refusal, } from "@amalgm/live";
5
+ import { CaptureSourceChangedError } from "./content-cache-host.js";
6
+ import { gitText, runGitSearch } from "./git-command.js";
7
+ import { looseRefs } from "./git-ref-store.js";
8
+ import { semanticProof, sourceProofs } from "./source-proof.js";
9
+ /** Every stored ref except Amalgm's private import namespace and
10
+ * `refs/stash`, whose value names only the top of a stack that lives in the
11
+ * reflog; the stack travels whole through `stashList`. for-each-ref gives each
12
+ * direct value; the loose store gives each symbolic ref's immediate target and
13
+ * every ref for-each-ref omitted. A dangling or cyclic symbolic ref is Git
14
+ * state like any other and travels as stored. A stored ref Git cannot read,
15
+ * or a name or target no Card can carry, is refused. */
16
+ async function refList(repository, closing) {
17
+ const output = await gitText(repository, ["for-each-ref", "--format=%(refname)%00%(objectname)%00%(symref)", "refs"], { purpose: "card", closing });
18
+ const direct = new Map();
19
+ const symbolic = new Set();
20
+ for (const line of output ? output.split("\n") : []) {
21
+ const [name, commit, target] = line.split("\0");
22
+ if (target)
23
+ symbolic.add(name);
24
+ else
25
+ direct.set(name, commit);
26
+ }
27
+ const refs = [...direct].map(([name, commit]) => ({ name, kind: "direct", commit }));
28
+ const stored = looseRefs(repository);
29
+ for (const name of symbolic) {
30
+ if (!stored.has(name))
31
+ throw new CaptureSourceChangedError("repository ref store changed");
32
+ }
33
+ for (const [name, read] of stored) {
34
+ if (direct.has(name))
35
+ continue;
36
+ const ref = read();
37
+ if (ref.kind === "direct")
38
+ throw new CaptureSourceChangedError("repository ref store changed");
39
+ if (ref.kind === "unreadable")
40
+ throw refusal(`repository stores a ref Git cannot read: ${name}`);
41
+ refs.push({ name, kind: "symbolic", target: ref.target });
42
+ }
43
+ return refs.filter(ref => ref.name !== "refs/stash" && !ref.name.startsWith("refs/amalgm-import/"))
44
+ .map(ref => {
45
+ if (!portableRefName(ref.name) || (ref.kind === "symbolic" && !portableRefName(ref.target))) {
46
+ throw refusal(`repository ref cannot travel: ${ref.name}`);
47
+ }
48
+ return ref;
49
+ })
50
+ .sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0);
51
+ }
52
+ /** The stash stack newest first, exactly as Git's reflog holds it. `%gs` is
53
+ * the reflog subject after Git's own whitespace normalization, so storing a
54
+ * captured message reads back unchanged. */
55
+ export async function stashList(repository, closing = false) {
56
+ const output = await gitText(repository, ["stash", "list", "--format=%H%x00%gs"], { purpose: "card", closing });
57
+ if (!output)
58
+ return [];
59
+ return output.split("\n").map((line) => {
60
+ const separator = line.indexOf("\0");
61
+ return { commit: line.slice(0, separator), message: line.slice(separator + 1) };
62
+ });
63
+ }
64
+ /** Git can follow a symbolic stash ref to a different reflog, and object
65
+ * availability can change its answer, so only Git's own answer closes it. */
66
+ export async function collectStash(repository) {
67
+ const value = Object.freeze(await stashList(repository));
68
+ const answer = JSON.stringify(value);
69
+ return { value, proof: semanticProof(async () => {
70
+ if (JSON.stringify(await stashList(repository, true)) !== answer) {
71
+ throw new CaptureSourceChangedError("repository stash changed");
72
+ }
73
+ }) };
74
+ }
75
+ /** A shallow boundary changes the visible history graph and participates in
76
+ * the Card fingerprint, even when the branch tip itself is unchanged. Its
77
+ * location is the binding's, so only the file itself is read here. */
78
+ async function shallowBoundary(file) {
79
+ let text;
80
+ try {
81
+ text = await readFile(file, "utf8");
82
+ }
83
+ catch (error) {
84
+ if (error.code === "ENOENT")
85
+ return [];
86
+ throw error;
87
+ }
88
+ const commits = text.split(/\r?\n/).filter(Boolean).sort();
89
+ if (commits.some((commit) => !/^[0-9a-f]{40,64}$/.test(commit))) {
90
+ throw new Error("repository has an invalid shallow boundary");
91
+ }
92
+ return commits;
93
+ }
94
+ async function askCard(repository, shallowFile, closing) {
95
+ const card = { purpose: "card", closing };
96
+ const branch = (await runGitSearch(repository, ["symbolic-ref", "-q", "--short", "HEAD"], card)).toString("utf8").trim() || null;
97
+ const commit = (await runGitSearch(repository, ["rev-parse", "-q", "--verify", "HEAD"], card)).toString("utf8").trim() || null;
98
+ return { branch, commit, refs: await refList(repository, closing), shallow: await shallowBoundary(shallowFile) };
99
+ }
100
+ /** HEAD, refs and the shallow boundary are this fact's own answers; the
101
+ * stash, remotes and object format are the capture's shared facts. */
102
+ export async function collectCard(capture) {
103
+ const binding = await capture.binding();
104
+ const configuration = await capture.configuration();
105
+ const stash = await capture.stash();
106
+ const asked = await askCard(capture.repository, binding.binding.shallow, false);
107
+ const answer = JSON.stringify(asked);
108
+ const { branch, commit, refs, shallow } = asked;
109
+ const value = {
110
+ version: REPOSITORY_CARD_VERSION,
111
+ objectFormat: binding.binding.format,
112
+ head: { branch, commit, detached: branch === null && commit !== null },
113
+ refs, stash: [...stash.value], remotes: configuration.remotes,
114
+ ...(shallow.length > 0 ? { shallow } : {}),
115
+ };
116
+ const own = semanticProof(async () => {
117
+ if (JSON.stringify(await askCard(capture.repository, binding.binding.shallow, true)) !== answer) {
118
+ throw new CaptureSourceChangedError("repository Git basis changed after capture");
119
+ }
120
+ });
121
+ return { value, proof: sourceProofs([own, stash.proof, configuration, binding]) };
122
+ }
123
+ //# sourceMappingURL=git-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-card.js","sourceRoot":"","sources":["../src/git-card.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /** Construct the working-file portion of a Checkpoint from explicit byte
2
+ * sources. Source selection belongs to publication; no filesystem lookup or
3
+ * invented physical fingerprint is part of construction. */
4
+ import { type RepoUnmergedPath } from "@amalgm/live";
5
+ import { type GitIndexEntry } from "./git-index-entries.js";
6
+ import { type LiteralRequest } from "./git-literal-read.js";
7
+ import type { PrivateGitView } from "./git-private-view.js";
8
+ export interface CheckpointWorkingFile {
9
+ /** Null only for a tracked leaf whose bytes are exactly its indexed blob. */
10
+ readonly content: Buffer | null;
11
+ /** Null only for such a leaf that was proven rather than read. */
12
+ readonly sha256: string | null;
13
+ readonly objectId: string;
14
+ readonly mode: "100644" | "100755" | "120000";
15
+ }
16
+ /** Every working path construction reads, and the bytes each may need: a
17
+ * tracked leaf's only when they are not its indexed blob. */
18
+ export declare function checkpointReads(index: readonly GitIndexEntry[], boundaries: readonly string[], additionalPaths: readonly string[]): Promise<LiteralRequest[]>;
19
+ export interface ConstructedLiteralCheckpoint {
20
+ readonly stagedPatch: Buffer;
21
+ readonly unstagedPatch: Buffer;
22
+ readonly untracked: readonly {
23
+ path: string;
24
+ mode: string;
25
+ content: Buffer;
26
+ sha256: string;
27
+ }[];
28
+ readonly unmerged: readonly RepoUnmergedPath[];
29
+ }
30
+ /** `additionalPaths` includes every selected leaf outside the native index,
31
+ * including retained shared leaves no longer present in the source worktree.
32
+ * The same constructor serves ordinary capture and selected publication.
33
+ * Private-view steps run one at a time: each replaces the view's one index. */
34
+ export declare function constructLiteralCheckpoint(input: {
35
+ readonly view: PrivateGitView;
36
+ readonly index: readonly GitIndexEntry[];
37
+ readonly commit: string | null;
38
+ readonly boundaries: readonly string[];
39
+ readonly additionalPaths: readonly string[];
40
+ readonly read: (path: string) => CheckpointWorkingFile | null;
41
+ }): Promise<ConstructedLiteralCheckpoint>;
@@ -0,0 +1,96 @@
1
+ /** Construct the working-file portion of a Checkpoint from explicit byte
2
+ * sources. Source selection belongs to publication; no filesystem lookup or
3
+ * invented physical fingerprint is part of construction. */
4
+ import { ITEMS_PER_BOUNDARY } from "@amalgm/live";
5
+ import { assertGitPath, isGitControlPath, withinGitBoundary } from "./git-index-entries.js";
6
+ import { leafDigest } from "./git-literal-read.js";
7
+ import { eachInTurns, turnBoundary } from "./turns.js";
8
+ const independentOf = (boundaries) => path => isGitControlPath(path) || withinGitBoundary(path, boundaries);
9
+ const readsTracked = (entry, independent) => entry.mode !== "160000" && !independent(entry.path);
10
+ const readsUnmerged = (path, entries, independent) => !entries.every(entry => entry.mode === "160000") && !independent(path);
11
+ function conflictsOf(index) {
12
+ const conflicts = new Map();
13
+ for (const entry of index)
14
+ if (entry.stage !== 0) {
15
+ const stages = conflicts.get(entry.path) ?? [];
16
+ stages.push(entry);
17
+ conflicts.set(entry.path, stages);
18
+ }
19
+ return conflicts;
20
+ }
21
+ const bytes = (leaf, path) => {
22
+ if (leaf.content === null)
23
+ throw new Error(`checkpoint working file arrived without its bytes: ${path}`);
24
+ return leaf.content;
25
+ };
26
+ /** Every working path construction reads, and the bytes each may need: a
27
+ * tracked leaf's only when they are not its indexed blob. */
28
+ export async function checkpointReads(index, boundaries, additionalPaths) {
29
+ const independent = independentOf(boundaries);
30
+ const reads = [];
31
+ await eachInTurns(index, entry => {
32
+ if (entry.stage === 0 && readsTracked(entry, independent))
33
+ reads.push({ path: entry.path, content: { unless: entry.objectId } });
34
+ });
35
+ for (const path of additionalPaths)
36
+ reads.push({ path, content: "all" });
37
+ for (const [path, entries] of conflictsOf(index)) {
38
+ if (readsUnmerged(path, entries, independent))
39
+ reads.push({ path, content: "all" });
40
+ }
41
+ return reads;
42
+ }
43
+ /** `additionalPaths` includes every selected leaf outside the native index,
44
+ * including retained shared leaves no longer present in the source worktree.
45
+ * The same constructor serves ordinary capture and selected publication.
46
+ * Private-view steps run one at a time: each replaces the view's one index. */
47
+ export async function constructLiteralCheckpoint(input) {
48
+ const { view, index, commit, boundaries, read } = input;
49
+ const independent = independentOf(boundaries);
50
+ const stageZero = index.filter(entry => entry.stage === 0);
51
+ const indexTree = await view.tree(stageZero);
52
+ const worktree = [];
53
+ let visited = 0;
54
+ for (const entry of stageZero) {
55
+ if (++visited % ITEMS_PER_BOUNDARY === 0)
56
+ await turnBoundary();
57
+ if (!readsTracked(entry, independent)) {
58
+ worktree.push(entry);
59
+ continue;
60
+ }
61
+ const leaf = read(entry.path);
62
+ if (!leaf)
63
+ continue;
64
+ if (leaf.objectId !== entry.objectId)
65
+ await view.rawBlob({ content: bytes(leaf, entry.path), objectId: leaf.objectId });
66
+ worktree.push({ path: entry.path, mode: leaf.mode, objectId: leaf.objectId, stage: 0 });
67
+ }
68
+ const conflicts = conflictsOf(index);
69
+ const indexed = new Set(index.map(entry => entry.path));
70
+ const paths = new Set();
71
+ const untracked = [];
72
+ for (const path of input.additionalPaths) {
73
+ if (++visited % ITEMS_PER_BOUNDARY === 0)
74
+ await turnBoundary();
75
+ assertGitPath(path);
76
+ if (paths.has(path))
77
+ throw new Error(`duplicate selected working path: ${path}`);
78
+ paths.add(path);
79
+ if (indexed.has(path) || independent(path)) {
80
+ throw new Error(`selected additional path belongs to another checkpoint owner: ${path}`);
81
+ }
82
+ const leaf = read(path);
83
+ if (leaf)
84
+ untracked.push({ path, mode: leaf.mode, content: bytes(leaf, path), sha256: leafDigest(leaf) });
85
+ }
86
+ const unmerged = [...conflicts].map(([path, entries]) => {
87
+ const leaf = readsUnmerged(path, entries, independent) ? read(path) : null;
88
+ return { path, stages: entries.map(entry => ({ mode: entry.mode, objectId: entry.objectId,
89
+ stage: entry.stage })), worktree: leaf === null ? null
90
+ : { mode: leaf.mode, content: bytes(leaf, path), sha256: leafDigest(leaf) } };
91
+ });
92
+ const stagedPatch = await view.diff(commit ?? await view.tree([]), indexTree);
93
+ const unstagedPatch = await view.diff(indexTree, await view.tree(worktree));
94
+ return { stagedPatch, unstagedPatch, untracked, unmerged };
95
+ }
96
+ //# sourceMappingURL=git-checkpoint-construction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-checkpoint-construction.js","sourceRoot":"","sources":["../src/git-checkpoint-construction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { type RepoIdentityEntry } from "@amalgm/live";
2
+ import { type GitIndexEntry } from "./git-index-entries.js";
3
+ import { PrivateGitView } from "./git-private-view.js";
4
+ export interface CheckpointLeafSource {
5
+ readonly path: string;
6
+ readonly mode: string;
7
+ readonly sha256: string;
8
+ read(): Buffer;
9
+ }
10
+ export interface LiteralCheckpointSource {
11
+ readonly baseCommit: string | null;
12
+ readonly stagedPatch: Uint8Array;
13
+ readonly unstagedPatch: Uint8Array;
14
+ readonly untracked: readonly CheckpointLeafSource[];
15
+ readonly unmerged: readonly {
16
+ readonly path: string;
17
+ readonly stages: readonly {
18
+ readonly stage: 1 | 2 | 3;
19
+ readonly mode: string;
20
+ readonly objectId: string;
21
+ }[];
22
+ readonly worktree: CheckpointLeafSource | null;
23
+ }[];
24
+ }
25
+ export interface PreparedLiteralCheckpoint {
26
+ readonly view: PrivateGitView;
27
+ readonly index: readonly GitIndexEntry[];
28
+ readonly finalIndex: readonly GitIndexEntry[];
29
+ readonly physical: ReadonlySet<string>;
30
+ readonly directories: ReadonlySet<string>;
31
+ readonly boundaries: readonly string[];
32
+ /** Exact immutable working bytes, every leaf or only the named paths, in
33
+ * one Git batch; no machine-local identity or stat claims. */
34
+ readLeaves(consume: (entry: GitIndexEntry, bytes: Buffer) => void, paths?: ReadonlySet<string>): Promise<void>;
35
+ close(): Promise<void>;
36
+ }
37
+ export declare function prepareLiteralCheckpoint(repository: string, checkpoint: LiteralCheckpointSource, identity: readonly RepoIdentityEntry[]): Promise<PreparedLiteralCheckpoint>;
@@ -0,0 +1,145 @@
1
+ /** Compile and prove a Checkpoint in disposable private Git storage.
2
+ * This owner performs no index installation, metadata writes or worktree reveal.
3
+ * Its caller owns the returned preparation until close, including on failure. */
4
+ import { createHash } from "node:crypto";
5
+ import { dirname } from "node:path";
6
+ import { classifyFile } from "@amalgm/live";
7
+ import { assertGitPath, isGitControlPath, withinGitBoundary } from "./git-index-entries.js";
8
+ import { resolveGitBinding } from "./git-binding.js";
9
+ import { PrivateGitView } from "./git-private-view.js";
10
+ /** Batch raw object reads without accumulating a repository in memory. */
11
+ async function readBlobs(view, entries, consume) {
12
+ if (!entries.length)
13
+ return;
14
+ const sizes = (await view.blobSizes(entries.map(entry => entry.objectId)))
15
+ .toString("utf8").trim().split("\n").map(Number);
16
+ if (sizes.length !== entries.length || sizes.some(size => !Number.isSafeInteger(size) || size < 0)) {
17
+ throw new Error("repository contains unavailable literal objects");
18
+ }
19
+ for (let start = 0; start < entries.length;) {
20
+ let end = start, bytes = 0;
21
+ do {
22
+ bytes += sizes[end++];
23
+ } while (end < entries.length && end - start < 128 && bytes + sizes[end] <= 16 * 1024 * 1024);
24
+ const batch = entries.slice(start, end);
25
+ const output = await view.blobs(batch.map(entry => entry.objectId));
26
+ let cursor = 0;
27
+ for (const entry of batch) {
28
+ const lineEnd = output.indexOf(10, cursor);
29
+ const [oid, type, length] = output.subarray(cursor, lineEnd).toString("ascii").split(" ");
30
+ const size = Number(length);
31
+ if (lineEnd < cursor || oid !== entry.objectId || type !== "blob" || !Number.isSafeInteger(size)
32
+ || size < 0 || lineEnd + size + 1 >= output.length || output[lineEnd + size + 1] !== 10) {
33
+ throw new Error("Git returned invalid literal blob contents");
34
+ }
35
+ cursor = lineEnd + 1;
36
+ consume(entry, output.subarray(cursor, cursor + size));
37
+ cursor += size + 1;
38
+ }
39
+ if (cursor !== output.length)
40
+ throw new Error("Git returned trailing literal object data");
41
+ start = end;
42
+ }
43
+ }
44
+ export async function prepareLiteralCheckpoint(repository, checkpoint, identity) {
45
+ const view = await PrivateGitView.open(await resolveGitBinding(repository));
46
+ try {
47
+ const base = checkpoint.baseCommit ?? await view.tree([]);
48
+ const index = await view.apply(base, checkpoint.stagedPatch);
49
+ const indexTree = await view.tree(index);
50
+ const working = await view.apply(indexTree, checkpoint.unstagedPatch);
51
+ const boundaries = identity.filter(entry => entry.type === "repo.git").map(entry => entry.path);
52
+ const indexByPath = new Map(index.map(entry => [entry.path, entry]));
53
+ const workingByPath = new Map(working.map(entry => [entry.path, entry]));
54
+ for (const entry of [...index, ...working]) {
55
+ if (entry.mode !== "160000" && !isGitControlPath(entry.path) && !withinGitBoundary(entry.path, boundaries))
56
+ continue;
57
+ const before = indexByPath.get(entry.path), after = workingByPath.get(entry.path);
58
+ if (!before || !after || before.mode !== after.mode || before.objectId !== after.objectId) {
59
+ throw new Error("repository unstaged patch changed an independently owned or control path");
60
+ }
61
+ }
62
+ const ordinary = working.filter(entry => entry.mode !== "160000" && !isGitControlPath(entry.path) && !withinGitBoundary(entry.path, boundaries));
63
+ const physical = new Set(ordinary.map(entry => entry.path));
64
+ const extra = [];
65
+ const indexPaths = new Set(index.map(entry => entry.path));
66
+ const conflicts = new Set();
67
+ for (const entry of checkpoint.unmerged) {
68
+ assertGitPath(entry.path);
69
+ if (conflicts.has(entry.path) || indexPaths.has(entry.path))
70
+ throw new Error("repository conflict overlaps stage-zero index");
71
+ conflicts.add(entry.path);
72
+ if (isGitControlPath(entry.path) || withinGitBoundary(entry.path, boundaries) || entry.stages.every(stage => stage.mode === "160000")) {
73
+ if (entry.worktree !== null)
74
+ throw new Error("repository conflict content targets an independent owner");
75
+ continue;
76
+ }
77
+ if (entry.worktree)
78
+ extra.push(entry.worktree);
79
+ }
80
+ for (const entry of checkpoint.untracked) {
81
+ assertGitPath(entry.path);
82
+ if (indexPaths.has(entry.path) || conflicts.has(entry.path) || withinGitBoundary(entry.path, boundaries)) {
83
+ throw new Error("repository untracked content overlaps another owner");
84
+ }
85
+ extra.push(entry);
86
+ }
87
+ for (const entry of extra) {
88
+ if (physical.has(entry.path))
89
+ throw new Error("repository physical path has multiple contents");
90
+ physical.add(entry.path);
91
+ }
92
+ const directories = new Set(identity.filter(entry => entry.type === "folder").map(entry => entry.path));
93
+ for (const path of [...physical, ...directories, ...boundaries]) {
94
+ assertGitPath(path);
95
+ for (let parent = dirname(path); parent !== "."; parent = dirname(parent))
96
+ directories.add(parent);
97
+ }
98
+ for (const path of physical) {
99
+ if (directories.has(path) || boundaries.some(boundary => boundary.startsWith(`${path}/`))) {
100
+ throw new Error("repository leaf would replace a directory or independent repository");
101
+ }
102
+ }
103
+ const identities = new Map(identity.map(entry => [entry.path, entry]));
104
+ const verify = (path, mode, bytes) => {
105
+ const entry = identities.get(path);
106
+ const type = mode === "120000" ? "link" : classifyFile({ binary: bytes.includes(0) });
107
+ const payload = entry?.payloadVersion;
108
+ const actual = payload?.startsWith("git:")
109
+ ? `git:${view.format}:${createHash(view.format).update(`blob ${bytes.length}\0`).update(bytes).digest("hex")}`
110
+ : createHash("sha256").update(bytes).digest("hex");
111
+ if (!entry || entry.type !== type || payload !== actual) {
112
+ throw new Error(`repository package does not reproduce its member: ${path}`);
113
+ }
114
+ };
115
+ // Prove the entire package before revealing any filesystem bytes.
116
+ await readBlobs(view, ordinary, (entry, bytes) => verify(entry.path, entry.mode, bytes));
117
+ const extraObjects = [];
118
+ for (const entry of extra) {
119
+ const bytes = entry.read();
120
+ if (createHash("sha256").update(bytes).digest("hex") !== entry.sha256)
121
+ throw new Error(`repository content checksum mismatch: ${entry.path}`);
122
+ verify(entry.path, entry.mode, bytes);
123
+ const objectId = await view.writeBlob(bytes);
124
+ extraObjects.push({ path: entry.path, mode: entry.mode, objectId, stage: 0 });
125
+ }
126
+ for (const entry of identity) {
127
+ if (["file.text", "file.binary", "link"].includes(entry.type)
128
+ && !withinGitBoundary(entry.path, boundaries) && !physical.has(entry.path)) {
129
+ throw new Error(`repository package omitted member contents: ${entry.path}`);
130
+ }
131
+ }
132
+ const finalIndex = [...index, ...checkpoint.unmerged.flatMap(entry => entry.stages.map(stage => ({ ...stage, path: entry.path })))];
133
+ const leaves = [...ordinary, ...extraObjects];
134
+ return {
135
+ view, index, finalIndex, physical, directories, boundaries,
136
+ readLeaves: (consume, paths) => readBlobs(view, paths ? leaves.filter(entry => paths.has(entry.path)) : leaves, consume),
137
+ close: () => view.close(),
138
+ };
139
+ }
140
+ catch (error) {
141
+ await view.close();
142
+ throw error;
143
+ }
144
+ }
145
+ //# sourceMappingURL=git-checkpoint-preparation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-checkpoint-preparation.js","sourceRoot":"","sources":["../src/git-checkpoint-preparation.ts"],"names":[],"mappings":"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"}