repositories / pi-ext
pi-ext
bugabingas pi extensions
owned by admin
extensions/ultra/__tests__/dynamic-extensions.test.ts
Rawimport {
mkdir,
mkdtemp,
readFile,
rename,
rm,
stat,
symlink,
utimes,
writeFile,
} from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
import { afterEach, describe, expect, it, vi } from "vitest";
import { hashArtifacts } from "../dynamic-artifacts.ts";
import {
createDynamicExtensionCoordinator,
type DynamicCatalogPaths,
dynamicCatalogPaths,
} from "../dynamic-catalog.ts";
import type {
DynamicExtensionResolver,
UsedDynamicExtension,
} from "../dynamic-types.ts";
import { runWorkflow } from "../engine.ts";
import type { StepRunner } from "../runner.ts";
import {
DYNAMIC_EXTENSION_TOOL_NAMES,
parseWorkflow,
type WorkflowSpec,
} from "../spec.ts";
const roots: string[] = [];
afterEach(async () => {
await Promise.all(
roots.splice(0).map((root) => rm(root, { recursive: true, force: true })),
);
});
function fakePaths(root: string): DynamicCatalogPaths {
const cache = join(root, "cache");
return {
catalog: join(root, "agent", "ultra", "dynamic-extensions", "catalog"),
cache,
runs: join(cache, "runs"),
locks: join(cache, "locks"),
};
}
function requiredTool(
tools: Map<string, ToolDefinition>,
name: string,
): ToolDefinition {
const tool = tools.get(name);
if (!tool) throw new Error(`missing test tool: ${name}`);
return tool;
}
async function invoke(
tool: ToolDefinition,
params: unknown,
signal?: AbortSignal,
): Promise<unknown> {
const result = await tool.execute(
"call",
params,
signal,
undefined,
{} as never,
);
return result.details;
}
describe("dynamic-extension workflow contract", () => {
it("accepts dynamic selectors and isolated mutating fanout", () => {
const spec = parseWorkflow({
name: "builders",
phases: [
{
id: "build",
kind: "fanout",
over: ["a", "b"],
writeIsolation: "Each item owns one distinct extension topic.",
step: {
summary: "Build {item}",
prompt: "Build only the distinct extension topic {item}.",
tools: [...DYNAMIC_EXTENSION_TOOL_NAMES, "edit", "write"],
dynamicExtensions: "{args.known}",
},
},
],
});
expect(spec.phases[0].writeIsolation).toContain("distinct");
expect(spec.phases[0].step.dynamicExtensions).toBe("{args.known}");
});
it("rejects partial builder sets and mutating fanout without isolation", () => {
const base = {
name: "bad",
phases: [
{
id: "p",
kind: "fanout",
over: [1],
step: {
summary: "Bad",
prompt: "Bad",
tools: ["search_dynamic_extensions"],
},
},
],
};
expect(() => parseWorkflow(base)).toThrow(/all four or none/u);
base.phases[0].step.tools = ["edit"];
expect(() => parseWorkflow(base)).toThrow(/without writeIsolation/u);
});
it("hashes resolved revisions into checkpoints and reports exact loaded metadata", async () => {
const used: UsedDynamicExtension = {
name: "probe-capability",
description: "Handles probe values.",
selector: `probe-capability@${"a".repeat(64)}`,
sourcePath: "/snapshot/probe-capability/revision",
debugLogPaths: ["/logs/child/probe-capability.jsonl"],
};
const resolver: DynamicExtensionResolver = {
resolve: vi.fn(async () => [
{
name: used.name,
description: used.description,
revision: "a".repeat(64),
selector: used.selector,
canonicalPath: "/catalog/probe-capability/revision",
sourcePath: used.sourcePath,
loadPath: "/snapshot/index.ts",
overrides: [],
},
]),
builder: vi.fn(async () => ({ tools: [], prompt: "", activeTools: [] })),
loaded: vi.fn(() => [used]),
complete: vi.fn(async () => {}),
};
const calls: Parameters<StepRunner>[0][] = [];
const runner: StepRunner = async (args) => {
calls.push(args);
return { ok: true, value: { done: true }, dynamicExtensions: [used] };
};
const spec: WorkflowSpec = {
name: "consumer",
phases: [
{
id: "consume",
kind: "single",
step: {
summary: "Consume",
prompt: "Consume",
dynamicExtensions: ["probe-capability"],
},
},
],
};
const result = await runWorkflow(spec, undefined, {
stepRunner: runner,
concurrency: 1,
dynamicExtensions: resolver,
});
expect(calls[0].dynamicExtensions?.[0].revision).toBe("a".repeat(64));
expect(JSON.parse(calls[0].sessionKey).dynamicExtensions).toEqual([
{ name: "probe-capability", revision: "a".repeat(64) },
]);
expect(result.dynamicExtensions).toEqual([used]);
expect(resolver.complete).toHaveBeenCalledOnce();
});
it("preserves dynamic metadata from cached steps without charging usage", async () => {
const used: UsedDynamicExtension = {
name: "cached-capability",
description: "Handles cached values.",
selector: "cached-capability@revision",
sourcePath: "/snapshot/cached-capability/revision",
debugLogPaths: ["/logs/child/cached-capability.jsonl"],
};
const resolver: DynamicExtensionResolver = {
resolve: async () => [
{
name: used.name,
description: used.description,
revision: "revision",
selector: used.selector,
canonicalPath: "/catalog/cached-capability/revision",
sourcePath: used.sourcePath,
loadPath: "/snapshot/index.ts",
overrides: [],
},
],
builder: async () => ({ tools: [], prompt: "", activeTools: [] }),
loaded: () => [used],
complete: async () => {},
};
const runner = vi.fn<StepRunner>();
const result = await runWorkflow(
{
name: "cached",
phases: [
{
id: "consume",
kind: "single",
step: {
summary: "Consume",
prompt: "Consume",
dynamicExtensions: ["cached-capability"],
},
},
],
},
undefined,
{
stepRunner: runner,
concurrency: 1,
dynamicExtensions: resolver,
journal: {
get: async () => ({
ok: true,
value: { cached: true },
dynamicExtensions: [used],
usage: {
input: 100,
output: 20,
total: 120,
cacheRead: 0,
cacheWrite: 0,
cost: 1,
},
}),
set: async () => {},
},
},
);
expect(runner).not.toHaveBeenCalled();
expect(result.dynamicExtensions).toEqual([used]);
expect(result.tokenUsage.total).toBe(0);
});
it("turns every later phase into a typed blocker after builder failure", async () => {
const calls: string[] = [];
const runner: StepRunner = async (args) => {
calls.push(args.phase);
return {
ok: false,
value: null,
failure: {
code: "session",
message: "builder failed",
retryable: true,
attempts: 1,
},
};
};
const result = await runWorkflow(
{
name: "blocked",
phases: [
{
id: "build",
kind: "single",
step: {
summary: "Build",
prompt: "Build",
tools: [...DYNAMIC_EXTENSION_TOOL_NAMES],
},
},
{
id: "consume",
kind: "single",
step: { summary: "Consume", prompt: "Consume" },
},
],
},
undefined,
{ stepRunner: runner, concurrency: 1 },
);
expect(calls).toEqual(["build"]);
expect(result.phaseFailures.consume[0].code).toBe(
"dynamic_extension_builder_failure",
);
expect(result.phases[1]).toEqual({
id: "consume",
ran: 0,
ok: 0,
dropped: 1,
});
});
});
describe("dynamic-extension catalog", () => {
it("uses the specified platform cache roots", () => {
expect(
dynamicCatalogPaths({
agentDir: "/agent",
platform: "win32",
env: { LOCALAPPDATA: "C:/cache" },
home: "C:/home",
}).cache.replaceAll("\\", "/"),
).toBe("C:/cache/pi/ultra/dynamic-extensions");
expect(
dynamicCatalogPaths({
agentDir: "/agent",
platform: "darwin",
env: {},
home: "/home/oliver",
}).cache,
).toBe("/home/oliver/Library/Caches/pi/ultra/dynamic-extensions");
expect(
dynamicCatalogPaths({
agentDir: "/agent",
platform: "linux",
env: { XDG_CACHE_HOME: "/xdg" },
home: "/home/oliver",
}).cache,
).toBe("/xdg/pi/ultra/dynamic-extensions");
});
it("ranks search deterministically and returns at most five matches", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-search-test-"));
roots.push(root);
const paths = fakePaths(root);
for (const suffix of ["zeta", "beta", "alpha", "delta", "gamma", "eta"]) {
const name = `probe-${suffix}-capability`;
const staging = join(paths.catalog, name, "staging");
await mkdir(staging, { recursive: true });
const manifest = {
schemaVersion: 1,
name,
description: `Handles ${suffix} probe values.`,
topic: "probe value handling",
scope: "Probe values.",
nonGoals: ["Network access."],
tags: ["probe"],
capabilities: [`${name}-core`],
requiredExecutables: [],
optionalExecutables: [],
overrides: [],
benchmarkBudgets: { [process.platform]: { hotPathMs: 10 } },
};
await Promise.all([
writeFile(
join(staging, "manifest.json"),
`${JSON.stringify(manifest)}\n`,
),
writeFile(
join(staging, "README.md"),
`# ${name}\n\n## Purpose\n\nProbe values.\n\n## Scope\n\nProbe values.\n\n## Usage\n\nUse probe values.\n`,
),
]);
const revision = hashArtifacts(staging);
const source = join(paths.catalog, name, revision);
await rename(staging, source);
await Promise.all([
writeFile(
join(source, ".ultra-validation.json"),
JSON.stringify({
schemaVersion: 1,
validatorContractVersion: 2,
sourceHash: revision,
validatedAt: new Date().toISOString(),
platform: process.platform,
testedPlatforms: [process.platform],
nodeVersion: process.version,
warningTargetMs: 5_000,
gates: [],
}),
),
writeFile(
join(paths.catalog, name, "current.json"),
JSON.stringify({
schemaVersion: 1,
name,
revision,
description: manifest.description,
topic: manifest.topic,
publishedAt: new Date().toISOString(),
}),
),
]);
}
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "search-run",
availableTools: ["read"],
paths,
});
const builder = await coordinator.builder("search#0");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
const details = (await invoke(
requiredTool(tools, "search_dynamic_extensions"),
{ query: "probe" },
)) as {
matches: Array<{ name: string; integrityStatus: string }>;
};
expect(details.matches).toHaveLength(5);
expect(details.matches[0].integrityStatus).toBe("intact");
expect(details.matches.map((match) => match.name)).toEqual([
"probe-alpha-capability",
"probe-beta-capability",
"probe-delta-capability",
"probe-eta-capability",
"probe-gamma-capability",
]);
});
it("aborts the validator process tree and retains its draft", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-abort-test-"));
roots.push(root);
const workerPath = join(root, "hanging-validator.mjs");
await writeFile(
workerPath,
`import { spawn } from "node:child_process";\nimport { writeFileSync } from "node:fs";\nimport { dirname, join } from "node:path";\nconst child = spawn(process.execPath, ["-e", "setInterval(() => {}, 1000)"], { stdio: "ignore" });\nwriteFileSync(join(dirname(process.argv[2]), "tree-child.pid"), String(child.pid));\nsetInterval(() => {}, 1000);\n`,
"utf8",
);
const paths = fakePaths(root);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "abort-run",
availableTools: ["read", "edit"],
paths,
workerPath,
});
const builder = await coordinator.builder("build#0");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
await invoke(requiredTool(tools, "search_dynamic_extensions"), {
query: "abort probe",
});
const created = (await invoke(
requiredTool(tools, "create_dynamic_extension"),
{
name: "abort-probe-capability",
description: "Handles deterministic abort probe values.",
topic: "abort probe value handling",
scope: "Transform abort probe values deterministically.",
nonGoals: ["Network access."],
tags: ["abort", "probe"],
consideredCandidates: [],
noMatchRationale: "The catalog has no abort probe capability.",
},
)) as { workingCopyPath: string };
const controller = new AbortController();
const validationPromise = invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: created.workingCopyPath },
controller.signal,
);
const pidPath = join(created.workingCopyPath, "..", "tree-child.pid");
for (let attempt = 0; attempt < 100; attempt++) {
try {
await readFile(pidPath, "utf8");
break;
} catch {
await new Promise((resolveDelay) => setTimeout(resolveDelay, 20));
}
}
const childPid = Number(await readFile(pidPath, "utf8"));
controller.abort();
const validation = (await validationPromise) as {
status: string;
workingCopyPath: string;
};
expect(validation).toMatchObject({
status: "aborted",
workingCopyPath: created.workingCopyPath,
});
await new Promise((resolveDelay) => setTimeout(resolveDelay, 100));
expect(() => process.kill(childPid, 0)).toThrow();
expect(await stat(created.workingCopyPath)).toBeDefined();
}, 10_000);
it("rejects a malformed validator result without crashing publication", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-protocol-test-"));
roots.push(root);
const workerPath = join(root, "malformed-validator.mjs");
await writeFile(
workerPath,
'console.log("ULTRA_VALIDATION_RESULT=null");\n',
"utf8",
);
const paths = fakePaths(root);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "protocol-run",
availableTools: ["read"],
paths,
workerPath,
});
const builder = await coordinator.builder("build#0");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
await invoke(requiredTool(tools, "search_dynamic_extensions"), {
query: "protocol probe",
});
const created = (await invoke(
requiredTool(tools, "create_dynamic_extension"),
{
name: "protocol-probe-capability",
description: "Handles malformed validator protocol probes.",
topic: "malformed validator protocol handling",
scope: "Reject malformed validator protocol results safely.",
nonGoals: ["Network access."],
tags: ["protocol", "probe"],
consideredCandidates: [],
noMatchRationale: "The catalog has no protocol probe capability.",
},
)) as { workingCopyPath: string };
const validation = (await invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: created.workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(validation.status).toBe("failed");
expect(validation.diagnostics).toEqual(
expect.arrayContaining([
expect.objectContaining({ code: "validator_protocol" }),
]),
);
const hash = hashArtifacts(created.workingCopyPath);
const manifest = JSON.parse(
await readFile(join(created.workingCopyPath, "manifest.json"), "utf8"),
);
await writeFile(
workerPath,
`import { writeFileSync } from "node:fs";\nwriteFileSync(process.env.ULTRA_VALIDATOR_RESULT_PATH + ".preflight", ${JSON.stringify(JSON.stringify({ ok: true, diagnostics: [], manifest, hash, attestation: { sourceHash: hash }, durationMs: 0 }))});\n`,
"utf8",
);
const interrupted = (await invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: created.workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(interrupted.status).toBe("failed");
expect(interrupted.diagnostics.map((item) => item.code)).toContain(
"validator_protocol",
);
});
it("searches, scaffolds, validates, publishes, and resolves an exact snapshot", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-dynamic-test-"));
roots.push(root);
const paths = fakePaths(root);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "run",
availableTools: ["read", "edit", "run_workflow"],
paths,
});
const builder = await coordinator.builder("build#0");
expect(builder.activeTools).toContain("read");
expect(builder.activeTools).toContain("edit");
expect(builder.activeTools).not.toContain("run_workflow");
expect(builder.prompt).toContain("dynamic-extension builder guidance");
const byName = new Map(builder.tools.map((tool) => [tool.name, tool]));
const search = await invoke(
requiredTool(byName, "search_dynamic_extensions"),
{
query: "probe values",
},
);
expect(search).toEqual({ matches: [] });
const created = (await invoke(
requiredTool(byName, "create_dynamic_extension"),
{
name: "probe-capability",
description: "Handles deterministic probe values.",
topic: "deterministic probe value handling",
scope:
"Transform one probe value into deterministic structured output.",
nonGoals: ["Network access."],
tags: ["probe", "deterministic"],
consideredCandidates: [],
noMatchRationale: "The catalog contains no probe capability.",
},
)) as { name: string; workingCopyPath: string };
expect(created.name).toBe("probe-capability");
await expect(
stat(join(created.workingCopyPath, "debug.ts")),
).rejects.toThrow();
await expect(
stat(join(created.workingCopyPath, "benchmark.ts")),
).rejects.toThrow();
const validation = (await invoke(
requiredTool(byName, "validate_dynamic_extension"),
{ path: created.workingCopyPath },
)) as {
status: string;
name: string;
diagnostics: Array<{ code: string; status: string }>;
};
expect(validation, JSON.stringify(validation, null, 2)).toMatchObject({
status: "validated",
name: "probe-capability",
});
expect(validation.diagnostics.some((item) => item.status === "error")).toBe(
false,
);
const resolved = await coordinator.resolve(["probe-capability"], {
phase: "consume",
agentId: "consume#0",
});
expect(resolved).toHaveLength(1);
expect(resolved[0].selector).toBe(
`probe-capability@${resolved[0].revision}`,
);
expect(hashPath(resolved[0].loadPath)).toBe(resolved[0].revision);
const used = coordinator.loaded(resolved, "child-session");
expect(used[0].debugLogPaths).toEqual([]);
const canonicalReadme = join(resolved[0].canonicalPath, "README.md");
await writeFile(
canonicalReadme,
`${await readFile(canonicalReadme, "utf8")}\nManual repair evidence.\n`,
"utf8",
);
await expect(
coordinator.resolve(["probe-capability"], {
phase: "consume",
agentId: "consume#1",
}),
).rejects.toThrow(/call validate_dynamic_extension/u);
const repair = await coordinator.builder("repair#0");
const repairTools = new Map(repair.tools.map((tool) => [tool.name, tool]));
const validateRepair = requiredTool(
repairTools,
"validate_dynamic_extension",
);
const repaired = (await invoke(validateRepair, {
path: resolved[0].canonicalPath,
})) as Record<string, unknown>;
expect(repaired, JSON.stringify(repaired, null, 2)).toMatchObject({
status: "validated",
name: "probe-capability",
});
expect(repaired.revision).not.toBe(resolved[0].revision);
const brokenBuilder = await coordinator.builder("broken#0");
const brokenTools = new Map(
brokenBuilder.tools.map((tool) => [tool.name, tool]),
);
const brokenCheckout = (await invoke(
requiredTool(brokenTools, "copy_dynamic_extension"),
{ name: "probe-capability" },
)) as { workingCopyPath: string };
await Promise.all([
writeFile(
join(brokenCheckout.workingCopyPath, "README.md"),
"# Broken\n",
),
writeFile(
join(brokenCheckout.workingCopyPath, "package.json"),
JSON.stringify({
private: true,
type: "module",
main: "index.ts",
dependencies: { dependency: "1.0.0" },
peerDependencies: {
"@earendil-works/pi-coding-agent": "*",
},
}),
),
writeFile(
join(brokenCheckout.workingCopyPath, "index.test.ts"),
'import test from "node:test";\ntest("probe-capability-core: broken", () => { throw new Error("broken"); });\n',
),
]);
const changedManifest = JSON.parse(
await readFile(
join(brokenCheckout.workingCopyPath, "manifest.json"),
"utf8",
),
);
changedManifest.topic = "new responsibility";
changedManifest.benchmarkBudgets = {
[process.platform]: { hotPathMs: 1_000 },
};
await writeFile(
join(brokenCheckout.workingCopyPath, "manifest.json"),
JSON.stringify(changedManifest),
);
const broken = (await invoke(
requiredTool(brokenTools, "validate_dynamic_extension"),
{ path: brokenCheckout.workingCopyPath },
)) as {
status: string;
diagnostics: Array<{ code: string }>;
workingCopyPath: string;
};
expect(broken.status).toBe("validated");
expect(broken.diagnostics.map((item) => item.code)).toContain(
"tests_failed",
);
await writeFile(
join(brokenCheckout.workingCopyPath, "core.ts"),
"export const fixed = true;\n",
);
const retried = (await invoke(
requiredTool(brokenTools, "validate_dynamic_extension"),
{ path: brokenCheckout.workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(retried.status).toBe("validated");
expect(retried.diagnostics.map((item) => item.code)).toContain(
"tests_failed",
);
await coordinator.complete();
await expect(stat(resolved[0].sourcePath)).rejects.toThrow();
expect(await stat(brokenCheckout.workingCopyPath)).toBeDefined();
}, 60_000);
it("preserves copies, advances only a published base, and exposes a bounded recovery handoff", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-copies-test-"));
roots.push(root);
const options = {
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "run",
availableTools: ["read", "write"],
paths: fakePaths(root),
};
const coordinator = createDynamicExtensionCoordinator(options);
const builder = await coordinator.builder("builder#0");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
const create = requiredTool(tools, "create_dynamic_extension");
const copy = requiredTool(tools, "copy_dynamic_extension");
const validate = requiredTool(tools, "validate_dynamic_extension");
const input = {
name: "probe-capability",
description: "Probe capability.",
};
const first = (await invoke(create, input)) as { workingCopyPath: string };
await writeFile(
join(first.workingCopyPath, "core.ts"),
"export const original = true;\n",
);
const second = (await invoke(create, input)) as { workingCopyPath: string };
expect(second.workingCopyPath).not.toBe(first.workingCopyPath);
expect(
await readFile(join(first.workingCopyPath, "core.ts"), "utf8"),
).toContain("original");
const published = (await invoke(validate, {
path: first.workingCopyPath,
})) as { status: string; revision: string };
expect(published.status).toBe("validated");
const stale = (await invoke(validate, {
path: second.workingCopyPath,
})) as { status: string; workingCopyPath: string };
expect(stale).toMatchObject({
status: "stale",
workingCopyPath: second.workingCopyPath,
});
const third = (await invoke(copy, { name: input.name })) as {
workingCopyPath: string;
};
await writeFile(
join(third.workingCopyPath, "core.ts"),
"export const independent = true;\n",
);
const fourth = (await invoke(copy, { name: input.name })) as {
workingCopyPath: string;
};
expect(fourth.workingCopyPath).not.toBe(third.workingCopyPath);
expect(
await readFile(join(third.workingCopyPath, "core.ts"), "utf8"),
).toContain("independent");
await writeFile(
join(first.workingCopyPath, "core.ts"),
"export const next = true;\n",
);
const republished = (await invoke(validate, {
path: first.workingCopyPath,
})) as { status: string; revision: string };
expect(republished.status).toBe("validated");
expect(republished.revision).not.toBe(published.revision);
const competing = (await invoke(validate, {
path: third.workingCopyPath,
})) as { status: string; workingCopyPath: string };
expect(competing).toMatchObject({
status: "stale",
workingCopyPath: third.workingCopyPath,
});
const recovered = (await invoke(copy, { name: input.name })) as {
workingCopyPath: string;
};
expect(recovered.workingCopyPath).not.toBe(third.workingCopyPath);
const toolResult = await validate.execute(
"call",
{ path: third.workingCopyPath },
undefined,
undefined,
{} as never,
);
const handoff = JSON.parse(
(toolResult.content[0] as { text: string }).text,
);
expect(handoff).toMatchObject({
status: "stale",
name: input.name,
workingCopyPath: third.workingCopyPath,
});
expect(handoff.diagnostics[0]).toHaveProperty("nextAction");
await coordinator.complete();
const restarted = createDynamicExtensionCoordinator(options);
const again = await restarted.builder("builder#0");
expect(again.tools.map((tool) => tool.name)).toContain(
"copy_dynamic_extension",
);
expect(
await readFile(join(third.workingCopyPath, "core.ts"), "utf8"),
).toContain("independent");
expect(
await readFile(join(first.workingCopyPath, "core.ts"), "utf8"),
).toContain("next");
const old = new Date(0);
await utimes(join(options.paths.runs, "parent"), old, old);
const later = createDynamicExtensionCoordinator({
...options,
workflowRunId: "later",
});
await later.builder("later#0");
expect(
await readFile(join(first.workingCopyPath, "core.ts"), "utf8"),
).toContain("next");
}, 60_000);
it("keeps a blocked structured builder's working copy after workflow completion", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-blocked-copy-test-"));
roots.push(root);
const options = {
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "blocked",
availableTools: ["read"],
paths: fakePaths(root),
};
const coordinator = createDynamicExtensionCoordinator(options);
let path = "";
const result = await runWorkflow(
{
name: "blocked-copy",
phases: [
{
id: "build",
kind: "single",
step: {
summary: "Build",
prompt: "Build",
tools: [...DYNAMIC_EXTENSION_TOOL_NAMES],
},
},
],
},
undefined,
{
stepRunner: async (args) => {
const builder = await coordinator.builder(args.agentId);
const tool = builder.tools.find(
(item) => item.name === "create_dynamic_extension",
);
if (!tool) throw new Error("missing builder tool");
path = (
(await invoke(tool, {
name: "blocked-capability",
description: "Unfinished work.",
})) as { workingCopyPath: string }
).workingCopyPath;
return {
ok: true,
value: { status: "blocked", workingCopyPath: path },
};
},
concurrency: 1,
dynamicExtensions: coordinator,
},
);
expect(result.phases[0].ok).toBe(1);
expect(result.phaseResults.build[0]).toMatchObject({
ok: true,
value: { status: "blocked", workingCopyPath: path },
});
expect(await stat(path)).toBeDefined();
const reconstructed = createDynamicExtensionCoordinator(options);
await reconstructed.builder("build#0");
expect(await stat(path)).toBeDefined();
}, 15_000);
it("resolves old catalog artifacts regardless of validator metadata", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-v2-test-"));
roots.push(root);
const paths = fakePaths(root);
const name = "existing-capability";
const staging = join(paths.catalog, name, "staging");
await mkdir(staging, { recursive: true });
const manifest = {
schemaVersion: 1,
name,
description: "Existing capability.",
topic: "old topic",
scope: "old scope",
nonGoals: ["Other tasks"],
tags: ["existing"],
capabilities: ["existing-capability-core"],
requiredExecutables: [],
optionalExecutables: [],
overrides: [],
benchmarkBudgets: { [process.platform]: { hotPathMs: 10 } },
};
await writeFile(join(staging, "manifest.json"), JSON.stringify(manifest));
await writeFile(
join(staging, "index.ts"),
"export default function extension() {}\n",
);
await writeFile(
join(staging, "debug.ts"),
"// Existing debug content is not rewritten.\n",
);
const revision = hashArtifacts(staging);
const canonical = join(paths.catalog, name, revision);
await rename(staging, canonical);
await writeFile(
join(canonical, ".ultra-validation.json"),
JSON.stringify({
schemaVersion: 1,
validatorContractVersion: 999,
sourceHash: revision,
validatedAt: new Date().toISOString(),
platform: process.platform,
testedPlatforms: [process.platform],
nodeVersion: process.version,
warningTargetMs: 5_000,
gates: [
"manifest",
"readme",
"package",
"debug-template",
"artifacts",
"tests",
"benchmark",
"real-loader",
"hash",
],
}),
);
await writeFile(
join(paths.catalog, name, "current.json"),
JSON.stringify({
schemaVersion: 1,
name,
revision,
description: manifest.description,
topic: manifest.topic,
publishedAt: new Date().toISOString(),
}),
);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "v2",
availableTools: [],
paths,
});
const resolved = await coordinator.resolve([name], {
phase: "consume",
agentId: "child",
});
expect(resolved[0].revision).toBe(revision);
expect(await readFile(join(canonical, "debug.ts"), "utf8")).toBe(
"// Existing debug content is not rewritten.\n",
);
expect(
await readFile(join(resolved[0].sourcePath, "debug.ts"), "utf8"),
).toBe("// Existing debug content is not rewritten.\n");
await rm(join(canonical, ".ultra-validation.json"));
const stillAvailable = await coordinator.resolve([name], {
phase: "consume",
agentId: "next-child",
});
expect(stillAvailable[0].revision).toBe(revision);
const builder = await coordinator.builder("update#0");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
await invoke(requiredTool(tools, "search_dynamic_extensions"), {
query: name,
});
const checkout = (await invoke(
requiredTool(tools, "copy_dynamic_extension"),
{ name },
)) as { workingCopyPath: string };
expect(
await readFile(join(checkout.workingCopyPath, "debug.ts"), "utf8"),
).toContain("Existing debug content");
const reimagined = {
...manifest,
description: "Reimagined capability.",
topic: "new purpose",
};
await writeFile(
join(checkout.workingCopyPath, "manifest.json"),
JSON.stringify(reimagined),
);
const updated = (await invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: checkout.workingCopyPath },
)) as { status: string };
expect(updated.status).toBe("validated");
const next = await coordinator.resolve([name], {
phase: "consume",
agentId: "after-update",
});
expect(next[0].description).toBe(reimagined.description);
});
it("publishes minimal metadata without README or tests and reports failed load/tests", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-minimal-test-"));
roots.push(root);
const paths = fakePaths(root);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "minimal",
availableTools: ["read"],
paths,
});
const builder = await coordinator.builder("build#0");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
const { workingCopyPath } = (await invoke(
requiredTool(tools, "create_dynamic_extension"),
{ name: "minimal", description: "Minimal extension" },
)) as { workingCopyPath: string };
await rm(join(workingCopyPath, "README.md"));
await rm(join(workingCopyPath, "package.json"));
await rm(join(workingCopyPath, "core.ts"));
await writeFile(
join(workingCopyPath, "manifest.json"),
JSON.stringify({ name: "minimal", description: "Minimal extension" }),
);
await writeFile(
join(workingCopyPath, "index.ts"),
"export default function extension() {}\n",
);
const validation = (await invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(validation.status, JSON.stringify(validation)).toBe("validated");
const matches = (await invoke(
requiredTool(tools, "search_dynamic_extensions"),
{ query: "minimal" },
)) as { matches: Array<{ name: string }> };
expect(matches.matches[0].name).toBe("minimal");
const resolved = await coordinator.resolve(["minimal"], {
phase: "use",
agentId: "use#0",
});
expect(resolved[0].overrides).toEqual([]);
expect(coordinator.loaded(resolved, "child")[0].debugLogPaths).toEqual([]);
const checkout = await coordinator.builder("repair#0");
const repairTools = new Map(
checkout.tools.map((tool) => [tool.name, tool]),
);
const { workingCopyPath: brokenPath } = (await invoke(
requiredTool(repairTools, "copy_dynamic_extension"),
{ name: "minimal" },
)) as { workingCopyPath: string };
await writeFile(
join(brokenPath, "index.ts"),
'import "./missing.ts"; export default function extension() {}\n',
);
await writeFile(
join(brokenPath, "other.test.ts"),
'import test from "node:test"; test("broken", () => { throw new Error("failed") });\n',
);
const broken = (await invoke(
requiredTool(repairTools, "validate_dynamic_extension"),
{ path: brokenPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(broken.status).toBe("validated");
expect(broken.diagnostics.map((item) => item.code)).toEqual(
expect.arrayContaining(["extension_load", "tests_failed"]),
);
});
it("reports a hanging load without losing structural publication", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-timeout-test-"));
roots.push(root);
const paths = fakePaths(root);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "p",
workflowRunId: "timeout",
availableTools: [],
paths,
});
const builder = await coordinator.builder("b");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
await invoke(requiredTool(tools, "search_dynamic_extensions"), {
query: "hang",
});
const { workingCopyPath } = (await invoke(
requiredTool(tools, "create_dynamic_extension"),
{
name: "hang",
description: "Hanging load",
consideredCandidates: [],
noMatchRationale: "None",
},
)) as { workingCopyPath: string };
await writeFile(
join(workingCopyPath, "index.ts"),
"while (true) {}\nexport default function extension() {}\n",
);
const result = (await invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(result.status, JSON.stringify(result)).toBe("validated");
expect(result.diagnostics.map((item) => item.code)).toContain(
"validator_timeout",
);
}, 25_000);
it("rejects symlink artifacts and reserved tool registrations", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-safety-test-"));
roots.push(root);
const paths = fakePaths(root);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "p",
workflowRunId: "r",
availableTools: [],
paths,
});
const builder = await coordinator.builder("b");
const tools = new Map(builder.tools.map((tool) => [tool.name, tool]));
await invoke(requiredTool(tools, "search_dynamic_extensions"), {
query: "safety",
});
const { workingCopyPath } = (await invoke(
requiredTool(tools, "create_dynamic_extension"),
{
name: "safety",
description: "Safety extension",
consideredCandidates: [],
noMatchRationale: "None",
},
)) as { workingCopyPath: string };
await symlink(
join(workingCopyPath, "index.ts"),
join(workingCopyPath, "linked.ts"),
);
const linked = (await invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(linked.status).toBe("failed");
expect(linked.diagnostics.map((item) => item.code)).toContain(
"artifact_symlink",
);
await rm(join(workingCopyPath, "linked.ts"));
await writeFile(
join(workingCopyPath, "index.ts"),
`export default function extension(pi) { pi.registerTool({ name: "run_workflow", label: "bad", description: "bad", parameters: { type: "object", properties: {} }, execute: async () => ({ content: [], details: {} }) }); }\n`,
);
const reserved = (await invoke(
requiredTool(tools, "validate_dynamic_extension"),
{ path: workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(reserved.status).toBe("failed");
expect(reserved.diagnostics.map((item) => item.code)).toContain(
"generated_tool_reserved",
);
await writeFile(
join(workingCopyPath, "index.ts"),
"export default function extension() {}\n",
);
const manifest = JSON.parse(
await readFile(join(workingCopyPath, "manifest.json"), "utf8"),
);
manifest.name = "different-name";
await writeFile(
join(workingCopyPath, "manifest.json"),
JSON.stringify(manifest),
);
const otherBuilder = await coordinator.builder("other");
const otherTools = new Map(
otherBuilder.tools.map((tool) => [tool.name, tool]),
);
const identity = (await invoke(
requiredTool(otherTools, "validate_dynamic_extension"),
{ path: workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(identity.status).toBe("failed");
expect(identity.diagnostics.map((item) => item.code)).toContain(
"extension_identity_changed",
);
const fakeWorker = join(root, "wrong-hash.mjs");
await writeFile(
fakeWorker,
`import { writeFileSync } from "node:fs";
const hash = "f".repeat(64);
writeFileSync(process.env.ULTRA_VALIDATOR_RESULT_PATH, JSON.stringify({
ok: true, diagnostics: [], manifest: { schemaVersion: 1, name: "different-name", description: "Safety extension" }, hash,
attestation: { schemaVersion: 1, validatorContractVersion: 2, sourceHash: hash, testedPlatforms: [process.platform] }, durationMs: 0
}));`,
);
const fake = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "p",
workflowRunId: "fake",
availableTools: [],
paths,
workerPath: fakeWorker,
});
const fakeBuilder = await fake.builder("fake");
const fakeTools = new Map(
fakeBuilder.tools.map((tool) => [tool.name, tool]),
);
const mismatch = (await invoke(
requiredTool(fakeTools, "validate_dynamic_extension"),
{ path: workingCopyPath },
)) as { status: string; diagnostics: Array<{ code: string }> };
expect(mismatch.status).toBe("failed");
expect(mismatch.diagnostics.map((item) => item.code)).toContain(
"validation_identity_or_hash",
);
});
it("serializes concurrent publication and rejects the stale builder without clobbering", async () => {
const root = await mkdtemp(join(tmpdir(), "ultra-stale-test-"));
roots.push(root);
const paths = fakePaths(root);
const workerPath = join(root, "successful-validator.mjs");
await writeFile(
workerPath,
`import { readFile, writeFile } from "node:fs/promises";
import { join } from "node:path";
import { hashArtifacts } from ${JSON.stringify(new URL("../dynamic-artifacts.ts", import.meta.url).href)};
const workingCopyPath = process.argv[2];
const manifest = JSON.parse(await readFile(join(workingCopyPath, "manifest.json"), "utf8"));
const hash = hashArtifacts(workingCopyPath);
const result = {
ok: true,
diagnostics: [],
manifest,
hash,
attestation: {
sourceHash: hash,
validatedAt: new Date().toISOString(),
platform: process.platform,
testedPlatforms: [process.platform],
nodeVersion: process.version,
warningTargetMs: 5_000,
gates: [],
},
durationMs: 0,
};
await writeFile(process.env.ULTRA_VALIDATOR_RESULT_PATH, JSON.stringify(result), "utf8");
`,
"utf8",
);
const coordinator = createDynamicExtensionCoordinator({
agentDir: join(root, "agent"),
parentSessionId: "parent",
workflowRunId: "stale-run",
availableTools: ["read", "edit"],
paths,
workerPath,
});
const initial = await coordinator.builder("initial#0");
const initialTools = new Map(
initial.tools.map((tool) => [tool.name, tool]),
);
await invoke(requiredTool(initialTools, "search_dynamic_extensions"), {
query: "stale probe",
});
const created = (await invoke(
requiredTool(initialTools, "create_dynamic_extension"),
{
name: "stale-probe-capability",
description: "Handles deterministic stale probe values.",
topic: "stale probe value handling",
scope: "Transform stale probe values deterministically.",
nonGoals: ["Network access."],
tags: ["stale", "probe"],
consideredCandidates: [],
noMatchRationale: "The catalog has no stale probe capability.",
},
)) as { workingCopyPath: string };
const initialPublication = (await invoke(
requiredTool(initialTools, "validate_dynamic_extension"),
{ path: created.workingCopyPath },
)) as Record<string, unknown>;
expect(initialPublication.status).toBe("validated");
const left = await coordinator.builder("left#0");
const right = await coordinator.builder("right#0");
const leftTools = new Map(left.tools.map((tool) => [tool.name, tool]));
const rightTools = new Map(right.tools.map((tool) => [tool.name, tool]));
const [leftCheckout, rightCheckout] = (await Promise.all([
invoke(requiredTool(leftTools, "copy_dynamic_extension"), {
name: "stale-probe-capability",
}),
invoke(requiredTool(rightTools, "copy_dynamic_extension"), {
name: "stale-probe-capability",
}),
])) as Array<{ workingCopyPath: string }>;
for (const [checkout, marker] of [
[leftCheckout, "left"],
[rightCheckout, "right"],
] as const) {
const readme = join(checkout.workingCopyPath, "README.md");
await writeFile(
readme,
`${await readFile(readme, "utf8")}\n${marker} publication.\n`,
"utf8",
);
}
const publications = (await Promise.all([
invoke(requiredTool(leftTools, "validate_dynamic_extension"), {
path: leftCheckout.workingCopyPath,
}),
invoke(requiredTool(rightTools, "validate_dynamic_extension"), {
path: rightCheckout.workingCopyPath,
}),
])) as Array<Record<string, unknown>>;
expect(
publications.map((value) => value.status).sort(),
JSON.stringify(publications, null, 2),
).toEqual(["stale", "validated"]);
const canonical = await coordinator.resolve(["stale-probe-capability"], {
phase: "consume",
agentId: "consume#0",
});
expect(canonical[0].revision).toBe(
publications.find((value) => value.status === "validated")?.revision,
);
}, 20_000);
});
function hashPath(indexPath: string): string {
return indexPath.split(/[\\/]/u).at(-2) ?? "";
}