From 8c8e5e45f2dd59379a4730a56029bb0fb838aa70 Mon Sep 17 00:00:00 2001 From: Dotta Date: Wed, 7 Oct 2026 05:55:14 -0500 Subject: [PATCH] fix(runner): include Hermes in Daytona image identity Co-Authored-By: Paperclip --- tests/runner-e2e/daytona-image-content.ts | 5 ++++- tests/runner-e2e/daytona-image.test.ts | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/runner-e2e/daytona-image-content.ts b/tests/runner-e2e/daytona-image-content.ts index 2c79b6d52a..c7864614da 100644 --- a/tests/runner-e2e/daytona-image-content.ts +++ b/tests/runner-e2e/daytona-image-content.ts @@ -28,6 +28,9 @@ export const DAYTONA_IMAGE_INPUT_PATHS = [ "packages/paperclip-eval-kernel/src", "packages/paperclip-eval-kernel/tsconfig.json", "packages/paperclip-runner/scripts/provision-grok.mjs", + "packages/paperclip-runner/scripts/provision-hermes.mjs", + "packages/paperclip-runner/scripts/materialize-hermes.py", + "packages/paperclip-runner/acpx-profiles.json", "packages/paperclip-runner/package.json", "packages/paperclip-runner/cursor-distributions.json", "packages/paperclip-runner/cursor-contract.json", @@ -84,7 +87,7 @@ export interface DaytonaImageContentOptions { export function normalizedDaytonaCandidateProviders(values: readonly string[]): string[] { const selected = [...values].sort(); - if (selected.some(value => !["cursor", "copilot", "pi"].includes(value)) + if (selected.some(value => !["cursor", "copilot", "pi", "hermes"].includes(value)) || new Set(selected).size !== selected.length) { throw new Error("Daytona candidate providers must be distinct known ACP profiles"); } diff --git a/tests/runner-e2e/daytona-image.test.ts b/tests/runner-e2e/daytona-image.test.ts index 25696be09f..7b05f6115c 100644 --- a/tests/runner-e2e/daytona-image.test.ts +++ b/tests/runner-e2e/daytona-image.test.ts @@ -200,6 +200,9 @@ describe("runner E2E Daytona image contract", () => { "packages/paperclip-eval-kernel/src", "packages/paperclip-runner/package.json", "packages/paperclip-runner/scripts/candidate-provider-pack.mjs", + "packages/paperclip-runner/scripts/provision-hermes.mjs", + "packages/paperclip-runner/scripts/materialize-hermes.py", + "packages/paperclip-runner/acpx-profiles.json", "packages/paperclip-runner/scripts/materialize-cursor-distribution.mjs", "packages/paperclip-runner/scripts/cursor-runtime-patch.mjs", "packages/paperclip-runner/cursor-distributions.json", @@ -283,6 +286,9 @@ describe("runner E2E Daytona image contract", () => { const baseline = await computeDaytonaImageContentId(options); const candidate = await computeDaytonaImageContentId({ ...options, candidateProviders: ["pi"] }); expect(candidate).not.toBe(baseline); + const hermes = await computeDaytonaImageContentId({ ...options, candidateProviders: ["hermes"] }); + expect(hermes).not.toBe(baseline); + expect(hermes).not.toBe(candidate); expect(await computeDaytonaImageContentId({ ...options, candidateProviders: ["copilot", "pi"] })) .toBe(await computeDaytonaImageContentId({ ...options, candidateProviders: ["pi", "copilot"] })); await expect(computeDaytonaImageContentId({ ...options, candidateProviders: ["pi", "pi"] }))