mirror of
https://github.com/domfelipe/mika-agent-assist.git
synced 2026-08-07 07:16:45 +00:00
Changes
Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com>
This commit is contained in:
parent
2b45297603
commit
c1a2f795a4
1 changed files with 83 additions and 0 deletions
83
README.md
83
README.md
|
|
@ -155,6 +155,88 @@ A view `user_integration_limits` e `user_jobs_limits` usam dados de `user_integr
|
|||
|
||||
---
|
||||
|
||||
## Fase 5.1 — Provisionamento Railway (parcial: schema + provision-agent + railway-webhook)
|
||||
|
||||
### O que foi entregue nesta etapa
|
||||
|
||||
- **Schema**:
|
||||
- `vps_pool` (pool de projetos Railway, com `railway_project_id` / `railway_environment_id` placeholders)
|
||||
- `provisioning_jobs` (state machine: pending/running/retrying/completed/failed, com retry exponencial `attempt²` minutos)
|
||||
- Acréscimos em `agent_instances`: `railway_service_id`, `vps_pool_id`, `provisioned_at`, `last_health_check_at`
|
||||
- `vps_host` e `container_name` mantidos como deprecated via comentário
|
||||
- `user_roles` + enum `app_role` + função `has_role()` (substitui `is_admin` em profiles, mais seguro)
|
||||
- Trigger `on_agent_instance_provisioning` usando `pg_net` chama `provision-agent` quando uma agent_instance entra em status `provisioning`
|
||||
- **Edge Functions**:
|
||||
- `provision-agent` (verify_jwt=false): cria serviço Docker no Railway via GraphQL API, configura variáveis (TELEGRAM_BOT_TOKEN do Vault, OPENCODE_ZEN_API_KEY, etc.) e dispara deploy. Apaga webhook do Telegram antes (Hermes opera em polling). Retry com backoff exponencial até 5 tentativas.
|
||||
- `railway-webhook` (verify_jwt=false): recebe eventos do Railway. SUCCESS → marca agent como `active`; FAILED/CRASHED → marca como `error`.
|
||||
- **Helper compartilhado**: `supabase/functions/_shared/railway.ts`
|
||||
|
||||
### Etapas pós-deploy (uma única vez) — **OBRIGATÓRIAS**
|
||||
|
||||
#### 1. Criar conta Railway e workspace
|
||||
|
||||
1. Crie conta em [railway.com](https://railway.com)
|
||||
2. Crie um Workspace chamado **"Mika Agents"**
|
||||
3. Dentro dele, crie um Projeto chamado **"hermes-agents-prod"** com environment **"production"**
|
||||
|
||||
#### 2. Gerar Account Token e adicionar como secret
|
||||
|
||||
1. **Account Settings → Tokens → Create Token** (não confundir com Project Token, precisa ser de conta)
|
||||
2. Copie o token e adicione como secret `RAILWAY_API_TOKEN` em Lovable Cloud → Secrets
|
||||
3. As Edge Functions já leem `OPENCODE_ZEN_API_KEY` e `OPENCODE_GO_API_KEY` (também precisam estar configurados — já solicitados nesta fase)
|
||||
|
||||
#### 3. Preencher os IDs do Railway na vps_pool
|
||||
|
||||
Pegue o `railway_project_id` na URL do projeto (`railway.com/project/<UUID>`) e o `railway_environment_id` em **Project → Settings → Environments → production → Copy ID**, e rode via SQL:
|
||||
|
||||
```sql
|
||||
UPDATE public.vps_pool
|
||||
SET railway_project_id = '<UUID-DO-PROJETO>',
|
||||
railway_environment_id = '<UUID-DO-ENV-PRODUCTION>'
|
||||
WHERE name = 'railway-prod-1';
|
||||
```
|
||||
|
||||
#### 4. Configurar webhook do Railway → Lovable Cloud
|
||||
|
||||
No Railway: **Project Settings → Webhooks → Add Webhook** e cole:
|
||||
|
||||
```
|
||||
https://smsarmgoirlcedmqvdgc.supabase.co/functions/v1/railway-webhook
|
||||
```
|
||||
|
||||
Tipo: **Deployment status changes** (ou todos).
|
||||
|
||||
#### 5. Marcar você (Felipe) como admin
|
||||
|
||||
```sql
|
||||
INSERT INTO public.user_roles (user_id, role)
|
||||
VALUES ('<SEU_USER_UUID>', 'admin');
|
||||
```
|
||||
|
||||
Pegue seu UUID em **Lovable Cloud → Auth → Users**.
|
||||
|
||||
### O que ainda falta nesta fase (próxima mensagem)
|
||||
|
||||
- ❌ Edge Functions `suspend-agent` e `resume-agent`
|
||||
- ❌ Botão "Abrir no Telegram" no `/painel` quando `status='active'`
|
||||
- ❌ Página `/admin` (lista de agentes, ações suspender/reativar, link Railway, contadores)
|
||||
- ❌ Simplificação do wizard de Telegram (capturar só token, sem configurar webhook)
|
||||
|
||||
### O que **não** está nesta fase (5.1) por design
|
||||
|
||||
- ❌ Sync de skills/cronjobs/MCPs para o container (Fase 5.2)
|
||||
- ❌ Backup de memória antes de desprovisionamento
|
||||
- ❌ Múltiplos environments Railway por plano
|
||||
- ❌ Auto-scaling
|
||||
|
||||
### Notas técnicas
|
||||
|
||||
- Hermes roda em **polling**: o container faz outbound para `api.telegram.org`, sem necessidade de domínio público nem TLS.
|
||||
- Após `provision-agent` retornar 200, o Railway leva 1–5 min para puxar a imagem Docker e iniciar. Durante esse tempo, `agent_instance.status` permanece `provisioning`. O webhook do Railway notifica quando o deploy fica `SUCCESS`.
|
||||
- A Edge Function `telegram-webhook` (Fase 3) ainda existe mas será desativada na próxima entrega — o polling do Hermes substitui o webhook do Telegram.
|
||||
|
||||
---
|
||||
|
||||
## Comandos úteis
|
||||
|
||||
```bash
|
||||
|
|
@ -162,3 +244,4 @@ bun dev # dev server (porta 8080)
|
|||
bun run build # build de produção
|
||||
bun run typecheck
|
||||
```
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue