@aipt/platform-kernel 0.1.5

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 (182) hide show
  1. package/README.md +25 -0
  2. package/dist/adoption-contracts.d.ts +140 -0
  3. package/dist/adoption-contracts.d.ts.map +1 -0
  4. package/dist/adoption-contracts.js +2 -0
  5. package/dist/adoption-contracts.js.map +1 -0
  6. package/dist/adoption-metadata.d.ts +72 -0
  7. package/dist/adoption-metadata.d.ts.map +1 -0
  8. package/dist/adoption-metadata.js +408 -0
  9. package/dist/adoption-metadata.js.map +1 -0
  10. package/dist/adoption-schemas.d.ts +1608 -0
  11. package/dist/adoption-schemas.d.ts.map +1 -0
  12. package/dist/adoption-schemas.js +319 -0
  13. package/dist/adoption-schemas.js.map +1 -0
  14. package/dist/application-config-binding.d.ts +54 -0
  15. package/dist/application-config-binding.d.ts.map +1 -0
  16. package/dist/application-config-binding.js +139 -0
  17. package/dist/application-config-binding.js.map +1 -0
  18. package/dist/application-config-contract.d.ts +159 -0
  19. package/dist/application-config-contract.d.ts.map +1 -0
  20. package/dist/application-config-contract.js +142 -0
  21. package/dist/application-config-contract.js.map +1 -0
  22. package/dist/blank-profile.d.ts +60 -0
  23. package/dist/blank-profile.d.ts.map +1 -0
  24. package/dist/blank-profile.js +182 -0
  25. package/dist/blank-profile.js.map +1 -0
  26. package/dist/catalog-source.d.ts +167 -0
  27. package/dist/catalog-source.d.ts.map +1 -0
  28. package/dist/catalog-source.js +252 -0
  29. package/dist/catalog-source.js.map +1 -0
  30. package/dist/code-module-publication.d.ts +113 -0
  31. package/dist/code-module-publication.d.ts.map +1 -0
  32. package/dist/code-module-publication.js +71 -0
  33. package/dist/code-module-publication.js.map +1 -0
  34. package/dist/contracts.d.ts +150 -0
  35. package/dist/contracts.d.ts.map +1 -0
  36. package/dist/contracts.js +3 -0
  37. package/dist/contracts.js.map +1 -0
  38. package/dist/delivery.d.ts +201 -0
  39. package/dist/delivery.d.ts.map +1 -0
  40. package/dist/delivery.js +364 -0
  41. package/dist/delivery.js.map +1 -0
  42. package/dist/dependency-resolution.d.ts +46 -0
  43. package/dist/dependency-resolution.d.ts.map +1 -0
  44. package/dist/dependency-resolution.js +35 -0
  45. package/dist/dependency-resolution.js.map +1 -0
  46. package/dist/doctor.d.ts +50 -0
  47. package/dist/doctor.d.ts.map +1 -0
  48. package/dist/doctor.js +62 -0
  49. package/dist/doctor.js.map +1 -0
  50. package/dist/durability-trace.d.ts +31 -0
  51. package/dist/durability-trace.d.ts.map +1 -0
  52. package/dist/durability-trace.js +45 -0
  53. package/dist/durability-trace.js.map +1 -0
  54. package/dist/engineering-operations.d.ts +43 -0
  55. package/dist/engineering-operations.d.ts.map +1 -0
  56. package/dist/engineering-operations.js +19 -0
  57. package/dist/engineering-operations.js.map +1 -0
  58. package/dist/engineering-product.d.ts +261 -0
  59. package/dist/engineering-product.d.ts.map +1 -0
  60. package/dist/engineering-product.js +61 -0
  61. package/dist/engineering-product.js.map +1 -0
  62. package/dist/example-recipe.d.ts +147 -0
  63. package/dist/example-recipe.d.ts.map +1 -0
  64. package/dist/example-recipe.js +58 -0
  65. package/dist/example-recipe.js.map +1 -0
  66. package/dist/feature-planner.d.ts +59 -0
  67. package/dist/feature-planner.d.ts.map +1 -0
  68. package/dist/feature-planner.js +160 -0
  69. package/dist/feature-planner.js.map +1 -0
  70. package/dist/filesystem-contracts.d.ts +77 -0
  71. package/dist/filesystem-contracts.d.ts.map +1 -0
  72. package/dist/filesystem-contracts.js +2 -0
  73. package/dist/filesystem-contracts.js.map +1 -0
  74. package/dist/filesystem-transaction.d.ts +52 -0
  75. package/dist/filesystem-transaction.d.ts.map +1 -0
  76. package/dist/filesystem-transaction.js +749 -0
  77. package/dist/filesystem-transaction.js.map +1 -0
  78. package/dist/index.d.ts +44 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +42 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/integrity.d.ts +3 -0
  83. package/dist/integrity.d.ts.map +1 -0
  84. package/dist/integrity.js +17 -0
  85. package/dist/integrity.js.map +1 -0
  86. package/dist/local-artifact-registry.d.ts +55 -0
  87. package/dist/local-artifact-registry.d.ts.map +1 -0
  88. package/dist/local-artifact-registry.js +87 -0
  89. package/dist/local-artifact-registry.js.map +1 -0
  90. package/dist/locked-repository-state.d.ts +21 -0
  91. package/dist/locked-repository-state.d.ts.map +1 -0
  92. package/dist/locked-repository-state.js +62 -0
  93. package/dist/locked-repository-state.js.map +1 -0
  94. package/dist/managed-region.d.ts +11 -0
  95. package/dist/managed-region.d.ts.map +1 -0
  96. package/dist/managed-region.js +45 -0
  97. package/dist/managed-region.js.map +1 -0
  98. package/dist/package-adoption.d.ts +179 -0
  99. package/dist/package-adoption.d.ts.map +1 -0
  100. package/dist/package-adoption.js +332 -0
  101. package/dist/package-adoption.js.map +1 -0
  102. package/dist/package-release.d.ts +42 -0
  103. package/dist/package-release.d.ts.map +1 -0
  104. package/dist/package-release.js +85 -0
  105. package/dist/package-release.js.map +1 -0
  106. package/dist/plan-state.d.ts +10 -0
  107. package/dist/plan-state.d.ts.map +1 -0
  108. package/dist/plan-state.js +33 -0
  109. package/dist/plan-state.js.map +1 -0
  110. package/dist/planner.d.ts +19 -0
  111. package/dist/planner.d.ts.map +1 -0
  112. package/dist/planner.js +111 -0
  113. package/dist/planner.js.map +1 -0
  114. package/dist/platform-package-sources.d.ts +49 -0
  115. package/dist/platform-package-sources.d.ts.map +1 -0
  116. package/dist/platform-package-sources.js +98 -0
  117. package/dist/platform-package-sources.js.map +1 -0
  118. package/dist/project-bootstrap.d.ts +42 -0
  119. package/dist/project-bootstrap.d.ts.map +1 -0
  120. package/dist/project-bootstrap.js +270 -0
  121. package/dist/project-bootstrap.js.map +1 -0
  122. package/dist/project-control.d.ts +149 -0
  123. package/dist/project-control.d.ts.map +1 -0
  124. package/dist/project-control.js +46 -0
  125. package/dist/project-control.js.map +1 -0
  126. package/dist/project-maintenance.d.ts +30 -0
  127. package/dist/project-maintenance.d.ts.map +1 -0
  128. package/dist/project-maintenance.js +29 -0
  129. package/dist/project-maintenance.js.map +1 -0
  130. package/dist/project-recovery.d.ts +31 -0
  131. package/dist/project-recovery.d.ts.map +1 -0
  132. package/dist/project-recovery.js +80 -0
  133. package/dist/project-recovery.js.map +1 -0
  134. package/dist/recovery-override.d.ts +20 -0
  135. package/dist/recovery-override.d.ts.map +1 -0
  136. package/dist/recovery-override.js +27 -0
  137. package/dist/recovery-override.js.map +1 -0
  138. package/dist/release-loader.d.ts +9 -0
  139. package/dist/release-loader.d.ts.map +1 -0
  140. package/dist/release-loader.js +86 -0
  141. package/dist/release-loader.js.map +1 -0
  142. package/dist/resolution-evidence.d.ts +67 -0
  143. package/dist/resolution-evidence.d.ts.map +1 -0
  144. package/dist/resolution-evidence.js +98 -0
  145. package/dist/resolution-evidence.js.map +1 -0
  146. package/dist/resolution-worker-build.d.ts +33 -0
  147. package/dist/resolution-worker-build.d.ts.map +1 -0
  148. package/dist/resolution-worker-build.js +42 -0
  149. package/dist/resolution-worker-build.js.map +1 -0
  150. package/dist/runtime-observability.d.ts +147 -0
  151. package/dist/runtime-observability.d.ts.map +1 -0
  152. package/dist/runtime-observability.js +264 -0
  153. package/dist/runtime-observability.js.map +1 -0
  154. package/dist/schemas.d.ts +740 -0
  155. package/dist/schemas.d.ts.map +1 -0
  156. package/dist/schemas.js +348 -0
  157. package/dist/schemas.js.map +1 -0
  158. package/dist/solution-catalog.d.ts +169 -0
  159. package/dist/solution-catalog.d.ts.map +1 -0
  160. package/dist/solution-catalog.js +60 -0
  161. package/dist/solution-catalog.js.map +1 -0
  162. package/dist/standalone-npm-profile.d.ts +146 -0
  163. package/dist/standalone-npm-profile.d.ts.map +1 -0
  164. package/dist/standalone-npm-profile.js +425 -0
  165. package/dist/standalone-npm-profile.js.map +1 -0
  166. package/dist/testing.d.ts +5 -0
  167. package/dist/testing.d.ts.map +1 -0
  168. package/dist/testing.js +3 -0
  169. package/dist/testing.js.map +1 -0
  170. package/dist/upgrade-planner.d.ts +45 -0
  171. package/dist/upgrade-planner.d.ts.map +1 -0
  172. package/dist/upgrade-planner.js +207 -0
  173. package/dist/upgrade-planner.js.map +1 -0
  174. package/dist/workspace-publication.d.ts +18 -0
  175. package/dist/workspace-publication.d.ts.map +1 -0
  176. package/dist/workspace-publication.js +33 -0
  177. package/dist/workspace-publication.js.map +1 -0
  178. package/dist/workspace-topology.d.ts +22 -0
  179. package/dist/workspace-topology.d.ts.map +1 -0
  180. package/dist/workspace-topology.js +117 -0
  181. package/dist/workspace-topology.js.map +1 -0
  182. package/package.json +46 -0
