Files
rea/tests/conformance/package/environmentBundlePackagePin.test.ts
7a0c47bfa4 feat(environment): export an environment manifest as an agent environment bundle (#4999)
Export an authenticated capture and environment manifest as a pinned agentenv bundle with provenance, a replay verifier and smoke task.

Followups preserve immutable input ownership, bounded discovery, caller paths and numeric values; bind bundle writes and package copying to retained filesystem owners; verify POSIX modes; retain cleanup authority; and verify framework/npm executable selection. Default MCP remains stdio.

Validation: pinned Linux toolchain, typecheck/build/lint/format/docs/knip, 452 focused tests, ten product-catalog cases, real GitHub response replay in the generated non-root Docker image, and the real pinned agentenv framework smoke workflow. Platform and resource-measurement limits are recorded in the feature verification document.

Co-authored-by: gensokyo-dev <gensokyo-dev@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-20 05:29:43 +08:00

41 lines
1.3 KiB
TypeScript

import { readFile } from "node:fs/promises";
import { describe, expect, it } from "vitest";
import { z } from "zod";
import {
bundleDockerfile,
registryPackageSource,
} from "../../../src/application/environment/environmentBundle.js";
import { PRODUCT_IDENTITY } from "../../../src/identity.js";
/**
* The exported Dockerfile installs the CLI that produced the bundle, so the
* pin must be the exact package version of this build, read from the package
* manifest rather than restated anywhere in source.
*/
describe("environment bundle package pin", () => {
it("pins the registry install to the package.json version", async () => {
const manifest = z
.object({ name: z.literal("rea-agents"), version: z.string().min(1) })
.parse(
JSON.parse(
await readFile(
new URL("../../../package.json", import.meta.url),
"utf8",
),
),
);
const dockerfile = bundleDockerfile(registryPackageSource());
const install = dockerfile
.split("\n")
.find((line) => line.startsWith("RUN npm install -g"));
expect(install).toBeDefined();
expect(install?.endsWith(` ${manifest.name}@${manifest.version}`)).toBe(
true,
);
expect(PRODUCT_IDENTITY.packageVersion).toBe(manifest.version);
expect(dockerfile).not.toMatch(/rea-agents@(?:latest|\^|~)/u);
});
});