From d04260b03859b3883654effee32945f95408a619 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 19:09:40 +0000 Subject: [PATCH 1/2] Changes Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com> --- supabase/functions/_shared/railway.ts | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/supabase/functions/_shared/railway.ts b/supabase/functions/_shared/railway.ts index ee73263..abfff3b 100644 --- a/supabase/functions/_shared/railway.ts +++ b/supabase/functions/_shared/railway.ts @@ -197,11 +197,11 @@ export async function setHermesSuspended(opts: { }); } -/** Busca o environmentId do primeiro deployment de um serviço. Útil quando vps_pool_id está null. */ -export async function getServiceEnvironmentId(opts: { +/** Busca env+project IDs do primeiro deployment de um serviço. Útil quando vps_pool_id está null. */ +export async function getServiceContext(opts: { token: string; serviceId: string; -}): Promise { +}): Promise<{ environmentId: string | null; projectId: string | null }> { const query = ` query Service($id: String!) { service(id: $id) { @@ -216,10 +216,21 @@ export async function getServiceEnvironmentId(opts: { service: { projectId: string; deployments: { edges: { node: { environmentId: string } }[] } }; }>(query, { id: opts.serviceId }, opts.token); if (res.errors?.length) { - console.error("getServiceEnvironmentId errors:", JSON.stringify(res.errors)); - return null; + console.error("getServiceContext errors:", JSON.stringify(res.errors)); + return { environmentId: null, projectId: null }; } - return res.data?.service?.deployments?.edges?.[0]?.node?.environmentId ?? null; + return { + environmentId: res.data?.service?.deployments?.edges?.[0]?.node?.environmentId ?? null, + projectId: res.data?.service?.projectId ?? null, + }; +} + +/** @deprecated use getServiceContext */ +export async function getServiceEnvironmentId(opts: { + token: string; + serviceId: string; +}): Promise { + return (await getServiceContext(opts)).environmentId; } /** Apaga o webhook do Telegram para que o Hermes assuma via polling. */ From d8623daf1750e983ecc1585f1dcad3f57aac261a Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 23 Apr 2026 19:10:05 +0000 Subject: [PATCH 2/2] Changes Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com> --- supabase/functions/resume-agent/index.ts | 12 +++++++----- supabase/functions/suspend-agent/index.ts | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/supabase/functions/resume-agent/index.ts b/supabase/functions/resume-agent/index.ts index 3dca052..0af0053 100644 --- a/supabase/functions/resume-agent/index.ts +++ b/supabase/functions/resume-agent/index.ts @@ -5,7 +5,7 @@ import { createClient } from "https://esm.sh/@supabase/supabase-js@2.45.4"; import { corsHeaders } from "../_shared/cors.ts"; -import { setHermesSuspended, getServiceEnvironmentId } from "../_shared/railway.ts"; +import { setHermesSuspended, getServiceContext } from "../_shared/railway.ts"; const SUPABASE_URL = Deno.env.get("SUPABASE_URL")!; const SUPABASE_SERVICE_ROLE_KEY = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!; @@ -67,14 +67,16 @@ Deno.serve(async (req) => { environmentId = pool?.railway_environment_id ?? null; projectId = pool?.railway_project_id ?? undefined; } - if (!environmentId) { - environmentId = await getServiceEnvironmentId({ + if (!environmentId || !projectId) { + const ctx = await getServiceContext({ token: RAILWAY_API_TOKEN, serviceId: agent.railway_service_id, }); + environmentId = environmentId ?? ctx.environmentId; + projectId = projectId ?? ctx.projectId ?? undefined; } - if (!environmentId) { - return jsonResponse(500, { error: "could not resolve railway environmentId" }); + if (!environmentId || !projectId) { + return jsonResponse(500, { error: "could not resolve railway environmentId/projectId" }); } try { diff --git a/supabase/functions/suspend-agent/index.ts b/supabase/functions/suspend-agent/index.ts index 0ea7f1c..8bf9910 100644 --- a/supabase/functions/suspend-agent/index.ts +++ b/supabase/functions/suspend-agent/index.ts @@ -6,7 +6,7 @@ import { createClient } from "https://esm.sh/@supabase/supabase-js@2.45.4"; import { corsHeaders } from "../_shared/cors.ts"; -import { setHermesSuspended, getServiceEnvironmentId } from "../_shared/railway.ts"; +import { setHermesSuspended, getServiceContext } from "../_shared/railway.ts"; const SUPABASE_URL = Deno.env.get("SUPABASE_URL")!; const SUPABASE_SERVICE_ROLE_KEY = Deno.env.get("SUPABASE_SERVICE_ROLE_KEY")!; @@ -69,14 +69,16 @@ Deno.serve(async (req) => { environmentId = pool?.railway_environment_id ?? null; projectId = pool?.railway_project_id ?? undefined; } - if (!environmentId) { - environmentId = await getServiceEnvironmentId({ + if (!environmentId || !projectId) { + const ctx = await getServiceContext({ token: RAILWAY_API_TOKEN, serviceId: agent.railway_service_id, }); + environmentId = environmentId ?? ctx.environmentId; + projectId = projectId ?? ctx.projectId ?? undefined; } - if (!environmentId) { - return jsonResponse(500, { error: "could not resolve railway environmentId" }); + if (!environmentId || !projectId) { + return jsonResponse(500, { error: "could not resolve railway environmentId/projectId" }); } try {