import { mkdir, writeFile } from "node:fs/promises"; import path from "node:path"; import assert from "node:assert/strict"; import { renderCodexProviderSecretPlan } from "../../../scripts/src/secret-render.js"; import { AgentRunError } from "../../common/errors.js"; import type { SelfTestCase } from "../harness.js"; const selfTest: SelfTestCase = async (context) => { const secretPlan = await renderCodexProviderSecretPlan({ codexHome: context.codexHome, dryRun: true }); assert.equal(secretPlan.namespace, "agentrun-v01"); assert.equal(secretPlan.secretName, "agentrun-v01-provider-codex"); assert.equal(secretPlan.profile, "codex"); assert.deepEqual(secretPlan.keys, ["auth.json", "config.toml"]); assert.equal(secretPlan.writeAttempted, false); assert.equal(secretPlan.totalBytes, Buffer.byteLength(JSON.stringify({ token: "test-token-material" }), "utf8") + Buffer.byteLength("model = \"gpt-test\"\n", "utf8")); assert.match(String(secretPlan.sha256), /^[a-f0-9]{64}$/u); const renderedSecretJson = JSON.stringify(secretPlan); assert.equal(renderedSecretJson.includes("test-token-material"), false); assert.equal(renderedSecretJson.includes("gpt-test"), false); assert.equal(renderedSecretJson.includes("model ="), false); const deepseekSecretPlan = await renderCodexProviderSecretPlan({ profile: "deepseek", codexHome: context.deepseekHome, dryRun: true }); assert.equal(deepseekSecretPlan.secretName, "agentrun-v01-provider-deepseek"); assert.equal(deepseekSecretPlan.profile, "deepseek"); assert.equal(JSON.stringify(deepseekSecretPlan).includes("test-token-material-deepseek"), false); assert.equal(JSON.stringify(deepseekSecretPlan).includes("deepseek-test"), false); const minimaxM3SecretPlan = await renderCodexProviderSecretPlan({ profile: "minimax-m3", codexHome: context.minimaxM3Home, dryRun: true }); assert.equal(minimaxM3SecretPlan.secretName, "agentrun-v01-provider-minimax-m3"); assert.equal(minimaxM3SecretPlan.profile, "minimax-m3"); assert.equal(JSON.stringify(minimaxM3SecretPlan).includes("test-token-material-minimax-m3"), false); assert.equal(JSON.stringify(minimaxM3SecretPlan).includes("MiniMax-M3"), false); assert.equal(JSON.stringify(minimaxM3SecretPlan).includes("api.minimaxi.com"), false); await assert.rejects( () => renderCodexProviderSecretPlan({ codexHome: path.join(context.tmp, "missing-codex-home"), dryRun: true }), (error) => error instanceof AgentRunError && error.failureKind === "secret-unavailable", ); const invalidCodexHome = path.join(context.tmp, "invalid-codex-home"); await mkdir(invalidCodexHome, { recursive: true }); await writeFile(path.join(invalidCodexHome, "auth.json"), "not-json"); await writeFile(path.join(invalidCodexHome, "config.toml"), "model = \"gpt-test\"\n"); await assert.rejects( () => renderCodexProviderSecretPlan({ codexHome: invalidCodexHome, dryRun: true }), (error) => error instanceof AgentRunError && error.failureKind === "schema-invalid", ); await writeFile(path.join(invalidCodexHome, "auth.json"), JSON.stringify({ token: "" })); await assert.rejects( () => renderCodexProviderSecretPlan({ codexHome: invalidCodexHome, dryRun: true }), (error) => error instanceof AgentRunError && error.failureKind === "secret-unavailable", ); await writeFile(path.join(invalidCodexHome, "auth.json"), JSON.stringify({ token: "test-token-material" })); await writeFile(path.join(invalidCodexHome, "config.toml"), "model ="); await assert.rejects( () => renderCodexProviderSecretPlan({ codexHome: invalidCodexHome, dryRun: true }), (error) => error instanceof AgentRunError && error.failureKind === "schema-invalid", ); return { name: "secret-render", tests: ["codex-secret-dry-run", "deepseek-secret-dry-run", "minimax-m3-secret-dry-run"] }; }; export default selfTest;