@@ -0,0 +1,408 @@
1
+ import { constants } from "node:fs";
2
+ import { lstat, mkdir, open, readFile, realpath, rename, unlink } from "node:fs/promises";
3
+ import { randomUUID } from "node:crypto";
4
+ import path from "node:path";
5
+ import { parseAdoptionEvidence, parseProjectAdoptionLock, parseVerificationResult, } from "./adoption-schemas.js";
6
+ import { captureExpectedProjectState } from "./blank-profile.js";
7
+ import { inspectTransaction } from "./filesystem-transaction.js";
8
+ import { canonicalize, sha256Digest } from "./integrity.js";
9
+ import { traceDurabilityOperation, } from "./durability-trace.js";
10
+ export class AdoptionCommitError extends Error {
11
+ code;
12
+ constructor(code, message) {
13
+ super(message);
14
+ this.code = code;
15
+ }
16
+ }
17
+ class MetadataCrashSignal extends Error {
18
+ }
19
+ function metadataPaths(projectRoot, planId) {
20
+ const platformDirectory = path.join(projectRoot, ".dyyto");
21
+ const transactionDirectory = path.join(platformDirectory, "metadata-transactions", planId);
22
+ return {
23
+ platformDirectory,
24
+ evidenceDirectory: path.join(platformDirectory, "evidence"),
25
+ lockFile: path.join(platformDirectory, "project-lock.json"),
26
+ transactionLock: path.join(platformDirectory, "metadata-lock.json"),
27
+ transactionDirectory,
28
+ journal: path.join(transactionDirectory, "journal.json"),
29
+ };
30
+ }
31
+ async function exists(target) {
32
+ try {
33
+ await lstat(target);
34
+ return true;
35
+ }
36
+ catch (error) {
37
+ if (error.code === "ENOENT")
38
+ return false;
39
+ throw error;
40
+ }
41
+ }
42
+ function metadataTrace(sink, category, barrierId) {
43
+ return sink === undefined ? undefined : { sink, category, barrierId };
44
+ }
45
+ function traceContext(trace, directory = false) {
46
+ if (trace === undefined)
47
+ return undefined;
48
+ return {
49
+ sink: trace.sink,
50
+ phase: "metadata",
51
+ pathCategory: directory ? "directory" : trace.category,
52
+ barrierId: trace.barrierId,
53
+ };
54
+ }
55
+ async function syncDirectory(directory, trace) {
56
+ const handle = await open(directory, constants.O_RDONLY);
57
+ try {
58
+ await traceDurabilityOperation({
59
+ context: traceContext(trace, true),
60
+ operation: "directory-sync",
61
+ run: () => handle.sync(),
62
+ });
63
+ }
64
+ finally {
65
+ await handle.close();
66
+ }
67
+ }
68
+ async function writeExclusive(target, bytes, trace) {
69
+ const handle = await open(target, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
70
+ try {
71
+ await traceDurabilityOperation({
72
+ context: traceContext(trace),
73
+ operation: "write",
74
+ bytes: bytes.byteLength,
75
+ run: () => handle.writeFile(bytes),
76
+ });
77
+ await traceDurabilityOperation({
78
+ context: traceContext(trace),
79
+ operation: "file-sync",
80
+ bytes: bytes.byteLength,
81
+ run: () => handle.sync(),
82
+ });
83
+ }
84
+ finally {
85
+ await handle.close();
86
+ }
87
+ }
88
+ async function writeJsonAtomic(target, value, trace) {
89
+ const directory = path.dirname(target);
90
+ const temporary = path.join(directory, `.tmp-${randomUUID()}`);
91
+ const bytes = Buffer.from(`${JSON.stringify(value, null, 2)}\n`);
92
+ await writeExclusive(temporary, bytes, trace);
93
+ await traceDurabilityOperation({
94
+ context: traceContext(trace),
95
+ operation: "rename",
96
+ bytes: bytes.byteLength,
97
+ run: () => rename(temporary, target),
98
+ });
99
+ await syncDirectory(directory, trace);
100
+ }
101
+ function withJournalDigest(journal) {
102
+ return { ...journal, journalDigest: sha256Digest(canonicalize(journal)) };
103
+ }
104
+ async function persistJournal(journalPath, journal, trace) {
105
+ const { journalDigest: _digest, ...content } = journal;
106
+ const next = withJournalDigest(content);
107
+ await writeJsonAtomic(journalPath, next, trace);
108
+ return next;
109
+ }
110
+ async function readJournal(journalPath) {
111
+ try {
112
+ const journal = JSON.parse(await readFile(journalPath, "utf8"));
113
+ const { journalDigest, ...content } = journal;
114
+ if (journal.schemaVersion !== 1 ||
115
+ !Array.isArray(journal.evidence) ||
116
+ journalDigest !== sha256Digest(canonicalize(content))) {
117
+ throw new Error("invalid journal");
118
+ }
119
+ journal.evidence.forEach(parseAdoptionEvidence);
120
+ parseProjectAdoptionLock(journal.lock);
121
+ return journal;
122
+ }
123
+ catch {
124
+ throw new AdoptionCommitError("METADATA_JOURNAL_CORRUPTED", "Metadata journal cannot be trusted");
125
+ }
126
+ }
127
+ async function acquireMetadataLock(lockPath, value, trace) {
128
+ try {
129
+ await writeExclusive(lockPath, Buffer.from(`${JSON.stringify(value, null, 2)}\n`), trace);
130
+ await syncDirectory(path.dirname(lockPath), trace);
131
+ }
132
+ catch (error) {
133
+ if (error.code === "EEXIST") {
134
+ throw new AdoptionCommitError("METADATA_TRANSACTION_ACTIVE", "Another metadata transaction is active");
135
+ }
136
+ throw error;
137
+ }
138
+ }
139
+ function createEvidence(release, result) {
140
+ const content = {
141
+ ...result,
142
+ capabilityId: release.capabilityId,
143
+ capabilityVersion: release.version,
144
+ capabilityIntegrity: release.integrity,
145
+ };
146
+ return { ...content, evidenceId: sha256Digest(canonicalize(content)) };
147
+ }
148
+ function assertVerification(release, resultsInput, projectStateDigest) {
149
+ const results = resultsInput.map(parseVerificationResult);
150
+ const expected = release.verifiers.map((verifier) => verifier.id).sort();
151
+ const actual = results.map((result) => result.verifierId).sort();
152
+ if (expected.length !== actual.length ||
153
+ expected.some((verifierId, index) => verifierId !== actual[index])) {
154
+ throw new AdoptionCommitError("VERIFICATION_INCOMPLETE", "Verification results do not cover the release verifier set");
155
+ }
156
+ for (const result of results) {
157
+ if (result.commandId !== result.verifierId ||
158
+ result.result !== "passed" ||
159
+ result.exitCode !== 0) {
160
+ throw new AdoptionCommitError("VERIFICATION_FAILED", `Verifier ${result.verifierId} did not pass`);
161
+ }
162
+ if (result.projectStateDigest !== projectStateDigest) {
163
+ throw new AdoptionCommitError("PROJECT_STATE_CHANGED", "Verification result belongs to a different project state");
164
+ }
165
+ }
166
+ return results;
167
+ }
168
+ async function writeEvidence(evidenceDirectory, evidence, trace) {
169
+ const target = path.join(evidenceDirectory, `${evidence.evidenceId}.json`);
170
+ if (await exists(target)) {
171
+ const current = parseAdoptionEvidence(JSON.parse(await readFile(target, "utf8")));
172
+ if (canonicalize(current) !== canonicalize(evidence)) {
173
+ throw new AdoptionCommitError("METADATA_JOURNAL_CORRUPTED", "Existing evidence content does not match its identity");
174
+ }
175
+ return;
176
+ }
177
+ await writeExclusive(target, Buffer.from(`${JSON.stringify(evidence, null, 2)}\n`), trace);
178
+ await syncDirectory(evidenceDirectory, trace);
179
+ }
180
+ async function writeLock(lockPath, lock, previousLockDigest, trace) {
181
+ if (await exists(lockPath)) {
182
+ const current = parseProjectAdoptionLock(JSON.parse(await readFile(lockPath, "utf8")));
183
+ if (canonicalize(current) === canonicalize(lock))
184
+ return;
185
+ if (previousLockDigest === undefined || sha256Digest(canonicalize(current)) !== previousLockDigest) {
186
+ throw new AdoptionCommitError("PROJECT_STATE_CHANGED", "The project lock changed before metadata commit");
187
+ }
188
+ await writeJsonAtomic(lockPath, lock, trace);
189
+ return;
190
+ }
191
+ await writeJsonAtomic(lockPath, lock, trace);
192
+ }
193
+ async function checkpoint(hooks, value) {
194
+ try {
195
+ await hooks?.onCheckpoint?.(value);
196
+ }
197
+ catch (error) {
198
+ throw new MetadataCrashSignal("Simulated metadata crash", { cause: error });
199
+ }
200
+ }
201
+ async function finishMetadataCommit(projectRoot, journalInput, hooks) {
202
+ const paths = metadataPaths(projectRoot, journalInput.planId);
203
+ let journal = journalInput;
204
+ try {
205
+ for (const evidence of journal.evidence) {
206
+ await writeEvidence(paths.evidenceDirectory, evidence, metadataTrace(hooks?.durabilityTrace, "evidence", `${journal.transactionId}:evidence`));
207
+ }
208
+ journal = await persistJournal(paths.journal, {
209
+ ...journal,
210
+ state: "evidence-written",
211
+ updatedAt: new Date().toISOString(),
212
+ }, metadataTrace(hooks?.durabilityTrace, "journal", `${journal.transactionId}:evidence-written`));
213
+ await checkpoint(hooks, "evidence-written");
214
+ await writeLock(paths.lockFile, journal.lock, journal.previousLockDigest, metadataTrace(hooks?.durabilityTrace, "lock", `${journal.transactionId}:project-lock`));
215
+ journal = await persistJournal(paths.journal, {
216
+ ...journal,
217
+ state: "lock-written",
218
+ updatedAt: new Date().toISOString(),
219
+ }, metadataTrace(hooks?.durabilityTrace, "journal", `${journal.transactionId}:lock-written`));
220
+ await checkpoint(hooks, "lock-written");
221
+ journal = await persistJournal(paths.journal, {
222
+ ...journal,
223
+ state: "committed",
224
+ updatedAt: new Date().toISOString(),
225
+ }, metadataTrace(hooks?.durabilityTrace, "journal", `${journal.transactionId}:committed`));
226
+ await checkpoint(hooks, "committed");
227
+ await unlink(paths.transactionLock);
228
+ await syncDirectory(paths.platformDirectory, metadataTrace(hooks?.durabilityTrace, "directory", `${journal.transactionId}:unlock`));
229
+ return journal.lock;
230
+ }
231
+ catch (error) {
232
+ if (error instanceof MetadataCrashSignal) {
233
+ throw new AdoptionCommitError("METADATA_RECOVERY_REQUIRED", "Metadata commit was interrupted");
234
+ }
235
+ try {
236
+ await persistJournal(paths.journal, {
237
+ ...journal,
238
+ state: "recovery-required",
239
+ updatedAt: new Date().toISOString(),
240
+ }, metadataTrace(hooks?.durabilityTrace, "journal", `${journal.transactionId}:recovery-required`));
241
+ }
242
+ catch {
243
+ // Preserve the original failure and lock for explicit inspection.
244
+ }
245
+ throw error;
246
+ }
247
+ }
248
+ export async function commitVerifiedAdoptionWithHooks(input) {
249
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
250
+ const transactionRoot = input.transactionRoot === undefined ? projectRoot : await realpath(path.resolve(input.transactionRoot));
251
+ const apply = await inspectTransaction({ projectRoot: transactionRoot, planId: input.plan.planId });
252
+ if (apply?.state !== "applied") {
253
+ throw new AdoptionCommitError("APPLY_NOT_COMPLETED", "The filesystem transaction is not applied");
254
+ }
255
+ let state;
256
+ try {
257
+ state = await captureExpectedProjectState({
258
+ projectRoot,
259
+ expectedAssets: input.expectedAssets ??
260
+ input.release.assets.map((asset) => ({ path: asset.path, digest: asset.digest })),
261
+ });
262
+ }
263
+ catch {
264
+ throw new AdoptionCommitError("PROJECT_STATE_CHANGED", "Managed project assets no longer match the approved plan");
265
+ }
266
+ const results = assertVerification(input.release, input.verificationResults, state.projectStateDigest);
267
+ const evidence = results.map((result) => createEvidence(input.release, result));
268
+ const capabilityLock = {
269
+ capabilityId: input.release.capabilityId,
270
+ version: input.release.version,
271
+ integrity: input.release.integrity,
272
+ consumerProfile: input.release.consumerProfile,
273
+ appliedPlanId: input.plan.planId,
274
+ projectStateDigest: state.projectStateDigest,
275
+ assets: state.assets,
276
+ evidenceIds: evidence.map((item) => item.evidenceId).sort(),
277
+ committedAt: input.committedAt,
278
+ ...(input.plan.packageAdoption === undefined ? {} : { packageAdoption: {
279
+ ...(input.plan.packageAdoption.sourceChannel === undefined ? {} : { sourceChannel: input.plan.packageAdoption.sourceChannel }),
280
+ registryRevisions: input.plan.packageAdoption.registryRevisions.map((item) => ({ ...item })),
281
+ sources: input.plan.packageAdoption.sources.map((item) => ({ ...item })),
282
+ packageJsonDigest: input.plan.packageAdoption.desiredPackageJsonDigest,
283
+ lockfileDigest: input.plan.packageAdoption.desiredLockfileDigest,
284
+ } }),
285
+ };
286
+ const previousCapabilities = input.previousLock?.capabilities ?? [];
287
+ const capabilities = input.previousLock !== undefined && input.plan.action === "adopt"
288
+ ? [...previousCapabilities.filter((item) => item.capabilityId !== input.release.capabilityId), capabilityLock]
289
+ .sort((left, right) => left.capabilityId.localeCompare(right.capabilityId))
290
+ : input.previousLock !== undefined && input.plan.action === "upgrade"
291
+ ? [...previousCapabilities.filter((item) => item.capabilityId !== input.release.capabilityId), capabilityLock]
292
+ .sort((left, right) => left.capabilityId.localeCompare(right.capabilityId))
293
+ : [capabilityLock];
294
+ const lock = {
295
+ schemaVersion: capabilities.some((capability) => capability.packageAdoption !== undefined) ? 2 : 1,
296
+ capabilities,
297
+ };
298
+ parseProjectAdoptionLock(lock);
299
+ const paths = metadataPaths(projectRoot, input.plan.planId);
300
+ await mkdir(paths.platformDirectory, { recursive: true, mode: 0o700 });
301
+ await mkdir(paths.evidenceDirectory, { recursive: true, mode: 0o700 });
302
+ if (await exists(paths.lockFile) && input.previousLock === undefined) {
303
+ const current = parseProjectAdoptionLock(JSON.parse(await readFile(paths.lockFile, "utf8")));
304
+ if (canonicalize(current) === canonicalize(lock))
305
+ return current;
306
+ throw new AdoptionCommitError("PROJECT_STATE_CHANGED", "An incompatible project lock already exists");
307
+ }
308
+ const metadataTransactionId = randomUUID();
309
+ await acquireMetadataLock(paths.transactionLock, {
310
+ planId: input.plan.planId,
311
+ transactionId: metadataTransactionId,
312
+ createdAt: input.committedAt,
313
+ }, metadataTrace(input.hooks?.durabilityTrace, "lock", `${metadataTransactionId}:metadata-lock`));
314
+ if (await exists(paths.transactionDirectory)) {
315
+ await unlink(paths.transactionLock);
316
+ throw new AdoptionCommitError("METADATA_TRANSACTION_ACTIVE", "This plan already has a metadata transaction");
317
+ }
318
+ await mkdir(paths.transactionDirectory, { recursive: true, mode: 0o700 });
319
+ const journal = withJournalDigest({
320
+ schemaVersion: 1,
321
+ planId: input.plan.planId,
322
+ transactionId: metadataTransactionId,
323
+ state: "prepared",
324
+ createdAt: input.committedAt,
325
+ updatedAt: input.committedAt,
326
+ evidence,
327
+ lock,
328
+ ...(input.previousLock === undefined
329
+ ? {}
330
+ : { previousLockDigest: sha256Digest(canonicalize(parseProjectAdoptionLock(input.previousLock))) }),
331
+ });
332
+ await writeJsonAtomic(paths.journal, journal, metadataTrace(input.hooks?.durabilityTrace, "journal", `${metadataTransactionId}:prepared`));
333
+ try {
334
+ await checkpoint(input.hooks, "journal-prepared");
335
+ }
336
+ catch (error) {
337
+ if (error instanceof MetadataCrashSignal) {
338
+ throw new AdoptionCommitError("METADATA_RECOVERY_REQUIRED", "Metadata commit was interrupted");
339
+ }
340
+ throw error;
341
+ }
342
+ return finishMetadataCommit(projectRoot, journal, input.hooks);
343
+ }
344
+ export async function commitVerifiedAdoption(input) {
345
+ return commitVerifiedAdoptionWithHooks(input);
346
+ }
347
+ export async function commitVerifiedRemoval(input) {
348
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
349
+ const transactionRoot = input.transactionRoot === undefined ? projectRoot : await realpath(path.resolve(input.transactionRoot));
350
+ const apply = await inspectTransaction({ projectRoot: transactionRoot, planId: input.plan.planId });
351
+ if (apply?.state !== "applied")
352
+ throw new AdoptionCommitError("APPLY_NOT_COMPLETED", "The filesystem transaction is not applied");
353
+ const target = input.previousLock.capabilities.find((capability) => capability.capabilityId === input.release.capabilityId && capability.version === input.release.version);
354
+ if (target === undefined)
355
+ throw new AdoptionCommitError("PROJECT_STATE_CHANGED", "The removed capability is not present in the project lock");
356
+ const remaining = input.previousLock.capabilities.filter((capability) => capability !== target);
357
+ const unitPrefix = input.plan.packageAdoption?.schemaVersion === 2 && input.plan.packageAdoption.topology.mode === "pnpm-shared-lockfile" ? `${input.plan.packageAdoption.topology.unitRelativeRoot}/` : "";
358
+ const desiredByUnitPath = new Map(input.plan.operations.flatMap((operation) => operation.desiredDigest === undefined || !operation.path.startsWith(unitPrefix) ? [] : [[operation.path.slice(unitPrefix.length), operation.desiredDigest]]));
359
+ const expectedAssets = input.expectedAssets ?? remaining.flatMap((capability) => capability.assets).map((asset) => ({ ...asset, digest: desiredByUnitPath.get(asset.path) ?? asset.digest }));
360
+ const state = await captureExpectedProjectState({ projectRoot, expectedAssets });
361
+ const results = assertVerification(input.release, input.verificationResults, state.projectStateDigest);
362
+ const evidence = results.map((result) => createEvidence(input.release, result));
363
+ const lock = { schemaVersion: remaining.some((capability) => capability.packageAdoption !== undefined) ? 2 : 1, capabilities: remaining };
364
+ parseProjectAdoptionLock(lock);
365
+ const paths = metadataPaths(projectRoot, input.plan.planId);
366
+ await mkdir(paths.platformDirectory, { recursive: true, mode: 0o700 });
367
+ await mkdir(paths.evidenceDirectory, { recursive: true, mode: 0o700 });
368
+ const metadataTransactionId = randomUUID();
369
+ await acquireMetadataLock(paths.transactionLock, { planId: input.plan.planId, transactionId: metadataTransactionId, createdAt: input.committedAt });
370
+ await mkdir(paths.transactionDirectory, { recursive: false, mode: 0o700 });
371
+ const journal = withJournalDigest({ schemaVersion: 1, planId: input.plan.planId, transactionId: metadataTransactionId, state: "prepared", createdAt: input.committedAt, updatedAt: input.committedAt, evidence, lock, previousLockDigest: sha256Digest(canonicalize(parseProjectAdoptionLock(input.previousLock))) });
372
+ await writeJsonAtomic(paths.journal, journal);
373
+ return finishMetadataCommit(projectRoot, journal);
374
+ }
375
+ export async function recoverMetadataCommit(input) {
376
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
377
+ const paths = metadataPaths(projectRoot, input.planId);
378
+ const journal = await readJournal(paths.journal);
379
+ if (journal.state === "committed") {
380
+ if (await exists(paths.transactionLock))
381
+ await unlink(paths.transactionLock);
382
+ return journal.lock;
383
+ }
384
+ if (!(await exists(paths.transactionLock))) {
385
+ await acquireMetadataLock(paths.transactionLock, {
386
+ planId: journal.planId,
387
+ transactionId: journal.transactionId,
388
+ createdAt: journal.createdAt,
389
+ });
390
+ }
391
+ return finishMetadataCommit(projectRoot, journal);
392
+ }
393
+ export async function inspectMetadataCommit(input) {
394
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
395
+ const paths = metadataPaths(projectRoot, input.planId);
396
+ if (!(await exists(paths.journal)))
397
+ return null;
398
+ const journal = await readJournal(paths.journal);
399
+ return { planId: journal.planId, state: journal.state };
400
+ }
401
+ export async function readProjectAdoptionLock(projectRootInput) {
402
+ const projectRoot = await realpath(path.resolve(projectRootInput));
403
+ const target = path.join(projectRoot, ".dyyto", "project-lock.json");
404
+ if (!(await exists(target)))
405
+ return null;
406
+ return parseProjectAdoptionLock(JSON.parse(await readFile(target, "utf8")));
407
+ }
408
+ //# sourceMappingURL=adoption-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adoption-metadata.js","sourceRoot":"","sources":["../src/adoption-metadata.ts"],"names":[],"mappings":"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"}