agentic-engineering-harness 0.7.0 → 0.8.0

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 (68) hide show
  1. package/dist/cli.js +17 -6
  2. package/dist/cli.js.map +1 -1
  3. package/dist/core/config.js +4 -4
  4. package/dist/core/config.js.map +1 -1
  5. package/dist/core/sdd.js +2 -2
  6. package/dist/core/sdd.js.map +1 -1
  7. package/dist/core/types.d.ts +28 -1
  8. package/dist/delivery/finalize.d.ts +1 -1
  9. package/dist/delivery/finalize.js +6 -1
  10. package/dist/delivery/finalize.js.map +1 -1
  11. package/dist/evidence/graph.d.ts +1 -0
  12. package/dist/evidence/graph.js +4 -4
  13. package/dist/evidence/graph.js.map +1 -1
  14. package/dist/issues/intake.d.ts +1 -1
  15. package/dist/maturity/inventory.d.ts +30 -0
  16. package/dist/maturity/inventory.js +53 -0
  17. package/dist/maturity/inventory.js.map +1 -0
  18. package/dist/provenance/generate.d.ts +12 -1
  19. package/dist/provenance/generate.js +86 -10
  20. package/dist/provenance/generate.js.map +1 -1
  21. package/dist/providers/validation/bddExecution.d.ts +15 -0
  22. package/dist/providers/validation/bddExecution.js +107 -0
  23. package/dist/providers/validation/bddExecution.js.map +1 -0
  24. package/dist/providers/validation/integrationEnvironment.d.ts +12 -0
  25. package/dist/providers/validation/integrationEnvironment.js +101 -0
  26. package/dist/providers/validation/integrationEnvironment.js.map +1 -0
  27. package/dist/providers/validation/pact.d.ts +15 -0
  28. package/dist/providers/validation/pact.js +79 -0
  29. package/dist/providers/validation/pact.js.map +1 -0
  30. package/dist/providers/validation/protocol.d.ts +7 -0
  31. package/dist/providers/validation/protocol.js +35 -0
  32. package/dist/providers/validation/protocol.js.map +1 -0
  33. package/dist/providers/validation/providerUtils.d.ts +18 -0
  34. package/dist/providers/validation/providerUtils.js +40 -0
  35. package/dist/providers/validation/providerUtils.js.map +1 -0
  36. package/dist/providers/validation/registry.d.ts +21 -0
  37. package/dist/providers/validation/registry.js +59 -0
  38. package/dist/providers/validation/registry.js.map +1 -0
  39. package/dist/providers/validation/reqnroll.d.ts +7 -0
  40. package/dist/providers/validation/reqnroll.js +50 -0
  41. package/dist/providers/validation/reqnroll.js.map +1 -0
  42. package/dist/providers/validation/testExecution.d.ts +15 -0
  43. package/dist/providers/validation/testExecution.js +122 -0
  44. package/dist/providers/validation/testExecution.js.map +1 -0
  45. package/dist/providers/validation/types.d.ts +158 -0
  46. package/dist/providers/validation/types.js +2 -0
  47. package/dist/providers/validation/types.js.map +1 -0
  48. package/dist/spec/openspec.js +12 -7
  49. package/dist/spec/openspec.js.map +1 -1
  50. package/dist/validators/gherkin.js +5 -56
  51. package/dist/validators/gherkin.js.map +1 -1
  52. package/dist/validators/registry.js +42 -3
  53. package/dist/validators/registry.js.map +1 -1
  54. package/dist/validators/toolEvidence.js +2 -2
  55. package/dist/validators/toolEvidence.js.map +1 -1
  56. package/dist/validators/types.d.ts +2 -1
  57. package/docs/ARCHITECTURE.md +60 -2
  58. package/docs/COMPONENT_MATURITY.md +11 -11
  59. package/docs/OSS_STACK.md +5 -4
  60. package/docs/V0.2.md +4 -1
  61. package/docs/VALIDATION.md +54 -3
  62. package/docs/VALIDATION_COMPATIBILITY.md +19 -0
  63. package/docs/component-maturity.json +5 -5
  64. package/maturity/components.yaml +59 -0
  65. package/package.json +2 -1
  66. package/schemas/project.schema.json +2 -2
  67. package/schemas/validation-result.schema.json +84 -0
  68. package/templates/project.yaml +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bddExecution.js","sourceRoot":"","sources":["../../../src/providers/validation/bddExecution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ValidationCapability } from "../../core/types.js";
