@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,42 @@
1
+ export type PackageReleaseMaturity = "candidate" | "stable" | "deprecated";
2
+ export interface PackageReleaseArtifact {
3
+ readonly fileName: string;
4
+ readonly digest: string;
5
+ readonly integrity: string;
6
+ readonly fileCount: number;
7
+ readonly unpackedBytes: number;
8
+ }
9
+ export interface PackageRelease {
10
+ readonly schemaVersion: 1;
11
+ readonly kind: "PackageRelease";
12
+ readonly packageName: string;
13
+ readonly version: string;
14
+ readonly title: string;
15
+ readonly summary: string;
16
+ readonly maturity: PackageReleaseMaturity;
17
+ readonly source: {
18
+ readonly repository: string;
19
+ readonly path: string;
20
+ readonly revision: string;
21
+ readonly treeDigest: string;
22
+ };
23
+ readonly artifact: PackageReleaseArtifact | null;
24
+ readonly compatibility: {
25
+ readonly node: string;
26
+ readonly packageManager: string;
27
+ };
28
+ readonly exports: readonly string[];
29
+ readonly documentation: {
30
+ readonly readme: string;
31
+ readonly knowledgeRef?: string;
32
+ };
33
+ readonly consumerEvidence: readonly string[];
34
+ readonly releaseDigest: string;
35
+ }
36
+ export declare class PackageReleaseError extends Error {
37
+ readonly code: "PACKAGE_RELEASE_INVALID" | "PACKAGE_RELEASE_MODIFIED";
38
+ constructor(code: "PACKAGE_RELEASE_INVALID" | "PACKAGE_RELEASE_MODIFIED", message: string);
39
+ }
40
+ export declare function createPackageRelease(input: Omit<PackageRelease, "schemaVersion" | "kind" | "releaseDigest">): PackageRelease;
41
+ export declare function parsePackageRelease(value: unknown): PackageRelease;
42
+ //# sourceMappingURL=package-release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-release.d.ts","sourceRoot":"","sources":["../src/package-release.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,sBAAsB,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE3E,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE;QACf,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;KACjC,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAChC,QAAQ,CAAC,IAAI,EAAE,yBAAyB,GAAG,0BAA0B;gBAA5D,IAAI,EAAE,yBAAyB,GAAG,0BAA0B,EAAE,OAAO,EAAE,MAAM;CAGnG;AAkDD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,GAAG,MAAM,GAAG,eAAe,CAAC,GAAG,cAAc,CAc5H;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAMlE"}
@@ -0,0 +1,85 @@
1
+ import { canonicalize, sha256Digest } from "./integrity.js";
2
+ export class PackageReleaseError extends Error {
3
+ code;
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.code = code;
7
+ }
8
+ }
9
+ const digestPattern = /^sha256:[a-f0-9]{64}$/u;
10
+ const integrityPattern = /^sha512-[A-Za-z0-9+/]{86}==$/u;
11
+ const packagePattern = /^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/u;
12
+ const versionPattern = /^(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?$/u;
13
+ const controlPattern = /[\u0000-\u001f\u007f]/u;
14
+ function record(value) {
15
+ return typeof value === "object" && value !== null && !Array.isArray(value) && Object.getPrototypeOf(value) === Object.prototype;
16
+ }
17
+ function exactKeys(value, expected) {
18
+ const actual = Object.keys(value).sort();
19
+ const sorted = [...expected].sort();
20
+ return actual.length === sorted.length && actual.every((key, index) => key === sorted[index]);
21
+ }
22
+ function text(value, maximum = 500) {
23
+ return typeof value === "string" && value.length > 0 && value.length <= maximum && !controlPattern.test(value);
24
+ }
25
+ function safeRelative(value) {
26
+ return text(value, 500) && !value.startsWith("/") && !value.startsWith("../") && !value.includes("/../") && !value.includes("\\");
27
+ }
28
+ function sortedUniqueStrings(value, maximum = 128) {
29
+ return Array.isArray(value) && value.length <= maximum && value.every((entry) => text(entry, 500)) && value.every((entry, index) => index === 0 || value[index - 1] < entry);
30
+ }
31
+ function validArtifact(value) {
32
+ if (value === null)
33
+ return true;
34
+ if (!record(value) || !exactKeys(value, ["fileName", "digest", "integrity", "fileCount", "unpackedBytes"]))
35
+ return false;
36
+ return safeRelative(value.fileName) && digestPattern.test(String(value.digest)) && integrityPattern.test(String(value.integrity)) && Number.isSafeInteger(value.fileCount) && Number(value.fileCount) > 0 && Number.isSafeInteger(value.unpackedBytes) && Number(value.unpackedBytes) > 0;
37
+ }
38
+ function releaseContent(value) {
39
+ if (!record(value) || !exactKeys(value, ["schemaVersion", "kind", "packageName", "version", "title", "summary", "maturity", "source", "artifact", "compatibility", "exports", "documentation", "consumerEvidence"]))
40
+ return false;
41
+ if (value.schemaVersion !== 1 || value.kind !== "PackageRelease" || !packagePattern.test(value.packageName) || !versionPattern.test(value.version))
42
+ return false;
43
+ if (!text(value.title, 120) || !text(value.summary, 1000) || !["candidate", "stable", "deprecated"].includes(value.maturity))
44
+ return false;
45
+ if (!record(value.source) || !exactKeys(value.source, ["repository", "path", "revision", "treeDigest"]) || !text(value.source.repository) || !safeRelative(value.source.path) || !text(value.source.revision, 200) || !digestPattern.test(String(value.source.treeDigest)))
46
+ return false;
47
+ if (!validArtifact(value.artifact))
48
+ return false;
49
+ if (!record(value.compatibility) || !exactKeys(value.compatibility, ["node", "packageManager"]) || !text(value.compatibility.node, 100) || !text(value.compatibility.packageManager, 100))
50
+ return false;
51
+ if (!sortedUniqueStrings(value.exports) || !sortedUniqueStrings(value.consumerEvidence))
52
+ return false;
53
+ if (!record(value.documentation))
54
+ return false;
55
+ const docKeys = value.documentation.knowledgeRef === undefined ? ["readme"] : ["readme", "knowledgeRef"];
56
+ if (!exactKeys(value.documentation, docKeys) || !safeRelative(value.documentation.readme) || (value.documentation.knowledgeRef !== undefined && !text(value.documentation.knowledgeRef, 500)))
57
+ return false;
58
+ return value.artifact !== null || value.maturity !== "stable";
59
+ }
60
+ export function createPackageRelease(input) {
61
+ const content = {
62
+ schemaVersion: 1,
63
+ kind: "PackageRelease",
64
+ ...input,
65
+ source: Object.freeze({ ...input.source }),
66
+ artifact: input.artifact === null ? null : Object.freeze({ ...input.artifact }),
67
+ compatibility: Object.freeze({ ...input.compatibility }),
68
+ exports: Object.freeze([...input.exports]),
69
+ documentation: Object.freeze({ ...input.documentation }),
70
+ consumerEvidence: Object.freeze([...input.consumerEvidence]),
71
+ };
72
+ if (!releaseContent(content))
73
+ throw new PackageReleaseError("PACKAGE_RELEASE_INVALID", "PackageRelease 内容无效");
74
+ return Object.freeze({ ...content, releaseDigest: sha256Digest(canonicalize(content)) });
75
+ }
76
+ export function parsePackageRelease(value) {
77
+ if (!record(value) || !exactKeys(value, ["schemaVersion", "kind", "packageName", "version", "title", "summary", "maturity", "source", "artifact", "compatibility", "exports", "documentation", "consumerEvidence", "releaseDigest"]) || !digestPattern.test(String(value.releaseDigest)))
78
+ throw new PackageReleaseError("PACKAGE_RELEASE_INVALID", "PackageRelease 结构无效");
79
+ const { releaseDigest, schemaVersion: _schemaVersion, kind: _kind, ...input } = value;
80
+ const recreated = createPackageRelease(input);
81
+ if (recreated.releaseDigest !== releaseDigest)
82
+ throw new PackageReleaseError("PACKAGE_RELEASE_MODIFIED", "PackageRelease 已被修改");
83
+ return recreated;
84
+ }
85
+ //# sourceMappingURL=package-release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-release.js","sourceRoot":"","sources":["../src/package-release.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { PlanState } from "./contracts.js";
2
+ export declare class InvalidPlanTransitionError extends Error {
3
+ readonly from: PlanState;
4
+ readonly to: PlanState;
5
+ readonly code = "PLAN_TRANSITION_INVALID";
6
+ constructor(from: PlanState, to: PlanState);
7
+ }
8
+ export declare function transitionPlan(from: PlanState, to: PlanState): PlanState;
9
+ export declare function canTransitionPlan(from: PlanState, to: PlanState): boolean;
10
+ //# sourceMappingURL=plan-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-state.d.ts","sourceRoot":"","sources":["../src/plan-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAgBhD,qBAAa,0BAA2B,SAAQ,KAAK;IAGvC,QAAQ,CAAC,IAAI,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,EAAE,SAAS;IAF5D,QAAQ,CAAC,IAAI,6BAA6B;gBAErB,IAAI,EAAE,SAAS,EAAW,EAAE,EAAE,SAAS;CAG7D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,CAKxE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAEzE"}
@@ -0,0 +1,33 @@
1
+ const transitions = {
2
+ created: ["reviewable", "conflicted", "expired"],
3
+ reviewable: ["approved", "expired"],
4
+ conflicted: [],
5
+ approved: ["applying", "expired"],
6
+ applying: ["applied", "failed", "recovery-required"],
7
+ applied: ["verified", "failed", "recovery-required"],
8
+ verified: [],
9
+ failed: ["recovery-required"],
10
+ "recovery-required": ["recovered"],
11
+ recovered: [],
12
+ expired: [],
13
+ };
14
+ export class InvalidPlanTransitionError extends Error {
15
+ from;
16
+ to;
17
+ code = "PLAN_TRANSITION_INVALID";
18
+ constructor(from, to) {
19
+ super(`Plan cannot transition from ${from} to ${to}`);
20
+ this.from = from;
21
+ this.to = to;
22
+ }
23
+ }
24
+ export function transitionPlan(from, to) {
25
+ if (!transitions[from].includes(to)) {
26
+ throw new InvalidPlanTransitionError(from, to);
27
+ }
28
+ return to;
29
+ }
30
+ export function canTransitionPlan(from, to) {
31
+ return transitions[from].includes(to);
32
+ }
33
+ //# sourceMappingURL=plan-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-state.js","sourceRoot":"","sources":["../src/plan-state.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAsD;IACrE,OAAO,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC;IAChD,UAAU,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;IACnC,UAAU,EAAE,EAAE;IACd,QAAQ,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;IACjC,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,mBAAmB,CAAC;IACpD,OAAO,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,mBAAmB,CAAC;IACpD,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,CAAC,mBAAmB,CAAC;IAC7B,mBAAmB,EAAE,CAAC,WAAW,CAAC;IAClC,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAG9B;IAA0B;IAFtC,IAAI,GAAG,yBAAyB,CAAC;IAE1C,YAAqB,IAAe,EAAW,EAAa;QAC1D,KAAK,CAAC,+BAA+B,IAAI,OAAO,EAAE,EAAE,CAAC,CAAC;QADnC,SAAI,GAAJ,IAAI,CAAW;QAAW,OAAE,GAAF,EAAE,CAAW;IAE5D,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,IAAe,EAAE,EAAa;IAC3D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,0BAA0B,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAe,EAAE,EAAa;IAC9D,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { CapabilityRelease, ChangePlan, ObservedAsset, PlanAction, ProposedChange } from "./contracts.js";
2
+ export declare class PlanInputError extends Error {
3
+ readonly assetPath?: string | undefined;
4
+ readonly code = "PLAN_PRECONDITION_FAILED";
5
+ constructor(message: string, assetPath?: string | undefined);
6
+ }
7
+ export type BuildPlanInput = {
8
+ action: PlanAction;
9
+ capability: CapabilityRelease;
10
+ changes: ProposedChange[];
11
+ observedAssets: ObservedAsset[];
12
+ generatedAt: string;
13
+ expiresAt: string;
14
+ packageAdoption?: import("./contracts.js").PackageAdoptionPlanFacts;
15
+ };
16
+ export declare function assertSafeRelativePath(assetPath: string): void;
17
+ export declare function buildChangePlan(input: BuildPlanInput): ChangePlan;
18
+ export declare function calculatePlanId(plan: Omit<ChangePlan, "planId">): string;
19
+ //# sourceMappingURL=planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,aAAa,EAEb,UAAU,EACV,cAAc,EACf,MAAM,gBAAgB,CAAC;AAGxB,qBAAa,cAAe,SAAQ,KAAK;IAGV,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM;IAFxD,QAAQ,CAAC,IAAI,8BAA8B;gBAE/B,OAAO,EAAE,MAAM,EAAW,SAAS,CAAC,EAAE,MAAM,YAAA;CAGzD;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,gBAAgB,EAAE,wBAAwB,CAAC;CACrE,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAU9D;AAsCD,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CA4DjE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,MAAM,CAExE"}
@@ -0,0 +1,111 @@
1
+ import path from "node:path";
2
+ import { capabilityIdPattern } from "./contracts.js";
3
+ import { canonicalize, sha256Digest } from "./integrity.js";
4
+ export class PlanInputError extends Error {
5
+ assetPath;
6
+ code = "PLAN_PRECONDITION_FAILED";
7
+ constructor(message, assetPath) {
8
+ super(message);
9
+ this.assetPath = assetPath;
10
+ }
11
+ }
12
+ export function assertSafeRelativePath(assetPath) {
13
+ if (assetPath.length === 0 ||
14
+ path.posix.isAbsolute(assetPath) ||
15
+ path.win32.isAbsolute(assetPath) ||
16
+ assetPath.includes("\\") ||
17
+ assetPath.split("/").some((segment) => segment === ".." || segment === ".")) {
18
+ throw new PlanInputError("Asset path must be a normalized project-relative POSIX path", assetPath);
19
+ }
20
+ }
21
+ function planOperation(change, observed) {
22
+ assertSafeRelativePath(change.path);
23
+ const managedMerge = change.kind === "merge" && change.ownership === "managed-region" && change.regionId !== undefined && new RegExp(capabilityIdPattern).test(change.regionId);
24
+ if ((change.kind === "merge" || change.ownership === "managed-region" || change.regionId !== undefined) && !managedMerge) {
25
+ throw new PlanInputError("Managed regions require merge ownership and a valid region identity", change.path);
26
+ }
27
+ if (change.ownership === "user-file") {
28
+ return { ...change, disposition: "conflict", conflictCode: "USER_OWNED" };
29
+ }
30
+ const exists = observed?.exists ?? false;
31
+ const currentDigest = observed?.digest;
32
+ if (change.kind === "create") {
33
+ if (!exists)
34
+ return { ...change, disposition: "ready" };
35
+ if (change.desiredDigest !== undefined && currentDigest === change.desiredDigest) {
36
+ return { ...change, disposition: "noop" };
37
+ }
38
+ return { ...change, disposition: "conflict", conflictCode: "UNEXPECTED_EXISTING" };
39
+ }
40
+ if (change.kind === "remove" && !exists) {
41
+ return { ...change, disposition: "noop" };
42
+ }
43
+ if (change.kind !== "remove" && exists && change.desiredDigest === currentDigest) {
44
+ return { ...change, disposition: "noop" };
45
+ }
46
+ if (!exists || change.baseDigest === undefined || currentDigest !== change.baseDigest) {
47
+ return { ...change, disposition: "conflict", conflictCode: "BASE_DIGEST_MISMATCH" };
48
+ }
49
+ return { ...change, disposition: "ready" };
50
+ }
51
+ export function buildChangePlan(input) {
52
+ if (Number.isNaN(Date.parse(input.generatedAt)) || Number.isNaN(Date.parse(input.expiresAt))) {
53
+ throw new PlanInputError("Plan timestamps must be valid ISO date-time values");
54
+ }
55
+ if (Date.parse(input.expiresAt) <= Date.parse(input.generatedAt)) {
56
+ throw new PlanInputError("Plan expiry must be later than generation time");
57
+ }
58
+ const observed = new Map();
59
+ for (const asset of input.observedAssets) {
60
+ assertSafeRelativePath(asset.path);
61
+ if (observed.has(asset.path)) {
62
+ throw new PlanInputError("Observed asset paths must be unique", asset.path);
63
+ }
64
+ observed.set(asset.path, asset);
65
+ }
66
+ const seenChanges = new Set();
67
+ const operations = input.changes
68
+ .map((change) => {
69
+ if (seenChanges.has(change.path)) {
70
+ throw new PlanInputError("Proposed change paths must be unique", change.path);
71
+ }
72
+ seenChanges.add(change.path);
73
+ return planOperation(change, observed.get(change.path));
74
+ })
75
+ .sort((left, right) => left.path.localeCompare(right.path));
76
+ const inputFacts = {
77
+ action: input.action,
78
+ capability: {
79
+ capabilityId: input.capability.capabilityId,
80
+ version: input.capability.version,
81
+ integrity: input.capability.integrity,
82
+ },
83
+ changes: input.changes,
84
+ observedAssets: input.observedAssets,
85
+ generatedAt: input.generatedAt,
86
+ expiresAt: input.expiresAt,
87
+ ...(input.packageAdoption === undefined ? {} : { packageAdoption: input.packageAdoption }),
88
+ };
89
+ const inputDigest = sha256Digest(canonicalize(inputFacts));
90
+ const planWithoutId = {
91
+ schemaVersion: 1,
92
+ action: input.action,
93
+ state: operations.some((operation) => operation.disposition === "conflict")
94
+ ? "conflicted"
95
+ : "reviewable",
96
+ capability: inputFacts.capability,
97
+ generatedAt: input.generatedAt,
98
+ expiresAt: input.expiresAt,
99
+ inputDigest,
100
+ operations,
101
+ ...(input.packageAdoption === undefined ? {} : { packageAdoption: input.packageAdoption }),
102
+ };
103
+ return {
104
+ ...planWithoutId,
105
+ planId: sha256Digest(canonicalize(planWithoutId)),
106
+ };
107
+ }
108
+ export function calculatePlanId(plan) {
109
+ return sha256Digest(canonicalize(plan));
110
+ }
111
+ //# sourceMappingURL=planner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planner.js","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export type PlatformPackageSourceKind = "workspace" | "registry" | "other";
2
+ export type PlatformPackageManifestField = "dependencies" | "devDependencies" | "optionalDependencies" | "peerDependencies";
3
+ export type PlatformPackageReference = Readonly<{
4
+ importer: string;
5
+ field: PlatformPackageManifestField;
6
+ packageName: string;
7
+ specifier: string;
8
+ source: PlatformPackageSourceKind;
9
+ }>;
10
+ export type PlatformPackageSourceAudit = Readonly<{
11
+ scope: string;
12
+ required: PlatformPackageSourceKind | null;
13
+ references: readonly PlatformPackageReference[];
14
+ violations: readonly PlatformPackageReference[];
15
+ }>;
16
+ export declare class PlatformPackageSourceError extends Error {
17
+ readonly code: "PLATFORM_PACKAGE_MANIFEST_INVALID" | "PLATFORM_PACKAGE_SCOPE_INVALID" | "PLATFORM_PACKAGE_SPECIFIER_INVALID" | "PLATFORM_PACKAGE_REWRITE_UNSAFE";
18
+ constructor(code: "PLATFORM_PACKAGE_MANIFEST_INVALID" | "PLATFORM_PACKAGE_SCOPE_INVALID" | "PLATFORM_PACKAGE_SPECIFIER_INVALID" | "PLATFORM_PACKAGE_REWRITE_UNSAFE");
19
+ }
20
+ export declare function classifyPlatformPackageSpecifier(specifier: string): PlatformPackageSourceKind;
21
+ export declare function auditPlatformPackageReferences(input: Readonly<{
22
+ manifests: readonly Readonly<{
23
+ relativeRoot: string;
24
+ bytes: Uint8Array;
25
+ }>[];
26
+ scope: string;
27
+ required?: PlatformPackageSourceKind;
28
+ }>): PlatformPackageSourceAudit;
29
+ export type PlatformPackageSwitchChange = Readonly<{
30
+ field: PlatformPackageManifestField;
31
+ packageName: string;
32
+ from: string;
33
+ to: string;
34
+ }>;
35
+ export type PlatformPackageSwitchPlan = Readonly<{
36
+ scope: string;
37
+ changes: readonly PlatformPackageSwitchChange[];
38
+ manifest: Uint8Array;
39
+ }>;
40
+ /**
41
+ * Rewrites only the specifier values of in-scope dependencies, leaving every other byte of the
42
+ * manifest untouched, then re-parses the result and fails closed unless it matches exactly.
43
+ */
44
+ export declare function planPlatformPackageSwitch(input: Readonly<{
45
+ manifest: Uint8Array;
46
+ scope: string;
47
+ specifiers: Readonly<Record<string, string>>;
48
+ }>): PlatformPackageSwitchPlan;
49
+ //# sourceMappingURL=platform-package-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-package-sources.d.ts","sourceRoot":"","sources":["../src/platform-package-sources.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAC3E,MAAM,MAAM,4BAA4B,GAAG,cAAc,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,kBAAkB,CAAC;AAE5H,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,4BAA4B,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,yBAAyB,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC3C,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAChD,UAAU,EAAE,SAAS,wBAAwB,EAAE,CAAC;CACjD,CAAC,CAAC;AAEH,qBAAa,0BAA2B,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,mCAAmC,GAAG,gCAAgC,GAAG,oCAAoC,GAAG,iCAAiC;gBAAvJ,IAAI,EAAE,mCAAmC,GAAG,gCAAgC,GAAG,oCAAoC,GAAG,iCAAiC;CAC7K;AAMD,wBAAgB,gCAAgC,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,CAI7F;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC7D,SAAS,EAAE,SAAS,QAAQ,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC,EAAE,CAAC;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,yBAAyB,CAAC;CACtC,CAAC,GAAG,0BAA0B,CAqB9B;AAED,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,4BAA4B,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC3I,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,2BAA2B,EAAE,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC;AAa3I;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC;IAAE,QAAQ,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,CAAC,GAAG,yBAAyB,CAuB3K"}
@@ -0,0 +1,98 @@
1
+ export class PlatformPackageSourceError extends Error {
2
+ code;
3
+ constructor(code) {
4
+ super(code);
5
+ this.code = code;
6
+ this.name = "PlatformPackageSourceError";
7
+ }
8
+ }
9
+ const manifestFields = ["dependencies", "devDependencies", "optionalDependencies", "peerDependencies"];
10
+ const externalSpecifier = /^(?:file:|link:|portal:|git(?:\+|:)|https?:|ssh:|github:)/u;
11
+ const scopePattern = /^@[a-z0-9][a-z0-9._-]*\/$/u;
12
+ export function classifyPlatformPackageSpecifier(specifier) {
13
+ if (specifier.startsWith("workspace:"))
14
+ return "workspace";
15
+ if (externalSpecifier.test(specifier))
16
+ return "other";
17
+ return "registry";
18
+ }
19
+ export function auditPlatformPackageReferences(input) {
20
+ if (!scopePattern.test(input.scope))
21
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_SCOPE_INVALID");
22
+ const references = [];
23
+ for (const manifest of input.manifests) {
24
+ let parsed;
25
+ try {
26
+ parsed = JSON.parse(Buffer.from(manifest.bytes).toString("utf8"));
27
+ }
28
+ catch {
29
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_MANIFEST_INVALID");
30
+ }
31
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
32
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_MANIFEST_INVALID");
33
+ for (const field of manifestFields) {
34
+ const entries = parsed[field];
35
+ if (entries === undefined)
36
+ continue;
37
+ if (typeof entries !== "object" || entries === null || Array.isArray(entries))
38
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_MANIFEST_INVALID");
39
+ for (const [packageName, specifier] of Object.entries(entries)) {
40
+ if (!packageName.startsWith(input.scope))
41
+ continue;
42
+ if (typeof specifier !== "string" || specifier.trim() === "")
43
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_MANIFEST_INVALID");
44
+ references.push(Object.freeze({ importer: manifest.relativeRoot, field, packageName, specifier, source: classifyPlatformPackageSpecifier(specifier) }));
45
+ }
46
+ }
47
+ }
48
+ references.sort((left, right) => left.importer.localeCompare(right.importer) || left.field.localeCompare(right.field) || left.packageName.localeCompare(right.packageName));
49
+ const required = input.required ?? null;
50
+ return Object.freeze({ scope: input.scope, required, references: Object.freeze(references), violations: Object.freeze(required === null ? [] : references.filter((item) => item.source !== required)) });
51
+ }
52
+ const specifierPattern = /^(?:workspace:[*^~]?|(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?)$/u;
53
+ function escapeRegExp(value) { return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&"); }
54
+ function manifestObject(bytes) {
55
+ let parsed;
56
+ try {
57
+ parsed = JSON.parse(Buffer.from(bytes).toString("utf8"));
58
+ }
59
+ catch {
60
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_MANIFEST_INVALID");
61
+ }
62
+ if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed))
63
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_MANIFEST_INVALID");
64
+ return parsed;
65
+ }
66
+ /**
67
+ * Rewrites only the specifier values of in-scope dependencies, leaving every other byte of the
68
+ * manifest untouched, then re-parses the result and fails closed unless it matches exactly.
69
+ */
70
+ export function planPlatformPackageSwitch(input) {
71
+ const references = auditPlatformPackageReferences({ manifests: [{ relativeRoot: ".", bytes: input.manifest }], scope: input.scope }).references;
72
+ for (const specifier of Object.values(input.specifiers))
73
+ if (!specifierPattern.test(specifier))
74
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_SPECIFIER_INVALID");
75
+ const missing = references.filter((item) => input.specifiers[item.packageName] === undefined);
76
+ if (missing.length > 0)
77
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_SPECIFIER_INVALID");
78
+ const changes = references.filter((item) => input.specifiers[item.packageName] !== item.specifier)
79
+ .map((item) => Object.freeze({ field: item.field, packageName: item.packageName, from: item.specifier, to: input.specifiers[item.packageName] }));
80
+ if (changes.length === 0)
81
+ return Object.freeze({ scope: input.scope, changes: Object.freeze([]), manifest: input.manifest });
82
+ const original = manifestObject(input.manifest);
83
+ let text = Buffer.from(input.manifest).toString("utf8");
84
+ for (const change of new Map(changes.map((item) => [`${item.packageName}\u0000${item.from}`, item])).values())
85
+ text = text.replace(new RegExp(`("${escapeRegExp(JSON.stringify(change.packageName).slice(1, -1))}"\\s*:\\s*")${escapeRegExp(change.from)}(")`, "gu"), `$1${change.to}$2`);
86
+ const expected = { ...original };
87
+ for (const field of manifestFields) {
88
+ const entries = original[field];
89
+ if (entries === undefined)
90
+ continue;
91
+ expected[field] = Object.fromEntries(Object.entries(entries).map(([name, specifier]) => [name, name.startsWith(input.scope) ? input.specifiers[name] : specifier]));
92
+ }
93
+ const rewritten = new TextEncoder().encode(text);
94
+ if (JSON.stringify(manifestObject(rewritten)) !== JSON.stringify(expected))
95
+ throw new PlatformPackageSourceError("PLATFORM_PACKAGE_REWRITE_UNSAFE");
96
+ return Object.freeze({ scope: input.scope, changes: Object.freeze(changes), manifest: rewritten });
97
+ }
98
+ //# sourceMappingURL=platform-package-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-package-sources.js","sourceRoot":"","sources":["../src/platform-package-sources.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { ChangePlan, ProjectManifest } from "./contracts.js";
2
+ export declare class ProjectBootstrapError extends Error {
3
+ readonly code: "TARGET_INVALID" | "TARGET_NOT_EMPTY" | "WORKSPACE_MARKER_MISSING" | "MANIFEST_EXISTS" | "PLAN_INTEGRITY_INVALID" | "PLAN_NOT_FOUND";
4
+ constructor(code: "TARGET_INVALID" | "TARGET_NOT_EMPTY" | "WORKSPACE_MARKER_MISSING" | "MANIFEST_EXISTS" | "PLAN_INTEGRITY_INVALID" | "PLAN_NOT_FOUND", message: string);
5
+ }
6
+ export declare const workspaceRootManifest: ProjectManifest;
7
+ export declare function workspaceRootManifestContents(): Uint8Array;
8
+ export declare function planExistingWorkspaceBootstrap(input: {
9
+ projectRoot: string;
10
+ capabilityIntegrity: string;
11
+ generatedAt: string;
12
+ expiresAt: string;
13
+ documentationOnly?: boolean;
14
+ }): Promise<{
15
+ projectRoot: string;
16
+ plan: ChangePlan;
17
+ desiredContents: ReadonlyMap<string, Uint8Array>;
18
+ }>;
19
+ export declare function initializeProjectManifest(input: {
20
+ projectRoot: string;
21
+ manifest: unknown;
22
+ }): Promise<{
23
+ projectRoot: string;
24
+ manifest: ProjectManifest;
25
+ }>;
26
+ export declare function saveProjectPlan(input: {
27
+ projectRoot: string;
28
+ plan: unknown;
29
+ }): Promise<string>;
30
+ export declare function saveOrReuseProjectPlan(input: {
31
+ projectRoot: string;
32
+ plan: unknown;
33
+ now: string;
34
+ transactionRoot?: string;
35
+ }): Promise<ChangePlan>;
36
+ export declare function readProjectPlan(input: {
37
+ projectRoot: string;
38
+ planId: string;
39
+ }): Promise<ChangePlan>;
40
+ export declare function readAppliedProjectPlan(projectRootInput: string, excludedPlanIds?: readonly string[], transactionRootInput?: string, lockedCapabilityIds?: readonly string[]): Promise<ChangePlan>;
41
+ export declare function listProjectPlans(projectRootInput: string): Promise<ChangePlan[]>;
42
+ //# sourceMappingURL=project-bootstrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-bootstrap.d.ts","sourceRoot":"","sources":["../src/project-bootstrap.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAMlE,qBAAa,qBAAsB,SAAQ,KAAK;IAE5C,QAAQ,CAAC,IAAI,EACT,gBAAgB,GAChB,kBAAkB,GAClB,0BAA0B,GAC1B,iBAAiB,GACjB,wBAAwB,GACxB,gBAAgB;gBANX,IAAI,EACT,gBAAgB,GAChB,kBAAkB,GAClB,0BAA0B,GAC1B,iBAAiB,GACjB,wBAAwB,GACxB,gBAAgB,EACpB,OAAO,EAAE,MAAM;CAKlB;AAED,eAAO,MAAM,qBAAqB,EAAE,eAInC,CAAC;AAEF,wBAAgB,6BAA6B,IAAI,UAAU,CAE1D;AAqBD,wBAAsB,8BAA8B,CAAC,KAAK,EAAE;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,eAAe,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CAAE,CAAC,CAmBvG;AAoDD,wBAAsB,yBAAyB,CAAC,KAAK,EAAE;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAE,CAAC,CAa9D;AASD,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlB;AAYD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BtB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgBtB;AAED,wBAAsB,sBAAsB,CAC1C,gBAAgB,EAAE,MAAM,EACxB,eAAe,GAAE,SAAS,MAAM,EAAO,EACvC,oBAAoB,CAAC,EAAE,MAAM,EAC7B,mBAAmB,GAAE,SAAS,MAAM,EAAO,GAC1C,OAAO,CAAC,UAAU,CAAC,CAoCrB;AAUD,wBAAsB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAiBtF"}