@software-dlc/cli 0.157.2

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 (701) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +105 -0
  3. package/README.md +31 -0
  4. package/dist/checkout.d.ts +43 -0
  5. package/dist/checkout.d.ts.map +1 -0
  6. package/dist/checkout.js +92 -0
  7. package/dist/checkout.js.map +1 -0
  8. package/dist/cli-arguments.d.ts +13 -0
  9. package/dist/cli-arguments.d.ts.map +1 -0
  10. package/dist/cli-arguments.js +67 -0
  11. package/dist/cli-arguments.js.map +1 -0
  12. package/dist/cli-branch-history.d.ts +48 -0
  13. package/dist/cli-branch-history.d.ts.map +1 -0
  14. package/dist/cli-branch-history.js +319 -0
  15. package/dist/cli-branch-history.js.map +1 -0
  16. package/dist/cli-branches.d.ts +22 -0
  17. package/dist/cli-branches.d.ts.map +1 -0
  18. package/dist/cli-branches.js +59 -0
  19. package/dist/cli-branches.js.map +1 -0
  20. package/dist/cli-deploy.d.ts +14 -0
  21. package/dist/cli-deploy.d.ts.map +1 -0
  22. package/dist/cli-deploy.js +164 -0
  23. package/dist/cli-deploy.js.map +1 -0
  24. package/dist/cli-health.d.ts +3 -0
  25. package/dist/cli-health.d.ts.map +1 -0
  26. package/dist/cli-health.js +73 -0
  27. package/dist/cli-health.js.map +1 -0
  28. package/dist/cli-help.d.ts +21 -0
  29. package/dist/cli-help.d.ts.map +1 -0
  30. package/dist/cli-help.js +176 -0
  31. package/dist/cli-help.js.map +1 -0
  32. package/dist/cli-login.d.ts +76 -0
  33. package/dist/cli-login.d.ts.map +1 -0
  34. package/dist/cli-login.js +634 -0
  35. package/dist/cli-login.js.map +1 -0
  36. package/dist/cli-operation.d.ts +2 -0
  37. package/dist/cli-operation.d.ts.map +1 -0
  38. package/dist/cli-operation.js +66 -0
  39. package/dist/cli-operation.js.map +1 -0
  40. package/dist/cli-org.d.ts +12 -0
  41. package/dist/cli-org.d.ts.map +1 -0
  42. package/dist/cli-org.js +218 -0
  43. package/dist/cli-org.js.map +1 -0
  44. package/dist/cli-rebuild.d.ts +20 -0
  45. package/dist/cli-rebuild.d.ts.map +1 -0
  46. package/dist/cli-rebuild.js +29 -0
  47. package/dist/cli-rebuild.js.map +1 -0
  48. package/dist/cli-reset.d.ts +27 -0
  49. package/dist/cli-reset.d.ts.map +1 -0
  50. package/dist/cli-reset.js +44 -0
  51. package/dist/cli-reset.js.map +1 -0
  52. package/dist/cli-snapshot.d.ts +398 -0
  53. package/dist/cli-snapshot.d.ts.map +1 -0
  54. package/dist/cli-snapshot.js +45 -0
  55. package/dist/cli-snapshot.js.map +1 -0
  56. package/dist/cli-task-context.d.ts +3 -0
  57. package/dist/cli-task-context.d.ts.map +1 -0
  58. package/dist/cli-task-context.js +112 -0
  59. package/dist/cli-task-context.js.map +1 -0
  60. package/dist/cli.d.ts +3 -0
  61. package/dist/cli.d.ts.map +1 -0
  62. package/dist/cli.js +1004 -0
  63. package/dist/cli.js.map +1 -0
  64. package/dist/graph-packages-lock.d.ts +169 -0
  65. package/dist/graph-packages-lock.d.ts.map +1 -0
  66. package/dist/graph-packages-lock.js +503 -0
  67. package/dist/graph-packages-lock.js.map +1 -0
  68. package/dist/index.d.ts +2 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +2 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/local/aggregate-preflight.d.ts +12 -0
  73. package/dist/local/aggregate-preflight.d.ts.map +1 -0
  74. package/dist/local/aggregate-preflight.js +22 -0
  75. package/dist/local/aggregate-preflight.js.map +1 -0
  76. package/dist/local/allow-mcp.d.ts +77 -0
  77. package/dist/local/allow-mcp.d.ts.map +1 -0
  78. package/dist/local/allow-mcp.js +394 -0
  79. package/dist/local/allow-mcp.js.map +1 -0
  80. package/dist/local/api-client.d.ts +15 -0
  81. package/dist/local/api-client.d.ts.map +1 -0
  82. package/dist/local/api-client.js +87 -0
  83. package/dist/local/api-client.js.map +1 -0
  84. package/dist/local/app-contract-readers.d.ts +229 -0
  85. package/dist/local/app-contract-readers.d.ts.map +1 -0
  86. package/dist/local/app-contract-readers.js +450 -0
  87. package/dist/local/app-contract-readers.js.map +1 -0
  88. package/dist/local/app-org-reader.d.ts +21 -0
  89. package/dist/local/app-org-reader.d.ts.map +1 -0
  90. package/dist/local/app-org-reader.js +66 -0
  91. package/dist/local/app-org-reader.js.map +1 -0
  92. package/dist/local/app-shell-readers.d.ts +96 -0
  93. package/dist/local/app-shell-readers.d.ts.map +1 -0
  94. package/dist/local/app-shell-readers.js +381 -0
  95. package/dist/local/app-shell-readers.js.map +1 -0
  96. package/dist/local/app-tasks-read.d.ts +202 -0
  97. package/dist/local/app-tasks-read.d.ts.map +1 -0
  98. package/dist/local/app-tasks-read.js +290 -0
  99. package/dist/local/app-tasks-read.js.map +1 -0
  100. package/dist/local/app-worktrees.d.ts +69 -0
  101. package/dist/local/app-worktrees.d.ts.map +1 -0
  102. package/dist/local/app-worktrees.js +554 -0
  103. package/dist/local/app-worktrees.js.map +1 -0
  104. package/dist/local/base-sync-manifest.d.ts +12 -0
  105. package/dist/local/base-sync-manifest.d.ts.map +1 -0
  106. package/dist/local/base-sync-manifest.js +57 -0
  107. package/dist/local/base-sync-manifest.js.map +1 -0
  108. package/dist/local/blast-radius.d.ts +191 -0
  109. package/dist/local/blast-radius.d.ts.map +1 -0
  110. package/dist/local/blast-radius.js +585 -0
  111. package/dist/local/blast-radius.js.map +1 -0
  112. package/dist/local/canonical.d.ts +2 -0
  113. package/dist/local/canonical.d.ts.map +1 -0
  114. package/dist/local/canonical.js +2 -0
  115. package/dist/local/canonical.js.map +1 -0
  116. package/dist/local/config.d.ts +22 -0
  117. package/dist/local/config.d.ts.map +1 -0
  118. package/dist/local/config.js +57 -0
  119. package/dist/local/config.js.map +1 -0
  120. package/dist/local/document-commands.d.ts +163 -0
  121. package/dist/local/document-commands.d.ts.map +1 -0
  122. package/dist/local/document-commands.js +620 -0
  123. package/dist/local/document-commands.js.map +1 -0
  124. package/dist/local/document-embeds.d.ts +21 -0
  125. package/dist/local/document-embeds.d.ts.map +1 -0
  126. package/dist/local/document-embeds.js +38 -0
  127. package/dist/local/document-embeds.js.map +1 -0
  128. package/dist/local/environment-context.d.ts +39 -0
  129. package/dist/local/environment-context.d.ts.map +1 -0
  130. package/dist/local/environment-context.js +193 -0
  131. package/dist/local/environment-context.js.map +1 -0
  132. package/dist/local/environment-exclude.d.ts +7 -0
  133. package/dist/local/environment-exclude.d.ts.map +1 -0
  134. package/dist/local/environment-exclude.js +82 -0
  135. package/dist/local/environment-exclude.js.map +1 -0
  136. package/dist/local/environment-sidecar.d.ts +126 -0
  137. package/dist/local/environment-sidecar.d.ts.map +1 -0
  138. package/dist/local/environment-sidecar.js +442 -0
  139. package/dist/local/environment-sidecar.js.map +1 -0
  140. package/dist/local/environment-switch.d.ts +22 -0
  141. package/dist/local/environment-switch.d.ts.map +1 -0
  142. package/dist/local/environment-switch.js +385 -0
  143. package/dist/local/environment-switch.js.map +1 -0
  144. package/dist/local/exact-remote-projection.d.ts +17 -0
  145. package/dist/local/exact-remote-projection.d.ts.map +1 -0
  146. package/dist/local/exact-remote-projection.js +53 -0
  147. package/dist/local/exact-remote-projection.js.map +1 -0
  148. package/dist/local/experimental/path-object-store.d.ts +66 -0
  149. package/dist/local/experimental/path-object-store.d.ts.map +1 -0
  150. package/dist/local/experimental/path-object-store.js +135 -0
  151. package/dist/local/experimental/path-object-store.js.map +1 -0
  152. package/dist/local/external-worktree-binding.d.ts +21 -0
  153. package/dist/local/external-worktree-binding.d.ts.map +1 -0
  154. package/dist/local/external-worktree-binding.js +56 -0
  155. package/dist/local/external-worktree-binding.js.map +1 -0
  156. package/dist/local/folder-members.d.ts +34 -0
  157. package/dist/local/folder-members.d.ts.map +1 -0
  158. package/dist/local/folder-members.js +168 -0
  159. package/dist/local/folder-members.js.map +1 -0
  160. package/dist/local/git-ref-authority.d.ts +11 -0
  161. package/dist/local/git-ref-authority.d.ts.map +1 -0
  162. package/dist/local/git-ref-authority.js +76 -0
  163. package/dist/local/git-ref-authority.js.map +1 -0
  164. package/dist/local/git.d.ts +88 -0
  165. package/dist/local/git.d.ts.map +1 -0
  166. package/dist/local/git.js +413 -0
  167. package/dist/local/git.js.map +1 -0
  168. package/dist/local/graph-read.d.ts +168 -0
  169. package/dist/local/graph-read.d.ts.map +1 -0
  170. package/dist/local/graph-read.js +360 -0
  171. package/dist/local/graph-read.js.map +1 -0
  172. package/dist/local/graph-sync.d.ts +39 -0
  173. package/dist/local/graph-sync.d.ts.map +1 -0
  174. package/dist/local/graph-sync.js +186 -0
  175. package/dist/local/graph-sync.js.map +1 -0
  176. package/dist/local/guide-commands.d.ts +79 -0
  177. package/dist/local/guide-commands.d.ts.map +1 -0
  178. package/dist/local/guide-commands.js +247 -0
  179. package/dist/local/guide-commands.js.map +1 -0
  180. package/dist/local/health-files.d.ts +24 -0
  181. package/dist/local/health-files.d.ts.map +1 -0
  182. package/dist/local/health-files.js +133 -0
  183. package/dist/local/health-files.js.map +1 -0
  184. package/dist/local/health-inspection.d.ts +12 -0
  185. package/dist/local/health-inspection.d.ts.map +1 -0
  186. package/dist/local/health-inspection.js +407 -0
  187. package/dist/local/health-inspection.js.map +1 -0
  188. package/dist/local/health-policy.d.ts +11 -0
  189. package/dist/local/health-policy.d.ts.map +1 -0
  190. package/dist/local/health-policy.js +257 -0
  191. package/dist/local/health-policy.js.map +1 -0
  192. package/dist/local/health-projection.d.ts +14 -0
  193. package/dist/local/health-projection.d.ts.map +1 -0
  194. package/dist/local/health-projection.js +102 -0
  195. package/dist/local/health-projection.js.map +1 -0
  196. package/dist/local/health-schema.d.ts +338 -0
  197. package/dist/local/health-schema.d.ts.map +1 -0
  198. package/dist/local/health-schema.js +213 -0
  199. package/dist/local/health-schema.js.map +1 -0
  200. package/dist/local/health-store.d.ts +61 -0
  201. package/dist/local/health-store.d.ts.map +1 -0
  202. package/dist/local/health-store.js +218 -0
  203. package/dist/local/health-store.js.map +1 -0
  204. package/dist/local/index.d.ts +66 -0
  205. package/dist/local/index.d.ts.map +1 -0
  206. package/dist/local/index.js +66 -0
  207. package/dist/local/index.js.map +1 -0
  208. package/dist/local/journey-commands.d.ts +65 -0
  209. package/dist/local/journey-commands.d.ts.map +1 -0
  210. package/dist/local/journey-commands.js +138 -0
  211. package/dist/local/journey-commands.js.map +1 -0
  212. package/dist/local/local-org-store.d.ts +46 -0
  213. package/dist/local/local-org-store.d.ts.map +1 -0
  214. package/dist/local/local-org-store.js +132 -0
  215. package/dist/local/local-org-store.js.map +1 -0
  216. package/dist/local/local-org.d.ts +389 -0
  217. package/dist/local/local-org.d.ts.map +1 -0
  218. package/dist/local/local-org.js +855 -0
  219. package/dist/local/local-org.js.map +1 -0
  220. package/dist/local/media-upload.d.ts +5 -0
  221. package/dist/local/media-upload.d.ts.map +1 -0
  222. package/dist/local/media-upload.js +41 -0
  223. package/dist/local/media-upload.js.map +1 -0
  224. package/dist/local/operation.d.ts +155 -0
  225. package/dist/local/operation.d.ts.map +1 -0
  226. package/dist/local/operation.js +340 -0
  227. package/dist/local/operation.js.map +1 -0
  228. package/dist/local/ownership-reader-schema.d.ts +117 -0
  229. package/dist/local/ownership-reader-schema.d.ts.map +1 -0
  230. package/dist/local/ownership-reader-schema.js +105 -0
  231. package/dist/local/ownership-reader-schema.js.map +1 -0
  232. package/dist/local/ownership-reader-worker.d.ts +2 -0
  233. package/dist/local/ownership-reader-worker.d.ts.map +1 -0
  234. package/dist/local/ownership-reader-worker.js +341 -0
  235. package/dist/local/ownership-reader-worker.js.map +1 -0
  236. package/dist/local/ownership-reader.d.ts +10 -0
  237. package/dist/local/ownership-reader.d.ts.map +1 -0
  238. package/dist/local/ownership-reader.js +93 -0
  239. package/dist/local/ownership-reader.js.map +1 -0
  240. package/dist/local/package-uses-check.d.ts +33 -0
  241. package/dist/local/package-uses-check.d.ts.map +1 -0
  242. package/dist/local/package-uses-check.js +62 -0
  243. package/dist/local/package-uses-check.js.map +1 -0
  244. package/dist/local/pending-recovery.d.ts +22 -0
  245. package/dist/local/pending-recovery.d.ts.map +1 -0
  246. package/dist/local/pending-recovery.js +171 -0
  247. package/dist/local/pending-recovery.js.map +1 -0
  248. package/dist/local/portable-commit-store.d.ts +28 -0
  249. package/dist/local/portable-commit-store.d.ts.map +1 -0
  250. package/dist/local/portable-commit-store.js +187 -0
  251. package/dist/local/portable-commit-store.js.map +1 -0
  252. package/dist/local/portable-commit.d.ts +109 -0
  253. package/dist/local/portable-commit.d.ts.map +1 -0
  254. package/dist/local/portable-commit.js +209 -0
  255. package/dist/local/portable-commit.js.map +1 -0
  256. package/dist/local/portable-remote.d.ts +432 -0
  257. package/dist/local/portable-remote.d.ts.map +1 -0
  258. package/dist/local/portable-remote.js +280 -0
  259. package/dist/local/portable-remote.js.map +1 -0
  260. package/dist/local/project-deleted.d.ts +4 -0
  261. package/dist/local/project-deleted.d.ts.map +1 -0
  262. package/dist/local/project-deleted.js +13 -0
  263. package/dist/local/project-deleted.js.map +1 -0
  264. package/dist/local/projection.d.ts +166 -0
  265. package/dist/local/projection.d.ts.map +1 -0
  266. package/dist/local/projection.js +709 -0
  267. package/dist/local/projection.js.map +1 -0
  268. package/dist/local/read-operation.d.ts +3 -0
  269. package/dist/local/read-operation.d.ts.map +1 -0
  270. package/dist/local/read-operation.js +19 -0
  271. package/dist/local/read-operation.js.map +1 -0
  272. package/dist/local/rebuild.d.ts +11 -0
  273. package/dist/local/rebuild.d.ts.map +1 -0
  274. package/dist/local/rebuild.js +42 -0
  275. package/dist/local/rebuild.js.map +1 -0
  276. package/dist/local/remote-base.d.ts +25 -0
  277. package/dist/local/remote-base.d.ts.map +1 -0
  278. package/dist/local/remote-base.js +68 -0
  279. package/dist/local/remote-base.js.map +1 -0
  280. package/dist/local/save-layout-worker.d.ts +19 -0
  281. package/dist/local/save-layout-worker.d.ts.map +1 -0
  282. package/dist/local/save-layout-worker.js +28 -0
  283. package/dist/local/save-layout-worker.js.map +1 -0
  284. package/dist/local/save-layout.d.ts +84 -0
  285. package/dist/local/save-layout.d.ts.map +1 -0
  286. package/dist/local/save-layout.js +221 -0
  287. package/dist/local/save-layout.js.map +1 -0
  288. package/dist/local/scope-impact.d.ts +31 -0
  289. package/dist/local/scope-impact.d.ts.map +1 -0
  290. package/dist/local/scope-impact.js +32 -0
  291. package/dist/local/scope-impact.js.map +1 -0
  292. package/dist/local/source-evidence/filesystem-worker.d.ts +2 -0
  293. package/dist/local/source-evidence/filesystem-worker.d.ts.map +1 -0
  294. package/dist/local/source-evidence/filesystem-worker.js +139 -0
  295. package/dist/local/source-evidence/filesystem-worker.js.map +1 -0
  296. package/dist/local/source-evidence/processes.d.ts +20 -0
  297. package/dist/local/source-evidence/processes.d.ts.map +1 -0
  298. package/dist/local/source-evidence/processes.js +133 -0
  299. package/dist/local/source-evidence/processes.js.map +1 -0
  300. package/dist/local/source-evidence/protocol.d.ts +52 -0
  301. package/dist/local/source-evidence/protocol.d.ts.map +1 -0
  302. package/dist/local/source-evidence/protocol.js +72 -0
  303. package/dist/local/source-evidence/protocol.js.map +1 -0
  304. package/dist/local/source-evidence/reader.d.ts +14 -0
  305. package/dist/local/source-evidence/reader.d.ts.map +1 -0
  306. package/dist/local/source-evidence/reader.js +308 -0
  307. package/dist/local/source-evidence/reader.js.map +1 -0
  308. package/dist/local/source-evidence/schema.d.ts +2504 -0
  309. package/dist/local/source-evidence/schema.d.ts.map +1 -0
  310. package/dist/local/source-evidence/schema.js +99 -0
  311. package/dist/local/source-evidence/schema.js.map +1 -0
  312. package/dist/local/source-policy/loader.d.ts +29 -0
  313. package/dist/local/source-policy/loader.d.ts.map +1 -0
  314. package/dist/local/source-policy/loader.js +209 -0
  315. package/dist/local/source-policy/loader.js.map +1 -0
  316. package/dist/local/source-policy/process.d.ts +7 -0
  317. package/dist/local/source-policy/process.d.ts.map +1 -0
  318. package/dist/local/source-policy/process.js +53 -0
  319. package/dist/local/source-policy/process.js.map +1 -0
  320. package/dist/local/source-policy/protocol.d.ts +27 -0
  321. package/dist/local/source-policy/protocol.d.ts.map +1 -0
  322. package/dist/local/source-policy/protocol.js +48 -0
  323. package/dist/local/source-policy/protocol.js.map +1 -0
  324. package/dist/local/source-policy/worker.d.ts +2 -0
  325. package/dist/local/source-policy/worker.d.ts.map +1 -0
  326. package/dist/local/source-policy/worker.js +100 -0
  327. package/dist/local/source-policy/worker.js.map +1 -0
  328. package/dist/local/state-directory.d.ts +17 -0
  329. package/dist/local/state-directory.d.ts.map +1 -0
  330. package/dist/local/state-directory.js +68 -0
  331. package/dist/local/state-directory.js.map +1 -0
  332. package/dist/local/store-database.d.ts +13 -0
  333. package/dist/local/store-database.d.ts.map +1 -0
  334. package/dist/local/store-database.js +187 -0
  335. package/dist/local/store-database.js.map +1 -0
  336. package/dist/local/store.d.ts +181 -0
  337. package/dist/local/store.d.ts.map +1 -0
  338. package/dist/local/store.js +585 -0
  339. package/dist/local/store.js.map +1 -0
  340. package/dist/local/sync.d.ts +47 -0
  341. package/dist/local/sync.d.ts.map +1 -0
  342. package/dist/local/sync.js +518 -0
  343. package/dist/local/sync.js.map +1 -0
  344. package/dist/local/task-context-inspection.d.ts +23 -0
  345. package/dist/local/task-context-inspection.d.ts.map +1 -0
  346. package/dist/local/task-context-inspection.js +165 -0
  347. package/dist/local/task-context-inspection.js.map +1 -0
  348. package/dist/local/task-context-observations.d.ts +9553 -0
  349. package/dist/local/task-context-observations.d.ts.map +1 -0
  350. package/dist/local/task-context-observations.js +232 -0
  351. package/dist/local/task-context-observations.js.map +1 -0
  352. package/dist/local/task-context-provider.d.ts +18 -0
  353. package/dist/local/task-context-provider.d.ts.map +1 -0
  354. package/dist/local/task-context-provider.js +231 -0
  355. package/dist/local/task-context-provider.js.map +1 -0
  356. package/dist/local/task-context-schema.d.ts +847 -0
  357. package/dist/local/task-context-schema.d.ts.map +1 -0
  358. package/dist/local/task-context-schema.js +305 -0
  359. package/dist/local/task-context-schema.js.map +1 -0
  360. package/dist/local/task-context-source.d.ts +16 -0
  361. package/dist/local/task-context-source.d.ts.map +1 -0
  362. package/dist/local/task-context-source.js +45 -0
  363. package/dist/local/task-context-source.js.map +1 -0
  364. package/dist/local/task-context.d.ts +14 -0
  365. package/dist/local/task-context.d.ts.map +1 -0
  366. package/dist/local/task-context.js +570 -0
  367. package/dist/local/task-context.js.map +1 -0
  368. package/dist/local/test-commands.d.ts +71 -0
  369. package/dist/local/test-commands.d.ts.map +1 -0
  370. package/dist/local/test-commands.js +292 -0
  371. package/dist/local/test-commands.js.map +1 -0
  372. package/dist/local/tree-save.d.ts +117 -0
  373. package/dist/local/tree-save.d.ts.map +1 -0
  374. package/dist/local/tree-save.js +615 -0
  375. package/dist/local/tree-save.js.map +1 -0
  376. package/dist/local/variants.d.ts +125 -0
  377. package/dist/local/variants.d.ts.map +1 -0
  378. package/dist/local/variants.js +267 -0
  379. package/dist/local/variants.js.map +1 -0
  380. package/dist/local/workspace-admission.d.ts +61 -0
  381. package/dist/local/workspace-admission.d.ts.map +1 -0
  382. package/dist/local/workspace-admission.js +112 -0
  383. package/dist/local/workspace-admission.js.map +1 -0
  384. package/dist/local/workspace-authority-guard.d.ts +18 -0
  385. package/dist/local/workspace-authority-guard.d.ts.map +1 -0
  386. package/dist/local/workspace-authority-guard.js +69 -0
  387. package/dist/local/workspace-authority-guard.js.map +1 -0
  388. package/dist/local/workspace-authority.d.ts +33 -0
  389. package/dist/local/workspace-authority.d.ts.map +1 -0
  390. package/dist/local/workspace-authority.js +33 -0
  391. package/dist/local/workspace-authority.js.map +1 -0
  392. package/dist/local/workspace-branch-runtime.d.ts +61 -0
  393. package/dist/local/workspace-branch-runtime.d.ts.map +1 -0
  394. package/dist/local/workspace-branch-runtime.js +216 -0
  395. package/dist/local/workspace-branch-runtime.js.map +1 -0
  396. package/dist/local/workspace-built-content.d.ts +137 -0
  397. package/dist/local/workspace-built-content.d.ts.map +1 -0
  398. package/dist/local/workspace-built-content.js +393 -0
  399. package/dist/local/workspace-built-content.js.map +1 -0
  400. package/dist/local/workspace-claim-status-read.d.ts +53 -0
  401. package/dist/local/workspace-claim-status-read.d.ts.map +1 -0
  402. package/dist/local/workspace-claim-status-read.js +118 -0
  403. package/dist/local/workspace-claim-status-read.js.map +1 -0
  404. package/dist/local/workspace-claim-status.d.ts +172 -0
  405. package/dist/local/workspace-claim-status.d.ts.map +1 -0
  406. package/dist/local/workspace-claim-status.js +721 -0
  407. package/dist/local/workspace-claim-status.js.map +1 -0
  408. package/dist/local/workspace-claim-views.d.ts +45 -0
  409. package/dist/local/workspace-claim-views.d.ts.map +1 -0
  410. package/dist/local/workspace-claim-views.js +45 -0
  411. package/dist/local/workspace-claim-views.js.map +1 -0
  412. package/dist/local/workspace-cli.d.ts +46 -0
  413. package/dist/local/workspace-cli.d.ts.map +1 -0
  414. package/dist/local/workspace-cli.js +1524 -0
  415. package/dist/local/workspace-cli.js.map +1 -0
  416. package/dist/local/workspace-commit-resolver.d.ts +19 -0
  417. package/dist/local/workspace-commit-resolver.d.ts.map +1 -0
  418. package/dist/local/workspace-commit-resolver.js +47 -0
  419. package/dist/local/workspace-commit-resolver.js.map +1 -0
  420. package/dist/local/workspace-decision-store.d.ts +184 -0
  421. package/dist/local/workspace-decision-store.d.ts.map +1 -0
  422. package/dist/local/workspace-decision-store.js +510 -0
  423. package/dist/local/workspace-decision-store.js.map +1 -0
  424. package/dist/local/workspace-environment-runtime.d.ts +107 -0
  425. package/dist/local/workspace-environment-runtime.d.ts.map +1 -0
  426. package/dist/local/workspace-environment-runtime.js +135 -0
  427. package/dist/local/workspace-environment-runtime.js.map +1 -0
  428. package/dist/local/workspace-evidence-drop.d.ts +21 -0
  429. package/dist/local/workspace-evidence-drop.d.ts.map +1 -0
  430. package/dist/local/workspace-evidence-drop.js +58 -0
  431. package/dist/local/workspace-evidence-drop.js.map +1 -0
  432. package/dist/local/workspace-evidence-sign-tool.d.ts +20 -0
  433. package/dist/local/workspace-evidence-sign-tool.d.ts.map +1 -0
  434. package/dist/local/workspace-evidence-sign-tool.js +85 -0
  435. package/dist/local/workspace-evidence-sign-tool.js.map +1 -0
  436. package/dist/local/workspace-evidence-status.d.ts +89 -0
  437. package/dist/local/workspace-evidence-status.d.ts.map +1 -0
  438. package/dist/local/workspace-evidence-status.js +141 -0
  439. package/dist/local/workspace-evidence-status.js.map +1 -0
  440. package/dist/local/workspace-evidence.d.ts +145 -0
  441. package/dist/local/workspace-evidence.d.ts.map +1 -0
  442. package/dist/local/workspace-evidence.js +347 -0
  443. package/dist/local/workspace-evidence.js.map +1 -0
  444. package/dist/local/workspace-graph-store.d.ts +32 -0
  445. package/dist/local/workspace-graph-store.d.ts.map +1 -0
  446. package/dist/local/workspace-graph-store.js +249 -0
  447. package/dist/local/workspace-graph-store.js.map +1 -0
  448. package/dist/local/workspace-handoff.d.ts +32 -0
  449. package/dist/local/workspace-handoff.d.ts.map +1 -0
  450. package/dist/local/workspace-handoff.js +144 -0
  451. package/dist/local/workspace-handoff.js.map +1 -0
  452. package/dist/local/workspace-history-journal.d.ts +70 -0
  453. package/dist/local/workspace-history-journal.d.ts.map +1 -0
  454. package/dist/local/workspace-history-journal.js +131 -0
  455. package/dist/local/workspace-history-journal.js.map +1 -0
  456. package/dist/local/workspace-history-store.d.ts +98 -0
  457. package/dist/local/workspace-history-store.d.ts.map +1 -0
  458. package/dist/local/workspace-history-store.js +632 -0
  459. package/dist/local/workspace-history-store.js.map +1 -0
  460. package/dist/local/workspace-history-types.d.ts +307 -0
  461. package/dist/local/workspace-history-types.d.ts.map +1 -0
  462. package/dist/local/workspace-history-types.js +2 -0
  463. package/dist/local/workspace-history-types.js.map +1 -0
  464. package/dist/local/workspace-integration-runtime.d.ts +48 -0
  465. package/dist/local/workspace-integration-runtime.d.ts.map +1 -0
  466. package/dist/local/workspace-integration-runtime.js +419 -0
  467. package/dist/local/workspace-integration-runtime.js.map +1 -0
  468. package/dist/local/workspace-lock.d.ts +7 -0
  469. package/dist/local/workspace-lock.d.ts.map +1 -0
  470. package/dist/local/workspace-lock.js +211 -0
  471. package/dist/local/workspace-lock.js.map +1 -0
  472. package/dist/local/workspace-merge.d.ts +77 -0
  473. package/dist/local/workspace-merge.d.ts.map +1 -0
  474. package/dist/local/workspace-merge.js +703 -0
  475. package/dist/local/workspace-merge.js.map +1 -0
  476. package/dist/local/workspace-mixed-history.d.ts +33 -0
  477. package/dist/local/workspace-mixed-history.d.ts.map +1 -0
  478. package/dist/local/workspace-mixed-history.js +107 -0
  479. package/dist/local/workspace-mixed-history.js.map +1 -0
  480. package/dist/local/workspace-overlap-allocation.d.ts +33 -0
  481. package/dist/local/workspace-overlap-allocation.d.ts.map +1 -0
  482. package/dist/local/workspace-overlap-allocation.js +69 -0
  483. package/dist/local/workspace-overlap-allocation.js.map +1 -0
  484. package/dist/local/workspace-overlap-impact.d.ts +46 -0
  485. package/dist/local/workspace-overlap-impact.d.ts.map +1 -0
  486. package/dist/local/workspace-overlap-impact.js +162 -0
  487. package/dist/local/workspace-overlap-impact.js.map +1 -0
  488. package/dist/local/workspace-overlap.d.ts +109 -0
  489. package/dist/local/workspace-overlap.d.ts.map +1 -0
  490. package/dist/local/workspace-overlap.js +327 -0
  491. package/dist/local/workspace-overlap.js.map +1 -0
  492. package/dist/local/workspace-paths.d.ts +4 -0
  493. package/dist/local/workspace-paths.d.ts.map +1 -0
  494. package/dist/local/workspace-paths.js +8 -0
  495. package/dist/local/workspace-paths.js.map +1 -0
  496. package/dist/local/workspace-pick-runtime.d.ts +70 -0
  497. package/dist/local/workspace-pick-runtime.d.ts.map +1 -0
  498. package/dist/local/workspace-pick-runtime.js +177 -0
  499. package/dist/local/workspace-pick-runtime.js.map +1 -0
  500. package/dist/local/workspace-pick-store.d.ts +33 -0
  501. package/dist/local/workspace-pick-store.d.ts.map +1 -0
  502. package/dist/local/workspace-pick-store.js +43 -0
  503. package/dist/local/workspace-pick-store.js.map +1 -0
  504. package/dist/local/workspace-pick.d.ts +73 -0
  505. package/dist/local/workspace-pick.d.ts.map +1 -0
  506. package/dist/local/workspace-pick.js +253 -0
  507. package/dist/local/workspace-pick.js.map +1 -0
  508. package/dist/local/workspace-portable-authoring.d.ts +43 -0
  509. package/dist/local/workspace-portable-authoring.d.ts.map +1 -0
  510. package/dist/local/workspace-portable-authoring.js +128 -0
  511. package/dist/local/workspace-portable-authoring.js.map +1 -0
  512. package/dist/local/workspace-prune.d.ts +63 -0
  513. package/dist/local/workspace-prune.d.ts.map +1 -0
  514. package/dist/local/workspace-prune.js +267 -0
  515. package/dist/local/workspace-prune.js.map +1 -0
  516. package/dist/local/workspace-remote-fetch.d.ts +82 -0
  517. package/dist/local/workspace-remote-fetch.d.ts.map +1 -0
  518. package/dist/local/workspace-remote-fetch.js +409 -0
  519. package/dist/local/workspace-remote-fetch.js.map +1 -0
  520. package/dist/local/workspace-remote-provider.d.ts +97 -0
  521. package/dist/local/workspace-remote-provider.d.ts.map +1 -0
  522. package/dist/local/workspace-remote-provider.js +400 -0
  523. package/dist/local/workspace-remote-provider.js.map +1 -0
  524. package/dist/local/workspace-remote-pull-request-journal.d.ts +49 -0
  525. package/dist/local/workspace-remote-pull-request-journal.d.ts.map +1 -0
  526. package/dist/local/workspace-remote-pull-request-journal.js +63 -0
  527. package/dist/local/workspace-remote-pull-request-journal.js.map +1 -0
  528. package/dist/local/workspace-remote-pull-request.d.ts +36 -0
  529. package/dist/local/workspace-remote-pull-request.d.ts.map +1 -0
  530. package/dist/local/workspace-remote-pull-request.js +158 -0
  531. package/dist/local/workspace-remote-pull-request.js.map +1 -0
  532. package/dist/local/workspace-remote-push.d.ts +88 -0
  533. package/dist/local/workspace-remote-push.d.ts.map +1 -0
  534. package/dist/local/workspace-remote-push.js +297 -0
  535. package/dist/local/workspace-remote-push.js.map +1 -0
  536. package/dist/local/workspace-remote-topic-journal.d.ts +56 -0
  537. package/dist/local/workspace-remote-topic-journal.d.ts.map +1 -0
  538. package/dist/local/workspace-remote-topic-journal.js +121 -0
  539. package/dist/local/workspace-remote-topic-journal.js.map +1 -0
  540. package/dist/local/workspace-remote-topic.d.ts +45 -0
  541. package/dist/local/workspace-remote-topic.d.ts.map +1 -0
  542. package/dist/local/workspace-remote-topic.js +204 -0
  543. package/dist/local/workspace-remote-topic.js.map +1 -0
  544. package/dist/local/workspace-remote-transfer.d.ts +76 -0
  545. package/dist/local/workspace-remote-transfer.d.ts.map +1 -0
  546. package/dist/local/workspace-remote-transfer.js +270 -0
  547. package/dist/local/workspace-remote-transfer.js.map +1 -0
  548. package/dist/local/workspace-resolution.d.ts +145 -0
  549. package/dist/local/workspace-resolution.d.ts.map +1 -0
  550. package/dist/local/workspace-resolution.js +479 -0
  551. package/dist/local/workspace-resolution.js.map +1 -0
  552. package/dist/local/workspace-resolver-provider.d.ts +72 -0
  553. package/dist/local/workspace-resolver-provider.d.ts.map +1 -0
  554. package/dist/local/workspace-resolver-provider.js +312 -0
  555. package/dist/local/workspace-resolver-provider.js.map +1 -0
  556. package/dist/local/workspace-runtime-handoff.d.ts +52 -0
  557. package/dist/local/workspace-runtime-handoff.d.ts.map +1 -0
  558. package/dist/local/workspace-runtime-handoff.js +237 -0
  559. package/dist/local/workspace-runtime-handoff.js.map +1 -0
  560. package/dist/local/workspace-runtime-lease.d.ts +26 -0
  561. package/dist/local/workspace-runtime-lease.d.ts.map +1 -0
  562. package/dist/local/workspace-runtime-lease.js +123 -0
  563. package/dist/local/workspace-runtime-lease.js.map +1 -0
  564. package/dist/local/workspace-runtime.d.ts +690 -0
  565. package/dist/local/workspace-runtime.d.ts.map +1 -0
  566. package/dist/local/workspace-runtime.js +2124 -0
  567. package/dist/local/workspace-runtime.js.map +1 -0
  568. package/dist/local/workspace-scope.d.ts +70 -0
  569. package/dist/local/workspace-scope.d.ts.map +1 -0
  570. package/dist/local/workspace-scope.js +206 -0
  571. package/dist/local/workspace-scope.js.map +1 -0
  572. package/dist/local/workspace-sources.d.ts +159 -0
  573. package/dist/local/workspace-sources.d.ts.map +1 -0
  574. package/dist/local/workspace-sources.js +570 -0
  575. package/dist/local/workspace-sources.js.map +1 -0
  576. package/dist/local/workspace-store-database.d.ts +5 -0
  577. package/dist/local/workspace-store-database.d.ts.map +1 -0
  578. package/dist/local/workspace-store-database.js +726 -0
  579. package/dist/local/workspace-store-database.js.map +1 -0
  580. package/dist/local/workspace-store.d.ts +261 -0
  581. package/dist/local/workspace-store.d.ts.map +1 -0
  582. package/dist/local/workspace-store.js +831 -0
  583. package/dist/local/workspace-store.js.map +1 -0
  584. package/dist/local/workspace-topology-runtime.d.ts +27 -0
  585. package/dist/local/workspace-topology-runtime.d.ts.map +1 -0
  586. package/dist/local/workspace-topology-runtime.js +396 -0
  587. package/dist/local/workspace-topology-runtime.js.map +1 -0
  588. package/dist/local/workspace-topology.d.ts +140 -0
  589. package/dist/local/workspace-topology.d.ts.map +1 -0
  590. package/dist/local/workspace-topology.js +359 -0
  591. package/dist/local/workspace-topology.js.map +1 -0
  592. package/dist/local/workspace-upstream-inspection.d.ts +60 -0
  593. package/dist/local/workspace-upstream-inspection.d.ts.map +1 -0
  594. package/dist/local/workspace-upstream-inspection.js +189 -0
  595. package/dist/local/workspace-upstream-inspection.js.map +1 -0
  596. package/dist/local/workspace-upstream-runtime.d.ts +91 -0
  597. package/dist/local/workspace-upstream-runtime.d.ts.map +1 -0
  598. package/dist/local/workspace-upstream-runtime.js +270 -0
  599. package/dist/local/workspace-upstream-runtime.js.map +1 -0
  600. package/dist/local/workspace-upstream-store.d.ts +51 -0
  601. package/dist/local/workspace-upstream-store.d.ts.map +1 -0
  602. package/dist/local/workspace-upstream-store.js +475 -0
  603. package/dist/local/workspace-upstream-store.js.map +1 -0
  604. package/dist/local/workspace-viewer-server.d.ts +136 -0
  605. package/dist/local/workspace-viewer-server.d.ts.map +1 -0
  606. package/dist/local/workspace-viewer-server.js +1097 -0
  607. package/dist/local/workspace-viewer-server.js.map +1 -0
  608. package/dist/local/workspace-viewer-snapshot.d.ts +49 -0
  609. package/dist/local/workspace-viewer-snapshot.d.ts.map +1 -0
  610. package/dist/local/workspace-viewer-snapshot.js +91 -0
  611. package/dist/local/workspace-viewer-snapshot.js.map +1 -0
  612. package/dist/local/worktree-projection.d.ts +76 -0
  613. package/dist/local/worktree-projection.d.ts.map +1 -0
  614. package/dist/local/worktree-projection.js +470 -0
  615. package/dist/local/worktree-projection.js.map +1 -0
  616. package/dist/mcp/client-identity.d.ts +8 -0
  617. package/dist/mcp/client-identity.d.ts.map +1 -0
  618. package/dist/mcp/client-identity.js +33 -0
  619. package/dist/mcp/client-identity.js.map +1 -0
  620. package/dist/mcp/graph-to-code.d.ts +53 -0
  621. package/dist/mcp/graph-to-code.d.ts.map +1 -0
  622. package/dist/mcp/graph-to-code.js +1624 -0
  623. package/dist/mcp/graph-to-code.js.map +1 -0
  624. package/dist/mcp/index.d.ts +3 -0
  625. package/dist/mcp/index.d.ts.map +1 -0
  626. package/dist/mcp/index.js +3 -0
  627. package/dist/mcp/index.js.map +1 -0
  628. package/dist/mcp/stdio/graph-to-code.d.ts +3 -0
  629. package/dist/mcp/stdio/graph-to-code.d.ts.map +1 -0
  630. package/dist/mcp/stdio/graph-to-code.js +55 -0
  631. package/dist/mcp/stdio/graph-to-code.js.map +1 -0
  632. package/dist/mcp/stdio/worktree.d.ts +3 -0
  633. package/dist/mcp/stdio/worktree.d.ts.map +1 -0
  634. package/dist/mcp/stdio/worktree.js +67 -0
  635. package/dist/mcp/stdio/worktree.js.map +1 -0
  636. package/dist/mcp/worktree-claim-status.d.ts +162 -0
  637. package/dist/mcp/worktree-claim-status.d.ts.map +1 -0
  638. package/dist/mcp/worktree-claim-status.js +113 -0
  639. package/dist/mcp/worktree-claim-status.js.map +1 -0
  640. package/dist/mcp/worktree-dispatch.d.ts +13 -0
  641. package/dist/mcp/worktree-dispatch.d.ts.map +1 -0
  642. package/dist/mcp/worktree-dispatch.js +52 -0
  643. package/dist/mcp/worktree-dispatch.js.map +1 -0
  644. package/dist/mcp/worktree-errors.d.ts +15 -0
  645. package/dist/mcp/worktree-errors.d.ts.map +1 -0
  646. package/dist/mcp/worktree-errors.js +17 -0
  647. package/dist/mcp/worktree-errors.js.map +1 -0
  648. package/dist/mcp/worktree-health.d.ts +12 -0
  649. package/dist/mcp/worktree-health.d.ts.map +1 -0
  650. package/dist/mcp/worktree-health.js +32 -0
  651. package/dist/mcp/worktree-health.js.map +1 -0
  652. package/dist/mcp/worktree-results.d.ts +15 -0
  653. package/dist/mcp/worktree-results.d.ts.map +1 -0
  654. package/dist/mcp/worktree-results.js +12 -0
  655. package/dist/mcp/worktree-results.js.map +1 -0
  656. package/dist/mcp/worktree-task-context.d.ts +57 -0
  657. package/dist/mcp/worktree-task-context.d.ts.map +1 -0
  658. package/dist/mcp/worktree-task-context.js +45 -0
  659. package/dist/mcp/worktree-task-context.js.map +1 -0
  660. package/dist/mcp/worktree-tools.d.ts +2648 -0
  661. package/dist/mcp/worktree-tools.d.ts.map +1 -0
  662. package/dist/mcp/worktree-tools.js +192 -0
  663. package/dist/mcp/worktree-tools.js.map +1 -0
  664. package/dist/mcp/worktree.d.ts +33 -0
  665. package/dist/mcp/worktree.d.ts.map +1 -0
  666. package/dist/mcp/worktree.js +551 -0
  667. package/dist/mcp/worktree.js.map +1 -0
  668. package/dist/own-package.d.ts +13 -0
  669. package/dist/own-package.d.ts.map +1 -0
  670. package/dist/own-package.js +32 -0
  671. package/dist/own-package.js.map +1 -0
  672. package/dist/packages-browse.d.ts +107 -0
  673. package/dist/packages-browse.d.ts.map +1 -0
  674. package/dist/packages-browse.js +646 -0
  675. package/dist/packages-browse.js.map +1 -0
  676. package/dist/packages-cli.d.ts +8 -0
  677. package/dist/packages-cli.d.ts.map +1 -0
  678. package/dist/packages-cli.js +184 -0
  679. package/dist/packages-cli.js.map +1 -0
  680. package/dist/packages-uses.d.ts +46 -0
  681. package/dist/packages-uses.d.ts.map +1 -0
  682. package/dist/packages-uses.js +737 -0
  683. package/dist/packages-uses.js.map +1 -0
  684. package/dist/portable.d.ts +7 -0
  685. package/dist/portable.d.ts.map +1 -0
  686. package/dist/portable.js +14 -0
  687. package/dist/portable.js.map +1 -0
  688. package/dist/quiet-warnings.d.ts +3 -0
  689. package/dist/quiet-warnings.d.ts.map +1 -0
  690. package/dist/quiet-warnings.js +21 -0
  691. package/dist/quiet-warnings.js.map +1 -0
  692. package/dist/view-seam.d.ts +62 -0
  693. package/dist/view-seam.d.ts.map +1 -0
  694. package/dist/view-seam.js +70 -0
  695. package/dist/view-seam.js.map +1 -0
  696. package/generated/graph-packages/index.json +5 -0
  697. package/graph-packages.lock.json +4 -0
  698. package/package.json +81 -0
  699. package/viewer/assets/index-BZKGDARF.css +1 -0
  700. package/viewer/assets/index-DWu0CbZZ.js +272 -0
  701. package/viewer/index.html +13 -0
