diff --git a/package.json b/package.json index 32ac407..bff51f2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "paperclip-adapter-opencode-k8s", - "version": "0.1.36", + "version": "0.1.37", "description": "Paperclip adapter plugin that runs OpenCode agents as Kubernetes Jobs", "license": "MIT", "type": "module", diff --git a/src/server/execute.test.ts b/src/server/execute.test.ts index 0142d91..40d15c6 100644 --- a/src/server/execute.test.ts +++ b/src/server/execute.test.ts @@ -884,7 +884,6 @@ describe("execute — external cancel polling", () => { vi.useRealTimers(); vi.unstubAllGlobals(); delete process.env.PAPERCLIP_API_URL; - delete process.env.PAPERCLIP_DEV_API_KEY; }); it("returns errorCode=cancelled and deletes job when issue status is cancelled", async () => { @@ -970,42 +969,6 @@ describe("execute — external cancel polling", () => { expect(result.errorCode).toBeUndefined(); expect(result.exitCode).toBe(0); }); - - it("uses PAPERCLIP_DEV_API_KEY over ctx.authToken when set", async () => { - vi.useFakeTimers(); - - process.env.PAPERCLIP_API_URL = "http://test-api"; - process.env.PAPERCLIP_DEV_API_KEY = "dev-override-key"; - - const fetchMock = vi.fn().mockResolvedValue({ - ok: true, - json: () => Promise.resolve({ status: "cancelled" }), - }); - vi.stubGlobal("fetch", fetchMock); - - let jobDeleted = false; - const batchApi = makeBatchApi(); - batchApi.deleteNamespacedJob.mockImplementation(() => { jobDeleted = true; return Promise.resolve({}); }); - batchApi.readNamespacedJob.mockImplementation(() => { - if (jobDeleted) return Promise.reject(Object.assign(new Error("not found"), { statusCode: 404 })); - return Promise.resolve({ status: { conditions: [] } }); - }); - vi.mocked(getBatchApi).mockReturnValue(batchApi as unknown as ReturnType); - - const ctx = makeCtx({}, { issueId: "issue-test-456" }, "ctx-auth-token"); - const executePromise = execute(ctx); - - for (let i = 0; i < 20; i++) { - await vi.advanceTimersByTimeAsync(1_000); - } - - await executePromise; - - expect(fetchMock).toHaveBeenCalledWith( - "http://test-api/api/issues/issue-test-456", - expect.objectContaining({ headers: expect.objectContaining({ Authorization: "Bearer dev-override-key" }) }), - ); - }); }); describe("execute — large-prompt Secret path", () => { diff --git a/src/server/execute.ts b/src/server/execute.ts index 935fccd..57c2745 100644 --- a/src/server/execute.ts +++ b/src/server/execute.ts @@ -569,9 +569,7 @@ async function streamAndAwaitJob( await new Promise((resolve) => setTimeout(resolve, KEEPALIVE_INTERVAL_MS)); if (logStopSignal.stopped || cancelSignal.cancelled) break; try { - // Prefer PAPERCLIP_DEV_API_KEY if set (dev override), otherwise use - // the per-run authToken issued by Paperclip for this execution. - const apiKey = process.env.PAPERCLIP_DEV_API_KEY ?? ctx.authToken ?? ""; + const apiKey = ctx.authToken ?? ""; const resp = await fetch(`${apiUrl}/api/issues/${issueId}`, { headers: { Authorization: `Bearer ${apiKey}` }, }); diff --git a/src/server/job-manifest.test.ts b/src/server/job-manifest.test.ts index 94d17b8..6795ae7 100644 --- a/src/server/job-manifest.test.ts +++ b/src/server/job-manifest.test.ts @@ -484,15 +484,14 @@ describe("buildJobManifest — env wiring branches", () => { expect(env.find((e) => e.name === "PAPERCLIP_API_KEY")?.value).toBe("tok_abc"); }); - it("inherits PAPERCLIP_API_URL and PAPERCLIP_DEV_API_KEY from selfPod inheritedEnv", () => { + it("inherits PAPERCLIP_API_URL from selfPod inheritedEnv", () => { const selfPod = { ...mockSelfPod, - inheritedEnv: { PAPERCLIP_API_URL: "http://api", PAPERCLIP_DEV_API_KEY: "dev_key" }, + inheritedEnv: { PAPERCLIP_API_URL: "http://api" }, }; const result = buildJobManifest({ ctx: mockCtx, selfPod }); const env = result.job.spec?.template.spec?.containers[0]?.env ?? []; expect(env.find((e) => e.name === "PAPERCLIP_API_URL")?.value).toBe("http://api"); - expect(env.find((e) => e.name === "PAPERCLIP_DEV_API_KEY")?.value).toBe("dev_key"); }); }); diff --git a/src/server/job-manifest.ts b/src/server/job-manifest.ts index d6e071b..7a24564 100644 --- a/src/server/job-manifest.ts +++ b/src/server/job-manifest.ts @@ -173,13 +173,6 @@ function buildEnvVars( if (selfPod.inheritedEnv.PAPERCLIP_API_URL) { paperclipEnv.PAPERCLIP_API_URL = selfPod.inheritedEnv.PAPERCLIP_API_URL; } - // Inherit PAPERCLIP_DEV_API_KEY if set (dev-instance key, distinct from the - // main-instance run JWT in PAPERCLIP_API_KEY). Used by the external cancel - // polling in execute.ts to authenticate against the dev Paperclip instance. - if (selfPod.inheritedEnv.PAPERCLIP_DEV_API_KEY) { - paperclipEnv.PAPERCLIP_DEV_API_KEY = selfPod.inheritedEnv.PAPERCLIP_DEV_API_KEY; - } - // Layer 3: Inherited from Deployment (Bedrock, API keys, etc.) const merged: Record = { ...selfPod.inheritedEnv,