From 59b3821956cb74bcd18ce222d1744b8398a68539 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 12 Jul 2026 17:58:20 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=9D=E7=95=99=20Aipod=20=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E7=AB=AF=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/src/agentrun.test.ts | 12 ++++++++++++ scripts/src/agentrun/rest-bridge.ts | 14 +++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/scripts/src/agentrun.test.ts b/scripts/src/agentrun.test.ts index 4ca67d5d..e48f0561 100644 --- a/scripts/src/agentrun.test.ts +++ b/scripts/src/agentrun.test.ts @@ -1123,6 +1123,18 @@ describe("AgentRun YAML tool credential binding", () => { expect(renderBodies).toHaveLength(2); expect(submittedBodies).toHaveLength(2); expect(submittedBodies[1]).toEqual(renderedTask()); + + credentialMode = "conflict"; + const rejected = await runAgentRunCommand(null, ["create", "task", "--aipod", "Artificer", "--prompt", "fixture", "-o", "json"]); + expect(rejected.ok).toBe(false); + expect(submittedBodies).toHaveLength(2); + expect(renderedTextOf(rejected)).toContain("github/github-ssh keys conflict"); + + credentialMode = "unknown"; + const unknownRejected = await runAgentRunCommand(null, ["create", "task", "--aipod", "Artificer", "--prompt", "fixture", "-o", "json"]); + expect(unknownRejected.ok).toBe(false); + expect(submittedBodies).toHaveLength(2); + expect(renderedTextOf(unknownRejected)).toContain("artifact-store/publish is not declared by YAML lane"); } finally { server.stop(true); if (previousConfig === undefined) delete process.env.AGENTRUN_CLIENT_CONFIG; diff --git a/scripts/src/agentrun/rest-bridge.ts b/scripts/src/agentrun/rest-bridge.ts index 576fb476..523e34ab 100644 --- a/scripts/src/agentrun/rest-bridge.ts +++ b/scripts/src/agentrun/rest-bridge.ts @@ -703,8 +703,20 @@ export async function sessionRunBodyFromArgs(sessionId: string, args: string[], export function normalizeAipodRenderedQueueTask(task: Record, args: string[], aipod: string): Record { if (Object.keys(task).length === 0) return task; + const backendProfile = stringOrNull(task.backendProfile); + if (backendProfile !== null) { + const sessionPolicy = readAgentRunClientConfig().client.sessionPolicy; + const policyTarget = resolveAgentRunSessionPolicyTarget(); + if (agentRunProviderCredentialRefs(policyTarget.spec, backendProfile).length === 0) { + throw new AgentRunRestError("validation-failed", `${policyTarget.configPath} has no providerCredential Secret binding for AipodSpec ${aipod} backendProfile=${backendProfile} on ${policyTarget.spec.nodeId}/${policyTarget.spec.lane}`); + } + const basePolicy = record(task.executionPolicy); + defaultAgentRunExecutionPolicy(backendProfile, sessionPolicy, policyTarget, { + includeToolCredentials: true, + basePolicy, + }); + } void args; - void aipod; return { ...task }; }