From 49b310205f0345aae3971d66e85010e82d67f890 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 22:20:25 +0000 Subject: [PATCH 1/4] Work in progress --- src/routeTree.gen.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 0fe84b5..0bb5aca 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -670,3 +670,12 @@ const rootRouteChildren: RootRouteChildren = { export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() + +import type { getRouter } from './router.tsx' +import type { createStart } from '@tanstack/react-start' +declare module '@tanstack/react-start' { + interface Register { + ssr: true + router: Awaited> + } +} From 323378661646dedc9844df6860b0892a9cf9b0d9 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 22:21:33 +0000 Subject: [PATCH 2/4] Changes Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com> --- supabase/functions/provision-agent/index.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/supabase/functions/provision-agent/index.ts b/supabase/functions/provision-agent/index.ts index 3e2724c..8c92087 100644 --- a/supabase/functions/provision-agent/index.ts +++ b/supabase/functions/provision-agent/index.ts @@ -197,9 +197,18 @@ Deno.serve(async (req) => { } if (!telegramBotToken) { - console.error(`[provision-agent] telegram_bot_token ausente — usuário ainda não conectou bot`); - await failJob(supabase, agent, job.id, "telegram_bot_token ausente no Vault — usuário precisa concluir onboarding antes"); - return jsonResponse(412, { error: "telegram token missing" }); + // Onboarding ainda não concluído. NÃO marca agent como 'error' — o wizard de Telegram + // dispara este endpoint de novo após o usuário salvar o token (validate-telegram-bot). + console.log(`[provision-agent] aguardando token do Telegram (job=${job.id})`); + await supabase + .from("provisioning_jobs") + .update({ + status: "pending", + error_message: "Aguardando o usuário conectar o bot do Telegram", + completed_at: null, + }) + .eq("id", job.id); + return jsonResponse(202, { waiting_for_token: true, agent_instance_id: agent.id }); } console.log(`[provision-agent] token Telegram OK (len=${telegramBotToken.length})`); From 44a251cb16016922b117d90dde626b5208de3480 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 22:21:43 +0000 Subject: [PATCH 3/4] Changes Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com> --- src/routeTree.gen.ts | 9 --------- supabase/functions/validate-telegram-bot/index.ts | 3 ++- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 0bb5aca..0fe84b5 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -670,12 +670,3 @@ const rootRouteChildren: RootRouteChildren = { export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() - -import type { getRouter } from './router.tsx' -import type { createStart } from '@tanstack/react-start' -declare module '@tanstack/react-start' { - interface Register { - ssr: true - router: Awaited> - } -} diff --git a/supabase/functions/validate-telegram-bot/index.ts b/supabase/functions/validate-telegram-bot/index.ts index c3051c8..fd5c671 100644 --- a/supabase/functions/validate-telegram-bot/index.ts +++ b/supabase/functions/validate-telegram-bot/index.ts @@ -98,12 +98,13 @@ Deno.serve(async (req) => { 409, ); } - if (agent.status === "suspended" || agent.status === "error") { + if (agent.status === "suspended") { return jsonResponse( { error: "Agente suspenso. Regularize sua assinatura antes de conectar o Telegram." }, 403, ); } + // status='error' por falta de token anterior é recuperável — apenas seguimos. // 4) Verifica unicidade do bot username (em outro agent_instance) const { data: conflict } = await admin From fbd4abea70718c0c23de6034cb515b3dadf71660 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Fri, 22 May 2026 22:21:56 +0000 Subject: [PATCH 4/4] Changes Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com> --- .../functions/validate-telegram-bot/index.ts | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/supabase/functions/validate-telegram-bot/index.ts b/supabase/functions/validate-telegram-bot/index.ts index fd5c671..b4c02f4 100644 --- a/supabase/functions/validate-telegram-bot/index.ts +++ b/supabase/functions/validate-telegram-bot/index.ts @@ -187,7 +187,9 @@ Deno.serve(async (req) => { ); } - // 7) Atualiza agent_instances + // 7) Atualiza agent_instances — reseta para 'provisioning' se estava em erro, + // garante que o provision-agent re-execute do zero. + const nextStatus = agent.status === "error" ? "provisioning" : agent.status; const { error: updErr } = await admin .from("agent_instances") .update({ @@ -197,6 +199,7 @@ Deno.serve(async (req) => { telegram_token_invalid: false, telegram_webhook_configured: false, telegram_first_message_received_at: null, + status: nextStatus, updated_at: new Date().toISOString(), }) .eq("id", agent.id); @@ -206,6 +209,26 @@ Deno.serve(async (req) => { return jsonResponse({ error: "Falha ao salvar dados do bot." }, 500); } + // 8) Auto-provisionamento: dispara provision-agent assincronamente para que + // o container seja criado/atualizado no Railway. Fire-and-forget — o wizard + // não bloqueia esperando o deploy completar. + if (nextStatus === "provisioning" || agent.status === "active") { + try { + const provisionUrl = `${supabaseUrl}/functions/v1/provision-agent`; + console.log(`auto-provision: disparando para agent ${agent.id}`); + fetch(provisionUrl, { + method: "POST", + headers: { + "Content-Type": "application/json", + Authorization: `Bearer ${serviceKey}`, + }, + body: JSON.stringify({ agent_instance_id: agent.id }), + }).catch((err) => console.error("auto-provision fetch error:", err)); + } catch (err) { + console.error("auto-provision trigger error:", err); + } + } + return jsonResponse({ valid: true, bot_username: botUsername,