@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,268 @@
1
+ /** Reconstruct accepted index and literal worktree separately. No checkout,
2
+ * filter, text conversion or user diff program participates in replay. */
3
+ import { chmodSync, closeSync, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, readdirSync, readlinkSync, renameSync, rmSync, rmdirSync, symlinkSync, unlinkSync, writeFileSync, } from "node:fs";
4
+ import { randomUUID } from "node:crypto";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import { ensurePrivateDir } from "./filesystem.js";
7
+ import { gitText, runGit } from "./git-command.js";
8
+ import { withinGitBoundary } from "./git-index-entries.js";
9
+ import { judgeNativeFile, observeNativeGitFile } from "./git-native-file.js";
10
+ import { prepareLiteralCheckpoint } from "./git-checkpoint-preparation.js";
11
+ const durableGit = (repository, args, input) => runGit(repository, ["-c", "core.fsync=all", "-c", "core.fsyncMethod=fsync", ...args], { input, purpose: "apply" });
12
+ function optionalIndex(path) {
13
+ const observed = observeNativeGitFile(path);
14
+ judgeNativeFile(observed.witness);
15
+ return observed.bytes;
16
+ }
17
+ /** The index lock is held across the whole reveal, so Git itself refuses any
18
+ * concurrent index writer while working ground is replaced. */
19
+ async function installIndex(path, bytes, expected, reveal) {
20
+ const lock = `${path}.lock`;
21
+ const descriptor = openSync(lock, "wx", 0o600);
22
+ let installed = false, open = true;
23
+ try {
24
+ const current = optionalIndex(path);
25
+ if (expected === null ? current !== null : current === null || !expected.equals(current)) {
26
+ throw new Error("repository index changed before its write lock was acquired");
27
+ }
28
+ writeFileSync(descriptor, bytes);
29
+ fsyncSync(descriptor);
30
+ await reveal();
31
+ closeSync(descriptor);
32
+ open = false;
33
+ renameSync(lock, path);
34
+ installed = true;
35
+ if (process.platform !== "win32") {
36
+ const directory = openSync(dirname(path), "r");
37
+ try {
38
+ fsyncSync(directory);
39
+ }
40
+ finally {
41
+ closeSync(directory);
42
+ }
43
+ }
44
+ }
45
+ finally {
46
+ if (!installed) {
47
+ if (open)
48
+ closeSync(descriptor);
49
+ rmSync(lock, { force: true });
50
+ }
51
+ }
52
+ }
53
+ function protectedGround(repository, declared) {
54
+ const boundaries = new Set(declared);
55
+ const visit = (directory, prefix) => {
56
+ for (const child of readdirSync(directory, { withFileTypes: true })) {
57
+ if ([".git", ".amalgm"].includes(child.name.toLowerCase()) || !child.isDirectory())
58
+ continue;
59
+ const path = prefix ? `${prefix}/${child.name}` : child.name;
60
+ if (boundaries.has(path))
61
+ continue;
62
+ const absolute = join(directory, child.name);
63
+ if (existsSync(join(absolute, ".git")))
64
+ boundaries.add(path);
65
+ else
66
+ visit(absolute, path);
67
+ }
68
+ };
69
+ visit(repository, "");
70
+ return [...boundaries];
71
+ }
72
+ export class RepositoryGroundObstructed extends Error {
73
+ paths;
74
+ constructor(paths) {
75
+ super(`repository ground obstructs the accepted result: ${paths.join(", ")}`);
76
+ this.paths = paths;
77
+ }
78
+ }
79
+ const withParents = (paths, into) => {
80
+ for (const path of paths) {
81
+ for (let parent = dirname(path); parent !== "."; parent = dirname(parent))
82
+ into.add(parent);
83
+ }
84
+ return into;
85
+ };
86
+ /** Removal is sharing's decision, never an occupant's: only members the
87
+ * shared identity held and the accepted identity drops are removed. A
88
+ * remainder in a slot the result needs, a dropped directory still holding
89
+ * kept ground, or anything neither identity nor the remainder accounts for
90
+ * obstructs before any effect, naming its paths. */
91
+ export function planWorkingReveal(repository, target, shared, remainder) {
92
+ const boundaries = target.filter(entry => entry.type === "repo.git").map(entry => entry.path);
93
+ const leaves = new Set(target.filter(entry => entry.type !== "folder" && entry.type !== "repo.git").map(entry => entry.path));
94
+ const directories = withParents([...leaves, ...boundaries], new Set(target.filter(entry => entry.type === "folder").map(entry => entry.path)));
95
+ const held = new Set(shared.map(entry => entry.path));
96
+ withParents(shared.map(entry => entry.path), held);
97
+ const obstructed = [], removeLeaves = [], removeDirectories = [];
98
+ /** True when the subtree keeps anything. */
99
+ const visit = (absolute, prefix) => {
100
+ let keeps = false;
101
+ for (const child of readdirSync(absolute, { withFileTypes: true })) {
102
+ if ([".git", ".amalgm"].includes(child.name.toLowerCase()))
103
+ continue;
104
+ const path = prefix ? `${prefix}/${child.name}` : child.name;
105
+ if (withinGitBoundary(path, boundaries)) {
106
+ keeps = true;
107
+ continue;
108
+ }
109
+ const kept = remainder.has(path);
110
+ if (kept && (leaves.has(path) || directories.has(path))) {
111
+ obstructed.push(path);
112
+ keeps = true;
113
+ continue;
114
+ }
115
+ if (child.isDirectory()) {
116
+ const inner = visit(join(absolute, child.name), path);
117
+ if (kept || directories.has(path)) {
118
+ keeps = true;
119
+ continue;
120
+ }
121
+ if (inner || !held.has(path)) {
122
+ obstructed.push(path);
123
+ keeps = true;
124
+ continue;
125
+ }
126
+ removeDirectories.push(path);
127
+ }
128
+ else if (kept)
129
+ keeps = true;
130
+ else if (!held.has(path)) {
131
+ obstructed.push(path);
132
+ keeps = true;
133
+ }
134
+ else if (leaves.has(path))
135
+ keeps = true;
136
+ else
137
+ removeLeaves.push(path);
138
+ }
139
+ return keeps;
140
+ };
141
+ visit(repository, "");
142
+ if (obstructed.length)
143
+ throw new RepositoryGroundObstructed(obstructed.sort());
144
+ return { leaves: removeLeaves, directories: removeDirectories };
145
+ }
146
+ const absentIsDone = (remove) => {
147
+ try {
148
+ remove();
149
+ }
150
+ catch (error) {
151
+ if (error.code !== "ENOENT")
152
+ throw error;
153
+ }
154
+ };
155
+ /** Final reveal already owns this repository. Owned ground removes every
156
+ * other ordinary member; working ground removes only its plan, and a
157
+ * non-empty directory or a leaf turned directory refuses rather than
158
+ * recursing. Never through a symlink, Git metadata or independent owner. */
159
+ function preparePhysicalGround(repository, leaves, directories, boundaries, ground) {
160
+ const visit = (absolute, prefix) => {
161
+ for (const child of readdirSync(absolute, { withFileTypes: true })) {
162
+ if ([".git", ".amalgm"].includes(child.name.toLowerCase()))
163
+ continue;
164
+ const path = prefix ? `${prefix}/${child.name}` : child.name;
165
+ if (withinGitBoundary(path, boundaries))
166
+ continue;
167
+ const file = join(absolute, child.name);
168
+ if (child.isDirectory()) {
169
+ visit(file, path);
170
+ if (!directories.has(path))
171
+ rmdirSync(file);
172
+ }
173
+ else if (!leaves.has(path))
174
+ rmSync(file);
175
+ }
176
+ };
177
+ if (ground.kind === "owned")
178
+ visit(repository, "");
179
+ else {
180
+ for (const path of ground.removals.leaves)
181
+ absentIsDone(() => unlinkSync(join(repository, path)));
182
+ for (const path of ground.removals.directories)
183
+ absentIsDone(() => rmdirSync(join(repository, path)));
184
+ }
185
+ for (const path of [...directories].sort((a, b) => a.split("/").length - b.split("/").length)) {
186
+ if (!withinGitBoundary(path, boundaries))
187
+ mkdirSync(join(repository, path), { recursive: true });
188
+ }
189
+ }
190
+ /** Leaves are finished in the repository's own control tree: owned, on the
191
+ * worktree's filesystem, and excluded from Detect and Checkpoint capture, so
192
+ * an interrupted write never leaves a name that could publish as user work. */
193
+ const revealStage = (repository) => join(repository, ".amalgm", "reveal");
194
+ function writeLiteralLeaf(repository, path, mode, bytes) {
195
+ const file = join(repository, path);
196
+ let current;
197
+ try {
198
+ current = lstatSync(file);
199
+ }
200
+ catch (error) {
201
+ if (error.code !== "ENOENT")
202
+ throw error;
203
+ }
204
+ // A published inode is never written: each leaf is finished under a
205
+ // private name and replaces the visible one by rename, so neither a
206
+ // hard-linked twin of the old leaf nor an alias of the new one can see a
207
+ // partial write.
208
+ const link = mode === "120000";
209
+ const executable = mode === "100755";
210
+ if (link ? current?.isSymbolicLink() && readlinkSync(file) === bytes.toString("utf8")
211
+ : current?.isFile() && Boolean(current.mode & 0o111) === executable && readFileSync(file).equals(bytes))
212
+ return;
213
+ const staged = join(revealStage(repository), randomUUID());
214
+ try {
215
+ if (link)
216
+ symlinkSync(bytes.toString("utf8"), staged);
217
+ else {
218
+ const fileMode = executable ? 0o755 : 0o644;
219
+ writeFileSync(staged, bytes, { mode: fileMode, flag: "wx" });
220
+ // The mode is set before publication: a published inode never changes.
221
+ chmodSync(staged, fileMode);
222
+ }
223
+ renameSync(staged, file);
224
+ }
225
+ finally {
226
+ rmSync(staged, { force: true });
227
+ }
228
+ }
229
+ export async function installLiteralCheckpoint(repository, checkpoint, identity, ground, installMetadata) {
230
+ const indexPath = resolve(repository, await gitText(repository, ["rev-parse", "--git-path", "index"], { purpose: "binding" }));
231
+ const beforeIndex = optionalIndex(indexPath);
232
+ const prepared = await prepareLiteralCheckpoint(repository, checkpoint, identity);
233
+ try {
234
+ const { view, index, finalIndex, physical, directories, boundaries } = prepared;
235
+ // Preparation can be expensive. Discover independent ground afterward,
236
+ // before any real objects, metadata or working files may be changed.
237
+ const unexpected = protectedGround(repository, boundaries).filter(path => !boundaries.includes(path));
238
+ if (unexpected.length)
239
+ throw new Error(`independent repository must settle before parent Apply: ${unexpected.join(", ")}`);
240
+ // Staged blobs produced by --cached patching belong in the real index's
241
+ // object database. Working-only objects remain private and disposable.
242
+ const newIndexObjects = [...new Set(index.filter(entry => entry.mode !== "160000"
243
+ && view.ownsObject(entry.objectId)).map(entry => entry.objectId))];
244
+ if (newIndexObjects.length) {
245
+ const pack = await view.pack(newIndexObjects);
246
+ await durableGit(repository, ["index-pack", "--stdin", "--fix-thin"], pack);
247
+ }
248
+ const required = [...new Set(finalIndex.filter(entry => entry.mode !== "160000").map(entry => entry.objectId))];
249
+ if (required.length) {
250
+ const objects = (await runGit(repository, ["cat-file", "--batch-check=%(objectname) %(objecttype)"], { input: Buffer.from(required.join("\n") + "\n"), purpose: "apply" })).toString("ascii").trim().split("\n");
251
+ if (objects.some((line, i) => line !== `${required[i]} blob`))
252
+ throw new Error("repository index object closure is incomplete");
253
+ }
254
+ await installIndex(indexPath, await view.indexBytes(finalIndex), beforeIndex, async () => {
255
+ await installMetadata();
256
+ preparePhysicalGround(repository, physical, directories, boundaries, ground);
257
+ // An interrupted reveal's leftovers are this reveal's own private work.
258
+ rmSync(revealStage(repository), { recursive: true, force: true });
259
+ ensurePrivateDir(revealStage(repository));
260
+ await prepared.readLeaves((entry, bytes) => writeLiteralLeaf(repository, entry.path, entry.mode, bytes));
261
+ rmSync(revealStage(repository), { recursive: true, force: true });
262
+ });
263
+ }
264
+ finally {
265
+ await prepared.close();
266
+ }
267
+ }
268
+ //# sourceMappingURL=git-literal-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-literal-replay.js","sourceRoot":"","sources":["../src/git-literal-replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /** What one read saw. `path` is the file, or its first absent ancestor, whose
2
+ * parent route resolved to `parent`; `file` is the object's real address. */
3
+ export interface NativeFileWitness {
4
+ readonly kind: "native-file";
5
+ readonly path: string;
6
+ readonly parent: string;
7
+ readonly parentIdentity: string;
8
+ readonly file: string;
9
+ readonly version: string | null;
10
+ readonly bytes: Uint8Array | null;
11
+ }
12
+ export interface NativeGitFile {
13
+ readonly bytes: Buffer | null;
14
+ readonly version: string | null;
15
+ /** The physical key of the object actually opened and read; null when absent. */
16
+ readonly physical: string | null;
17
+ readonly witness: NativeFileWitness;
18
+ }
19
+ export interface NativeRead {
20
+ readonly bytes: Buffer;
21
+ readonly version: string;
22
+ /** The physical key of the object actually opened and read. */
23
+ readonly physical: string;
24
+ }
25
+ /** An absent file is an observation under a proven directory, never a missing
26
+ * repository. */
27
+ export declare function observeNativeGitFile(path: string): NativeGitFile;
28
+ export declare function judgeNativeFile(witness: NativeFileWitness): void;
29
+ /** A directory as one read resolved it: its address, real path and identity. */
30
+ export interface NativeDirectory {
31
+ readonly path: string;
32
+ readonly real: string;
33
+ readonly identity: string;
34
+ }
35
+ /** A directory gone since its binding was proven is a change. */
36
+ export declare function observeNativeDirectory(path: string): NativeDirectory;
37
+ /** The file `name` in an observed directory, read whole as it is now,
38
+ * whatever it held before; null when absent. Observation refuses a file that
39
+ * is not regular. */
40
+ export declare function observeGitFileIn(directory: NativeDirectory, name: string): NativeRead | null;
41
+ /** The same read at judgment, where any other kind of file is a change. */
42
+ export declare function rereadGitFileIn(directory: NativeDirectory, name: string): NativeRead | null;
@@ -0,0 +1,145 @@
1
+ /** One native Git file read without a Git process: its bytes, or its proven
2
+ * absence, under a proven parent. The witness is plain data, so any thread
3
+ * reads the file again and judges it byte for byte. A current read takes
4
+ * whatever object the address holds now, for a judge of what bytes mean. */
5
+ import { closeSync, constants, fstatSync, lstatSync, openSync, readFileSync, realpathSync } from "node:fs";
6
+ import { basename, dirname, join } from "node:path";
7
+ import { CaptureSourceChangedError } from "./content-cache-host.js";
8
+ import { physicalKey, sourceSignature } from "./source-signature.js";
9
+ const identity = (s) => [s.dev, s.ino, s.mode].join(":");
10
+ const changed = () => { throw new CaptureSourceChangedError("repository native index binding or bytes changed"); };
11
+ const irregular = (path) => { throw new Error(`Git index storage must be a regular file: ${path}`); };
12
+ const absent = (error) => ["ENOENT", "ENOTDIR"].includes(error.code ?? "");
13
+ const stat = (path) => {
14
+ try {
15
+ return lstatSync(path, { bigint: true });
16
+ }
17
+ catch (error) {
18
+ if (error.code === "ENOENT")
19
+ return null;
20
+ throw error;
21
+ }
22
+ };
23
+ /** Retain the first absent component, not a newly chosen absence at closing.
24
+ * A present obstruction is refused without opening or reading its contents. */
25
+ function observeSlot(path) {
26
+ const parentPath = dirname(path);
27
+ let parent;
28
+ try {
29
+ parent = realpathSync(parentPath);
30
+ }
31
+ catch (error) {
32
+ if (error.code !== "ENOENT" || parentPath === path)
33
+ throw error;
34
+ const absent = observeSlot(parentPath);
35
+ if (absent.before !== null)
36
+ throw error;
37
+ return absent;
38
+ }
39
+ const file = join(parent, basename(path));
40
+ return { path, parent, parentIdentity: identity(lstatSync(parent, { bigint: true })), file, before: stat(file) };
41
+ }
42
+ function validateParent(slot) {
43
+ try {
44
+ if (realpathSync(dirname(slot.path)) !== slot.parent
45
+ || identity(lstatSync(slot.parent, { bigint: true })) !== slot.parentIdentity)
46
+ changed();
47
+ }
48
+ catch (error) {
49
+ if (absent(error))
50
+ changed();
51
+ throw error;
52
+ }
53
+ }
54
+ /** Nonblocking, no-follow: an object that vanished or became a link after
55
+ * its stat is a change or not regular, never an opened special file. */
56
+ function open(file, notRegular) {
57
+ try {
58
+ return openSync(file, constants.O_RDONLY | constants.O_NONBLOCK | (constants.O_NOFOLLOW ?? 0));
59
+ }
60
+ catch (error) {
61
+ if (absent(error))
62
+ changed();
63
+ if (error.code === "ELOOP")
64
+ notRegular();
65
+ throw error;
66
+ }
67
+ }
68
+ /** The slot's object as it is now, read whole while it holds still, provided
69
+ * its parent still resolves as observed; any other kind of file is `notRegular`. */
70
+ function readCurrent(slot, notRegular) {
71
+ validateParent(slot);
72
+ const current = stat(slot.file);
73
+ if (current === null) {
74
+ validateParent(slot);
75
+ return null;
76
+ }
77
+ if (!current.isFile())
78
+ notRegular();
79
+ const version = sourceSignature(current);
80
+ const same = (s) => s !== null && sourceSignature(s) === version;
81
+ const fd = open(slot.file, notRegular);
82
+ try {
83
+ if (!same(fstatSync(fd, { bigint: true })))
84
+ changed();
85
+ const bytes = readFileSync(fd);
86
+ const read = fstatSync(fd, { bigint: true });
87
+ if (!same(read) || BigInt(bytes.length) !== read.size || !same(stat(slot.file)))
88
+ changed();
89
+ validateParent(slot);
90
+ return { bytes, version, physical: physicalKey(read) };
91
+ }
92
+ finally {
93
+ closeSync(fd);
94
+ }
95
+ }
96
+ /** The slot's bytes, provided it still holds the observed object. */
97
+ function readSlot(slot) {
98
+ const read = readCurrent(slot, changed);
99
+ if ((read?.version ?? null) !== slot.version)
100
+ changed();
101
+ return read;
102
+ }
103
+ /** An absent file is an observation under a proven directory, never a missing
104
+ * repository. */
105
+ export function observeNativeGitFile(path) {
106
+ const { before, ...slot } = observeSlot(path);
107
+ if (before !== null && !before.isFile())
108
+ irregular(path);
109
+ const observed = { ...slot, version: before === null ? null : sourceSignature(before) };
110
+ const read = readSlot(observed);
111
+ const bytes = read?.bytes ?? null;
112
+ return { bytes, version: observed.version, physical: read?.physical ?? null,
113
+ witness: Object.freeze({ kind: "native-file", ...observed, bytes }) };
114
+ }
115
+ export function judgeNativeFile(witness) {
116
+ const current = readSlot(witness)?.bytes ?? null;
117
+ if (witness.bytes === null ? current !== null : current === null || !current.equals(witness.bytes))
118
+ changed();
119
+ }
120
+ /** A directory gone since its binding was proven is a change. */
121
+ export function observeNativeDirectory(path) {
122
+ try {
123
+ const real = realpathSync(path);
124
+ return Object.freeze({ path, real, identity: identity(lstatSync(real, { bigint: true })) });
125
+ }
126
+ catch (error) {
127
+ if (absent(error))
128
+ changed();
129
+ throw error;
130
+ }
131
+ }
132
+ const slotIn = (directory, name) => ({ path: join(directory.path, name),
133
+ parent: directory.real, parentIdentity: directory.identity, file: join(directory.real, name) });
134
+ /** The file `name` in an observed directory, read whole as it is now,
135
+ * whatever it held before; null when absent. Observation refuses a file that
136
+ * is not regular. */
137
+ export function observeGitFileIn(directory, name) {
138
+ const slot = slotIn(directory, name);
139
+ return readCurrent(slot, () => irregular(slot.path));
140
+ }
141
+ /** The same read at judgment, where any other kind of file is a change. */
142
+ export function rereadGitFileIn(directory, name) {
143
+ return readCurrent(slotIn(directory, name), changed);
144
+ }
145
+ //# sourceMappingURL=git-native-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-native-file.js","sourceRoot":"","sources":["../src/git-native-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /** The capture's one native index observation, from which indexed and
2
+ * untracked inventory are both drawn and by whose witness both close
3
+ * (git-index-witness.ts). */
4
+ import type { NativeIndexBinding } from "./git-binding.js";
5
+ import { type GitIndexEntry } from "./git-index-entries.js";
6
+ import { type GitIndexWitness } from "./git-index-witness.js";
7
+ import { type SourceProof } from "./source-proof.js";
8
+ export declare class NativeIndexSnapshot {
9
+ #private;
10
+ readonly witness: GitIndexWitness;
11
+ readonly proof: SourceProof;
12
+ /** Physical keys of the index and shared base read. */
13
+ readonly physical: readonly string[];
14
+ private constructor();
15
+ static observe(repository: string, binding: NativeIndexBinding): Promise<NativeIndexSnapshot>;
16
+ /** The stage entries, parsed once. Callers share them and must not mutate them. */
17
+ entries(): Promise<readonly GitIndexEntry[]>;
18
+ /** Git's untracked names under a scope, over these index bytes and the
19
+ * current worktree namespace. Raw: its caller owns their meaning. */
20
+ untracked(paths: readonly string[] | null, closing: boolean): Promise<Buffer>;
21
+ }
@@ -0,0 +1,44 @@
1
+ import { parseGitIndex } from "./git-index-entries.js";
2
+ import { observeGitIndex } from "./git-index-witness.js";
3
+ import { PrivateNativeIndex } from "./git-private-index.js";
4
+ import { witnessProof } from "./source-proof.js";
5
+ import { finishStepsInTurns } from "./turns.js";
6
+ export class NativeIndexSnapshot {
7
+ #repository;
8
+ #format;
9
+ #listing;
10
+ #files;
11
+ #entries = null;
12
+ witness;
13
+ proof;
14
+ /** Physical keys of the index and shared base read. */
15
+ physical;
16
+ constructor(repository, format, observation) {
17
+ this.#repository = repository;
18
+ this.#format = format;
19
+ this.#listing = observation.listing;
20
+ this.#files = observation.files;
21
+ this.witness = observation.witness;
22
+ this.proof = witnessProof([observation.witness]);
23
+ this.physical = Object.freeze([...observation.physical]);
24
+ }
25
+ static async observe(repository, binding) {
26
+ return new NativeIndexSnapshot(repository, binding.format, await finishStepsInTurns(observeGitIndex(binding)));
27
+ }
28
+ /** The stage entries, parsed once. Callers share them and must not mutate them. */
29
+ entries() {
30
+ return this.#entries ??= parseGitIndex(this.#listing).then(entries => Object.freeze(entries));
31
+ }
32
+ /** Git's untracked names under a scope, over these index bytes and the
33
+ * current worktree namespace. Raw: its caller owns their meaning. */
34
+ async untracked(paths, closing) {
35
+ const view = await PrivateNativeIndex.create(this.#format, this.#files, closing);
36
+ try {
37
+ return await view.untracked(this.#repository, paths);
38
+ }
39
+ finally {
40
+ await view.close();
41
+ }
42
+ }
43
+ }
44
+ //# sourceMappingURL=git-native-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-native-index.js","sourceRoot":"","sources":["../src/git-native-index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAsB,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAkD,MAAM,wBAAwB,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,OAAO,mBAAmB;IACrB,WAAW,CAAS;IACpB,OAAO,CAAkB;IACzB,QAAQ,CAAS;IACjB,MAAM,CAA8B;IAC7C,QAAQ,GAA6C,IAAI,CAAC;IACjD,OAAO,CAAkB;IACzB,KAAK,CAAc;IAC5B,uDAAuD;IAC9C,QAAQ,CAAoB;IAErC,YAAoB,UAAkB,EAAE,MAAuB,EAAE,WAAgC;QAC/F,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,OAA2B;QAClE,OAAO,IAAI,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACjH,CAAC;IAED,mFAAmF;IACnF,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAChG,CAAC;IAED;yEACqE;IACrE,KAAK,CAAC,SAAS,CAAC,KAA+B,EAAE,OAAgB;QAC/D,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,CAAC;YAAC,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;gBAAS,CAAC;YAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;IAC/F,CAAC;CACF"}
@@ -0,0 +1,48 @@
1
+ import type { RepoMergeOperation } from '@amalgm/live';
2
+ export declare const UNSUPPORTED_GIT_OPERATIONS: readonly [readonly ["rebase-merge", "rebase"], readonly ["rebase-apply", "rebase"], readonly ["CHERRY_PICK_HEAD", "cherry-pick"], readonly ["REVERT_HEAD", "revert"], readonly ["sequencer", "cherry-pick or revert sequence"], readonly ["MERGE_AUTOSTASH", "merge with an autostash"]];
3
+ /** An Amalgm reveal rewrites a repository in place over several Git
4
+ * invocations. Like MERGE_HEAD, this file in the Git directory says the
5
+ * repository is mid-operation: capture refuses it (so Detect never records a
6
+ * torn moment as truth, and retries once it settles), while the reveal that
7
+ * owns it resumes from whatever state an interruption left behind. */
8
+ export declare const REVEAL_MARKER = "amalgm-reveal";
9
+ export declare function unsupportedGitOperation(gitDirectory: string): string | null;
10
+ export declare class UnsupportedGitOperationError extends Error {
11
+ readonly operation: string;
12
+ readonly code = "UNSUPPORTED_GIT_OPERATION";
13
+ constructor(operation: string);
14
+ }
15
+ /** The unfinished merge the Checkpoint carries, or null. */
16
+ export declare function mergeOperation(directory: string): RepoMergeOperation | null;
17
+ /** The marker that makes this moment unrecordable: an operation the
18
+ * Checkpoint cannot carry throws; another owner's reveal is named. Git's
19
+ * locks are not such markers. They exclude Git's writers, never its readers:
20
+ * the committed index stays whole while a lock exists, a rename that lands
21
+ * during a capture fails its witnesses, and a lock a dead Git left behind
22
+ * says nothing at all. A live lock says only when to read: see
23
+ * `gitWriterLock`. */
24
+ export declare function busyMarker(directory: string, ownReveal: boolean): string | null;
25
+ /** A live Git writer's lock, and how long it still holds. */
26
+ export interface GitWriterLock {
27
+ readonly name: string;
28
+ readonly settlesInMs: number;
29
+ }
30
+ /** The lock a live Git writer holds in this checkout's storage, or null. A
31
+ * rung reader waits for that lock's release ring, since a read taken while
32
+ * the writer works would only be invalidated by its commit. A stale lock
33
+ * never rings, so the wait also ends when the last live lock stops holding;
34
+ * an older lock holds nothing, and the witnesses judge whatever is read
35
+ * through it. A lock that cannot be read is no evidence of a writer: the
36
+ * capture meets whatever made it unreadable. */
37
+ export declare function gitWriterLock(repository: string): GitWriterLock | null;
38
+ /** One capture's continuation state: its merge, and no busy marker. */
39
+ export interface GitOperationWitness {
40
+ readonly kind: 'git-operation';
41
+ readonly directory: string;
42
+ readonly ownReveal: boolean;
43
+ readonly operation: string;
44
+ }
45
+ export declare const gitOperationWitness: (directory: string, ownReveal: boolean, operation: RepoMergeOperation | null) => GitOperationWitness;
46
+ /** A marker that appeared since capture changed the moment the capture
47
+ * describes; the next capture classifies it. */
48
+ export declare function judgeGitOperation(witness: GitOperationWitness): void;