@madebywild/agent-harness-framework 0.9.1
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/dist/cli/adapters/commander.d.ts +14 -0
- package/dist/cli/adapters/commander.d.ts.map +1 -0
- package/dist/cli/adapters/commander.js +348 -0
- package/dist/cli/adapters/commander.js.map +1 -0
- package/dist/cli/adapters/interactive.d.ts +11 -0
- package/dist/cli/adapters/interactive.d.ts.map +1 -0
- package/dist/cli/adapters/interactive.js +375 -0
- package/dist/cli/adapters/interactive.js.map +1 -0
- package/dist/cli/command-registry.d.ts +27 -0
- package/dist/cli/command-registry.d.ts.map +1 -0
- package/dist/cli/command-registry.js +470 -0
- package/dist/cli/command-registry.js.map +1 -0
- package/dist/cli/contracts.d.ts +122 -0
- package/dist/cli/contracts.d.ts.map +1 -0
- package/dist/cli/contracts.js +2 -0
- package/dist/cli/contracts.js.map +1 -0
- package/dist/cli/handlers/apply.d.ts +3 -0
- package/dist/cli/handlers/apply.d.ts.map +1 -0
- package/dist/cli/handlers/apply.js +17 -0
- package/dist/cli/handlers/apply.js.map +1 -0
- package/dist/cli/handlers/doctor.d.ts +3 -0
- package/dist/cli/handlers/doctor.d.ts.map +1 -0
- package/dist/cli/handlers/doctor.js +16 -0
- package/dist/cli/handlers/doctor.js.map +1 -0
- package/dist/cli/handlers/entities.d.ts +22 -0
- package/dist/cli/handlers/entities.d.ts.map +1 -0
- package/dist/cli/handlers/entities.js +92 -0
- package/dist/cli/handlers/entities.js.map +1 -0
- package/dist/cli/handlers/init.d.ts +5 -0
- package/dist/cli/handlers/init.d.ts.map +1 -0
- package/dist/cli/handlers/init.js +17 -0
- package/dist/cli/handlers/init.js.map +1 -0
- package/dist/cli/handlers/migrate.d.ts +6 -0
- package/dist/cli/handlers/migrate.d.ts.map +1 -0
- package/dist/cli/handlers/migrate.js +22 -0
- package/dist/cli/handlers/migrate.js.map +1 -0
- package/dist/cli/handlers/plan.d.ts +5 -0
- package/dist/cli/handlers/plan.d.ts.map +1 -0
- package/dist/cli/handlers/plan.js +18 -0
- package/dist/cli/handlers/plan.js.map +1 -0
- package/dist/cli/handlers/provider.d.ts +8 -0
- package/dist/cli/handlers/provider.d.ts.map +1 -0
- package/dist/cli/handlers/provider.js +37 -0
- package/dist/cli/handlers/provider.js.map +1 -0
- package/dist/cli/handlers/registry.d.ts +27 -0
- package/dist/cli/handlers/registry.d.ts.map +1 -0
- package/dist/cli/handlers/registry.js +133 -0
- package/dist/cli/handlers/registry.js.map +1 -0
- package/dist/cli/handlers/validate.d.ts +3 -0
- package/dist/cli/handlers/validate.d.ts.map +1 -0
- package/dist/cli/handlers/validate.js +16 -0
- package/dist/cli/handlers/validate.js.map +1 -0
- package/dist/cli/handlers/watch.d.ts +6 -0
- package/dist/cli/handlers/watch.d.ts.map +1 -0
- package/dist/cli/handlers/watch.js +46 -0
- package/dist/cli/handlers/watch.js.map +1 -0
- package/dist/cli/main.d.ts +6 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +90 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/renderers/json.d.ts +10 -0
- package/dist/cli/renderers/json.d.ts.map +1 -0
- package/dist/cli/renderers/json.js +17 -0
- package/dist/cli/renderers/json.js.map +1 -0
- package/dist/cli/renderers/text.d.ts +3 -0
- package/dist/cli/renderers/text.d.ts.map +1 -0
- package/dist/cli/renderers/text.js +155 -0
- package/dist/cli/renderers/text.js.map +1 -0
- package/dist/cli/utils/runtime.d.ts +26 -0
- package/dist/cli/utils/runtime.d.ts.map +1 -0
- package/dist/cli/utils/runtime.js +158 -0
- package/dist/cli/utils/runtime.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/engine/entities.d.ts +33 -0
- package/dist/engine/entities.d.ts.map +1 -0
- package/dist/engine/entities.js +461 -0
- package/dist/engine/entities.js.map +1 -0
- package/dist/engine/state.d.ts +19 -0
- package/dist/engine/state.d.ts.map +1 -0
- package/dist/engine/state.js +70 -0
- package/dist/engine/state.js.map +1 -0
- package/dist/engine/utils.d.ts +28 -0
- package/dist/engine/utils.d.ts.map +1 -0
- package/dist/engine/utils.js +157 -0
- package/dist/engine/utils.js.map +1 -0
- package/dist/engine.d.ts +59 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +398 -0
- package/dist/engine.js.map +1 -0
- package/dist/entity-registries.d.ts +40 -0
- package/dist/entity-registries.d.ts.map +1 -0
- package/dist/entity-registries.js +257 -0
- package/dist/entity-registries.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +6 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +552 -0
- package/dist/loader.js.map +1 -0
- package/dist/paths.d.ts +23 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +40 -0
- package/dist/paths.js.map +1 -0
- package/dist/planner.d.ts +5 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +316 -0
- package/dist/planner.js.map +1 -0
- package/dist/provider-adapters/claude.d.ts +4 -0
- package/dist/provider-adapters/claude.d.ts.map +1 -0
- package/dist/provider-adapters/claude.js +36 -0
- package/dist/provider-adapters/claude.js.map +1 -0
- package/dist/provider-adapters/codex.d.ts +4 -0
- package/dist/provider-adapters/codex.d.ts.map +1 -0
- package/dist/provider-adapters/codex.js +93 -0
- package/dist/provider-adapters/codex.js.map +1 -0
- package/dist/provider-adapters/constants.d.ts +21 -0
- package/dist/provider-adapters/constants.d.ts.map +1 -0
- package/dist/provider-adapters/constants.js +21 -0
- package/dist/provider-adapters/constants.js.map +1 -0
- package/dist/provider-adapters/copilot.d.ts +4 -0
- package/dist/provider-adapters/copilot.d.ts.map +1 -0
- package/dist/provider-adapters/copilot.js +37 -0
- package/dist/provider-adapters/copilot.js.map +1 -0
- package/dist/provider-adapters/create-adapter.d.ts +4 -0
- package/dist/provider-adapters/create-adapter.d.ts.map +1 -0
- package/dist/provider-adapters/create-adapter.js +67 -0
- package/dist/provider-adapters/create-adapter.js.map +1 -0
- package/dist/provider-adapters/mcp.d.ts +4 -0
- package/dist/provider-adapters/mcp.d.ts.map +1 -0
- package/dist/provider-adapters/mcp.js +40 -0
- package/dist/provider-adapters/mcp.js.map +1 -0
- package/dist/provider-adapters/registry.d.ts +4 -0
- package/dist/provider-adapters/registry.d.ts.map +1 -0
- package/dist/provider-adapters/registry.js +11 -0
- package/dist/provider-adapters/registry.js.map +1 -0
- package/dist/provider-adapters/renderers.d.ts +3 -0
- package/dist/provider-adapters/renderers.d.ts.map +1 -0
- package/dist/provider-adapters/renderers.js +10 -0
- package/dist/provider-adapters/renderers.js.map +1 -0
- package/dist/provider-adapters/subagents.d.ts +19 -0
- package/dist/provider-adapters/subagents.d.ts.map +1 -0
- package/dist/provider-adapters/subagents.js +58 -0
- package/dist/provider-adapters/subagents.js.map +1 -0
- package/dist/provider-adapters/types.d.ts +18 -0
- package/dist/provider-adapters/types.d.ts.map +1 -0
- package/dist/provider-adapters/types.js +2 -0
- package/dist/provider-adapters/types.js.map +1 -0
- package/dist/providers.d.ts +6 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +15 -0
- package/dist/providers.js.map +1 -0
- package/dist/registry-validator.d.ts +3 -0
- package/dist/registry-validator.d.ts.map +1 -0
- package/dist/registry-validator.js +222 -0
- package/dist/registry-validator.js.map +1 -0
- package/dist/repository.d.ts +36 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +314 -0
- package/dist/repository.js.map +1 -0
- package/dist/types.d.ts +190 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +16 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +115 -0
- package/dist/utils.js.map +1 -0
- package/dist/versioning/doctor.d.ts +6 -0
- package/dist/versioning/doctor.d.ts.map +1 -0
- package/dist/versioning/doctor.js +284 -0
- package/dist/versioning/doctor.js.map +1 -0
- package/dist/versioning/migrate.d.ts +9 -0
- package/dist/versioning/migrate.d.ts.map +1 -0
- package/dist/versioning/migrate.js +362 -0
- package/dist/versioning/migrate.js.map +1 -0
- package/dist/versioning/registry.d.ts +18 -0
- package/dist/versioning/registry.d.ts.map +1 -0
- package/dist/versioning/registry.js +63 -0
- package/dist/versioning/registry.js.map +1 -0
- package/package.json +52 -0
package/dist/utils.js
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
export function sha256(value) {
|
|
5
|
+
return crypto.createHash("sha256").update(value, "utf8").digest("hex");
|
|
6
|
+
}
|
|
7
|
+
export function normalizeRelativePath(input) {
|
|
8
|
+
const posixInput = input.replace(/\\/g, "/");
|
|
9
|
+
if (/^[a-zA-Z]:/u.test(posixInput)) {
|
|
10
|
+
throw new Error(`invalid relative path '${input}'`);
|
|
11
|
+
}
|
|
12
|
+
if (posixInput.split("/").includes("..")) {
|
|
13
|
+
throw new Error(`invalid relative path '${input}'`);
|
|
14
|
+
}
|
|
15
|
+
const normalized = path.posix.normalize(posixInput);
|
|
16
|
+
const withoutDot = normalized.startsWith("./") ? normalized.slice(2) : normalized;
|
|
17
|
+
if (!withoutDot ||
|
|
18
|
+
withoutDot === "." ||
|
|
19
|
+
withoutDot === ".." ||
|
|
20
|
+
withoutDot.startsWith("/") ||
|
|
21
|
+
withoutDot.split("/").includes("..")) {
|
|
22
|
+
throw new Error(`invalid relative path '${input}'`);
|
|
23
|
+
}
|
|
24
|
+
return withoutDot;
|
|
25
|
+
}
|
|
26
|
+
export function toPosixRelative(fromAbs, rootAbs) {
|
|
27
|
+
const relative = path.relative(rootAbs, fromAbs).replace(/\\/g, "/");
|
|
28
|
+
return normalizeRelativePath(relative);
|
|
29
|
+
}
|
|
30
|
+
export function stableStringify(value) {
|
|
31
|
+
return `${JSON.stringify(sortJsonValue(value), undefined, 2)}\n`;
|
|
32
|
+
}
|
|
33
|
+
function sortJsonValue(value) {
|
|
34
|
+
if (Array.isArray(value)) {
|
|
35
|
+
return value.map((entry) => sortJsonValue(entry));
|
|
36
|
+
}
|
|
37
|
+
if (value && typeof value === "object") {
|
|
38
|
+
const objectValue = value;
|
|
39
|
+
const sortedEntries = Object.entries(objectValue)
|
|
40
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
41
|
+
.map(([key, nestedValue]) => [key, sortJsonValue(nestedValue)]);
|
|
42
|
+
return Object.fromEntries(sortedEntries);
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
export async function readTextIfExists(filePath) {
|
|
47
|
+
try {
|
|
48
|
+
return await fs.readFile(filePath, "utf8");
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (isNotFoundError(error)) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export async function exists(filePath) {
|
|
58
|
+
try {
|
|
59
|
+
await fs.stat(filePath);
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (isNotFoundError(error)) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export async function ensureParentDir(filePath) {
|
|
70
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
export async function writeFileAtomic(absPath, content) {
|
|
73
|
+
await ensureParentDir(absPath);
|
|
74
|
+
const tempPath = path.join(path.dirname(absPath), `.${path.basename(absPath)}.${process.pid}.${crypto.randomUUID()}.tmp`);
|
|
75
|
+
await fs.writeFile(tempPath, content, "utf8");
|
|
76
|
+
try {
|
|
77
|
+
await fs.rename(tempPath, absPath);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
await fs.rm(tempPath, { force: true }).catch(() => {
|
|
81
|
+
// best effort cleanup for failed atomic writes
|
|
82
|
+
});
|
|
83
|
+
throw error;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export async function copyToBackup(rootAbs, relPath, backupRootAbs) {
|
|
87
|
+
const normalized = normalizeRelativePath(relPath);
|
|
88
|
+
const sourceAbs = path.join(rootAbs, normalized);
|
|
89
|
+
if (!(await exists(sourceAbs))) {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
const backupAbs = path.join(backupRootAbs, normalized);
|
|
93
|
+
await ensureParentDir(backupAbs);
|
|
94
|
+
await fs.copyFile(sourceAbs, backupAbs);
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
export function isNotFoundError(error) {
|
|
98
|
+
return (typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT");
|
|
99
|
+
}
|
|
100
|
+
export function deepEqual(left, right) {
|
|
101
|
+
return JSON.stringify(sortJsonValue(left)) === JSON.stringify(sortJsonValue(right));
|
|
102
|
+
}
|
|
103
|
+
export function uniqSorted(values) {
|
|
104
|
+
return [...new Set(values)].sort((left, right) => left.localeCompare(right));
|
|
105
|
+
}
|
|
106
|
+
export function nowIso() {
|
|
107
|
+
return new Date().toISOString();
|
|
108
|
+
}
|
|
109
|
+
export function stripTrailingNewlines(value) {
|
|
110
|
+
return value.replace(/[\n\r]+$/g, "");
|
|
111
|
+
}
|
|
112
|
+
export function withSingleTrailingNewline(value) {
|
|
113
|
+
return `${stripTrailingNewlines(value)}\n`;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { HarnessPaths } from "../paths.js";
|
|
2
|
+
import type { Diagnostic, DoctorResult } from "../types.js";
|
|
3
|
+
export declare function runDoctor(paths: HarnessPaths): Promise<DoctorResult>;
|
|
4
|
+
export declare function hasVersionBlockers(doctor: DoctorResult): boolean;
|
|
5
|
+
export declare function buildVersionPreflightDiagnostics(doctor: DoctorResult): Diagnostic[];
|
|
6
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/versioning/doctor.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAgD,MAAM,aAAa,CAAC;AAK1G,wBAAsB,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAqG1E;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAEhE;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,YAAY,GAAG,UAAU,EAAE,CAYnF"}
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { detectDocumentVersion, LATEST_VERSION_BY_KIND, parseManagedIndex, parseManifest, parseManifestLock, parseProviderOverride, providerIdSchema, VersionError, } from "@madebywild/agent-harness-manifest";
|
|
3
|
+
import { collectSourceCandidates } from "../repository.js";
|
|
4
|
+
import { readTextIfExists } from "../utils.js";
|
|
5
|
+
const OVERRIDE_PROVIDER_PATTERN = /(?:\.overrides\.|OVERRIDES\.)(codex|claude|copilot)\.ya?ml$/u;
|
|
6
|
+
export async function runDoctor(paths) {
|
|
7
|
+
const files = [];
|
|
8
|
+
const manifestStatus = await inspectJsonDocument(paths, {
|
|
9
|
+
kind: "manifest",
|
|
10
|
+
relativePath: ".harness/manifest.json",
|
|
11
|
+
required: true,
|
|
12
|
+
parseCurrent: parseManifest,
|
|
13
|
+
invalidCode: "MANIFEST_INVALID",
|
|
14
|
+
});
|
|
15
|
+
if (manifestStatus) {
|
|
16
|
+
files.push(manifestStatus);
|
|
17
|
+
}
|
|
18
|
+
const lockStatus = await inspectJsonDocument(paths, {
|
|
19
|
+
kind: "lock",
|
|
20
|
+
relativePath: ".harness/manifest.lock.json",
|
|
21
|
+
required: false,
|
|
22
|
+
parseCurrent: parseManifestLock,
|
|
23
|
+
invalidCode: "LOCK_INVALID",
|
|
24
|
+
});
|
|
25
|
+
if (lockStatus) {
|
|
26
|
+
files.push(lockStatus);
|
|
27
|
+
}
|
|
28
|
+
const managedIndexStatus = await inspectJsonDocument(paths, {
|
|
29
|
+
kind: "managed-index",
|
|
30
|
+
relativePath: ".harness/managed-index.json",
|
|
31
|
+
required: false,
|
|
32
|
+
parseCurrent: parseManagedIndex,
|
|
33
|
+
invalidCode: "MANAGED_INDEX_INVALID",
|
|
34
|
+
});
|
|
35
|
+
if (managedIndexStatus) {
|
|
36
|
+
files.push(managedIndexStatus);
|
|
37
|
+
}
|
|
38
|
+
const sourceCandidates = await collectSourceCandidates(paths);
|
|
39
|
+
const overrideCandidates = sourceCandidates.filter((candidate) => OVERRIDE_PROVIDER_PATTERN.test(candidate));
|
|
40
|
+
for (const overridePath of overrideCandidates) {
|
|
41
|
+
const provider = parseProviderFromOverridePath(overridePath);
|
|
42
|
+
const absolute = path.join(paths.root, overridePath);
|
|
43
|
+
const text = await readTextIfExists(absolute);
|
|
44
|
+
if (text === null) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const YAML = await import("yaml");
|
|
49
|
+
const parsed = YAML.parse(text);
|
|
50
|
+
files.push(inspectParsedVersionedObject("provider-override", overridePath, parsed, parseProviderOverride, provider));
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
files.push({
|
|
54
|
+
code: "OVERRIDE_INVALID",
|
|
55
|
+
severity: "error",
|
|
56
|
+
message: error instanceof Error ? error.message : "Invalid override YAML",
|
|
57
|
+
path: overridePath,
|
|
58
|
+
provider,
|
|
59
|
+
kind: "provider-override",
|
|
60
|
+
status: "invalid",
|
|
61
|
+
latestVersion: LATEST_VERSION_BY_KIND["provider-override"],
|
|
62
|
+
canMigrate: false,
|
|
63
|
+
hint: "Fix override YAML/schema issues before running 'harness migrate'.",
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const diagnostics = files
|
|
68
|
+
.filter((status) => status.status !== "current")
|
|
69
|
+
.map((status) => ({
|
|
70
|
+
code: status.code,
|
|
71
|
+
severity: status.severity,
|
|
72
|
+
message: status.message,
|
|
73
|
+
hint: status.hint,
|
|
74
|
+
path: status.path,
|
|
75
|
+
provider: status.provider,
|
|
76
|
+
}));
|
|
77
|
+
const migrationNeeded = files.some((status) => status.status === "outdated");
|
|
78
|
+
const hasBlockingState = files.some((status) => ["unsupported", "invalid", "missing"].includes(status.status));
|
|
79
|
+
if (migrationNeeded && files.some((status) => status.status === "current")) {
|
|
80
|
+
diagnostics.push({
|
|
81
|
+
code: "MIGRATION_INCOMPLETE",
|
|
82
|
+
severity: "error",
|
|
83
|
+
message: "Workspace contains mixed schema versions. Rerun 'harness migrate' to converge to latest schema.",
|
|
84
|
+
path: ".harness",
|
|
85
|
+
hint: "Run 'harness migrate' again. If it fails, inspect diagnostics and fix blocking files first.",
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
healthy: files.length > 0 && diagnostics.length === 0,
|
|
90
|
+
migrationNeeded,
|
|
91
|
+
migrationPossible: !hasBlockingState,
|
|
92
|
+
files,
|
|
93
|
+
diagnostics,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export function hasVersionBlockers(doctor) {
|
|
97
|
+
return doctor.files.some((status) => status.status !== "current");
|
|
98
|
+
}
|
|
99
|
+
export function buildVersionPreflightDiagnostics(doctor) {
|
|
100
|
+
return doctor.diagnostics.length > 0
|
|
101
|
+
? doctor.diagnostics
|
|
102
|
+
: [
|
|
103
|
+
{
|
|
104
|
+
code: "WORKSPACE_VERSION_BLOCKED",
|
|
105
|
+
severity: "error",
|
|
106
|
+
message: "Workspace schema version is not compatible with this CLI runtime.",
|
|
107
|
+
hint: "Run 'harness doctor' then 'harness migrate'.",
|
|
108
|
+
path: ".harness",
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
}
|
|
112
|
+
async function inspectJsonDocument(paths, input) {
|
|
113
|
+
const absolute = path.join(paths.root, input.relativePath);
|
|
114
|
+
const text = await readTextIfExists(absolute);
|
|
115
|
+
if (text === null) {
|
|
116
|
+
if (!input.required) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const isDefaultManifest = input.kind === "manifest" && input.relativePath === ".harness/manifest.json";
|
|
120
|
+
return {
|
|
121
|
+
code: isDefaultManifest ? "MANIFEST_NOT_FOUND" : "DOCUMENT_NOT_FOUND",
|
|
122
|
+
severity: "error",
|
|
123
|
+
message: isDefaultManifest
|
|
124
|
+
? "Missing manifest file at .harness/manifest.json"
|
|
125
|
+
: `Missing required ${input.kind} file at ${input.relativePath}`,
|
|
126
|
+
path: input.relativePath,
|
|
127
|
+
hint: isDefaultManifest ? "Run 'harness init' first." : undefined,
|
|
128
|
+
kind: input.kind,
|
|
129
|
+
status: "missing",
|
|
130
|
+
latestVersion: LATEST_VERSION_BY_KIND[input.kind],
|
|
131
|
+
canMigrate: false,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
let parsed;
|
|
135
|
+
try {
|
|
136
|
+
parsed = JSON.parse(text);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
return {
|
|
140
|
+
code: input.invalidCode,
|
|
141
|
+
severity: "error",
|
|
142
|
+
message: error instanceof Error ? error.message : "Invalid JSON",
|
|
143
|
+
path: input.relativePath,
|
|
144
|
+
kind: input.kind,
|
|
145
|
+
status: "invalid",
|
|
146
|
+
latestVersion: LATEST_VERSION_BY_KIND[input.kind],
|
|
147
|
+
canMigrate: false,
|
|
148
|
+
hint: "Fix schema/JSON issues before running 'harness migrate'.",
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
return inspectParsedVersionedObject(input.kind, input.relativePath, parsed, input.parseCurrent);
|
|
152
|
+
}
|
|
153
|
+
function inspectParsedVersionedObject(kind, pathValue, parsed, parseCurrent, provider) {
|
|
154
|
+
const detection = detectDocumentVersion(kind, parsed);
|
|
155
|
+
if (detection.status === "missing") {
|
|
156
|
+
return createVersionStatus(kind, pathValue, {
|
|
157
|
+
status: "missing",
|
|
158
|
+
code: versionCode(kind, "MISSING"),
|
|
159
|
+
message: "Missing required numeric 'version' field",
|
|
160
|
+
provider,
|
|
161
|
+
canMigrate: false,
|
|
162
|
+
hint: "Add a valid numeric 'version' field and rerun 'harness doctor'.",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (detection.status === "invalid_type") {
|
|
166
|
+
return createVersionStatus(kind, pathValue, {
|
|
167
|
+
status: "invalid",
|
|
168
|
+
code: versionCode(kind, "INVALID"),
|
|
169
|
+
message: "Version field must be an integer",
|
|
170
|
+
provider,
|
|
171
|
+
canMigrate: false,
|
|
172
|
+
hint: "Set 'version' to an integer value before running 'harness migrate'.",
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
const version = detection.version;
|
|
176
|
+
if (version < detection.latestVersion) {
|
|
177
|
+
return createVersionStatus(kind, pathValue, {
|
|
178
|
+
status: "outdated",
|
|
179
|
+
version,
|
|
180
|
+
code: versionCode(kind, "OUTDATED"),
|
|
181
|
+
message: `Detected version ${version}; latest supported version is ${detection.latestVersion}`,
|
|
182
|
+
provider,
|
|
183
|
+
canMigrate: true,
|
|
184
|
+
hint: "Run 'harness migrate' to upgrade this file.",
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (version > detection.latestVersion) {
|
|
188
|
+
return createVersionStatus(kind, pathValue, {
|
|
189
|
+
status: "unsupported",
|
|
190
|
+
version,
|
|
191
|
+
code: versionCode(kind, "NEWER_THAN_CLI"),
|
|
192
|
+
message: `Detected version ${version}, which is newer than this CLI supports (${detection.latestVersion})`,
|
|
193
|
+
provider,
|
|
194
|
+
canMigrate: false,
|
|
195
|
+
hint: "Install a newer harness CLI for this workspace.",
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
parseCurrent(parsed);
|
|
200
|
+
return createVersionStatus(kind, pathValue, {
|
|
201
|
+
status: "current",
|
|
202
|
+
version,
|
|
203
|
+
code: versionCode(kind, "CURRENT"),
|
|
204
|
+
message: `Version ${version} is current`,
|
|
205
|
+
provider,
|
|
206
|
+
canMigrate: true,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
if (error instanceof VersionError) {
|
|
211
|
+
return createVersionStatus(kind, pathValue, {
|
|
212
|
+
status: statusFromVersionError(error),
|
|
213
|
+
code: versionCode(kind, codeFromVersionError(error)),
|
|
214
|
+
message: error.message,
|
|
215
|
+
provider,
|
|
216
|
+
canMigrate: false,
|
|
217
|
+
hint: "Resolve version issues before running migration.",
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
return createVersionStatus(kind, pathValue, {
|
|
221
|
+
status: "invalid",
|
|
222
|
+
version,
|
|
223
|
+
code: kind === "manifest" ? "MANIFEST_INVALID" : kind === "lock" ? "LOCK_INVALID" : "MANAGED_INDEX_INVALID",
|
|
224
|
+
message: error instanceof Error ? error.message : "Invalid schema",
|
|
225
|
+
provider,
|
|
226
|
+
canMigrate: false,
|
|
227
|
+
hint: "Fix schema validation issues before running migration.",
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
function createVersionStatus(kind, pathValue, input) {
|
|
232
|
+
return {
|
|
233
|
+
code: input.code,
|
|
234
|
+
severity: input.status === "current" ? "info" : "error",
|
|
235
|
+
message: input.message,
|
|
236
|
+
path: pathValue,
|
|
237
|
+
provider: input.provider,
|
|
238
|
+
kind,
|
|
239
|
+
status: input.status,
|
|
240
|
+
version: input.version,
|
|
241
|
+
latestVersion: LATEST_VERSION_BY_KIND[kind],
|
|
242
|
+
canMigrate: input.canMigrate,
|
|
243
|
+
hint: input.hint,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function versionCode(kind, suffix) {
|
|
247
|
+
if (kind === "provider-override") {
|
|
248
|
+
return `OVERRIDE_VERSION_${suffix}`;
|
|
249
|
+
}
|
|
250
|
+
return `${kind.toUpperCase().replaceAll("-", "_")}_VERSION_${suffix}`;
|
|
251
|
+
}
|
|
252
|
+
function parseProviderFromOverridePath(pathValue) {
|
|
253
|
+
const match = pathValue.match(OVERRIDE_PROVIDER_PATTERN);
|
|
254
|
+
if (!match?.[1]) {
|
|
255
|
+
return undefined;
|
|
256
|
+
}
|
|
257
|
+
const parsed = providerIdSchema.safeParse(match[1]);
|
|
258
|
+
return parsed.success ? parsed.data : undefined;
|
|
259
|
+
}
|
|
260
|
+
function statusFromVersionError(error) {
|
|
261
|
+
switch (error.reason) {
|
|
262
|
+
case "outdated_version":
|
|
263
|
+
return "outdated";
|
|
264
|
+
case "unsupported_version":
|
|
265
|
+
return "unsupported";
|
|
266
|
+
case "missing_version":
|
|
267
|
+
return "missing";
|
|
268
|
+
case "invalid_version_type":
|
|
269
|
+
return "invalid";
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
function codeFromVersionError(error) {
|
|
273
|
+
switch (error.reason) {
|
|
274
|
+
case "outdated_version":
|
|
275
|
+
return "OUTDATED";
|
|
276
|
+
case "unsupported_version":
|
|
277
|
+
return "NEWER_THAN_CLI";
|
|
278
|
+
case "missing_version":
|
|
279
|
+
return "MISSING";
|
|
280
|
+
case "invalid_version_type":
|
|
281
|
+
return "INVALID";
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/versioning/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { HarnessPaths } from "../paths.js";
|
|
2
|
+
import type { MigrationResult } from "../types.js";
|
|
3
|
+
interface MigrateWorkspaceOptions {
|
|
4
|
+
to?: "latest";
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function runMigration(paths: HarnessPaths, options?: MigrateWorkspaceOptions): Promise<MigrationResult>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/versioning/migrate.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,KAAK,EAKV,eAAe,EAGhB,MAAM,aAAa,CAAC;AAKrB,UAAU,uBAAuB;IAC/B,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAUD,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,eAAe,CAAC,CAkQ1B"}
|