@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,147 @@
1
+ import { type ErrorObject } from "ajv/dist/2020.js";
2
+ export type ExampleRecipe = {
3
+ schemaVersion: 1;
4
+ recipeId: string;
5
+ version: string;
6
+ integrity: string;
7
+ title: string;
8
+ locale: "zh-CN";
9
+ rootProfile: {
10
+ capabilityId: string;
11
+ version: string;
12
+ };
13
+ capabilities: Array<{
14
+ capabilityId: string;
15
+ version: string;
16
+ channel: "development";
17
+ }>;
18
+ expectedEntrypoint: string;
19
+ verifiers: string[];
20
+ manualAcceptance: string[];
21
+ cleanup: {
22
+ ownedStateDirectories: string[];
23
+ };
24
+ };
25
+ export declare const exampleRecipeSchema: {
26
+ readonly $id: "https://schemas.dyyto.dev/platform/example-recipe-v1.json";
27
+ readonly type: "object";
28
+ readonly additionalProperties: false;
29
+ readonly required: readonly ["schemaVersion", "recipeId", "version", "integrity", "title", "locale", "rootProfile", "capabilities", "expectedEntrypoint", "verifiers", "manualAcceptance", "cleanup"];
30
+ readonly properties: {
31
+ readonly schemaVersion: {
32
+ readonly const: 1;
33
+ };
34
+ readonly recipeId: {
35
+ readonly type: "string";
36
+ readonly pattern: "^[a-z0-9]+(?:[.-][a-z0-9]+)*$";
37
+ };
38
+ readonly version: {
39
+ readonly type: "string";
40
+ readonly minLength: 1;
41
+ readonly maxLength: 128;
42
+ };
43
+ readonly integrity: {
44
+ readonly type: "string";
45
+ readonly pattern: "^sha256:[a-f0-9]{64}$";
46
+ };
47
+ readonly title: {
48
+ readonly type: "string";
49
+ readonly minLength: 1;
50
+ readonly maxLength: 80;
51
+ };
52
+ readonly locale: {
53
+ readonly const: "zh-CN";
54
+ };
55
+ readonly rootProfile: {
56
+ readonly type: "object";
57
+ readonly additionalProperties: false;
58
+ readonly required: readonly ["capabilityId", "version"];
59
+ readonly properties: {
60
+ readonly capabilityId: {
61
+ readonly type: "string";
62
+ readonly pattern: "^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$";
63
+ };
64
+ readonly version: {
65
+ readonly type: "string";
66
+ readonly minLength: 1;
67
+ readonly maxLength: 128;
68
+ };
69
+ };
70
+ };
71
+ readonly capabilities: {
72
+ readonly type: "array";
73
+ readonly minItems: 1;
74
+ readonly maxItems: 16;
75
+ readonly items: {
76
+ readonly type: "object";
77
+ readonly additionalProperties: false;
78
+ readonly required: readonly ["capabilityId", "version", "channel"];
79
+ readonly properties: {
80
+ readonly capabilityId: {
81
+ readonly type: "string";
82
+ readonly pattern: "^[a-z][a-z0-9]*(?:[.-][a-z0-9]+)*$";
83
+ };
84
+ readonly version: {
85
+ readonly type: "string";
86
+ readonly minLength: 1;
87
+ readonly maxLength: 128;
88
+ };
89
+ readonly channel: {
90
+ readonly const: "development";
91
+ };
92
+ };
93
+ };
94
+ };
95
+ readonly expectedEntrypoint: {
96
+ readonly type: "string";
97
+ readonly pattern: "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[^\\u0000]+$";
98
+ readonly maxLength: 240;
99
+ };
100
+ readonly verifiers: {
101
+ readonly type: "array";
102
+ readonly minItems: 1;
103
+ readonly maxItems: 16;
104
+ readonly uniqueItems: true;
105
+ readonly items: {
106
+ readonly type: "string";
107
+ readonly pattern: "^[a-z0-9]+(?:[.-][a-z0-9]+)*$";
108
+ };
109
+ };
110
+ readonly manualAcceptance: {
111
+ readonly type: "array";
112
+ readonly minItems: 1;
113
+ readonly maxItems: 32;
114
+ readonly items: {
115
+ readonly type: "string";
116
+ readonly minLength: 1;
117
+ readonly maxLength: 240;
118
+ };
119
+ };
120
+ readonly cleanup: {
121
+ readonly type: "object";
122
+ readonly additionalProperties: false;
123
+ readonly required: readonly ["ownedStateDirectories"];
124
+ readonly properties: {
125
+ readonly ownedStateDirectories: {
126
+ readonly type: "array";
127
+ readonly maxItems: 8;
128
+ readonly uniqueItems: true;
129
+ readonly items: {
130
+ readonly type: "string";
131
+ readonly pattern: "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[^\\u0000]+$";
132
+ readonly maxLength: 240;
133
+ };
134
+ };
135
+ };
136
+ };
137
+ };
138
+ };
139
+ export declare class ExampleRecipeError extends Error {
140
+ readonly code: "EXAMPLE_RECIPE_INVALID" | "EXAMPLE_RECIPE_INTEGRITY_MISMATCH";
141
+ readonly issues: ErrorObject[];
142
+ constructor(code: "EXAMPLE_RECIPE_INVALID" | "EXAMPLE_RECIPE_INTEGRITY_MISMATCH", issues?: ErrorObject[]);
143
+ }
144
+ export declare function calculateExampleRecipeIntegrity(recipe: Omit<ExampleRecipe, "integrity">): string;
145
+ export declare function parseExampleRecipe(value: unknown): ExampleRecipe;
146
+ export declare function loadExampleRecipe(directoryInput: string): Promise<ExampleRecipe>;
147
+ //# sourceMappingURL=example-recipe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-recipe.d.ts","sourceRoot":"","sources":["../src/example-recipe.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI7D,MAAM,MAAM,aAAa,GAAG;IAC1B,aAAa,EAAE,CAAC,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,YAAY,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;IACvF,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE;QAAE,qBAAqB,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAC9C,CAAC;AAKF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAatB,CAAC;AAGX,qBAAa,kBAAmB,SAAQ,KAAK;IAAe,QAAQ,CAAC,IAAI,EAAE,wBAAwB,GAAG,mCAAmC;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE;gBAApG,IAAI,EAAE,wBAAwB,GAAG,mCAAmC,EAAW,MAAM,GAAE,WAAW,EAAO;CAAoB;AAClM,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,MAAM,CAA+C;AAChJ,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAMhE;AACD,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAQtF"}
@@ -0,0 +1,58 @@
1
+ import { readFile, realpath } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { Ajv2020 } from "ajv/dist/2020.js";
4
+ import { capabilityIdPattern, sha256Pattern } from "./contracts.js";
5
+ import { canonicalize, sha256Digest } from "./integrity.js";
6
+ const identityPattern = "^[a-z0-9]+(?:[.-][a-z0-9]+)*$";
7
+ const relativePathPattern = "^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*\\\\)[^\\u0000]+$";
8
+ export const exampleRecipeSchema = {
9
+ $id: "https://schemas.dyyto.dev/platform/example-recipe-v1.json",
10
+ type: "object", additionalProperties: false,
11
+ required: ["schemaVersion", "recipeId", "version", "integrity", "title", "locale", "rootProfile", "capabilities", "expectedEntrypoint", "verifiers", "manualAcceptance", "cleanup"],
12
+ properties: {
13
+ schemaVersion: { const: 1 }, recipeId: { type: "string", pattern: identityPattern }, version: { type: "string", minLength: 1, maxLength: 128 }, integrity: { type: "string", pattern: sha256Pattern }, title: { type: "string", minLength: 1, maxLength: 80 }, locale: { const: "zh-CN" },
14
+ rootProfile: { type: "object", additionalProperties: false, required: ["capabilityId", "version"], properties: { capabilityId: { type: "string", pattern: capabilityIdPattern }, version: { type: "string", minLength: 1, maxLength: 128 } } },
15
+ capabilities: { type: "array", minItems: 1, maxItems: 16, items: { type: "object", additionalProperties: false, required: ["capabilityId", "version", "channel"], properties: { capabilityId: { type: "string", pattern: capabilityIdPattern }, version: { type: "string", minLength: 1, maxLength: 128 }, channel: { const: "development" } } } },
16
+ expectedEntrypoint: { type: "string", pattern: relativePathPattern, maxLength: 240 },
17
+ verifiers: { type: "array", minItems: 1, maxItems: 16, uniqueItems: true, items: { type: "string", pattern: identityPattern } },
18
+ manualAcceptance: { type: "array", minItems: 1, maxItems: 32, items: { type: "string", minLength: 1, maxLength: 240 } },
19
+ cleanup: { type: "object", additionalProperties: false, required: ["ownedStateDirectories"], properties: { ownedStateDirectories: { type: "array", maxItems: 8, uniqueItems: true, items: { type: "string", pattern: relativePathPattern, maxLength: 240 } } } },
20
+ },
21
+ };
22
+ const validate = new Ajv2020({ allErrors: true, strict: true }).compile(exampleRecipeSchema);
23
+ export class ExampleRecipeError extends Error {
24
+ code;
25
+ issues;
26
+ constructor(code, issues = []) {
27
+ super(code);
28
+ this.code = code;
29
+ this.issues = issues;
30
+ }
31
+ }
32
+ export function calculateExampleRecipeIntegrity(recipe) { return sha256Digest(canonicalize(recipe)); }
33
+ export function parseExampleRecipe(value) {
34
+ if (!validate(value))
35
+ throw new ExampleRecipeError("EXAMPLE_RECIPE_INVALID", validate.errors ?? []);
36
+ const recipe = value;
37
+ const identities = [recipe.rootProfile.capabilityId, ...recipe.capabilities.map((item) => item.capabilityId)];
38
+ if (new Set(identities).size !== identities.length || recipe.capabilities.some((item) => item.version.includes("workspace:") || item.capabilityId.includes("ai-education-poc")))
39
+ throw new ExampleRecipeError("EXAMPLE_RECIPE_INVALID");
40
+ return recipe;
41
+ }
42
+ export async function loadExampleRecipe(directoryInput) {
43
+ const directory = await realpath(path.resolve(directoryInput));
44
+ let recipe;
45
+ try {
46
+ recipe = parseExampleRecipe(JSON.parse(await readFile(path.join(directory, "recipe.json"), "utf8")));
47
+ }
48
+ catch (error) {
49
+ if (error instanceof ExampleRecipeError)
50
+ throw error;
51
+ throw new ExampleRecipeError("EXAMPLE_RECIPE_INVALID");
52
+ }
53
+ const { integrity, ...content } = recipe;
54
+ if (calculateExampleRecipeIntegrity(content) !== integrity)
55
+ throw new ExampleRecipeError("EXAMPLE_RECIPE_INTEGRITY_MISMATCH");
56
+ return recipe;
57
+ }
58
+ //# sourceMappingURL=example-recipe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-recipe.js","sourceRoot":"","sources":["../src/example-recipe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { LoadedCapabilityRelease, ProjectAdoptionLock } from "./adoption-contracts.js";
2
+ import type { PackageDeliveryReceipt, RegistryConfigRelease, RegistryEndpointBinding } from "./catalog-source.js";
3
+ import { type PackageArtifactInspection, type PackageLockResolution } from "./package-adoption.js";
4
+ import type { PackageAdoptionTopology } from "./workspace-topology.js";
5
+ import type { ChangePlan, ProjectManifest } from "./contracts.js";
6
+ import type { ResolutionJobEvidence } from "./resolution-evidence.js";
7
+ export declare class FeatureSelectionError extends Error {
8
+ readonly code: "CAPABILITY_ALREADY_SELECTED" | "CAPABILITY_DEPENDENCY_UNSATISFIED" | "CAPABILITY_KIND_UNSUPPORTED" | "CAPABILITY_RELEASE_VERSION_UNSUPPORTED" | "CAPABILITY_PACKAGE_SOURCE_INVALID";
9
+ constructor(code: "CAPABILITY_ALREADY_SELECTED" | "CAPABILITY_DEPENDENCY_UNSATISFIED" | "CAPABILITY_KIND_UNSUPPORTED" | "CAPABILITY_RELEASE_VERSION_UNSUPPORTED" | "CAPABILITY_PACKAGE_SOURCE_INVALID", message: string);
10
+ }
11
+ export declare function planAssetOnlyFeatureRemoval(input: {
12
+ projectRoot: string;
13
+ manifest: unknown;
14
+ release: LoadedCapabilityRelease;
15
+ currentLock: ProjectAdoptionLock;
16
+ generatedAt: string;
17
+ expiresAt: string;
18
+ }): Promise<{
19
+ plan: ChangePlan;
20
+ manifest: ProjectManifest;
21
+ desiredContents: Map<string, Uint8Array<ArrayBufferLike>>;
22
+ transactionRoot: string;
23
+ removedSources: readonly [];
24
+ }>;
25
+ export declare function planFeatureAdoption(input: {
26
+ projectRoot: string;
27
+ manifest: unknown;
28
+ release: LoadedCapabilityRelease;
29
+ currentLock: ProjectAdoptionLock;
30
+ generatedAt: string;
31
+ expiresAt: string;
32
+ packageChannel?: "production" | "development";
33
+ packageSource?: {
34
+ registryConfigs: readonly RegistryConfigRelease[];
35
+ endpointBindings: readonly RegistryEndpointBinding[];
36
+ receipts: readonly PackageDeliveryReceipt[];
37
+ inspections: readonly PackageArtifactInspection[];
38
+ lockResolution: PackageLockResolution;
39
+ resolutionEvidence?: ResolutionJobEvidence;
40
+ resolutionWorkerReleaseId?: string;
41
+ topology?: PackageAdoptionTopology;
42
+ currentLockfile?: Uint8Array;
43
+ preservedImporterDigests?: readonly Readonly<{
44
+ importerId: string;
45
+ preimageDigest: string;
46
+ desiredDigest: string;
47
+ }>[];
48
+ };
49
+ }): Promise<{
50
+ plan: ChangePlan;
51
+ manifest: ProjectManifest;
52
+ desiredContents: ReadonlyMap<string, Uint8Array>;
53
+ transactionRoot: string;
54
+ dependency: {
55
+ profile: string;
56
+ satisfied: true;
57
+ };
58
+ }>;
59
+ //# sourceMappingURL=feature-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-planner.d.ts","sourceRoot":"","sources":["../src/feature-planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA6B,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACvH,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAClH,OAAO,EAA8L,KAAK,yBAAyB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC/R,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAiB,eAAe,EAAkB,MAAM,gBAAgB,CAAC;AAKjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAItE,qBAAa,qBAAsB,SAAQ,KAAK;IAE5C,QAAQ,CAAC,IAAI,EACT,6BAA6B,GAC7B,mCAAmC,GACnC,6BAA6B,GAC7B,wCAAwC,GACxC,mCAAmC;gBAL9B,IAAI,EACT,6BAA6B,GAC7B,mCAAmC,GACnC,6BAA6B,GAC7B,wCAAwC,GACxC,mCAAmC,EACvC,OAAO,EAAE,MAAM;CAElB;AAED,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,uBAAuB,CAAC;IAAC,WAAW,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE;;;;;;GAS9M;AAYD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,uBAAuB,CAAC;IACjC,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC;IAC9C,aAAa,CAAC,EAAE;QACd,eAAe,EAAE,SAAS,qBAAqB,EAAE,CAAC;QAClD,gBAAgB,EAAE,SAAS,uBAAuB,EAAE,CAAC;QACrD,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;QAC5C,WAAW,EAAE,SAAS,yBAAyB,EAAE,CAAC;QAClD,cAAc,EAAE,qBAAqB,CAAC;QACtC,kBAAkB,CAAC,EAAE,qBAAqB,CAAC;QAC3C,yBAAyB,CAAC,EAAE,MAAM,CAAC;QACnC,QAAQ,CAAC,EAAE,uBAAuB,CAAC;QACnC,eAAe,CAAC,EAAE,UAAU,CAAC;QAC7B,wBAAwB,CAAC,EAAE,SAAS,QAAQ,CAAC;YAAE,UAAU,EAAE,MAAM,CAAC;YAAC,cAAc,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC,EAAE,CAAC;KACvH,CAAC;CACH,GAAG,OAAO,CAAC;IACV,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,eAAe,CAAC;IAC1B,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC;CAClD,CAAC,CAkGD"}
@@ -0,0 +1,160 @@
1
+ import { readFile, realpath } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { buildDevelopmentPackageAdoptionPlan, buildPackageAdoptionPlan, buildWorkspaceDevelopmentPackageAdoptionPlan, buildWorkspacePackageAdoptionPlan, packageAdoptionFacts, PackageAdoptionError } from "./package-adoption.js";
4
+ import { sha256Digest } from "./integrity.js";
5
+ import { renderMarkdownManagedRegion } from "./managed-region.js";
6
+ import { buildChangePlan } from "./planner.js";
7
+ import { parseProjectManifest } from "./schemas.js";
8
+ import { renderApplicationConfigContract } from "./application-config-contract.js";
9
+ import { renderApplicationConfigBinding } from "./application-config-binding.js";
10
+ export class FeatureSelectionError extends Error {
11
+ code;
12
+ constructor(code, message) {
13
+ super(message);
14
+ this.code = code;
15
+ }
16
+ }
17
+ export async function planAssetOnlyFeatureRemoval(input) {
18
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
19
+ const manifest = parseProjectManifest(input.manifest);
20
+ const release = input.release.release;
21
+ const target = input.currentLock.capabilities.find((item) => item.capabilityId === release.capabilityId && item.version === release.version);
22
+ if (!target || target.packageAdoption !== undefined)
23
+ throw new FeatureSelectionError("CAPABILITY_RELEASE_VERSION_UNSUPPORTED", "Asset-only removal requires an adopted Capability without package ownership");
24
+ const nextManifest = parseProjectManifest({ ...manifest, capabilities: manifest.capabilities.filter((item) => item.capabilityId !== release.capabilityId) });
25
+ const manifestBytes = Buffer.from(`${JSON.stringify(nextManifest, null, 2)}\n`);
26
+ const currentManifest = await observe(projectRoot, "project-capabilities.json");
27
+ if (!currentManifest.exists || currentManifest.digest === undefined)
28
+ throw new FeatureSelectionError("CAPABILITY_DEPENDENCY_UNSATISFIED", "Project manifest is unavailable");
29
+ const changes = [{ path: "project-capabilities.json", kind: "replace", ownership: "owned-file", baseDigest: currentManifest.digest, desiredDigest: sha256Digest(manifestBytes) }, ...target.assets.map((asset) => ({ path: asset.path, kind: "remove", ownership: asset.ownership ?? "owned-file", baseDigest: asset.digest }))];
30
+ const observedAssets = await Promise.all(changes.map((change) => observe(projectRoot, change.path)));
31
+ const capability = { schemaVersion: 1, capabilityId: release.capabilityId, version: release.version, integrity: release.integrity, assets: target.assets.map((asset) => ({ path: asset.path, ownership: asset.ownership ?? "owned-file", desiredDigest: asset.digest })), verifiers: release.verifiers.map((item) => ({ id: item.id, kind: "file-digest" })) };
32
+ const plan = buildChangePlan({ action: "remove", capability, changes, observedAssets, generatedAt: input.generatedAt, expiresAt: input.expiresAt });
33
+ return { plan, manifest: nextManifest, desiredContents: new Map([["project-capabilities.json", manifestBytes]]), transactionRoot: projectRoot, removedSources: [] };
34
+ }
35
+ async function observe(projectRoot, assetPath) {
36
+ try {
37
+ const bytes = await readFile(path.join(projectRoot, ...assetPath.split("/")));
38
+ return { path: assetPath, exists: true, digest: sha256Digest(bytes) };
39
+ }
40
+ catch (error) {
41
+ if (error.code === "ENOENT")
42
+ return { path: assetPath, exists: false };
43
+ throw error;
44
+ }
45
+ }
46
+ export async function planFeatureAdoption(input) {
47
+ if (input.release.release.schemaVersion === 2 && input.release.release.packageSources.length > 0 && input.packageSource === undefined) {
48
+ throw new FeatureSelectionError("CAPABILITY_RELEASE_VERSION_UNSUPPORTED", "Capability Release v2 requires verified package source facts");
49
+ }
50
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
51
+ const manifest = parseProjectManifest(input.manifest);
52
+ const release = input.release.release;
53
+ const topology = input.packageSource?.topology;
54
+ const transactionRoot = topology?.transactionRoot ?? projectRoot;
55
+ const prefix = (assetPath) => topology?.mode === "pnpm-shared-lockfile" ? `${topology.unitRelativeRoot}/${assetPath}` : assetPath;
56
+ if (release.kind !== "engineering-feature" || release.consumerProfile !== "any-project") {
57
+ throw new FeatureSelectionError("CAPABILITY_KIND_UNSUPPORTED", "Only an addable engineering feature can use this lifecycle");
58
+ }
59
+ if (manifest.capabilities.some((item) => item.capabilityId === release.capabilityId)) {
60
+ throw new FeatureSelectionError("CAPABILITY_ALREADY_SELECTED", "The capability is already selected by this project");
61
+ }
62
+ const manifestProfile = manifest.profile?.id;
63
+ const profile = manifestProfile === "typescript-library" ? "blank-typescript-library" : manifestProfile;
64
+ const requiredProfiles = release.dependencies?.profiles ?? [];
65
+ const lockedProfile = input.currentLock.capabilities.find((item) => item.consumerProfile === profile);
66
+ if (profile === undefined || !requiredProfiles.includes(profile) || lockedProfile === undefined) {
67
+ throw new FeatureSelectionError("CAPABILITY_DEPENDENCY_UNSATISFIED", "The project profile does not satisfy this capability dependency");
68
+ }
69
+ const requiredCapabilities = release.dependencies?.capabilities ?? [];
70
+ if (requiredCapabilities.some((capabilityId) => !manifest.capabilities.some((item) => item.capabilityId === capabilityId) || !input.currentLock.capabilities.some((item) => item.capabilityId === capabilityId))) {
71
+ throw new FeatureSelectionError("CAPABILITY_DEPENDENCY_UNSATISFIED", "A required project capability is not adopted and verified");
72
+ }
73
+ const nextManifest = parseProjectManifest({
74
+ ...manifest,
75
+ capabilities: [...manifest.capabilities, { capabilityId: release.capabilityId, version: release.version }],
76
+ });
77
+ const manifestPath = prefix("project-capabilities.json");
78
+ const manifestBytes = Buffer.from(`${JSON.stringify(nextManifest, null, 2)}\n`);
79
+ const currentManifest = await observe(transactionRoot, manifestPath);
80
+ if (!currentManifest.exists || currentManifest.digest === undefined) {
81
+ throw new FeatureSelectionError("CAPABILITY_DEPENDENCY_UNSATISFIED", "The project manifest is unavailable");
82
+ }
83
+ const changes = [{ path: manifestPath, kind: "replace", ownership: "owned-file", baseDigest: currentManifest.digest, desiredDigest: sha256Digest(manifestBytes) }];
84
+ const desiredContents = new Map([[manifestPath, manifestBytes]]);
85
+ let packageAdoption;
86
+ if (release.schemaVersion === 2 && release.packageSources.length > 0) {
87
+ if (input.packageSource === undefined)
88
+ throw new FeatureSelectionError("CAPABILITY_RELEASE_VERSION_UNSUPPORTED", "Capability Release v2 requires verified package source facts");
89
+ let packageJson;
90
+ try {
91
+ packageJson = await readFile(path.join(projectRoot, "package.json"));
92
+ }
93
+ catch {
94
+ throw new FeatureSelectionError("CAPABILITY_PACKAGE_SOURCE_INVALID", "项目 package.json 不可用,无法生成包采用计划");
95
+ }
96
+ try {
97
+ const currentLockfile = input.packageSource.currentLockfile ?? await readFile(path.join(projectRoot, "pnpm-lock.yaml")).catch((error) => error.code === "ENOENT" ? undefined : Promise.reject(error));
98
+ const packageTopology = input.packageSource.topology ?? { schemaVersion: 1, mode: "standalone", transactionRoot: projectRoot, unitRoot: projectRoot, unitRelativeRoot: ".", unitImporterId: ".", lockfilePath: "pnpm-lock.yaml" };
99
+ const workspace = packageTopology.mode === "pnpm-shared-lockfile";
100
+ const topologyFacts = { mode: packageTopology.mode, unitRelativeRoot: packageTopology.unitRelativeRoot, unitImporterId: packageTopology.unitImporterId, lockfilePath: packageTopology.lockfilePath, ...(packageTopology.workspaceManifestPath ? { workspaceManifestPath: packageTopology.workspaceManifestPath, workspaceManifestDigest: packageTopology.workspaceManifestDigest } : {}) };
101
+ const sourceFacts = { registryConfigs: input.packageSource.registryConfigs, endpointBindings: input.packageSource.endpointBindings, receipts: input.packageSource.receipts, inspections: input.packageSource.inspections };
102
+ if (workspace && (!input.packageSource.resolutionEvidence || !input.packageSource.resolutionWorkerReleaseId))
103
+ throw new PackageAdoptionError("PACKAGE_SOURCE_POLICY_VIOLATION");
104
+ const packagePlan = workspace
105
+ ? (input.packageChannel === "development" ? buildWorkspaceDevelopmentPackageAdoptionPlan : buildWorkspacePackageAdoptionPlan)({ release: release, ...sourceFacts, consumerProfile: profile, packageJson, currentLockfile: currentLockfile, generatedAt: input.generatedAt, expiresAt: input.expiresAt, topology: topologyFacts, preservedImporterDigests: input.packageSource.preservedImporterDigests ?? [], resolutionEvidence: input.packageSource.resolutionEvidence, resolutionWorkerReleaseId: input.packageSource.resolutionWorkerReleaseId })
106
+ : (input.packageChannel === "development" ? buildDevelopmentPackageAdoptionPlan : buildPackageAdoptionPlan)({ release: release, ...sourceFacts, lockResolution: input.packageSource.lockResolution, consumerProfile: profile, packageJson, ...(currentLockfile === undefined ? {} : { currentLockfile }), generatedAt: input.generatedAt, expiresAt: input.expiresAt });
107
+ packageAdoption = packageAdoptionFacts(packagePlan);
108
+ changes.push({ path: prefix("package.json"), kind: "replace", ownership: "owned-file", baseDigest: packagePlan.packageJsonPreimageDigest, desiredDigest: packagePlan.desiredPackageJsonDigest });
109
+ desiredContents.set(prefix("package.json"), packagePlan.desiredPackageJson);
110
+ changes.push({ path: packageTopology.lockfilePath, kind: currentLockfile === undefined ? "create" : "replace", ownership: "owned-file", ...(currentLockfile === undefined ? {} : { baseDigest: sha256Digest(currentLockfile) }), desiredDigest: packagePlan.desiredLockfileDigest });
111
+ desiredContents.set(packageTopology.lockfilePath, packagePlan.desiredLockfile);
112
+ }
113
+ catch (error) {
114
+ if (error instanceof PackageAdoptionError)
115
+ throw new FeatureSelectionError("CAPABILITY_PACKAGE_SOURCE_INVALID", error.code);
116
+ throw error;
117
+ }
118
+ }
119
+ for (const asset of release.assets) {
120
+ const fragment = input.release.contents.get(asset.path);
121
+ if (fragment === undefined)
122
+ throw new FeatureSelectionError("CAPABILITY_KIND_UNSUPPORTED", "Capability asset content is unavailable");
123
+ const renderedFragment = asset.renderer === "application-config-contract-v1"
124
+ ? renderApplicationConfigContract(manifest)
125
+ : asset.renderer === "application-config-binding-v1"
126
+ ? renderApplicationConfigBinding(manifest)
127
+ : fragment;
128
+ if (asset.ownership === "managed-region") {
129
+ if (asset.regionId === undefined)
130
+ throw new FeatureSelectionError("CAPABILITY_KIND_UNSUPPORTED", "Managed region identity is unavailable");
131
+ let source;
132
+ try {
133
+ source = await readFile(path.join(projectRoot, ...asset.path.split("/")));
134
+ }
135
+ catch {
136
+ throw new FeatureSelectionError("CAPABILITY_DEPENDENCY_UNSATISFIED", "The managed shared file is unavailable");
137
+ }
138
+ const rendered = Buffer.from(renderMarkdownManagedRegion({ source: source.toString("utf8"), regionId: asset.regionId, content: Buffer.from(renderedFragment).toString("utf8") }));
139
+ changes.push({ path: prefix(asset.path), kind: "merge", ownership: "managed-region", regionId: asset.regionId, baseDigest: sha256Digest(source), desiredDigest: sha256Digest(rendered) });
140
+ desiredContents.set(prefix(asset.path), rendered);
141
+ }
142
+ else {
143
+ const current = await observe(projectRoot, asset.path);
144
+ if (asset.ownership === "seed-file" && current.exists) {
145
+ const bytes = await readFile(path.join(projectRoot, ...asset.path.split("/")));
146
+ changes.push({ path: prefix(asset.path), kind: "create", ownership: "seed-file", desiredDigest: sha256Digest(bytes) });
147
+ desiredContents.set(prefix(asset.path), bytes);
148
+ }
149
+ else {
150
+ changes.push({ path: prefix(asset.path), kind: "create", ownership: asset.ownership, desiredDigest: sha256Digest(renderedFragment) });
151
+ desiredContents.set(prefix(asset.path), renderedFragment);
152
+ }
153
+ }
154
+ }
155
+ const observedAssets = await Promise.all(changes.map((change) => observe(transactionRoot, change.path)));
156
+ const capability = { schemaVersion: 1, capabilityId: release.capabilityId, version: release.version, integrity: release.integrity, assets: changes.filter((change) => change.path !== manifestPath && change.path !== topology?.lockfilePath).map((change) => ({ path: topology?.mode === "pnpm-shared-lockfile" ? change.path.slice(topology.unitRelativeRoot.length + 1) : change.path, ownership: change.ownership, desiredDigest: change.desiredDigest })), verifiers: release.verifiers.map((item) => ({ id: item.id, kind: "file-digest" })) };
157
+ const plan = buildChangePlan({ action: "adopt", capability, changes, observedAssets, generatedAt: input.generatedAt, expiresAt: input.expiresAt, ...(packageAdoption === undefined ? {} : { packageAdoption }) });
158
+ return { plan, manifest: nextManifest, desiredContents, transactionRoot, dependency: { profile, satisfied: true } };
159
+ }
160
+ //# sourceMappingURL=feature-planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-planner.js","sourceRoot":"","sources":["../src/feature-planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ import type { ChangePlan } from "./contracts.js";
2
+ import type { DurabilityTraceSink } from "./durability-trace.js";
3
+ export type { DurabilityOperation, DurabilityPathCategory, DurabilityPhase, DurabilityResult, DurabilityTraceEvent, DurabilityTraceSink, } from "./durability-trace.js";
4
+ export type TransactionState = "preparing" | "prepared" | "applying" | "applied" | "recovery-required" | "recovering" | "recovered";
5
+ export type JournalOperation = {
6
+ index: number;
7
+ path: string;
8
+ kind: "create" | "replace" | "merge" | "remove";
9
+ before: {
10
+ kind: "absent";
11
+ } | {
12
+ kind: "present";
13
+ digest: string;
14
+ mode: number;
15
+ preimageDigest: string;
16
+ };
17
+ desiredDigest?: string;
18
+ status: "pending" | "applied" | "restored";
19
+ };
20
+ export type TransactionJournal = {
21
+ schemaVersion: 1;
22
+ transactionId: string;
23
+ planId: string;
24
+ approvedPlanId: string;
25
+ projectRootDigest: string;
26
+ state: TransactionState;
27
+ createdAt: string;
28
+ updatedAt: string;
29
+ operations: JournalOperation[];
30
+ failure?: {
31
+ code: string;
32
+ operationIndex?: number;
33
+ };
34
+ journalDigest: string;
35
+ };
36
+ export type TransactionLock = {
37
+ schemaVersion: 1;
38
+ transactionId: string;
39
+ planId: string;
40
+ startedAt: string;
41
+ nonce: string;
42
+ };
43
+ declare const preparedTransactionBrand: unique symbol;
44
+ export type PreparedTransaction = {
45
+ readonly [preparedTransactionBrand]: true;
46
+ readonly projectRoot: string;
47
+ readonly plan: ChangePlan;
48
+ readonly transactionId: string;
49
+ };
50
+ export type PrepareApplyInput = {
51
+ projectRoot: string;
52
+ plan: ChangePlan;
53
+ approvedPlanId: string;
54
+ desiredContents: ReadonlyMap<string, Uint8Array>;
55
+ now: string;
56
+ limits?: {
57
+ maxFileBytes?: number;
58
+ maxTransactionBytes?: number;
59
+ };
60
+ };
61
+ export type TransactionSnapshot = {
62
+ transactionId: string;
63
+ planId: string;
64
+ state: TransactionState;
65
+ operations: ReadonlyArray<JournalOperation>;
66
+ };
67
+ export type ApplyCheckpoint = "prepared" | "temporary-file-synced" | "target-renamed-pending-directory-sync" | "target-renamed" | "operation-applied" | "operation-journaled" | "applied";
68
+ export type ApplyHooks = {
69
+ onCheckpoint?: (checkpoint: ApplyCheckpoint, operationIndex?: number) => void | Promise<void>;
70
+ durabilityTrace?: DurabilityTraceSink;
71
+ };
72
+ export type PrepareCheckpoint = "lock-created" | "preimage-written-pending-directory-sync" | "preimage-persisted" | "journal-prepared";
73
+ export type PrepareHooks = {
74
+ onCheckpoint?: (checkpoint: PrepareCheckpoint, operationIndex?: number) => void | Promise<void>;
75
+ durabilityTrace?: DurabilityTraceSink;
76
+ };
77
+ //# sourceMappingURL=filesystem-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-contracts.d.ts","sourceRoot":"","sources":["../src/filesystem-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=filesystem-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-contracts.js","sourceRoot":"","sources":["../src/filesystem-contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import type { ApplyHooks, PrepareApplyInput, PreparedTransaction, PrepareHooks, TransactionSnapshot } from "./filesystem-contracts.js";
2
+ export type FilesystemTransactionErrorCode = "PLAN_APPROVAL_MISMATCH" | "PLAN_EXPIRED" | "PLAN_CONTENT_MISMATCH" | "PLAN_PRECONDITION_FAILED" | "PROJECT_ROOT_UNSAFE" | "PATH_SYMLINK_UNSAFE" | "OPERATION_UNSUPPORTED" | "TRANSACTION_ACTIVE" | "PREIMAGE_LIMIT_EXCEEDED" | "DESIRED_CONTENT_MISMATCH" | "APPLY_INTERRUPTED" | "RECOVERY_REQUIRED" | "JOURNAL_CORRUPTED" | "RECOVERY_CONFLICT";
3
+ export declare class FilesystemTransactionError extends Error {
4
+ readonly code: FilesystemTransactionErrorCode;
5
+ readonly relativePath?: string | undefined;
6
+ readonly operationIndex?: number | undefined;
7
+ constructor(code: FilesystemTransactionErrorCode, message: string, relativePath?: string | undefined, operationIndex?: number | undefined);
8
+ }
9
+ export declare function prepareApplyWithHooks(input: PrepareApplyInput, hooks?: PrepareHooks): Promise<PreparedTransaction>;
10
+ export declare function prepareApply(input: PrepareApplyInput): Promise<PreparedTransaction>;
11
+ export declare function applyPreparedWithHooks(prepared: PreparedTransaction, hooks?: ApplyHooks): Promise<TransactionSnapshot>;
12
+ export declare function applyPrepared(prepared: PreparedTransaction): Promise<TransactionSnapshot>;
13
+ export declare function inspectTransaction(input: {
14
+ projectRoot: string;
15
+ planId: string;
16
+ }): Promise<TransactionSnapshot | null>;
17
+ export declare function recoverTransactionWithHooks(input: {
18
+ projectRoot: string;
19
+ planId: string;
20
+ now: string;
21
+ hooks?: ApplyHooks;
22
+ approvedConflicts?: readonly Readonly<{
23
+ path: string;
24
+ currentDigest: string;
25
+ }>[];
26
+ }): Promise<TransactionSnapshot>;
27
+ export declare function recoverTransaction(input: {
28
+ projectRoot: string;
29
+ planId: string;
30
+ now: string;
31
+ }): Promise<TransactionSnapshot>;
32
+ export declare function recoverTransactionWithApprovedConflicts(input: {
33
+ projectRoot: string;
34
+ planId: string;
35
+ now: string;
36
+ approvedConflicts: readonly Readonly<{
37
+ path: string;
38
+ currentDigest: string;
39
+ }>[];
40
+ }): Promise<TransactionSnapshot>;
41
+ /**
42
+ * Rolls back a fully applied transaction when a required external adoption step
43
+ * (for example package installation) fails. The same preimages and drift checks
44
+ * used by crash recovery apply; user changes are never overwritten.
45
+ */
46
+ export declare function rollbackAppliedTransaction(input: {
47
+ projectRoot: string;
48
+ planId: string;
49
+ now: string;
50
+ failureCode: string;
51
+ }): Promise<TransactionSnapshot>;
52
+ //# sourceMappingURL=filesystem-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-transaction.d.ts","sourceRoot":"","sources":["../src/filesystem-transaction.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,UAAU,EAEV,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EAGZ,mBAAmB,EACpB,MAAM,2BAA2B,CAAC;AAmCnC,MAAM,MAAM,8BAA8B,GACtC,wBAAwB,GACxB,cAAc,GACd,uBAAuB,GACvB,0BAA0B,GAC1B,qBAAqB,GACrB,qBAAqB,GACrB,uBAAuB,GACvB,oBAAoB,GACpB,yBAAyB,GACzB,0BAA0B,GAC1B,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,GACnB,mBAAmB,CAAC;AAExB,qBAAa,0BAA2B,SAAQ,KAAK;IAEjD,QAAQ,CAAC,IAAI,EAAE,8BAA8B;IAE7C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;gBAHvB,IAAI,EAAE,8BAA8B,EAC7C,OAAO,EAAE,MAAM,EACN,YAAY,CAAC,EAAE,MAAM,YAAA,EACrB,cAAc,CAAC,EAAE,MAAM,YAAA;CAInC;AA+RD,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,iBAAiB,EACxB,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAkJ9B;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAEzF;AAqFD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,CAAC,EAAE,UAAU,GACjB,OAAO,CAAC,mBAAmB,CAAC,CAoF9B;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAWD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAetC;AAWD,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,iBAAiB,CAAC,EAAE,SAAS,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,EAAG,CAAC;CACnF,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqJ/B;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAE/B;AAED,wBAAsB,uCAAuC,CAAC,KAAK,EAAE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,iBAAiB,EAAE,SAAS,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,EAAG,CAAC;CAClF,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAG/B;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAkB/B"}