2
+ import type { IntegrationEnvironmentResult, ProviderDetection, ProviderDoctorResult, ProviderExecution, ProviderPlan, ValidationProvider, ValidationProviderContext } from "./types.js";
3
+ export declare class IntegrationEnvironmentProvider implements ValidationProvider<IntegrationEnvironmentResult> {
4
+ readonly id = "integration-environment";
5
+ readonly capabilities: ValidationCapability[];
6
+ detect(context: ValidationProviderContext): Promise<ProviderDetection | undefined>;
7
+ doctor(context: ValidationProviderContext): Promise<ProviderDoctorResult>;
8
+ plan(context: ValidationProviderContext, detection?: ProviderDetection): Promise<ProviderPlan>;
9
+ execute(context: ValidationProviderContext, plan: ProviderPlan): Promise<ProviderExecution>;
10
+ normalize(context: ValidationProviderContext, execution: ProviderExecution): Promise<IntegrationEnvironmentResult>;
11
+ }
12
+ export declare function validateEnvironmentRequirements(context: ValidationProviderContext): string[];
@@ -0,0 +1,101 @@
1
+ import { commandExists } from "../../utils/process.js";
2
+ import { configuredCommand, doctorForCommand, executePlan, resolveCwd } from "./providerUtils.js";
3
+ import { persistRawArtifact } from "./protocol.js";
4
+ export class IntegrationEnvironmentProvider {
5
+ id = "integration-environment";
6
+ capabilities = ["integration-test"];
7
+ async detect(context) {
8
+ const configured = await configuredCommand(context);
9
+ const options = context.spec?.options ?? context.providerSpec?.options ?? {};
10
+ if (configured.command || typeof options.provisionCommand === "string")
11
+ return { provider: configured.provider === "configured-command" ? String(options.provider ?? "configured-environment") : configured.provider, command: configured.command ?? String(options.provisionCommand), runtime: "oci-or-project", reason: "explicit integration environment lifecycle" };
12
+ if (typeof options.image === "string" && (await commandExists("podman", context.root) || await commandExists("docker", context.root)))
13
+ return { provider: "oci", command: `${await commandExists("podman", context.root) ? "podman" : "docker"} run --rm --network=none ${options.image}`, runtime: "oci", reason: "explicit OCI image and available runtime" };
14
+ return undefined;
15
+ }
16
+ async doctor(context) {
17
+ const detection = await this.detect(context);
18
+ if (!detection)
19
+ return { provider: this.id, available: false, message: "No integration environment provider was configured." };
20
+ const security = validateEnvironmentRequirements(context);
21
+ if (security.length)
22
+ return { provider: detection.provider, available: false, message: security.join(" "), details: { securityFailures: security } };
23
+ return doctorForCommand(detection.command, resolveCwd(context), detection.provider, { runtime: detection.runtime });
24
+ }
25
+ async plan(context, detection) {
26
+ const selected = detection ?? await this.detect(context);
27
+ if (!selected?.command)
28
+ throw new Error("No integration environment provider or lifecycle command is configured.");
29
+ return { provider: selected.provider, capability: "integration-test", command: selected.command, cwd: resolveCwd(context), runtime: selected.runtime, env: connectionData(context), options: { timeoutMs: (context.spec?.timeoutSeconds ?? context.providerSpec?.timeoutSeconds ?? 900) * 1000 } };
30
+ }
31
+ async execute(context, plan) {
32
+ const options = context.spec?.options ?? context.providerSpec?.options ?? {};
33
+ const lifecycle = [];
34
+ const provision = String(options.provisionCommand ?? plan.command);
35
+ const readiness = typeof options.readinessCommand === "string" ? options.readinessCommand : undefined;
36
+ const test = typeof options.testCommand === "string" ? options.testCommand : undefined;
37
+ const cleanup = typeof options.cleanupCommand === "string" ? options.cleanupCommand : undefined;
38
+ const started = Date.now();
39
+ let stdout = "";
40
+ let stderr = "";
41
+ let exitCode = 0;
42
+ const run = async (label, command) => { const result = await executePlan({ ...plan, command }); stdout += `--- ${label} ---\n${result.stdout}\n`; stderr += result.stderr ? `--- ${label} stderr ---\n${result.stderr}\n` : ""; if (result.exitCode !== 0 && exitCode === 0)
43
+ exitCode = result.exitCode; lifecycle.push(`${label}:${result.exitCode === 0 ? "PASS" : "FAIL"}`); };
44
+ try {
45
+ await run("provision", provision);
46
+ if (readiness)
47
+ await run("readiness", readiness);
48
+ if (test)
49
+ await run("test", test);
50
+ }
51
+ finally {
52
+ if (cleanup)
53
+ await run("cleanup", cleanup);
54
+ }
55
+ return { plan, exitCode, stdout: `${lifecycle.join(" ")}\n${stdout}`, stderr, durationMs: Date.now() - started, rawArtifact: await persistRawArtifact(context.root, context.rawArtifactDirectory, context.spec?.id ?? context.providerSpec?.id ?? "integration-environment", stdout, stderr) };
56
+ }
57
+ async normalize(context, execution) {
58
+ const lifecycle = { provisioned: /provision:PASS/.test(execution.stdout), ready: !/readiness:FAIL/.test(execution.stdout), tested: !/test:FAIL/.test(execution.stdout), cleaned: /cleanup:PASS/.test(execution.stdout), durationMs: execution.durationMs };
59
+ const requirements = environmentRequirements(context);
60
+ const failed = execution.exitCode !== 0 || !lifecycle.provisioned || !lifecycle.cleaned;
61
+ return { version: 1, provider: execution.plan.provider, capability: "integration-test", status: failed ? "FAIL" : "PASS", requirements, lifecycle, connectionData: redactConnectionData(execution.plan.env), rawArtifact: execution.rawArtifact };
62
+ }
63
+ }
64
+ export function validateEnvironmentRequirements(context) {
65
+ const options = context.spec?.options ?? context.providerSpec?.options ?? {};
66
+ const failures = [];
67
+ const network = String(options.network ?? "isolated");
68
+ if (!["isolated", "none", "project"].includes(network))
69
+ failures.push(`Unsupported integration network '${network}'.`);
70
+ if (options.privileged === true)
71
+ failures.push("Privileged integration environments are not allowed by default.");
72
+ if (network === "host")
73
+ failures.push("Host networking must not be implicit.");
74
+ if (options.dockerSocket === true)
75
+ failures.push("Docker socket access is not allowed by default.");
76
+ if (Array.isArray(options.mounts) && options.mounts.some((mount) => String(mount).startsWith("/")))
77
+ failures.push("Absolute host mounts require an explicit policy adapter.");
78
+ if (Array.isArray(options.credentials) && options.credentials.length && options.credentialsAllowlist !== true)
79
+ failures.push("Credentials require an explicit allowlist.");
80
+ const data = options.connectionData;
81
+ if (data && typeof data === "object" && !Array.isArray(data) && Object.keys(data).some((key) => /(password|token|secret|private.?key)/i.test(key)) && options.connectionDataAllowlist !== true)
82
+ failures.push("Sensitive connection data requires an explicit allowlist.");
83
+ return failures;
84
+ }
85
+ function environmentRequirements(context) {
86
+ const options = context.spec?.options ?? context.providerSpec?.options ?? {};
87
+ const network = String(options.network ?? "isolated");
88
+ return [{ kind: String(options.kind ?? "service"), image: typeof options.image === "string" ? options.image : undefined, network, ephemeral: options.ephemeral !== false, ports: Array.isArray(options.ports) ? options.ports.map(Number).filter(Number.isFinite) : undefined, environment: Array.isArray(options.environment) ? options.environment.map(String) : undefined, mounts: Array.isArray(options.mounts) ? options.mounts.map(String) : undefined }];
89
+ }
90
+ function connectionData(context) {
91
+ const value = context.spec?.options?.connectionData ?? context.providerSpec?.options?.connectionData;
92
+ if (!value || typeof value !== "object" || Array.isArray(value))
93
+ return undefined;
94
+ return Object.fromEntries(Object.entries(value).filter(([, item]) => typeof item === "string").map(([key, item]) => [key, item]));
95
+ }
96
+ function redactConnectionData(value) {
97
+ if (!value)
98
+ return undefined;
99
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, /(password|token|secret|private.?key)/i.test(key) ? "<redacted>" : item]));
100
+ }
101
+ //# sourceMappingURL=integrationEnvironment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrationEnvironment.js","sourceRoot":"","sources":["../../../src/providers/validation/integrationEnvironment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ValidationCapability } from "../../core/types.js";
2
+ import type { ContractVerificationResult, ProviderDetection, ProviderDoctorResult, ProviderExecution, ProviderPlan, ValidationProvider, ValidationProviderContext } from "./types.js";
3
+ export declare class PactContractTestingProvider implements ValidationProvider<ContractVerificationResult> {
4
+ readonly id = "pact";
5
+ readonly capabilities: ValidationCapability[];
6
+ detect(context: ValidationProviderContext): Promise<ProviderDetection | undefined>;
7
+ doctor(context: ValidationProviderContext): Promise<ProviderDoctorResult>;
8
+ plan(context: ValidationProviderContext, detection?: ProviderDetection): Promise<ProviderPlan>;
9
+ execute(context: ValidationProviderContext, plan: ProviderPlan): Promise<ProviderExecution>;
10
+ normalize(context: ValidationProviderContext, execution: ProviderExecution): Promise<ContractVerificationResult>;
11
+ }
12
+ export declare function runPactVerification(context: ValidationProviderContext, provider?: ValidationProvider<ContractVerificationResult>): Promise<{
13
+ result: ContractVerificationResult;
14
+ required: boolean;
15
+ }>;
@@ -0,0 +1,79 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { commandExists } from "../../utils/process.js";
4
+ import { normalizePactOutput } from "../../validators/toolEvidence.js";
5
+ import { configuredCommand, doctorForCommand, executePlan, fileExists, resolveCwd } from "./providerUtils.js";
6
+ import { parseJson, persistRawArtifact } from "./protocol.js";
7
+ export class PactContractTestingProvider {
8
+ id = "pact";
9
+ capabilities = ["contract-test"];
10
+ async detect(context) {
11
+ const explicit = await configuredCommand(context);
12
+ if (explicit.command)
13
+ return { provider: explicit.provider, command: explicit.command, runtime: explicit.runtime, reason: "explicit Pact verifier command" };
14
+ const pactFile = optionString(context, "pactFile");
15
+ if (!pactFile || !(await fileExists(path.resolve(context.root, pactFile))))
16
+ return undefined;
17
+ if (await commandExists("pact", context.root))
18
+ return { provider: "pact-cli", command: "pact verifier", runtime: "pact-ffi", reason: "local Pact file and Pact CLI" };
19
+ if (await commandExists("pact_verifier_cli", context.root))
20
+ return { provider: "pact-verifier-cli", command: "pact_verifier_cli", runtime: "pact-ffi", reason: "local Pact file and standalone verifier" };
21
+ return { provider: "pact", command: undefined, runtime: "pact-ffi", reason: "local Pact file found but no official verifier executable is installed" };
22
+ }
23
+ async doctor(context) {
24
+ const detection = await this.detect(context);
25
+ if (!detection?.command)
26
+ return { provider: this.id, available: false, message: "Pact file is configured but the official Pact verifier is unavailable.", details: { pactFile: optionString(context, "pactFile") } };
27
+ return doctorForCommand(detection.command, resolveCwd(context), detection.provider, { runtime: detection.runtime });
28
+ }
29
+ async plan(context, detection) {
30
+ const selected = detection ?? await this.detect(context);
31
+ const configured = await configuredCommand(context);
32
+ if (configured.command && context.spec?.command)
33
+ return { provider: selected?.provider ?? configured.provider, capability: "contract-test", command: renderCommand(configured.command, context), cwd: resolveCwd(context), runtime: selected?.runtime ?? configured.runtime, options: { timeoutMs: (context.spec.timeoutSeconds ?? 900) * 1000 } };
34
+ const pactFile = optionString(context, "pactFile");
35
+ if (!pactFile)
36
+ throw new Error("Pact provider requires options.pactFile.");
37
+ const report = path.resolve(context.root, context.rawArtifactDirectory, `${context.spec?.id ?? "pact"}.report.json`);
38
+ const host = optionString(context, "hostname") ?? "127.0.0.1";
39
+ const port = optionNumber(context, "port") ?? 8080;
40
+ const command = selected?.provider === "pact-verifier-cli" ? `pact_verifier_cli -f ${quote(path.resolve(context.root, pactFile))} -h ${quote(host)} -p ${port} -j ${quote(report)}` : `pact verifier --file ${quote(path.resolve(context.root, pactFile))} --hostname ${quote(host)} --port ${port} --json ${quote(report)}`;
41
+ return { provider: selected?.provider ?? "pact", capability: "contract-test", command, cwd: resolveCwd(context), runtime: selected?.runtime ?? "pact-ffi", options: { timeoutMs: (context.spec?.timeoutSeconds ?? context.providerSpec?.timeoutSeconds ?? 900) * 1000, pactFile, report } };
42
+ }
43
+ async execute(context, plan) {
44
+ const execution = await executePlan(plan);
45
+ const id = context.spec?.id ?? context.providerSpec?.id ?? "pact";
46
+ return { ...execution, rawArtifact: await persistRawArtifact(context.root, context.rawArtifactDirectory, id, execution.stdout, execution.stderr) };
47
+ }
48
+ async normalize(context, execution) {
49
+ const report = typeof execution.plan.options?.report === "string" ? await readJson(path.resolve(execution.plan.cwd, execution.plan.options.report)) : undefined;
50
+ const parsed = report ?? parseJson(execution.stdout);
51
+ const failures = normalizePactOutput(parsed).map((finding) => ({ id: finding.rule, message: finding.message ?? "Pact interaction failed" }));
52
+ const summary = pactSummary(parsed, execution, failures.length);
53
+ const passed = execution.exitCode === 0 && failures.length === 0;
54
+ return { version: 1, provider: execution.plan.provider, capability: "contract-test", status: passed ? "PASS" : "FAIL", verifierCommand: execution.plan.command, pactFile: typeof execution.plan.options?.pactFile === "string" ? execution.plan.options.pactFile : undefined, providerUrl: providerUrl(execution.plan), summary, failures, requirements: requirementIds(context), rawArtifact: execution.rawArtifact };
55
+ }
56
+ }
57
+ export async function runPactVerification(context, provider = new PactContractTestingProvider()) {
58
+ const detection = await provider.detect(context);
59
+ if (!detection?.command)
60
+ return { result: { version: 1, provider: provider.id, capability: "contract-test", status: "SKIP", verifierCommand: "", summary: { total: 0, passed: 0, failed: 0, durationMs: 0 }, failures: [{ message: "An official Pact verifier command is required." }], requirements: requirementIds(context), rawArtifact: "" }, required: context.spec?.required ?? context.providerSpec?.required ?? true };
61
+ const plan = await provider.plan(context, detection);
62
+ const execution = await provider.execute(context, plan);
63
+ return { result: await provider.normalize(context, execution), required: context.spec?.required ?? context.providerSpec?.required ?? true };
64
+ }
65
+ function optionString(context, key) { const value = context.spec?.options?.[key] ?? context.providerSpec?.options?.[key]; return typeof value === "string" ? value : undefined; }
66
+ function requirementIds(context) { return (context.contract.requirements ?? []).filter((item) => item.capabilities?.includes("contract-test") || !item.capabilities?.length).map((item) => item.id); }
67
+ function optionNumber(context, key) { const value = context.spec?.options?.[key] ?? context.providerSpec?.options?.[key]; return typeof value === "number" ? value : undefined; }
68
+ function renderCommand(command, context) { return command.replaceAll("{taskId}", context.contract.task.id).replaceAll("{baseRef}", context.baseRef ?? "HEAD"); }
69
+ function quote(value) { return `'${value.replaceAll("'", "'\\''")}'`; }
70
+ async function readJson(file) { try {
71
+ return JSON.parse(await fs.readFile(file, "utf8"));
72
+ }
73
+ catch {
74
+ return undefined;
75
+ } }
76
+ function pactSummary(value, execution, failureCount) { const record = value && typeof value === "object" && !Array.isArray(value) ? value : {}; const results = Array.isArray(record.interactionResults) ? record.interactionResults : []; const interactionCount = results.length || (Array.isArray(record.interactions) ? record.interactions.length : 0); const resultFailures = results.filter((item) => !["ok", "passed", "success", "verified"].includes(String(item?.result ?? "").toLowerCase())).length; const total = Number(record.total ?? record.summary?.total ?? 0) || interactionCount || failureCount; const failed = Number(record.failed ?? record.summary?.failed ?? 0) || resultFailures || failureCount; return { total: Math.max(total, failed), passed: Math.max(0, total - failed), failed, durationMs: execution.durationMs }; }
77
+ function providerUrl(plan) { const match = plan.command.match(/--hostname\s+'([^']+)'\s+--port\s+(\d+)|-h\s+'([^']+)'\s+-p\s+(\d+)/); if (!match)
78
+ return undefined; const host = match[1] ?? match[3]; const port = match[2] ?? match[4]; return `http://${host}:${port}`; }
79
+ //# sourceMappingURL=pact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pact.js","sourceRoot":"","sources":["../../../src/providers/validation/pact.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ValidationCheck } from "../../core/types.js";
2
+ import type { BddExecutionResult, ContractVerificationResult, IntegrationEnvironmentResult, TestExecutionResult } from "./types.js";
3
+ export type NormalizedValidationResult = TestExecutionResult | BddExecutionResult | IntegrationEnvironmentResult | ContractVerificationResult;
4
+ export declare function persistRawArtifact(root: string, directory: string, id: string, stdout: string, stderr: string): Promise<string>;
5
+ export declare function resultCheck(id: string, category: string, result: NormalizedValidationResult, required: boolean): ValidationCheck;
6
+ export declare function parseJson(value: string): unknown;
7
+ export declare function stableFingerprint(value: unknown): string;
@@ -0,0 +1,35 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ export async function persistRawArtifact(root, directory, id, stdout, stderr) {
5
+ const safe = id.replace(/[^A-Za-z0-9._-]/g, "-");
6
+ const output = path.resolve(root, directory, `${safe}.raw`);
7
+ await fs.mkdir(path.dirname(output), { recursive: true });
8
+ const body = `${stdout}${stderr ? `\n--- stderr ---\n${stderr}` : ""}`;
9
+ await fs.writeFile(output, body, "utf8");
10
+ return path.relative(root, output).replaceAll("\\", "/");
11
+ }
12
+ export function resultCheck(id, category, result, required) {
13
+ const failed = result.status === "FAIL";
14
+ const skipped = result.status === "SKIP";
15
+ return {
16
+ id,
17
+ category,
18
+ status: failed ? "FAIL" : skipped ? (required ? "FAIL" : "SKIP") : "PASS",
19
+ message: failed ? `${result.provider} ${category} failed.` : skipped ? `${result.provider} ${category} was skipped.` : `${result.provider} ${category} passed.`,
20
+ durationMs: "summary" in result ? result.summary.durationMs : result.lifecycle.durationMs,
21
+ details: { provider: result.provider, capability: result.capability, result, rawArtifact: result.rawArtifact }
22
+ };
23
+ }
24
+ export function parseJson(value) {
25
+ try {
26
+ return JSON.parse(value);
27
+ }
28
+ catch {
29
+ return undefined;
30
+ }
31
+ }
32
+ export function stableFingerprint(value) {
33
+ return crypto.createHash("sha256").update(JSON.stringify(value)).digest("hex");
34
+ }
35
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/providers/validation/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAM7B,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,SAAiB,EAAE,EAAU,EAAE,MAAc,EAAE,MAAc;IAClH,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;IAC5D,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACvE,MAAM,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,QAAgB,EAAE,MAAkC,EAAE,QAAiB;IAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;IACzC,OAAO;QACL,EAAE;QACF,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;QACzE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ,UAAU;QAC/J,UAAU,EAAE,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU;QACzF,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;KAC/G,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjF,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { ProviderExecution, ProviderPlan, ValidationProviderContext } from "./types.js";
2
+ export declare function fileExists(file: string): Promise<boolean>;
3
+ export declare function readJsonFile<T>(file: string): Promise<T | undefined>;
4
+ export declare function configuredCommand(context: ValidationProviderContext, fallback?: string): Promise<{
5
+ command?: string;
6
+ runtime?: string;
7
+ provider: string;
8
+ }>;
9
+ export declare function doctorForCommand(command: string | undefined, cwd: string, provider: string, details?: Record<string, unknown>): Promise<{
10
+ provider: string;
11
+ available: boolean;
12
+ message: string;
13
+ details: {
14
+ executable: string | undefined;
15
+ };
16
+ }>;
17
+ export declare function executePlan(plan: ProviderPlan): Promise<ProviderExecution>;
18
+ export declare function resolveCwd(context: ValidationProviderContext): string;
@@ -0,0 +1,40 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { commandExists, runProcess } from "../../utils/process.js";
4
+ export async function fileExists(file) {
5
+ try {
6
+ await fs.access(file);
7
+ return true;
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ export async function readJsonFile(file) {
14
+ try {
15
+ return JSON.parse(await fs.readFile(file, "utf8"));
16
+ }
17
+ catch {
18
+ return undefined;
19
+ }
20
+ }
21
+ export async function configuredCommand(context, fallback) {
22
+ const providerSpec = context.providerSpec;
23
+ const spec = context.spec;
24
+ const command = providerSpec?.command ?? spec?.command ?? fallback;
25
+ const provider = providerSpec?.provider ?? spec?.options?.provider;
26
+ return { command, runtime: typeof spec?.options?.runtime === "string" ? spec.options.runtime : undefined, provider: typeof provider === "string" ? provider : "configured-command" };
27
+ }
28
+ export async function doctorForCommand(command, cwd, provider, details = {}) {
29
+ const executable = command?.trim().split(/\s+/, 1)[0];
30
+ const available = Boolean(executable) && await commandExists(executable, cwd);
31
+ return { provider, available, message: available ? `${provider} is available.` : `${provider} command is unavailable.`, details: { ...details, executable } };
32
+ }
33
+ export async function executePlan(plan) {
34
+ const result = await runProcess(plan.command, { cwd: plan.cwd, timeoutMs: Number(plan.options?.timeoutMs ?? 900_000), env: plan.env });
35
+ return { plan, ...result, rawArtifact: "" };
36
+ }
37
+ export function resolveCwd(context) {
38
+ return path.resolve(context.root, context.providerSpec?.workingDirectory ?? context.spec?.workingDirectory ?? ".");
39
+ }
40
+ //# sourceMappingURL=providerUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerUtils.js","sourceRoot":"","sources":["../../../src/providers/validation/providerUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QAAC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACrE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAI,IAAY;IAChD,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAkC,EAAE,QAAiB;IAC3F,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAG,YAAY,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,IAAI,QAAQ,CAAC;IACnE,MAAM,QAAQ,GAAG,YAAY,EAAE,QAAQ,IAAI,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC;IACnE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;AACvL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAA2B,EAAE,GAAW,EAAE,QAAgB,EAAE,UAAmC,EAAE;IACtI,MAAM,UAAU,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,MAAM,aAAa,CAAC,UAAW,EAAE,GAAG,CAAC,CAAC;IAC/E,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAC,CAAC,GAAG,QAAQ,0BAA0B,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC;AAChK,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAkB;IAClD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACvI,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAkC;IAC3D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,gBAAgB,IAAI,OAAO,CAAC,IAAI,EAAE,gBAAgB,IAAI,GAAG,CAAC,CAAC;AACrH,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { HarnessProjectConfig, TaskContract, ValidationCapability, ValidationProviderSpec, ValidatorSpec } from "../../core/types.js";
2
+ import { resultCheck } from "./protocol.js";
3
+ import type { BddExecutionResult, ContractVerificationResult, IntegrationEnvironmentResult, TestExecutionResult, ValidationProvider, ValidationProviderContext } from "./types.js";
4
+ export type ValidationProviderResult = TestExecutionResult | BddExecutionResult | IntegrationEnvironmentResult | ContractVerificationResult;
5
+ export interface CapabilityResolution {
6
+ capability: ValidationCapability;
7
+ provider: string;
8
+ source: "explicit" | "detected" | "fallback";
9
+ command?: string;
10
+ }
11
+ export declare class ValidationCapabilityRegistry {
12
+ private readonly providers;
13
+ constructor();
14
+ register(provider: ValidationProvider<ValidationProviderResult>): void;
15
+ list(capability?: ValidationCapability): string[];
16
+ resolve(context: ValidationProviderContext): Promise<CapabilityResolution | undefined>;
17
+ }
18
+ export declare const validationCapabilityRegistry: ValidationCapabilityRegistry;
19
+ export declare function runCapabilityValidator(context: ValidationProviderContext, id: string, capability: ValidationCapability, required: boolean): Promise<ReturnType<typeof resultCheck>>;
20
+ export declare function providerSpecFor(config: HarnessProjectConfig, capability: ValidationCapability, spec?: ValidatorSpec): ValidationProviderSpec | undefined;
21
+ export declare function capabilityRequirements(contract: TaskContract): ValidationCapability[];
@@ -0,0 +1,59 @@
1
+ import { GenericBddExecutionProvider, runBddExecution } from "./bddExecution.js";
2
+ import { IntegrationEnvironmentProvider } from "./integrationEnvironment.js";
3
+ import { PactContractTestingProvider, runPactVerification } from "./pact.js";
4
+ import { ReqnrollBddProvider } from "./reqnroll.js";
5
+ import { resultCheck } from "./protocol.js";
6
+ import { ProjectNativeTestExecutionProvider, runTestExecution } from "./testExecution.js";
7
+ export class ValidationCapabilityRegistry {
8
+ providers = [];
9
+ constructor() {
10
+ this.register(new ProjectNativeTestExecutionProvider());
11
+ this.register(new GenericBddExecutionProvider());
12
+ this.register(new IntegrationEnvironmentProvider());
13
+ this.register(new PactContractTestingProvider());
14
+ }
15
+ register(provider) { this.providers.push(provider); }
16
+ list(capability) { return this.providers.filter((provider) => !capability || provider.capabilities.includes(capability)).map((provider) => provider.id); }
17
+ async resolve(context) {
18
+ const candidates = this.providers.filter((candidate) => candidate.capabilities.includes(context.capability));
19
+ const provider = (context.providerSpec?.provider ? candidates.find((candidate) => candidate.id === context.providerSpec?.provider) : undefined) ?? candidates[0];
20
+ if (!provider)
21
+ return undefined;
22
+ const detection = await provider.detect(context);
23
+ if (!detection)
24
+ return undefined;
25
+ return { capability: context.capability, provider: detection.provider, source: context.providerSpec || context.spec?.command ? "explicit" : "detected", command: detection.command };
26
+ }
27
+ }
28
+ export const validationCapabilityRegistry = new ValidationCapabilityRegistry();
29
+ export async function runCapabilityValidator(context, id, capability, required) {
30
+ const effective = { ...context, capability };
31
+ if (capability === "bdd") {
32
+ const execution = await runBddExecution(effective, effective.spec?.options?.provider === "reqnroll" ? new ReqnrollBddProvider() : undefined);
33
+ return resultCheck(id, "bdd", execution.result, required);
34
+ }
35
+ if (capability === "contract-test")
36
+ return resultCheck(id, "contract", (await runPactVerification(effective)).result, required);
37
+ if (effective.spec?.adapter === "integration-environment" || ["integration-environment", "oci", "docker", "podman"].includes(effective.providerSpec?.provider ?? "") || typeof (effective.spec?.options ?? effective.providerSpec?.options)?.provisionCommand === "string") {
38
+ const provider = new IntegrationEnvironmentProvider();
39
+ const doctor = await provider.doctor(effective);
40
+ if (!doctor.available)
41
+ return resultCheck(id, "integration-environment", { version: 1, provider: doctor.provider, capability: "integration-test", status: doctor.details?.securityFailures ? "FAIL" : "SKIP", requirements: [], lifecycle: { provisioned: false, ready: false, tested: false, cleaned: false, durationMs: 0 }, rawArtifact: "" }, required);
42
+ const detection = await provider.detect(effective);
43
+ if (!detection)
44
+ return resultCheck(id, "integration-environment", { version: 1, provider: provider.id, capability: "integration-test", status: "SKIP", requirements: [], lifecycle: { provisioned: false, ready: false, tested: false, cleaned: false, durationMs: 0 }, rawArtifact: "" }, required);
45
+ const plan = await provider.plan(effective, detection);
46
+ const execution = await provider.execute(effective, plan);
47
+ return resultCheck(id, "integration-environment", await provider.normalize(effective, execution), required);
48
+ }
49
+ return resultCheck(id, capability, (await runTestExecution(effective)).result, required);
50
+ }
51
+ export function providerSpecFor(config, capability, spec) {
52
+ const providerName = typeof spec?.options?.provider === "string" ? spec.options.provider : undefined;
53
+ return config.validation?.providers?.find((item) => item.capability === capability && (!providerName || item.provider === providerName || item.id === providerName));
54
+ }
55
+ export function capabilityRequirements(contract) {
56
+ const declared = [...(contract.verification?.capabilities ?? []), ...(contract.requirements ?? []).flatMap((item) => item.capabilities ?? [])];
57
+ return [...new Set(declared)];
58
+ }
59
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/providers/validation/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { GenericBddExecutionProvider } from "./bddExecution.js";
2
+ import type { ProviderDetection, ValidationProviderContext } from "./types.js";
3
+ /** Optional compatibility adapter. It is never selected by the generic BDD path. */
4
+ export declare class ReqnrollBddProvider extends GenericBddExecutionProvider {
5
+ readonly id: string;
6
+ detect(context: ValidationProviderContext): Promise<ProviderDetection | undefined>;
7
+ }
@@ -0,0 +1,50 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { commandExists } from "../../utils/process.js";
4
+ import { GenericBddExecutionProvider } from "./bddExecution.js";
5
+ /** Optional compatibility adapter. It is never selected by the generic BDD path. */
6
+ export class ReqnrollBddProvider extends GenericBddExecutionProvider {
7
+ id = "reqnroll";
8
+ async detect(context) {
9
+ const explicit = await super.detect(context);
10
+ if (explicit)
11
+ return explicit;
12
+ if (!(await commandExists("dotnet", context.root)))
13
+ return undefined;
14
+ const project = await findProject(context.root);
15
+ if (!project)
16
+ return undefined;
17
+ const content = await fs.readFile(project, "utf8");
18
+ const filterProperty = /Reqnroll\.xUnit/i.test(content) ? "Category" : "TestCategory";
19
+ return { provider: "reqnroll", command: `dotnet test '${project.replaceAll("'", "'\\''")}' --filter '${filterProperty}=${context.contract.task.id}'`, runtime: ".NET", reason: "explicit optional Reqnroll compatibility adapter" };
20
+ }
21
+ }
22
+ async function findProject(root) {
23
+ for (const file of await walk(root)) {
24
+ if (!file.endsWith(".csproj"))
25
+ continue;
26
+ try {
27
+ if (/Reqnroll\./i.test(await fs.readFile(file, "utf8")))
28
+ return file;
29
+ }
30
+ catch { /* generated/vendor project */ }
31
+ }
32
+ return undefined;
33
+ }
34
+ async function walk(root) {
35
+ const output = [];
36
+ const visit = async (directory) => {
37
+ for (const entry of await fs.readdir(directory, { withFileTypes: true })) {
38
+ if ([".git", "node_modules", "bin", "obj"].includes(entry.name))
39
+ continue;
40
+ const file = path.join(directory, entry.name);
41
+ if (entry.isDirectory())
42
+ await visit(file);
43
+ else
44
+ output.push(file);
45
+ }
46
+ };
47
+ await visit(root);
48
+ return output;
49
+ }
50
+ //# sourceMappingURL=reqnroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reqnroll.js","sourceRoot":"","sources":["../../../src/providers/validation/reqnroll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAGhE,oFAAoF;AACpF,MAAM,OAAO,mBAAoB,SAAQ,2BAA2B;IAChD,EAAE,GAAW,UAAU,CAAC;IAEjC,KAAK,CAAC,MAAM,CAAC,OAAkC;QACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,SAAS,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;QAC1I,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,eAAe,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAC;IACtO,CAAC;CACF;AAED,KAAK,UAAU,WAAW,CAAC,IAAY;IACrC,KAAK,MAAM,IAAI,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC;YAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;IACxH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAY;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;QACvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,KAAK,CAAC,WAAW,EAAE;gBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;;gBAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpH,CAAC;IACH,CAAC,CAAC;IACF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,OAAO,MAAM,CAAC;AACnC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ValidationCapability } from "../../core/types.js";
2
+ import type { ProviderDetection, ProviderDoctorResult, ProviderExecution, ProviderPlan, TestExecutionResult, ValidationProvider, ValidationProviderContext } from "./types.js";
3
+ export declare class ProjectNativeTestExecutionProvider implements ValidationProvider<TestExecutionResult> {
4
+ readonly id = "project-native-test";
5
+ readonly capabilities: ValidationCapability[];
6
+ detect(context: ValidationProviderContext): Promise<ProviderDetection | undefined>;
7
+ doctor(context: ValidationProviderContext): Promise<ProviderDoctorResult>;
8
+ plan(context: ValidationProviderContext, detection?: ProviderDetection): Promise<ProviderPlan>;
9
+ execute(context: ValidationProviderContext, plan: ProviderPlan): Promise<ProviderExecution>;
10
+ normalize(context: ValidationProviderContext, execution: ProviderExecution): Promise<TestExecutionResult>;
11
+ }
12
+ export declare function runTestExecution(context: ValidationProviderContext, provider?: ValidationProvider<TestExecutionResult>): Promise<{
13
+ result: TestExecutionResult;
14
+ checkRequired: boolean;
15
+ }>;