@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.
- package/README.md +25 -0
- package/dist/adoption-contracts.d.ts +140 -0
- package/dist/adoption-contracts.d.ts.map +1 -0
- package/dist/adoption-contracts.js +2 -0
- package/dist/adoption-contracts.js.map +1 -0
- package/dist/adoption-metadata.d.ts +72 -0
- package/dist/adoption-metadata.d.ts.map +1 -0
- package/dist/adoption-metadata.js +408 -0
- package/dist/adoption-metadata.js.map +1 -0
- package/dist/adoption-schemas.d.ts +1608 -0
- package/dist/adoption-schemas.d.ts.map +1 -0
- package/dist/adoption-schemas.js +319 -0
- package/dist/adoption-schemas.js.map +1 -0
- package/dist/application-config-binding.d.ts +54 -0
- package/dist/application-config-binding.d.ts.map +1 -0
- package/dist/application-config-binding.js +139 -0
- package/dist/application-config-binding.js.map +1 -0
- package/dist/application-config-contract.d.ts +159 -0
- package/dist/application-config-contract.d.ts.map +1 -0
- package/dist/application-config-contract.js +142 -0
- package/dist/application-config-contract.js.map +1 -0
- package/dist/blank-profile.d.ts +60 -0
- package/dist/blank-profile.d.ts.map +1 -0
- package/dist/blank-profile.js +182 -0
- package/dist/blank-profile.js.map +1 -0
- package/dist/catalog-source.d.ts +167 -0
- package/dist/catalog-source.d.ts.map +1 -0
- package/dist/catalog-source.js +252 -0
- package/dist/catalog-source.js.map +1 -0
- package/dist/code-module-publication.d.ts +113 -0
- package/dist/code-module-publication.d.ts.map +1 -0
- package/dist/code-module-publication.js +71 -0
- package/dist/code-module-publication.js.map +1 -0
- package/dist/contracts.d.ts +150 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +3 -0
- package/dist/contracts.js.map +1 -0
- package/dist/delivery.d.ts +201 -0
- package/dist/delivery.d.ts.map +1 -0
- package/dist/delivery.js +364 -0
- package/dist/delivery.js.map +1 -0
- package/dist/dependency-resolution.d.ts +46 -0
- package/dist/dependency-resolution.d.ts.map +1 -0
- package/dist/dependency-resolution.js +35 -0
- package/dist/dependency-resolution.js.map +1 -0
- package/dist/doctor.d.ts +50 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +62 -0
- package/dist/doctor.js.map +1 -0
- package/dist/durability-trace.d.ts +31 -0
- package/dist/durability-trace.d.ts.map +1 -0
- package/dist/durability-trace.js +45 -0
- package/dist/durability-trace.js.map +1 -0
- package/dist/engineering-operations.d.ts +43 -0
- package/dist/engineering-operations.d.ts.map +1 -0
- package/dist/engineering-operations.js +19 -0
- package/dist/engineering-operations.js.map +1 -0
- package/dist/engineering-product.d.ts +261 -0
- package/dist/engineering-product.d.ts.map +1 -0
- package/dist/engineering-product.js +61 -0
- package/dist/engineering-product.js.map +1 -0
- package/dist/example-recipe.d.ts +147 -0
- package/dist/example-recipe.d.ts.map +1 -0
- package/dist/example-recipe.js +58 -0
- package/dist/example-recipe.js.map +1 -0
- package/dist/feature-planner.d.ts +59 -0
- package/dist/feature-planner.d.ts.map +1 -0
- package/dist/feature-planner.js +160 -0
- package/dist/feature-planner.js.map +1 -0
- package/dist/filesystem-contracts.d.ts +77 -0
- package/dist/filesystem-contracts.d.ts.map +1 -0
- package/dist/filesystem-contracts.js +2 -0
- package/dist/filesystem-contracts.js.map +1 -0
- package/dist/filesystem-transaction.d.ts +52 -0
- package/dist/filesystem-transaction.d.ts.map +1 -0
- package/dist/filesystem-transaction.js +749 -0
- package/dist/filesystem-transaction.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/integrity.d.ts +3 -0
- package/dist/integrity.d.ts.map +1 -0
- package/dist/integrity.js +17 -0
- package/dist/integrity.js.map +1 -0
- package/dist/local-artifact-registry.d.ts +55 -0
- package/dist/local-artifact-registry.d.ts.map +1 -0
- package/dist/local-artifact-registry.js +87 -0
- package/dist/local-artifact-registry.js.map +1 -0
- package/dist/locked-repository-state.d.ts +21 -0
- package/dist/locked-repository-state.d.ts.map +1 -0
- package/dist/locked-repository-state.js +62 -0
- package/dist/locked-repository-state.js.map +1 -0
- package/dist/managed-region.d.ts +11 -0
- package/dist/managed-region.d.ts.map +1 -0
- package/dist/managed-region.js +45 -0
- package/dist/managed-region.js.map +1 -0
- package/dist/package-adoption.d.ts +179 -0
- package/dist/package-adoption.d.ts.map +1 -0
- package/dist/package-adoption.js +332 -0
- package/dist/package-adoption.js.map +1 -0
- package/dist/package-release.d.ts +42 -0
- package/dist/package-release.d.ts.map +1 -0
- package/dist/package-release.js +85 -0
- package/dist/package-release.js.map +1 -0
- package/dist/plan-state.d.ts +10 -0
- package/dist/plan-state.d.ts.map +1 -0
- package/dist/plan-state.js +33 -0
- package/dist/plan-state.js.map +1 -0
- package/dist/planner.d.ts +19 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +111 -0
- package/dist/planner.js.map +1 -0
- package/dist/platform-package-sources.d.ts +49 -0
- package/dist/platform-package-sources.d.ts.map +1 -0
- package/dist/platform-package-sources.js +98 -0
- package/dist/platform-package-sources.js.map +1 -0
- package/dist/project-bootstrap.d.ts +42 -0
- package/dist/project-bootstrap.d.ts.map +1 -0
- package/dist/project-bootstrap.js +270 -0
- package/dist/project-bootstrap.js.map +1 -0
- package/dist/project-control.d.ts +149 -0
- package/dist/project-control.d.ts.map +1 -0
- package/dist/project-control.js +46 -0
- package/dist/project-control.js.map +1 -0
- package/dist/project-maintenance.d.ts +30 -0
- package/dist/project-maintenance.d.ts.map +1 -0
- package/dist/project-maintenance.js +29 -0
- package/dist/project-maintenance.js.map +1 -0
- package/dist/project-recovery.d.ts +31 -0
- package/dist/project-recovery.d.ts.map +1 -0
- package/dist/project-recovery.js +80 -0
- package/dist/project-recovery.js.map +1 -0
- package/dist/recovery-override.d.ts +20 -0
- package/dist/recovery-override.d.ts.map +1 -0
- package/dist/recovery-override.js +27 -0
- package/dist/recovery-override.js.map +1 -0
- package/dist/release-loader.d.ts +9 -0
- package/dist/release-loader.d.ts.map +1 -0
- package/dist/release-loader.js +86 -0
- package/dist/release-loader.js.map +1 -0
- package/dist/resolution-evidence.d.ts +67 -0
- package/dist/resolution-evidence.d.ts.map +1 -0
- package/dist/resolution-evidence.js +98 -0
- package/dist/resolution-evidence.js.map +1 -0
- package/dist/resolution-worker-build.d.ts +33 -0
- package/dist/resolution-worker-build.d.ts.map +1 -0
- package/dist/resolution-worker-build.js +42 -0
- package/dist/resolution-worker-build.js.map +1 -0
- package/dist/runtime-observability.d.ts +147 -0
- package/dist/runtime-observability.d.ts.map +1 -0
- package/dist/runtime-observability.js +264 -0
- package/dist/runtime-observability.js.map +1 -0
- package/dist/schemas.d.ts +740 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +348 -0
- package/dist/schemas.js.map +1 -0
- package/dist/solution-catalog.d.ts +169 -0
- package/dist/solution-catalog.d.ts.map +1 -0
- package/dist/solution-catalog.js +60 -0
- package/dist/solution-catalog.js.map +1 -0
- package/dist/standalone-npm-profile.d.ts +146 -0
- package/dist/standalone-npm-profile.d.ts.map +1 -0
- package/dist/standalone-npm-profile.js +425 -0
- package/dist/standalone-npm-profile.js.map +1 -0
- package/dist/testing.d.ts +5 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +3 -0
- package/dist/testing.js.map +1 -0
- package/dist/upgrade-planner.d.ts +45 -0
- package/dist/upgrade-planner.d.ts.map +1 -0
- package/dist/upgrade-planner.js +207 -0
- package/dist/upgrade-planner.js.map +1 -0
- package/dist/workspace-publication.d.ts +18 -0
- package/dist/workspace-publication.d.ts.map +1 -0
- package/dist/workspace-publication.js +33 -0
- package/dist/workspace-publication.js.map +1 -0
- package/dist/workspace-topology.d.ts +22 -0
- package/dist/workspace-topology.d.ts.map +1 -0
- package/dist/workspace-topology.js +117 -0
- package/dist/workspace-topology.js.map +1 -0
- 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"}
|