@@ -0,0 +1,93 @@
1
+ import { fork } from 'node:child_process';
2
+ import { fileURLToPath } from 'node:url';
3
+ import { currentOperation, operationSignal } from './operation.js';
4
+ import { OWNERSHIP_READ_LIMITS, ownership_registry_schema, ownership_selection_schema, ownership_read_result_schema, ownershipUnavailable } from './ownership-reader-schema.js';
5
+ /** Local library boundary only. No helper invocation, discovery, migration or adapter. */
6
+ export async function readLocalOwnership(input) {
7
+ const started = performance.now();
8
+ const registry = ownership_registry_schema.safeParse(input.trusted_registry);
9
+ const selection = ownership_selection_schema.safeParse(input.selection);
10
+ const budget = input.timeout_ms ?? OWNERSHIP_READ_LIMITS.timeout_ms;
11
+ if (!registry.success ||
12
+ !selection.success ||
13
+ !Number.isInteger(budget) ||
14
+ budget < 1 ||
15
+ budget > 30_000)
16
+ return ownershipUnavailable('invalid_request');
17
+ if (registry.data.registry_id !== selection.data.registry_id)
18
+ return ownershipUnavailable('registry_mismatch');
19
+ const signal = operationSignal(input.signal);
20
+ const deadline = Math.min(started + budget, currentOperation()?.deadline ?? Infinity);
21
+ if (signal?.aborted)
22
+ return ownershipUnavailable('cancelled');
23
+ if (performance.now() >= deadline)
24
+ return ownershipUnavailable('deadline_exceeded');
25
+ return new Promise((resolve) => {
26
+ let answer;
27
+ let cancelled;
28
+ // A separate process also prevents diagnostic descriptor closes from disturbing
29
+ // another SQLite connection's process-scoped POSIX locks in the caller.
30
+ let child;
31
+ try {
32
+ child = fork(fileURLToPath(new URL('./ownership-reader-worker.js', import.meta.url)), [], {
33
+ execArgv: ['--max-old-space-size=64'],
34
+ env: { NODE_ENV: 'production' },
35
+ stdio: ['ignore', 'ignore', 'ignore', 'ipc'],
36
+ serialization: 'json'
37
+ });
38
+ }
39
+ catch {
40
+ resolve(ownershipUnavailable('reader_unavailable'));
41
+ return;
42
+ }
43
+ const stop = (reason) => {
44
+ cancelled ??= reason;
45
+ child.kill('SIGKILL');
46
+ };
47
+ const on_abort = () => stop('cancelled');
48
+ const timer = setTimeout(() => stop('deadline_exceeded'), Math.max(1, deadline - performance.now()));
49
+ signal?.addEventListener('abort', on_abort, { once: true });
50
+ child.on('message', (message) => {
51
+ const parsed = ownership_read_result_schema.safeParse(message);
52
+ answer = parsed.success
53
+ ? parsed.data
54
+ : ownershipUnavailable('reader_unavailable');
55
+ });
56
+ child.on('error', () => {
57
+ answer = ownershipUnavailable('reader_unavailable');
58
+ });
59
+ child.once('close', (code) => {
60
+ clearTimeout(timer);
61
+ signal?.removeEventListener('abort', on_abort);
62
+ if (cancelled)
63
+ return resolve(ownershipUnavailable(cancelled));
64
+ if (performance.now() >= deadline)
65
+ return resolve(ownershipUnavailable('deadline_exceeded'));
66
+ if (code !== 0 || !answer)
67
+ return resolve(ownershipUnavailable('reader_unavailable'));
68
+ // Re-evaluate temporal ownership at delivery, not just the database snapshot.
69
+ if (answer.status !== 'unavailable') {
70
+ answer.completed_at = Date.now() / 1000;
71
+ if (answer.completed_at < answer.observed_at)
72
+ return resolve(ownershipUnavailable('changed_during_read'));
73
+ if (answer.status === 'observed' && answer.owner) {
74
+ if (answer.owner.expires_at <= answer.completed_at)
75
+ answer.ownership = 'expired';
76
+ else if (answer.owner.execution_status === 'complete' ||
77
+ answer.owner.heartbeat_at + 1800 <= answer.completed_at)
78
+ answer.ownership = 'inactive';
79
+ }
80
+ }
81
+ const checked = ownership_read_result_schema.safeParse(answer);
82
+ resolve(checked.success ? checked.data : ownershipUnavailable('invalid_state'));
83
+ });
84
+ if (signal?.aborted)
85
+ on_abort();
86
+ else
87
+ child.send({ trusted_registry: registry.data, selection: selection.data }, (error) => {
88
+ if (error)
89
+ stop('reader_unavailable');
90
+ });
91
+ });
92
+ }
93
+ //# sourceMappingURL=ownership-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownership-reader.js","sourceRoot":"","sources":["../../src/local/ownership-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type ContentTypeRegistry, type PackageSource, type PackageUseRecord } from '@software-dlc/graph/packages';
2
+ import type { PortableGraph } from '@software-dlc/graph/types';
3
+ import { type FloorPolicyFor } from '../packages-uses.js';
4
+ /** The uses a commit adds or changes: those it must resolve before it records them. */
5
+ export declare function changedPackageUses(input: {
6
+ base_graph: PortableGraph | null;
7
+ graph: PortableGraph;
8
+ }): PackageUseRecord[];
9
+ /**
10
+ * Why a commit cannot record its package uses (graph-packages.md, Local resolution): each use it
11
+ * adds or changes is resolved against what is held here, and any blocking finding refuses it, so
12
+ * a use is committed only where its document is held. A use that resolves runs the floor check
13
+ * (graph-packages.md, Floors), so a fork or extension that drops what a floor requires is refused
14
+ * too. A use the commit leaves alone is not resolved again: reads report an unresolved use without
15
+ * failing the graph.
16
+ */
17
+ export declare function packageUseCommitIssues(input: {
18
+ base_graph: PortableGraph | null;
19
+ graph: PortableGraph;
20
+ /** Built only when a use changed, so a commit without one reads no package. */
21
+ source: () => HeldPackages;
22
+ registry?: ContentTypeRegistry;
23
+ /** The org policy each floor check runs with; none until the local governance graph holds one. */
24
+ floorPolicy?: FloorPolicyFor;
25
+ }): string[];
26
+ /** What a commit resolves against, and the coordinate of each package some version of which is held. */
27
+ export type HeldPackages = {
28
+ source: PackageSource;
29
+ coordinateOf: (package_id: string) => string | null;
30
+ };
31
+ /** The packages a workspace commit resolves against: the bundled snapshot and the download cache. */
32
+ export declare function heldPackages(env?: NodeJS.ProcessEnv): HeldPackages;
33
+ //# sourceMappingURL=package-uses-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-uses-check.d.ts","sourceRoot":"","sources":["../../src/local/package-uses-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAO7B,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,aAAa,CAAC;CACtB,GAAG,gBAAgB,EAAE,CAUrB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,UAAU,EAAE,aAAa,GAAG,IAAI,CAAC;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,+EAA+E;IAC/E,MAAM,EAAE,MAAM,YAAY,CAAC;IAC3B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,kGAAkG;IAClG,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B,GAAG,MAAM,EAAE,CAwBX;AAED,wGAAwG;AACxG,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CACrD,CAAC;AAEF,qGAAqG;AACrG,wBAAgB,YAAY,CAC1B,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,YAAY,CAWd"}
@@ -0,0 +1,62 @@
1
+ import { graphPackageContentTypes, resolvePackageUse } from '@software-dlc/graph/packages';
2
+ import { defaultGraphPackagesCacheDir } from '../graph-packages-lock.js';
3
+ import { defaultGraphPackagesSnapshotDir, localPackageSource, readLocalPackages } from '../packages-browse.js';
4
+ import { describeFloor, describeUseFinding, useFloors } from '../packages-uses.js';
5
+ import { stringifyCanonicalJson } from './canonical.js';
6
+ function useKey(use) {
7
+ return `${use.package_id}\u0000${use.project_id ?? ''}`;
8
+ }
9
+ /** The uses a commit adds or changes: those it must resolve before it records them. */
10
+ export function changedPackageUses(input) {
11
+ const before = new Map((input.base_graph?.package_uses ?? []).map((use) => [
12
+ useKey(use),
13
+ stringifyCanonicalJson(use)
14
+ ]));
15
+ return (input.graph.package_uses ?? []).filter((use) => before.get(useKey(use)) !== stringifyCanonicalJson(use));
16
+ }
17
+ /**
18
+ * Why a commit cannot record its package uses (graph-packages.md, Local resolution): each use it
19
+ * adds or changes is resolved against what is held here, and any blocking finding refuses it, so
20
+ * a use is committed only where its document is held. A use that resolves runs the floor check
21
+ * (graph-packages.md, Floors), so a fork or extension that drops what a floor requires is refused
22
+ * too. A use the commit leaves alone is not resolved again: reads report an unresolved use without
23
+ * failing the graph.
24
+ */
25
+ export function packageUseCommitIssues(input) {
26
+ const changed = changedPackageUses(input);
27
+ if (changed.length === 0)
28
+ return [];
29
+ const { source, coordinateOf } = input.source();
30
+ const registry = input.registry ?? graphPackageContentTypes;
31
+ return changed.flatMap((use) => {
32
+ const coordinate = coordinateOf(use.package_id);
33
+ const label = `${coordinate ?? use.package_id}@${use.version} (${use.mode})`;
34
+ const resolved = resolvePackageUse({
35
+ use,
36
+ graph: 'project',
37
+ source,
38
+ registry
39
+ });
40
+ if (resolved.findings.length > 0)
41
+ return resolved.findings.map((finding) => `${label}: ${describeUseFinding(finding, use, coordinate)}`);
42
+ const floors = useFloors(resolved, input.floorPolicy);
43
+ if (!floors.blocking)
44
+ return [];
45
+ return floors.findings
46
+ .filter((finding) => finding.severity === 'floor')
47
+ .map((finding) => `${label}: ${describeFloor(finding)}`);
48
+ });
49
+ }
50
+ /** The packages a workspace commit resolves against: the bundled snapshot and the download cache. */
51
+ export function heldPackages(env = process.env) {
52
+ const local = readLocalPackages({
53
+ snapshotDir: defaultGraphPackagesSnapshotDir(),
54
+ cacheDir: defaultGraphPackagesCacheDir(env)
55
+ });
56
+ return {
57
+ source: localPackageSource(local),
58
+ coordinateOf: (package_id) => local.packages.find((entry) => entry.id === package_id)?.coordinate ??
59
+ null
60
+ };
61
+ }
62
+ //# sourceMappingURL=package-uses-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-uses-check.js","sourceRoot":"","sources":["../../src/local/package-uses-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type GraphClientOptions, type GraphClientRequestOptions } from '@software-dlc/graph/client';
2
+ import { LocalSdlcStore } from './store.js';
3
+ import { type ManagedProjectionStatus } from './worktree-projection.js';
4
+ export type StalePendingRecoveryResult = {
5
+ recovered: true;
6
+ superseded_change_ids: string[];
7
+ remote_revision: number;
8
+ remote_sync_revision: number;
9
+ remote_sync_root_hash: string;
10
+ status: ManagedProjectionStatus;
11
+ };
12
+ export declare function recoverManagedProjectionFromStalePending(input: {
13
+ store: LocalSdlcStore;
14
+ client: GraphClientOptions;
15
+ worktree_id: string;
16
+ expected_remote_revision: number;
17
+ expected_remote_sync_revision: number;
18
+ expected_remote_sync_root_hash: string;
19
+ allow_unapplied_remote_state?: boolean;
20
+ request_options?: GraphClientRequestOptions;
21
+ }): Promise<StalePendingRecoveryResult>;
22
+ //# sourceMappingURL=pending-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-recovery.d.ts","sourceRoot":"","sources":["../../src/local/pending-recovery.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,4BAA4B,CAAC;AAcpC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,IAAI,CAAC;IAChB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,uBAAuB,CAAC;CACjC,CAAC;AAEF,wBAAsB,wCAAwC,CAAC,KAAK,EAAE;IACpE,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB,EAAE,MAAM,CAAC;IACjC,6BAA6B,EAAE,MAAM,CAAC;IACtC,8BAA8B,EAAE,MAAM,CAAC;IACvC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,eAAe,CAAC,EAAE,yBAAyB,CAAC;CAC7C,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAuLtC"}
@@ -0,0 +1,171 @@
1
+ import { GRAPH_SEMANTIC_ANNOTATION_SCHEMA_VERSIONS, GRAPH_VARIANT_SET_SCHEMA_VERSIONS, graph_sync_hash_schema, portable_graph_schema, worktree_sync_response_schema } from '@software-dlc/graph/schema';
2
+ import { getWorktreeChangeStatus, getWorktreeGraph, negotiateWorktreeSync } from '@software-dlc/graph/client';
3
+ import { stringifyCanonicalGraph } from './canonical.js';
4
+ import { reconstructNegotiatedWorktreeGraph } from './graph-sync.js';
5
+ import { OperationRefusalError } from './operation.js';
6
+ import { composeGraphProjection, diffProjectionGraphs, materializeGraphProjection, restoreMissingProjectionEntities, validateProjectionGraph } from './projection.js';
7
+ import { getManagedProjectionStatus } from './worktree-projection.js';
8
+ export async function recoverManagedProjectionFromStalePending(input) {
9
+ const session = input.store.getActiveSession(input.worktree_id);
10
+ if (!session) {
11
+ throw new OperationRefusalError('Stale-pending recovery requires an active local session.');
12
+ }
13
+ // A graph-file save needs no managed projection, so its pending request is
14
+ // recovered without one: there is no local proposal to validate or rebase.
15
+ const projection_state = input.store.getProjectionState(input.worktree_id);
16
+ const pending_changes = input.store.listPendingChanges(session.id);
17
+ if (pending_changes.length === 0) {
18
+ throw new OperationRefusalError('No pending worktree changes require recovery.');
19
+ }
20
+ const receipt_statuses = await Promise.all(pending_changes.map((change) => getWorktreeChangeStatus(input.client, input.worktree_id, change.idempotency_key, input.request_options)));
21
+ if (receipt_statuses.some((status) => status.found)) {
22
+ throw new OperationRefusalError('A pending worktree change has a server receipt. Run sdlc sync instead of recovery.');
23
+ }
24
+ const response = await getWorktreeGraph(input.client, input.worktree_id, input.request_options);
25
+ if (response.resource.type !== 'worktree' ||
26
+ response.resource.id !== input.worktree_id) {
27
+ throw new OperationRefusalError('Remote graph response does not match the bound worktree.');
28
+ }
29
+ const remote_revision = response.resource.revision;
30
+ const remote_sync_revision = response.resource.sync_revision;
31
+ const parsed_remote_root = graph_sync_hash_schema.safeParse(response.resource.sync_root_hash);
32
+ if (!Number.isSafeInteger(remote_revision) ||
33
+ (remote_revision ?? -1) < 0 ||
34
+ !Number.isSafeInteger(remote_sync_revision) ||
35
+ (remote_sync_revision ?? -1) < 0 ||
36
+ !parsed_remote_root.success) {
37
+ throw new OperationRefusalError('Remote worktree did not expose a valid revision/root tuple.');
38
+ }
39
+ const remote_sync_root_hash = parsed_remote_root.data;
40
+ if (remote_revision !== input.expected_remote_revision ||
41
+ remote_sync_revision !== input.expected_remote_sync_revision ||
42
+ remote_sync_root_hash !== input.expected_remote_sync_root_hash) {
43
+ throw new OperationRefusalError('Remote worktree state does not match the explicitly expected recovery tuple.');
44
+ }
45
+ // A session that was never checked out has acknowledged a revision only.
46
+ const session_has_sync_base = session.last_acknowledged_sync_revision !== null &&
47
+ session.last_acknowledged_sync_root_hash !== null;
48
+ const remote_state_unchanged = remote_revision === session.last_acknowledged_revision &&
49
+ (!session_has_sync_base ||
50
+ (remote_sync_revision === session.last_acknowledged_sync_revision &&
51
+ remote_sync_root_hash === session.last_acknowledged_sync_root_hash));
52
+ if (remote_state_unchanged && !input.allow_unapplied_remote_state) {
53
+ throw new OperationRefusalError('Remote worktree state has not advanced beyond the acknowledged local base; run sdlc sync or explicitly discard confirmed-unapplied pending requests.');
54
+ }
55
+ if (!remote_state_unchanged &&
56
+ pending_changes.some((change) => change.expected_revision >= remote_revision)) {
57
+ throw new OperationRefusalError('Recovery requires the remote worktree revision to be newer than every pending request base.');
58
+ }
59
+ const remote_compatibility_graph = portable_graph_schema.parse(response.graph);
60
+ const sync_response = worktree_sync_response_schema.parse(await negotiateWorktreeSync(input.client, input.worktree_id, {
61
+ supported_manifest_versions: [1],
62
+ supported_semantic_annotation_schema_versions: [
63
+ ...GRAPH_SEMANTIC_ANNOTATION_SCHEMA_VERSIONS
64
+ ],
65
+ supported_graph_variant_set_schema_versions: [
66
+ ...GRAPH_VARIANT_SET_SCHEMA_VERSIONS
67
+ ]
68
+ }, input.request_options));
69
+ if (sync_response.worktree_id !== input.worktree_id ||
70
+ sync_response.revision !== remote_revision ||
71
+ sync_response.sync_revision !== remote_sync_revision ||
72
+ sync_response.sync_root_hash !== remote_sync_root_hash) {
73
+ throw new OperationRefusalError('Remote worktree graph and sync manifest do not expose the same recovery tuple.');
74
+ }
75
+ if (sync_response.mode !== 'manifest') {
76
+ throw new OperationRefusalError('Stale-pending recovery requires a complete remote sync manifest.');
77
+ }
78
+ const reconstructed = await reconstructNegotiatedWorktreeGraph({
79
+ store: input.store,
80
+ base_graph: remote_compatibility_graph,
81
+ base_manifest: null,
82
+ response: sync_response
83
+ });
84
+ const remote_graph = reconstructed.graph;
85
+ if (projection_state) {
86
+ await rebaseProjectionOntoRemote({
87
+ store: input.store,
88
+ worktree_id: input.worktree_id,
89
+ projection_dir: projection_state.projection_dir,
90
+ remote_graph
91
+ });
92
+ }
93
+ const checkpoint = await input.store.checkpoint({
94
+ session_id: session.id,
95
+ revision: remote_revision,
96
+ graph_json: stringifyCanonicalGraph(remote_graph)
97
+ });
98
+ const superseded_change_ids = input.store.supersedePendingChangesAndAdoptCheckpoint({
99
+ session_id: session.id,
100
+ expected_pending_change_ids: pending_changes.map((change) => change.id),
101
+ checkpoint_id: checkpoint.checkpoint_id,
102
+ revision: remote_revision,
103
+ graph_hash: checkpoint.graph_hash,
104
+ sync_revision: remote_sync_revision,
105
+ sync_root_hash: remote_sync_root_hash,
106
+ reason: remote_state_unchanged
107
+ ? 'remote_state_unchanged_without_receipt'
108
+ : 'remote_state_advanced_without_receipt'
109
+ });
110
+ if (projection_state) {
111
+ input.store.setProjectionState({
112
+ worktree_id: input.worktree_id,
113
+ projection_dir: projection_state.projection_dir,
114
+ base_revision: remote_revision,
115
+ base_graph_hash: checkpoint.graph_hash
116
+ });
117
+ }
118
+ return {
119
+ recovered: true,
120
+ superseded_change_ids,
121
+ remote_revision,
122
+ remote_sync_revision,
123
+ remote_sync_root_hash,
124
+ status: await getManagedProjectionStatus({
125
+ store: input.store,
126
+ worktree_id: input.worktree_id
127
+ })
128
+ };
129
+ }
130
+ /**
131
+ * Validates the preserved local projection against the newer remote graph and
132
+ * restores remote entities it lacks, without overwriting a local entity.
133
+ */
134
+ async function rebaseProjectionOntoRemote(input) {
135
+ const { remote_graph } = input;
136
+ const composed = await composeGraphProjection(input.projection_dir);
137
+ const validation = validateProjectionGraph(composed.graph);
138
+ if (!validation.is_valid) {
139
+ throw new OperationRefusalError('Managed projection validation failed; recovery left local state unchanged.');
140
+ }
141
+ let recovered_graph = composed.graph;
142
+ let rebased_diff = diffProjectionGraphs({
143
+ base_graph: remote_graph,
144
+ current_graph: recovered_graph,
145
+ deletion_intents: input.store.listProjectionDeletions(input.worktree_id)
146
+ });
147
+ if (rebased_diff.missing_unrecorded.length > 0) {
148
+ recovered_graph = restoreMissingProjectionEntities({
149
+ current_graph: recovered_graph,
150
+ source_graph: remote_graph,
151
+ entries: rebased_diff.missing_unrecorded
152
+ });
153
+ const recovered_validation = validateProjectionGraph(recovered_graph);
154
+ if (!recovered_validation.is_valid) {
155
+ throw new OperationRefusalError('Restoring newer remote entities would make the preserved local projection invalid; recovery left local files unchanged.');
156
+ }
157
+ rebased_diff = diffProjectionGraphs({
158
+ base_graph: remote_graph,
159
+ current_graph: recovered_graph,
160
+ deletion_intents: input.store.listProjectionDeletions(input.worktree_id)
161
+ });
162
+ if (rebased_diff.missing_unrecorded.length > 0) {
163
+ throw new OperationRefusalError('Rebased projection still has unrecorded deletions after restoring newer remote entities.');
164
+ }
165
+ await materializeGraphProjection({
166
+ projection_dir: input.projection_dir,
167
+ graph: recovered_graph
168
+ });
169
+ }
170
+ }
171
+ //# sourceMappingURL=pending-recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-recovery.js","sourceRoot":"","sources":["../../src/local/pending-recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type LocalCommitPortableAttestation, type LocalHistoryPortableConversion, type PortableCommit, type PortableIdentityClaim } from './portable-commit.js';
2
+ import type { LocalWorkspaceHistoryStore } from './workspace-history-store.js';
3
+ import type { LocalWorkspaceStoreDatabase } from './workspace-store-database.js';
4
+ export declare class LocalPortableCommitStore {
5
+ private readonly database;
6
+ private readonly history;
7
+ constructor(database: LocalWorkspaceStoreDatabase, history: LocalWorkspaceHistoryStore);
8
+ private assertIntegrity;
9
+ getCommit(commit_id: string): PortableCommit | null;
10
+ getLocalMapping(local_commit_id: string): string | null;
11
+ getLocalAttestation(local_commit_id: string): LocalCommitPortableAttestation | null;
12
+ planLocalHistory(head_commit_id: string): {
13
+ version: 1;
14
+ head_local_commit_id: string;
15
+ head_portable_commit_id: string | null;
16
+ unmapped_local_commit_ids: string[];
17
+ required_author_workspace_ids: string[];
18
+ external_parent_ids: string[];
19
+ };
20
+ migrateLocalHistory(input: {
21
+ head_commit_ids: string[];
22
+ author_claims: Record<string, PortableIdentityClaim>;
23
+ committer: PortableIdentityClaim;
24
+ external_parent_ids?: Record<string, string>;
25
+ reuse_existing_mappings?: boolean;
26
+ }): LocalHistoryPortableConversion;
27
+ }
28
+ //# sourceMappingURL=portable-commit-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portable-commit-store.d.ts","sourceRoot":"","sources":["../../src/local/portable-commit-store.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,8BAA8B,EACnC,KAAK,8BAA8B,EACnC,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAEjF,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,QAAQ,EAAE,2BAA2B,EACrC,OAAO,EAAE,0BAA0B;IAKtD,OAAO,CAAC,eAAe;IAyCvB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IASnD,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IASvD,mBAAmB,CACjB,eAAe,EAAE,MAAM,GACtB,8BAA8B,GAAG,IAAI;IAaxC,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG;QACxC,OAAO,EAAE,CAAC,CAAC;QACX,oBAAoB,EAAE,MAAM,CAAC;QAC7B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;QACvC,yBAAyB,EAAE,MAAM,EAAE,CAAC;QACpC,6BAA6B,EAAE,MAAM,EAAE,CAAC;QACxC,mBAAmB,EAAE,MAAM,EAAE,CAAC;KAC/B;IAuCD,mBAAmB,CAAC,KAAK,EAAE;QACzB,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QACrD,SAAS,EAAE,qBAAqB,CAAC;QACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7C,uBAAuB,CAAC,EAAE,OAAO,CAAC;KACnC,GAAG,8BAA8B;CAoHnC"}
@@ -0,0 +1,187 @@
1
+ import { stringifyCanonicalJson } from './canonical.js';
2
+ import { convertLocalWorkspaceHistory, local_commit_portable_attestation_schema, parsePortableCommit } from './portable-commit.js';
3
+ export class LocalPortableCommitStore {
4
+ database;
5
+ history;
6
+ constructor(database, history) {
7
+ this.database = database;
8
+ this.history = history;
9
+ this.assertIntegrity();
10
+ }
11
+ assertIntegrity() {
12
+ const commits = this.database
13
+ .prepare('select id, commit_json from portable_commit order by id')
14
+ .all();
15
+ for (const row of commits) {
16
+ const commit = parsePortableCommit(JSON.parse(row.commit_json));
17
+ if (commit.id !== row.id) {
18
+ throw new Error(`Portable commit row ${row.id} has mismatched content.`);
19
+ }
20
+ }
21
+ const mappings = this.database
22
+ .prepare(`
23
+ select local_commit_id, portable_commit_id, attestation_json
24
+ from local_commit_portable_mapping order by local_commit_id
25
+ `)
26
+ .all();
27
+ for (const row of mappings) {
28
+ const attestation = local_commit_portable_attestation_schema.parse(JSON.parse(row.attestation_json));
29
+ if (attestation.local_commit_id !== row.local_commit_id ||
30
+ attestation.portable_commit_id !== row.portable_commit_id) {
31
+ throw new Error(`Local commit ${row.local_commit_id} has a corrupt portable mapping.`);
32
+ }
33
+ }
34
+ }
35
+ getCommit(commit_id) {
36
+ const row = this.database
37
+ .prepare('select commit_json from portable_commit where id = ?')
38
+ .get(commit_id);
39
+ return row
40
+ ? parsePortableCommit(JSON.parse(row.commit_json))
41
+ : null;
42
+ }
43
+ getLocalMapping(local_commit_id) {
44
+ const row = this.database
45
+ .prepare('select portable_commit_id from local_commit_portable_mapping where local_commit_id = ?')
46
+ .get(local_commit_id);
47
+ return row?.portable_commit_id ?? null;
48
+ }
49
+ getLocalAttestation(local_commit_id) {
50
+ const row = this.database
51
+ .prepare('select attestation_json from local_commit_portable_mapping where local_commit_id = ?')
52
+ .get(local_commit_id);
53
+ return row
54
+ ? local_commit_portable_attestation_schema.parse(JSON.parse(row.attestation_json))
55
+ : null;
56
+ }
57
+ planLocalHistory(head_commit_id) {
58
+ const unmapped_local_commit_ids = new Set();
59
+ const required_author_workspace_ids = new Set();
60
+ const external_parent_ids = new Set();
61
+ const visiting = new Set();
62
+ const collect = (commit_id) => {
63
+ if (this.getLocalMapping(commit_id))
64
+ return;
65
+ if (this.getCommit(commit_id))
66
+ return;
67
+ const commit = this.history.getCommit(commit_id);
68
+ if (!commit) {
69
+ external_parent_ids.add(commit_id);
70
+ return;
71
+ }
72
+ if (visiting.has(commit_id)) {
73
+ throw new Error('Local commit history contains a cycle.');
74
+ }
75
+ if (unmapped_local_commit_ids.has(commit_id))
76
+ return;
77
+ if (commit.validation_status !== 'passed') {
78
+ throw new Error(`Local commit ${commit.id} did not pass validation.`);
79
+ }
80
+ visiting.add(commit_id);
81
+ commit.parent_ids.forEach(collect);
82
+ visiting.delete(commit_id);
83
+ unmapped_local_commit_ids.add(commit.id);
84
+ required_author_workspace_ids.add(commit.author_workspace_id);
85
+ };
86
+ collect(head_commit_id);
87
+ return {
88
+ version: 1,
89
+ head_local_commit_id: head_commit_id,
90
+ head_portable_commit_id: this.getLocalMapping(head_commit_id),
91
+ unmapped_local_commit_ids: [...unmapped_local_commit_ids].sort(),
92
+ required_author_workspace_ids: [...required_author_workspace_ids].sort(),
93
+ external_parent_ids: [...external_parent_ids].sort()
94
+ };
95
+ }
96
+ migrateLocalHistory(input) {
97
+ const local_commits = new Map();
98
+ const visiting = new Set();
99
+ const resolved_external_parent_ids = { ...input.external_parent_ids };
100
+ const collect = (commit_id) => {
101
+ if (local_commits.has(commit_id))
102
+ return;
103
+ const existing_mapping = input.reuse_existing_mappings
104
+ ? this.getLocalMapping(commit_id)
105
+ : null;
106
+ if (existing_mapping) {
107
+ const requested_mapping = resolved_external_parent_ids[commit_id];
108
+ if (requested_mapping && requested_mapping !== existing_mapping) {
109
+ throw new Error(`Local commit ${commit_id} already has a different portable mapping.`);
110
+ }
111
+ resolved_external_parent_ids[commit_id] = existing_mapping;
112
+ return;
113
+ }
114
+ const portable_commit = this.getCommit(commit_id);
115
+ if (portable_commit) {
116
+ const requested_mapping = resolved_external_parent_ids[commit_id];
117
+ if (requested_mapping && requested_mapping !== commit_id) {
118
+ throw new Error(`Portable commit ${commit_id} cannot be remapped to another parent.`);
119
+ }
120
+ resolved_external_parent_ids[commit_id] = commit_id;
121
+ return;
122
+ }
123
+ const commit = this.history.getCommit(commit_id);
124
+ if (!commit) {
125
+ if (resolved_external_parent_ids[commit_id])
126
+ return;
127
+ throw new Error(`Local commit parent ${commit_id} requires an explicit portable mapping.`);
128
+ }
129
+ if (visiting.has(commit_id)) {
130
+ throw new Error('Local commit history contains a cycle.');
131
+ }
132
+ visiting.add(commit_id);
133
+ commit.parent_ids.forEach(collect);
134
+ visiting.delete(commit_id);
135
+ local_commits.set(commit_id, commit);
136
+ };
137
+ [...new Set(input.head_commit_ids)].sort().forEach(collect);
138
+ const conversion = convertLocalWorkspaceHistory({
139
+ ...input,
140
+ external_parent_ids: resolved_external_parent_ids,
141
+ commits: [...local_commits.values()]
142
+ });
143
+ this.database.exec('begin immediate');
144
+ try {
145
+ for (const commit of conversion.commits) {
146
+ const commit_json = stringifyCanonicalJson(commit);
147
+ this.database
148
+ .prepare('insert into portable_commit (id, commit_json) values (?, ?) on conflict(id) do nothing')
149
+ .run(commit.id, commit_json);
150
+ const persisted = this.database
151
+ .prepare('select commit_json from portable_commit where id = ?')
152
+ .get(commit.id);
153
+ if (persisted.commit_json !== commit_json) {
154
+ throw new Error(`Portable commit ${commit.id} conflicts with stored bytes.`);
155
+ }
156
+ }
157
+ for (const attestation of conversion.attestations) {
158
+ const attestation_json = stringifyCanonicalJson(attestation);
159
+ this.database
160
+ .prepare(`
161
+ insert into local_commit_portable_mapping (
162
+ local_commit_id, portable_commit_id, attestation_json
163
+ ) values (?, ?, ?)
164
+ on conflict(local_commit_id) do nothing
165
+ `)
166
+ .run(attestation.local_commit_id, attestation.portable_commit_id, attestation_json);
167
+ const persisted = this.database
168
+ .prepare(`
169
+ select portable_commit_id, attestation_json
170
+ from local_commit_portable_mapping where local_commit_id = ?
171
+ `)
172
+ .get(attestation.local_commit_id);
173
+ if (persisted.portable_commit_id !== attestation.portable_commit_id ||
174
+ persisted.attestation_json !== attestation_json) {
175
+ throw new Error(`Local commit ${attestation.local_commit_id} already has a different portable mapping.`);
176
+ }
177
+ }
178
+ this.database.exec('commit');
179
+ return conversion;
180
+ }
181
+ catch (error) {
182
+ this.database.exec('rollback');
183
+ throw error;
184
+ }
185
+ }
186
+ }
187
+ //# sourceMappingURL=portable-commit-store.js.map