From 092a9793ea79dc0a365e071067f22569df0dd526 Mon Sep 17 00:00:00 2001 From: -Puter <22245429+puterhimself@users.noreply.github.com> Date: Tue, 28 Jul 2026 18:30:08 +0530 Subject: [PATCH] fix: resolve repository hosts outside AgentOS --- packages/agents/src/runtime/agent-os.ts | 37 +++++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/packages/agents/src/runtime/agent-os.ts b/packages/agents/src/runtime/agent-os.ts index 64fb84b..b318e56 100644 --- a/packages/agents/src/runtime/agent-os.ts +++ b/packages/agents/src/runtime/agent-os.ts @@ -1,3 +1,5 @@ +import { Resolver } from "node:dns/promises"; + import { parseAgentEnv } from "@code/env/agent"; import { agentOS, setup } from "@rivet-dev/agentos"; import { createClient } from "@rivet-dev/agentos/client"; @@ -84,11 +86,32 @@ const classifyRuntimeFailure = (cause: unknown): WorkAttemptExecutionError => { return executionError(message, "HarnessFailed", false); }; -const gitAuthEnv = (username: string, credential: string) => ({ - GIT_CONFIG_COUNT: "1", - GIT_CONFIG_KEY_0: "http.extraHeader", - GIT_CONFIG_VALUE_0: `Authorization: Basic ${Buffer.from(`${username}:${credential}`).toString("base64")}`, -}); +const gitAuthEnv = ( + username: string, + credential: string, + repositoryUrl: string, + repositoryAddress: string +) => { + const { hostname } = new URL(repositoryUrl); + return { + GIT_CONFIG_COUNT: "2", + GIT_CONFIG_KEY_0: "http.extraHeader", + GIT_CONFIG_KEY_1: "http.curloptResolve", + GIT_CONFIG_VALUE_0: `Authorization: Basic ${Buffer.from(`${username}:${credential}`).toString("base64")}`, + GIT_CONFIG_VALUE_1: `${hostname}:443:${repositoryAddress}`, + }; +}; + +const resolveRepositoryAddress = async (repositoryUrl: string) => { + const { hostname } = new URL(repositoryUrl); + const resolver = new Resolver(); + resolver.setServers(["1.1.1.1", "8.8.8.8"]); + const [address] = await resolver.resolve4(hostname); + if (!address) { + throw new Error(`Repository host ${hostname} did not resolve`); + } + return address; +}; export const executeAgentOsAttempt = async ( rawInput: unknown @@ -113,7 +136,9 @@ export const executeAgentOsAttempt = async ( const authEnv = gitAuthEnv( input.auth.username ?? (input.auth.provider === "github" ? "x-access-token" : "git"), - input.auth.credential + input.auth.credential, + input.repositoryUrl, + await resolveRepositoryAddress(input.repositoryUrl) ); await vm.mkdir("/workspace", { recursive: true });