forked from bai/curriculum-project-hub
fix: allow arbitrary workspace file delivery
This commit is contained in:
@@ -34,6 +34,65 @@ describe("file delivery path resolution", () => {
|
||||
}
|
||||
});
|
||||
|
||||
itOnLinux("accepts arbitrary extensions and extensionless workspace files", async () => {
|
||||
const root = await makeRepo();
|
||||
try {
|
||||
const workspace = join(root, "examples", "TH-141");
|
||||
await writeFile(join(workspace, "lesson.json"), "{\"ok\":true}\n");
|
||||
await writeFile(join(workspace, "Makefile"), "all:\n\t@true\n");
|
||||
|
||||
await expect(resolveDeliverableFile("lesson.json", join(root, "examples"), workspace))
|
||||
.resolves.toMatchObject({ name: "lesson.json" });
|
||||
await expect(resolveDeliverableFile("Makefile", join(root, "examples"), workspace))
|
||||
.resolves.toMatchObject({ name: "Makefile" });
|
||||
} finally {
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
itOnLinux("allows the Feishu inbox but refuses other platform runtime files", async () => {
|
||||
const root = await makeRepo();
|
||||
try {
|
||||
const workspace = join(root, "examples", "TH-141");
|
||||
await mkdir(join(workspace, ".cph", "agent-runtime"), { recursive: true });
|
||||
await mkdir(join(workspace, ".cph", "inbox"), { recursive: true });
|
||||
await writeFile(join(workspace, ".cph", "agent-runtime", "session.jsonl"), "internal\n");
|
||||
await writeFile(join(workspace, ".cph", "denials.log"), "internal\n");
|
||||
await writeFile(join(workspace, ".cph", "inbox", "source.bin"), "source\n");
|
||||
|
||||
await expect(
|
||||
resolveDeliverableFile(".cph/inbox/source.bin", join(root, "examples"), workspace),
|
||||
).resolves.toMatchObject({ name: "source.bin" });
|
||||
|
||||
await expect(
|
||||
resolveDeliverableFile(".cph/agent-runtime/session.jsonl", join(root, "examples"), workspace),
|
||||
).rejects.toMatchObject({ reason: "boundary" });
|
||||
await expect(
|
||||
resolveDeliverableFile(".cph/denials.log", join(root, "examples"), workspace),
|
||||
).rejects.toMatchObject({ reason: "boundary" });
|
||||
} finally {
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
itOnLinux("refuses a file larger than the configured delivery limit", async () => {
|
||||
const root = await makeRepo();
|
||||
try {
|
||||
const workspace = join(root, "examples", "TH-141");
|
||||
await writeFile(join(workspace, "exact.bin"), Buffer.alloc(10));
|
||||
await writeFile(join(workspace, "artifact.bin"), Buffer.alloc(11));
|
||||
|
||||
await expect(
|
||||
resolveDeliverableFile("exact.bin", join(root, "examples"), workspace, 10),
|
||||
).resolves.toMatchObject({ name: "exact.bin", data: Buffer.alloc(10) });
|
||||
await expect(
|
||||
resolveDeliverableFile("artifact.bin", join(root, "examples"), workspace, 10),
|
||||
).rejects.toMatchObject({ reason: "limit" });
|
||||
} finally {
|
||||
await rm(root, { recursive: true, force: true });
|
||||
}
|
||||
});
|
||||
|
||||
itOnLinux("rejects a deliverable symlink even when its target exists", async () => {
|
||||
const root = await makeRepo();
|
||||
try {
|
||||
@@ -50,7 +109,7 @@ describe("file delivery path resolution", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("does not infer files from natural-language prompts", async () => {
|
||||
itOnLinux("does not infer files from natural-language prompts", async () => {
|
||||
const root = await makeRepo();
|
||||
try {
|
||||
const workspace = join(root, "examples", "TH-141");
|
||||
|
||||
Reference in New Issue
Block a user