@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,270 @@
1
+ import { link, open, lstat, mkdir, readFile, readdir, realpath, rm, unlink } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { canonicalize, sha256Digest } from "./integrity.js";
4
+ import { buildChangePlan, calculatePlanId } from "./planner.js";
5
+ import { parseChangePlan, parseProjectManifest } from "./schemas.js";
6
+ import { inspectTransaction } from "./filesystem-transaction.js";
7
+ export class ProjectBootstrapError extends Error {
8
+ code;
9
+ constructor(code, message) {
10
+ super(message);
11
+ this.code = code;
12
+ this.name = "ProjectBootstrapError";
13
+ }
14
+ }
15
+ export const workspaceRootManifest = {
16
+ schemaVersion: 1,
17
+ profile: { id: "workspace-root", parameters: {} },
18
+ capabilities: [{ capabilityId: "foundation.workspace-root", version: "1.2.0" }],
19
+ };
20
+ export function workspaceRootManifestContents() {
21
+ return new TextEncoder().encode(`${JSON.stringify(workspaceRootManifest, null, 2)}\n`);
22
+ }
23
+ async function resolveExistingWorkspaceRoot(target, documentationOnly = false) {
24
+ const absolute = path.resolve(target);
25
+ const info = await lstat(absolute).catch(() => null);
26
+ if (info === null || !info.isDirectory() || info.isSymbolicLink()) {
27
+ throw new ProjectBootstrapError("TARGET_INVALID", "Workspace target must be a real existing directory");
28
+ }
29
+ const root = await realpath(absolute);
30
+ for (const marker of documentationOnly ? ["AGENTS.md", "README.md"] : ["package.json", "pnpm-workspace.yaml"]) {
31
+ const markerInfo = await lstat(path.join(root, marker)).catch(() => null);
32
+ if (markerInfo === null || !markerInfo.isFile() || markerInfo.isSymbolicLink()) {
33
+ throw new ProjectBootstrapError("WORKSPACE_MARKER_MISSING", `Existing workspace must contain a real ${marker}`);
34
+ }
35
+ }
36
+ if (await lstat(path.join(root, "project-capabilities.json")).catch(() => null)) {
37
+ throw new ProjectBootstrapError("MANIFEST_EXISTS", "Project manifest already exists");
38
+ }
39
+ return root;
40
+ }
41
+ export async function planExistingWorkspaceBootstrap(input) {
42
+ const projectRoot = await resolveExistingWorkspaceRoot(input.projectRoot, input.documentationOnly === true);
43
+ const contents = workspaceRootManifestContents();
44
+ const plan = buildChangePlan({
45
+ action: "adopt",
46
+ capability: {
47
+ schemaVersion: 1,
48
+ capabilityId: "foundation.workspace-root",
49
+ version: "1.2.0",
50
+ integrity: input.capabilityIntegrity,
51
+ assets: [],
52
+ verifiers: [],
53
+ },
54
+ changes: [{ path: "project-capabilities.json", kind: "create", ownership: "owned-file", desiredDigest: sha256Digest(contents) }],
55
+ observedAssets: [{ path: "project-capabilities.json", exists: false }],
56
+ generatedAt: input.generatedAt,
57
+ expiresAt: input.expiresAt,
58
+ });
59
+ return { projectRoot, plan, desiredContents: new Map([["project-capabilities.json", contents]]) };
60
+ }
61
+ async function syncDirectory(directory) {
62
+ const handle = await open(directory, "r");
63
+ try {
64
+ await handle.sync();
65
+ }
66
+ finally {
67
+ await handle.close();
68
+ }
69
+ }
70
+ async function atomicCreate(target, contents) {
71
+ const temporary = `${target}.tmp-${process.pid}-${crypto.randomUUID()}`;
72
+ const handle = await open(temporary, "wx", 0o600);
73
+ try {
74
+ await handle.writeFile(contents, "utf8");
75
+ await handle.sync();
76
+ }
77
+ finally {
78
+ await handle.close();
79
+ }
80
+ try {
81
+ await link(temporary, target);
82
+ await unlink(temporary);
83
+ await syncDirectory(path.dirname(target));
84
+ }
85
+ catch (error) {
86
+ await rm(temporary, { force: true });
87
+ throw error;
88
+ }
89
+ }
90
+ async function prepareEmptyRoot(target) {
91
+ const absolute = path.resolve(target);
92
+ try {
93
+ const info = await lstat(absolute);
94
+ if (!info.isDirectory() || info.isSymbolicLink()) {
95
+ throw new ProjectBootstrapError("TARGET_INVALID", "Project target must be a real directory");
96
+ }
97
+ if ((await readdir(absolute)).length !== 0) {
98
+ throw new ProjectBootstrapError("TARGET_NOT_EMPTY", "Project target must be empty");
99
+ }
100
+ }
101
+ catch (error) {
102
+ if (error.code !== "ENOENT")
103
+ throw error;
104
+ const parent = path.dirname(absolute);
105
+ const parentInfo = await lstat(parent).catch(() => null);
106
+ if (parentInfo === null || !parentInfo.isDirectory() || parentInfo.isSymbolicLink()) {
107
+ throw new ProjectBootstrapError("TARGET_INVALID", "Project target parent must be a real directory");
108
+ }
109
+ await mkdir(absolute);
110
+ }
111
+ return realpath(absolute);
112
+ }
113
+ export async function initializeProjectManifest(input) {
114
+ const manifest = parseProjectManifest(input.manifest);
115
+ const projectRoot = await prepareEmptyRoot(input.projectRoot);
116
+ const manifestPath = path.join(projectRoot, "project-capabilities.json");
117
+ try {
118
+ await atomicCreate(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`);
119
+ }
120
+ catch (error) {
121
+ if (error.code === "EEXIST") {
122
+ throw new ProjectBootstrapError("MANIFEST_EXISTS", "Project manifest already exists");
123
+ }
124
+ throw error;
125
+ }
126
+ return { projectRoot, manifest };
127
+ }
128
+ function assertPlanIntegrity(plan) {
129
+ const { planId: _planId, ...withoutId } = plan;
130
+ if (calculatePlanId(withoutId) !== plan.planId) {
131
+ throw new ProjectBootstrapError("PLAN_INTEGRITY_INVALID", "Saved plan integrity is invalid");
132
+ }
133
+ }
134
+ export async function saveProjectPlan(input) {
135
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
136
+ const plan = parseChangePlan(input.plan);
137
+ assertPlanIntegrity(plan);
138
+ const plansDirectory = path.join(projectRoot, ".dyyto", "plans");
139
+ await mkdir(plansDirectory, { recursive: true, mode: 0o700 });
140
+ const planPath = path.join(plansDirectory, `${plan.planId}.json`);
141
+ try {
142
+ await atomicCreate(planPath, `${canonicalize(plan)}\n`);
143
+ }
144
+ catch (error) {
145
+ if (error.code !== "EEXIST")
146
+ throw error;
147
+ const existing = parseChangePlan(JSON.parse(await readFile(planPath, "utf8")));
148
+ assertPlanIntegrity(existing);
149
+ if (canonicalize(existing) !== canonicalize(plan)) {
150
+ throw new ProjectBootstrapError("PLAN_INTEGRITY_INVALID", "Plan ID content mismatch");
151
+ }
152
+ }
153
+ return planPath;
154
+ }
155
+ function planningFacts(plan) {
156
+ return canonicalize({
157
+ action: plan.action,
158
+ state: plan.state,
159
+ capability: plan.capability,
160
+ operations: plan.operations,
161
+ packageAdoption: plan.packageAdoption,
162
+ });
163
+ }
164
+ export async function saveOrReuseProjectPlan(input) {
165
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
166
+ const transactionRoot = input.transactionRoot === undefined ? projectRoot : await realpath(path.resolve(input.transactionRoot));
167
+ const candidate = parseChangePlan(input.plan);
168
+ assertPlanIntegrity(candidate);
169
+ const plansDirectory = path.join(projectRoot, ".dyyto", "plans");
170
+ const names = await readdir(plansDirectory).catch((error) => {
171
+ if (error.code === "ENOENT")
172
+ return [];
173
+ throw error;
174
+ });
175
+ const reusable = [];
176
+ for (const name of names.filter((value) => value.endsWith(".json")).sort()) {
177
+ const stored = parseChangePlan(JSON.parse(await readFile(path.join(plansDirectory, name), "utf8")));
178
+ assertPlanIntegrity(stored);
179
+ const transactionConsumed = await lstat(path.join(transactionRoot, ".dyyto", "transactions", stored.planId)).then(() => true).catch((error) => error.code === "ENOENT" ? false : Promise.reject(error));
180
+ if (!transactionConsumed &&
181
+ Date.parse(stored.expiresAt) > Date.parse(input.now) &&
182
+ planningFacts(stored) === planningFacts(candidate)) {
183
+ reusable.push(stored);
184
+ }
185
+ }
186
+ reusable.sort((left, right) => left.generatedAt.localeCompare(right.generatedAt));
187
+ if (reusable[0] !== undefined)
188
+ return reusable[0];
189
+ await saveProjectPlan({ projectRoot, plan: candidate });
190
+ return candidate;
191
+ }
192
+ export async function readProjectPlan(input) {
193
+ const projectRoot = await realpath(path.resolve(input.projectRoot));
194
+ const planPath = path.join(projectRoot, ".dyyto", "plans", `${input.planId}.json`);
195
+ try {
196
+ const plan = parseChangePlan(JSON.parse(await readFile(planPath, "utf8")));
197
+ assertPlanIntegrity(plan);
198
+ if (plan.planId !== input.planId) {
199
+ throw new ProjectBootstrapError("PLAN_INTEGRITY_INVALID", "Saved plan identity mismatch");
200
+ }
201
+ return plan;
202
+ }
203
+ catch (error) {
204
+ if (error.code === "ENOENT") {
205
+ throw new ProjectBootstrapError("PLAN_NOT_FOUND", "Saved plan was not found");
206
+ }
207
+ throw error;
208
+ }
209
+ }
210
+ export async function readAppliedProjectPlan(projectRootInput, excludedPlanIds = [], transactionRootInput, lockedCapabilityIds = []) {
211
+ const projectRoot = await realpath(path.resolve(projectRootInput));
212
+ const transactionRoot = transactionRootInput === undefined ? projectRoot : await realpath(path.resolve(transactionRootInput));
213
+ const plansDirectory = path.join(projectRoot, ".dyyto", "plans");
214
+ const names = await readdir(plansDirectory).catch((error) => {
215
+ if (error.code === "ENOENT")
216
+ return [];
217
+ throw error;
218
+ });
219
+ const applied = [];
220
+ for (const name of names.filter((value) => value.endsWith(".json")).sort()) {
221
+ const planId = name.slice(0, -".json".length);
222
+ const plan = await readProjectPlan({ projectRoot, planId });
223
+ const transaction = await inspectTransaction({ projectRoot: transactionRoot, planId });
224
+ const metadataConsumed = await lstat(path.join(projectRoot, ".dyyto", "metadata-transactions", planId)).then(() => true).catch((error) => error.code === "ENOENT" ? false : Promise.reject(error));
225
+ if (transaction?.state === "applied" &&
226
+ !metadataConsumed &&
227
+ !excludedPlanIds.includes(plan.planId) &&
228
+ (!lockedCapabilityIds.includes(plan.capability.capabilityId) ||
229
+ plan.action === "upgrade" ||
230
+ plan.action === "remove" ||
231
+ (plan.action === "adopt" && plan.operations.every((operation) => operation.disposition === "noop")))) {
232
+ applied.push(plan);
233
+ }
234
+ }
235
+ const pending = pendingAppliedPlan(applied);
236
+ if (pending === undefined) {
237
+ throw new ProjectBootstrapError("PLAN_NOT_FOUND", applied.length === 0
238
+ ? "No applied plan is available for verification"
239
+ : "More than one applied plan requires inspection before verification");
240
+ }
241
+ return pending;
242
+ }
243
+ function pendingAppliedPlan(applied) {
244
+ if (applied.length === 1)
245
+ return applied[0];
246
+ if (applied.length === 0)
247
+ return undefined;
248
+ const capabilityId = applied[0]?.capability.capabilityId;
249
+ if (capabilityId === undefined || applied.some((plan) => plan.capability.capabilityId !== capabilityId))
250
+ return undefined;
251
+ return [...applied].sort((left, right) => left.generatedAt.localeCompare(right.generatedAt)).at(-1);
252
+ }
253
+ export async function listProjectPlans(projectRootInput) {
254
+ const projectRoot = await realpath(path.resolve(projectRootInput));
255
+ const plansDirectory = path.join(projectRoot, ".dyyto", "plans");
256
+ const names = await readdir(plansDirectory).catch((error) => {
257
+ if (error.code === "ENOENT")
258
+ return [];
259
+ throw error;
260
+ });
261
+ const plans = [];
262
+ for (const name of names.filter((value) => value.endsWith(".json")).sort()) {
263
+ plans.push(await readProjectPlan({
264
+ projectRoot,
265
+ planId: name.slice(0, -".json".length),
266
+ }));
267
+ }
268
+ return plans;
269
+ }
270
+ //# sourceMappingURL=project-bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-bootstrap.js","sourceRoot":"","sources":["../src/project-bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ import { type PlatformPackageSourceKind } from "./platform-package-sources.js";
2
+ export type ManagedProjectCommand = "dev";
3
+ export type ManagedProjectProcessState = "stopped" | "initializing" | "running" | "stopping" | "failed" | "stale";
4
+ export type ManagedProjectProcessSnapshot = Readonly<{
5
+ schemaVersion: 1;
6
+ processId: string;
7
+ projectRoot: string;
8
+ command: ManagedProjectCommand;
9
+ pid: number;
10
+ startedAt: string;
11
+ logPath: string;
12
+ logOffset?: number;
13
+ }>;
14
+ export type CapabilitySelection = Readonly<{
15
+ capabilityId: string;
16
+ version: string;
17
+ }>;
18
+ export type LockedCapabilityIntegration = Readonly<{
19
+ capabilityId: string;
20
+ version: string;
21
+ evidenceIds?: readonly string[];
22
+ }>;
23
+ export type PlatformPackageDependency = Readonly<{
24
+ packageName: string;
25
+ version: string;
26
+ state: "unmanaged";
27
+ source: PlatformPackageSourceKind;
28
+ }>;
29
+ export type CapabilityIntegrationProjection = Readonly<{
30
+ template: Readonly<{
31
+ id: string;
32
+ version: string;
33
+ }> | null;
34
+ declared: readonly CapabilitySelection[];
35
+ locked: readonly LockedCapabilityIntegration[];
36
+ verified: readonly LockedCapabilityIntegration[];
37
+ platformDependencies: readonly PlatformPackageDependency[];
38
+ }>;
39
+ export type CapabilityIntegrationDetail = Readonly<{
40
+ capabilityId: string;
41
+ version: string;
42
+ status: "declared" | "locked" | "verified" | "drifted";
43
+ title: string;
44
+ purpose: string;
45
+ packages: readonly Readonly<{
46
+ packageName: string;
47
+ version: string;
48
+ usage: string;
49
+ installedVersion: string | null;
50
+ state: "matched" | "provided-by-platform" | "missing" | "version-mismatch" | "local-workspace";
51
+ imports: readonly Readonly<{
52
+ importFrom: string;
53
+ symbol: string;
54
+ referencePath?: string;
55
+ }>[];
56
+ }>[];
57
+ codeAssets: readonly Readonly<{
58
+ sourcePath: string;
59
+ targetPath: string;
60
+ ownership: string;
61
+ }>[];
62
+ evidenceIds: readonly string[];
63
+ }>;
64
+ export declare function auditCapabilityIntegrations(input: {
65
+ projection: CapabilityIntegrationProjection;
66
+ releases: readonly Readonly<{
67
+ capabilityId: string;
68
+ version: string;
69
+ integration?: {
70
+ title: string;
71
+ purpose: string;
72
+ packages: Array<{
73
+ packageName: string;
74
+ version: string;
75
+ usage: string;
76
+ imports: Array<{
77
+ importFrom: string;
78
+ symbol: string;
79
+ referencePath?: string;
80
+ }>;
81
+ }>;
82
+ codeAssets: Array<{
83
+ sourcePath: string;
84
+ targetPath: string;
85
+ ownership: string;
86
+ }>;
87
+ };
88
+ }>[];
89
+ dependencies?: Readonly<Record<string, string>>;
90
+ hostDependencies?: Readonly<Record<string, string>>;
91
+ }): Readonly<{
92
+ platformDependencies: readonly Readonly<{
93
+ packageName: string;
94
+ version: string;
95
+ state: "unmanaged";
96
+ source: PlatformPackageSourceKind;
97
+ }>[];
98
+ details: readonly Readonly<{
99
+ capabilityId: string;
100
+ version: string;
101
+ status: "declared" | "locked" | "verified" | "drifted";
102
+ title: string;
103
+ purpose: string;
104
+ packages: readonly Readonly<{
105
+ packageName: string;
106
+ version: string;
107
+ usage: string;
108
+ installedVersion: string | null;
109
+ state: "matched" | "provided-by-platform" | "missing" | "version-mismatch" | "local-workspace";
110
+ imports: readonly Readonly<{
111
+ importFrom: string;
112
+ symbol: string;
113
+ referencePath?: string;
114
+ }>[];
115
+ }>[];
116
+ codeAssets: readonly Readonly<{
117
+ sourcePath: string;
118
+ targetPath: string;
119
+ ownership: string;
120
+ }>[];
121
+ evidenceIds: readonly string[];
122
+ }>[];
123
+ findings: readonly {
124
+ code: string;
125
+ capabilityId: string;
126
+ packageName: string;
127
+ expected: string;
128
+ actual: string | null;
129
+ }[];
130
+ template: Readonly<{
131
+ id: string;
132
+ version: string;
133
+ }> | null;
134
+ declared: readonly CapabilitySelection[];
135
+ locked: readonly LockedCapabilityIntegration[];
136
+ verified: readonly LockedCapabilityIntegration[];
137
+ }>;
138
+ export declare class ProjectControlError extends Error {
139
+ readonly code: "PROJECT_COMMAND_UNSUPPORTED" | "PROJECT_PROCESS_ALREADY_RUNNING" | "PROJECT_PROCESS_IDENTITY_MISMATCH" | "PROJECT_PROCESS_START_FAILED" | "PROJECT_PROCESS_STOP_TIMEOUT";
140
+ constructor(code: "PROJECT_COMMAND_UNSUPPORTED" | "PROJECT_PROCESS_ALREADY_RUNNING" | "PROJECT_PROCESS_IDENTITY_MISMATCH" | "PROJECT_PROCESS_START_FAILED" | "PROJECT_PROCESS_STOP_TIMEOUT", message: string);
141
+ }
142
+ export declare function assertManagedProjectTransition(from: ManagedProjectProcessState, to: ManagedProjectProcessState): void;
143
+ export declare function parseManagedProjectProcessSnapshot(value: unknown): ManagedProjectProcessSnapshot;
144
+ export declare function projectCapabilityIntegrations(input: {
145
+ manifest: unknown;
146
+ lock?: unknown;
147
+ dependencies?: Readonly<Record<string, string>>;
148
+ }): CapabilityIntegrationProjection;
149
+ //# sourceMappingURL=project-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-control.d.ts","sourceRoot":"","sources":["../src/project-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { classifyPlatformPackageSpecifier } from "./platform-package-sources.js";
2
+ export function auditCapabilityIntegrations(input) {
3
+ const locked = new Map(input.projection.locked.map((item) => [`${item.capabilityId}@${item.version}`, item]));
4
+ const verified = new Set(input.projection.verified.map((item) => `${item.capabilityId}@${item.version}`));
5
+ const details = input.projection.declared.map((selection) => {
6
+ const key = `${selection.capabilityId}@${selection.version}`;
7
+ const release = input.releases.find((item) => `${item.capabilityId}@${item.version}` === key);
8
+ const lock = locked.get(key);
9
+ const status = verified.has(key) ? "verified" : lock ? "locked" : "declared";
10
+ return Object.freeze({ capabilityId: selection.capabilityId, version: selection.version, status, title: release?.integration?.title ?? selection.capabilityId, purpose: release?.integration?.purpose ?? "该发行版尚未声明技术集成元数据。", packages: Object.freeze((release?.integration?.packages ?? []).map((item) => { const installedVersion = input.dependencies?.[item.packageName] ?? input.hostDependencies?.[item.packageName] ?? null; const hosted = input.dependencies?.[item.packageName] === undefined && input.hostDependencies?.[item.packageName] !== undefined; return Object.freeze({ ...item, imports: Object.freeze(item.imports.map((entry) => Object.freeze({ ...entry }))), installedVersion, state: hosted ? "provided-by-platform" : installedVersion === null ? "missing" : installedVersion === item.version || item.version === "workspace:*" ? "matched" : classifyPlatformPackageSpecifier(installedVersion) === "workspace" ? "local-workspace" : "version-mismatch" }); })), codeAssets: Object.freeze((release?.integration?.codeAssets ?? []).map((item) => Object.freeze({ ...item }))), evidenceIds: Object.freeze([...(lock?.evidenceIds ?? [])]) });
11
+ });
12
+ const managedPackages = new Set(details.flatMap((item) => item.packages.filter((entry) => entry.state === "matched" || entry.state === "local-workspace").map((entry) => entry.packageName)));
13
+ return Object.freeze({ ...input.projection, platformDependencies: Object.freeze(input.projection.platformDependencies.filter((entry) => !managedPackages.has(entry.packageName))), details: Object.freeze(details), findings: Object.freeze(details.flatMap((item) => item.packages.filter((entry) => entry.state !== "matched" && entry.state !== "provided-by-platform").map((entry) => ({ code: entry.state === "missing" ? "INTEGRATION_PACKAGE_MISSING" : entry.state === "local-workspace" ? "INTEGRATION_PACKAGE_SOURCE_LOCAL" : "INTEGRATION_PACKAGE_VERSION_MISMATCH", capabilityId: item.capabilityId, packageName: entry.packageName, expected: entry.version, actual: entry.installedVersion })))) });
14
+ }
15
+ export class ProjectControlError extends Error {
16
+ code;
17
+ constructor(code, message) {
18
+ super(message);
19
+ this.code = code;
20
+ }
21
+ }
22
+ export function assertManagedProjectTransition(from, to) {
23
+ const allowed = {
24
+ stopped: ["initializing"], initializing: ["running", "failed", "stale"], running: ["stopping", "failed", "stale"], stopping: ["stopped", "failed", "stale"], failed: ["initializing", "stopped"], stale: ["stopped"],
25
+ };
26
+ if (!allowed[from].includes(to))
27
+ throw new ProjectControlError("PROJECT_PROCESS_IDENTITY_MISMATCH", `Managed project process cannot transition from ${from} to ${to}`);
28
+ }
29
+ export function parseManagedProjectProcessSnapshot(value) {
30
+ if (value === null || typeof value !== "object")
31
+ throw new ProjectControlError("PROJECT_PROCESS_IDENTITY_MISMATCH", "Managed process snapshot is invalid");
32
+ const item = value;
33
+ if (item.schemaVersion !== 1 || typeof item.processId !== "string" || item.processId.length < 1 || typeof item.projectRoot !== "string" || item.command !== "dev" || !Number.isSafeInteger(item.pid) || item.pid < 1 || typeof item.startedAt !== "string" || Number.isNaN(Date.parse(item.startedAt)) || typeof item.logPath !== "string" || item.logOffset !== undefined && (!Number.isSafeInteger(item.logOffset) || item.logOffset < 0))
34
+ throw new ProjectControlError("PROJECT_PROCESS_IDENTITY_MISMATCH", "Managed process snapshot is invalid");
35
+ return Object.freeze(item);
36
+ }
37
+ export function projectCapabilityIntegrations(input) {
38
+ const manifest = input.manifest;
39
+ const declared = Array.isArray(manifest?.capabilities) ? manifest.capabilities.filter((item) => item !== null && typeof item === "object" && typeof item.capabilityId === "string" && typeof item.version === "string").map((item) => Object.freeze({ capabilityId: item.capabilityId, version: item.version })) : [];
40
+ const lock = input.lock;
41
+ const locked = Array.isArray(lock?.capabilities) ? lock.capabilities.filter((item) => item !== null && typeof item === "object" && typeof item.capabilityId === "string" && typeof item.version === "string").map((item) => Object.freeze({ capabilityId: item.capabilityId, version: item.version, ...(Array.isArray(item.evidenceIds) ? { evidenceIds: Object.freeze([...item.evidenceIds]) } : {}) })) : [];
42
+ const platformDependencies = Object.entries(input.dependencies ?? {}).filter(([name]) => name.startsWith("@aipt/")).sort(([left], [right]) => left.localeCompare(right)).map(([packageName, version]) => Object.freeze({ packageName, version, state: "unmanaged", source: classifyPlatformPackageSpecifier(version) }));
43
+ const template = manifest?.template !== undefined && typeof manifest.template.id === "string" && typeof manifest.template.version === "string" ? Object.freeze({ id: manifest.template.id, version: manifest.template.version }) : null;
44
+ return Object.freeze({ template, declared: Object.freeze(declared), locked: Object.freeze(locked), verified: Object.freeze(locked.filter((item) => (item.evidenceIds?.length ?? 0) > 0)), platformDependencies: Object.freeze(platformDependencies) });
45
+ }
46
+ //# sourceMappingURL=project-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-control.js","sourceRoot":"","sources":["../src/project-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export type MaintenanceCommand = "dev" | "build" | "test" | "package";
2
+ export type EnvironmentRequirement = Readonly<{
3
+ name: string;
4
+ requirement: "optional" | "conditional";
5
+ secret: boolean;
6
+ configured: boolean;
7
+ source: ".env.example" | "application-config-contract";
8
+ configuredSource: "APP_CONFIG_DIR" | null;
9
+ display?: string;
10
+ fingerprint?: string;
11
+ }>;
12
+ export type ProjectMaintenanceProjection = Readonly<{
13
+ commands: readonly Readonly<{
14
+ id: MaintenanceCommand;
15
+ script: string;
16
+ mode: "managed-process" | "foreground-task";
17
+ }>[];
18
+ environment: readonly EnvironmentRequirement[];
19
+ environmentExample: string | null;
20
+ productionValidation: Readonly<{
21
+ contract: true;
22
+ live: readonly ("provider-read" | "oss-write-read-delete")[];
23
+ }>;
24
+ }>;
25
+ export declare function parseEnvironmentExample(source: string): EnvironmentRequirement[];
26
+ export declare function projectMaintenanceProjection(input: {
27
+ projectRoot: string;
28
+ commands: Partial<Record<MaintenanceCommand, string>>;
29
+ }): Promise<ProjectMaintenanceProjection>;
30
+ //# sourceMappingURL=project-maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-maintenance.d.ts","sourceRoot":"","sources":["../src/project-maintenance.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AACtE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,UAAU,GAAG,aAAa,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,6BAA6B,CAAC;IAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAC1R,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,QAAQ,EAAE,SAAS,QAAQ,CAAC;QAAE,EAAE,EAAE,kBAAkB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,CAAA;KAAE,CAAC,EAAE,CAAC;IACvH,WAAW,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC/C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,oBAAoB,EAAE,QAAQ,CAAC;QAAE,QAAQ,EAAE,IAAI,CAAC;QAAC,IAAI,EAAE,SAAS,CAAC,eAAe,GAAG,uBAAuB,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;CAClH,CAAC,CAAC;AAKH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAShF;AAED,wBAAsB,4BAA4B,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAA;CAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAW/K"}
@@ -0,0 +1,29 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { projectApplicationConfig } from "./application-config-binding.js";
4
+ const environmentName = /^[A-Z][A-Z0-9_]*$/u;
5
+ const secretName = /(?:API_KEY|ACCESS_KEY|SECRET|TOKEN|PASSWORD|PRIVATE_KEY|DATABASE_URL|POSTGRES_URL)$/u;
6
+ export function parseEnvironmentExample(source) {
7
+ const requirements = new Map();
8
+ for (const line of source.split(/\r?\n/u)) {
9
+ const match = /^([A-Z][A-Z0-9_]*)=(.*)$/u.exec(line.trim());
10
+ if (!match || !environmentName.test(match[1]))
11
+ continue;
12
+ const name = match[1], defaultValue = match[2].trim();
13
+ requirements.set(name, { name, requirement: defaultValue.length === 0 ? "conditional" : "optional", secret: secretName.test(name), configured: false, source: ".env.example", configuredSource: null });
14
+ }
15
+ return [...requirements.values()];
16
+ }
17
+ export async function projectMaintenanceProjection(input) {
18
+ const environmentExample = await readFile(path.join(input.projectRoot, ".env.example"), "utf8").then(() => ".env.example").catch(() => null);
19
+ const source = environmentExample ? await readFile(path.join(input.projectRoot, environmentExample), "utf8") : "";
20
+ const external = await projectApplicationConfig({ projectRoot: input.projectRoot }).catch(() => null);
21
+ const order = ["dev", "build", "test", "package"];
22
+ return {
23
+ commands: order.flatMap((id) => input.commands[id] ? [{ id, script: input.commands[id], mode: id === "dev" ? "managed-process" : "foreground-task" }] : []),
24
+ environment: external ? external.entries.map((entry) => ({ name: entry.name, requirement: entry.required ? "conditional" : "optional", secret: entry.kind !== "value", configured: entry.configured, source: "application-config-contract", configuredSource: "APP_CONFIG_DIR", display: entry.display, ...(entry.fingerprint ? { fingerprint: entry.fingerprint } : {}) })) : parseEnvironmentExample(source),
25
+ environmentExample,
26
+ productionValidation: { contract: true, live: ["provider-read", "oss-write-read-delete"] },
27
+ };
28
+ }
29
+ //# sourceMappingURL=project-maintenance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-maintenance.js","sourceRoot":"","sources":["../src/project-maintenance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type MetadataCommitState } from "./adoption-metadata.js";
2
+ import type { TransactionSnapshot } from "./filesystem-contracts.js";
3
+ export type ProjectRecoveryInspection = {
4
+ required: false;
5
+ } | {
6
+ required: true;
7
+ kind: "filesystem" | "metadata";
8
+ planId: string;
9
+ state: TransactionSnapshot["state"] | MetadataCommitState;
10
+ };
11
+ export declare function inspectProjectRecovery(projectRoot: string): Promise<ProjectRecoveryInspection>;
12
+ export declare function recoverProject(input: {
13
+ projectRoot: string;
14
+ now: string;
15
+ }): Promise<{
16
+ kind: "none";
17
+ state: "not-required";
18
+ } | {
19
+ kind: "filesystem";
20
+ planId: string;
21
+ state: TransactionSnapshot["state"];
22
+ } | {
23
+ kind: "metadata";
24
+ planId: string;
25
+ state: "committed";
26
+ }>;
27
+ export declare function recoverProjectTransactionTopology(input: {
28
+ projectRoot: string;
29
+ now: string;
30
+ }): Promise<Awaited<ReturnType<typeof recoverProject>>>;
31
+ //# sourceMappingURL=project-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-recovery.d.ts","sourceRoot":"","sources":["../src/project-recovery.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,MAAM,MAAM,yBAAyB,GACjC;IAAE,QAAQ,EAAE,KAAK,CAAA;CAAE,GACnB;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,mBAAmB,CAAC;CAC3D,CAAC;AAUN,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,yBAAyB,CAAC,CAyBpC;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb,GAAG,OAAO,CACP;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAC3D,CAaA;AAED,wBAAsB,iCAAiC,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,CASxJ"}