Pular para o conteúdo

API do painel operacional

O Guida expõe uma pequena API operacional somente leitura para monitorar rastreamentos longos e execuções de indexação sem abrir a interface desktop. A API é destinada a scripts, agentes, painéis leves e clientes de monitoramento em rede privada.

Ela não é uma superfície de controle remoto. A API do painel não inicia processos de trabalho, para processos de trabalho, tenta itens novamente, exclui entradas de fila, move trabalho para a fila de rejeitos, executa scripts, navega guias nem chama ferramentas MCP.

Use a API de operações remotas quando um cliente de rede privada precisar de controle remoto explícito. Use esta API do painel quando o cliente só precisar observar estado.

Para estruturas de teste determinísticas com endpoints de automação protegidos por token, use Modo de automação. Para ferramentas locais de IA com aprovações e registro de auditoria, use Integração MCP.

Por padrão, o servidor embutido escuta em loopback:

http://127.0.0.1:9315

Quando um endereço privado seguro de bind é configurado em Settings, o Guida mantém loopback disponível e também expõe a API do painel somente leitura nesse endereço privado. Isso é útil para monitoramento por NetBird ou LAN, por exemplo:

http://100.68.25.200:9315

O conteúdo de status inclui dashboardUrl, dashboardBindAddress, dashboardPort, applicationVersion e campos estáveis de identidade do nó para que o cliente exiba o endereço e o nó Guida monitorado.

A API do painel é deliberadamente mais estreita que o MCP.

ClientePermitido
Cliente local loopbackMCP mais pontos de extremidade do painel
Cliente remoto de rede privadaApenas pontos de extremidade do painel somente leitura
POST, PUT, DELETE etc. remotos em caminhos do painelRejeitados
Caminhos MCP remotos de rede privadaRejeitados
/api/ops/* remoto de rede privadaDisponível apenas quando a API de operações remotas está explicitamente habilitada
Bind wildcard público como 0.0.0.0Rejeitado pela validação de configurações

Clientes remotos do painel devem usar solicitações GET. HEAD também é tratado como somente leitura. Preflight OPTIONS só é aceito quando o método solicitado é somente leitura.

Chamadas de ferramentas MCP usam POST na superfície MCP local. Operações remotas usam POST /api/ops/rpc apenas quando esse recurso está habilitado. Clientes do painel não devem usar POST; não há mutações de painel nesta API.

Endereços seguros de bind incluem loopback, faixas IPv4 privadas RFC1918, NetBird/CGNAT 100.64.0.0/10, IPv4 link-local, IPv6 unique local e IPv6 link-local. Endereços wildcard e públicos voltam para loopback.

Todas as leituras do painel definem cabeçalhos no-cache. Leituras de instantâneo são protegidas por tempo limite curto; uma leitura lenta retorna uma resposta problem 503 em vez de travar indefinidamente o trabalho de rastreamento.

Todos os pontos de extremidade principais ficam em /api/dashboard.

Ponto de extremidadeFinalidade
GET /api/dashboard/statusSinal de vida compacto de app, espaço de trabalho, fluxo, execução ativa, processos de trabalho e runtime
GET /api/dashboard/snapshotInstantâneo operacional combinado e limitado
GET /api/dashboard/runsExecuções recentes de fluxos de trabalho
GET /api/dashboard/runs/{runId}Detalhe de uma execução
GET /api/dashboard/runs/{runId}/countsContagens completas estágio/estado da execução
GET /api/dashboard/queuesContagens de filas e totais
GET /api/dashboard/workersStatus de grupos de processos de trabalho
GET /api/dashboard/failuresMotivos recentes de tarefas e execuções com falha
GET /api/dashboard/attentionItens atuais que exigem atenção
GET /api/dashboard/reconcile/{runId}Resumo de passagem fetch/parse/index para uma execução
GET /api/dashboard/eventsFluxo Server-Sent Events para invalidação ao vivo e sinal de vida

Propriedades JSON usam camel case.

Muitos pontos de extremidade retornam listas limitadas. Uma resposta de lista limitada usa este envelope:

{
"items": [],
"totalCount": 0,
"limit": 50,
"truncated": false,
"degraded": false,
"errors": []
}

Quando truncated é true, o ponto de extremidade retornou a primeira página ou amostra limitada, mas totalCount ainda informa a contagem total conhecida pelo repositório/serviço. Para perguntas agregadas, use os campos agregados, não o tamanho de items.

Quando degraded é true, parte do instantâneo não pôde ser coletada. A resposta ainda deve ser tratada como estado parcial útil, e errors explica o que falhou.

Retorna um sinal de vida compacto da instância Guida em execução.

Use este ponto de extremidade para verificações leves de vida, títulos de janela, diagnóstico de pares e cartões “o Guida está vivo?”.

Terminal window
curl http://127.0.0.1:9315/api/dashboard/status

Campos importantes:

CampoSignificado
workspaceOpenSe um espaço de trabalho está aberto
activeWorkflowNameSeleção atual de fluxo do espaço de trabalho
workersRunningAo menos um processo de trabalho ou tarefa run-one está ativo
workersPausedAo menos um grupo de processos de trabalho está pausado
runningTaskCountNúmero de tarefas de script em execução
activeRunExecução de fluxo em andamento, se houver; caso contrário, a execução mais recente
degraded, errorsSe parte da leitura falhou e por quê
versionVersão monotônica de invalidação do painel
applicationVersionVersão semântica do app Guida, como 0.7.3-alpha.0; não analise metadados de commit
applicationStartedAtTimestamp de início do processo
dashboardBindAddress, dashboardPort, dashboardUrlEndereço em que o Guida acredita estar servindo o painel
nodeIdentity, nodeId, nodeName, nodeRole, machineNameMetadados estáveis do nó para observadores multi-nó
workerCountsByStatus, workerRunningCount, workerPausedCount, workerFailedCount, workerIdleCount, workerStoppedCount, workerStalledCountAgregados de status dos grupos de processos de trabalho

Retorna um instantâneo operacional combinado. Use para carregamentos iniciais de página e ações de ressincronização forçada.

Terminal window
curl "http://127.0.0.1:9315/api/dashboard/snapshot?forceReload=true"

Parâmetros de consulta:

ParâmetroTipoSignificado
forceReloadbooleanQuando true, ignora o cache curto e recarrega da verdade do repositório/serviço

O instantâneo inclui contexto de espaço de trabalho, filas, grupos de processos de trabalho, contagens de tarefas, agregados do registro de rastreabilidade, execuções recentes, falhas, itens de atenção, execução ativa, reconciliação da execução ativa, totais de filas, totais de processos de trabalho, metadados de nó e campos degraded/errors.

O objeto workflowLedger é dado agregado, não amostra:

{
"totalRuns": 12,
"totalItems": 12242,
"runCountsByStatus": {
"running": 1,
"completed": 10,
"failed": 1
},
"itemCountsByState": {
"queued": 923,
"running": 21,
"completed": 11189,
"dead": 9
},
"itemCountsByStage": {
"fetch": 285,
"parse_index": 11672
},
"retryReadyCount": 0,
"activeLeaseCount": 21,
"expiredLeaseCount": 0,
"attentionCount": 38
}

Contagens vêm de consultas agregadas do repositório. Elas não são calculadas a partir da primeira página de itens.

GET /api/dashboard/runs retorna execuções recentes para o fluxo ativo:

Terminal window
curl "http://127.0.0.1:9315/api/dashboard/runs?take=10"

take tem padrão 25 e máximo 100.

GET /api/dashboard/runs/{runId} retorna detalhe de uma execução: resumo, contagens estágio/estado da execução inteira, reconciliação e amostra limitada de atenção. Se a execução não existir, retorna 404.

GET /api/dashboard/runs/{runId}/counts retorna contagens agrupadas por estágio e estado:

[
{
"stage": "fetch",
"state": "queued",
"count": 238,
"problemCount": 0
},
{
"stage": "parse_index",
"state": "completed",
"count": 11189,
"problemCount": 0
}
]

problemCount é o número de itens naquele grupo que falharam, estão prontos para nova tentativa, mortos ou carregam metadados de erro. Este ponto de extremidade é a fonte correta para matrizes de estágio/estado. Ele não é limitado pelo tamanho de página da lista de itens.

GET /api/dashboard/queues retorna linhas de filas limitadas e totais completos de fila:

Terminal window
curl http://127.0.0.1:9315/api/dashboard/queues

Campos incluem items, totalCount, limit, truncated, totalPendingCount, totalCheckedOutCount, totalCompletedCount, totalDeadLetterCount, totalsByState, degraded e errors.

Cada linha de fila inclui nome, contagens por estado, pendentes, retirados, concluídos e rejeitados.

GET /api/dashboard/workers retorna linhas limitadas de status de grupos e contagens agregadas por status:

Terminal window
curl http://127.0.0.1:9315/api/dashboard/workers

Linhas de processos de trabalho incluem fila, script, estratégia de retirada opcional, concorrência, processos ativos, processados, falhas, restantes, paused, run-one ativo, status, escopo e contagem retirada. Definições configuradas aparecem mesmo quando paradas. Uma definição parada com itens retirados é relatada como stalled.

GET /api/dashboard/failures retorna tarefas de script falhas recentes mais execuções de fluxo com falha:

Terminal window
curl "http://127.0.0.1:9315/api/dashboard/failures?take=5"

take tem padrão 25 e máximo 100. Linhas de falha incluem ID, nome, origem, status, timestamps, erro, contexto de processo de trabalho, MCP ou gatilho quando disponível, e contexto de workflow quando disponível.

GET /api/dashboard/attention retorna itens de atenção para o fluxo ativo ou para uma execução selecionada quando runId é informado:

Terminal window
curl "http://127.0.0.1:9315/api/dashboard/attention?take=20"
curl "http://127.0.0.1:9315/api/dashboard/attention?runId=92d987e072ab4649a5a7f1846446a420&take=20"

Itens de atenção têm kind, severity, contexto de workflow/execução, identidade do item, estágio/estado, mensagem curta ao operador, timestamp e último erro quando disponível.

Retorna reconciliação compacta de fluxo para uma execução:

Terminal window
curl http://127.0.0.1:9315/api/dashboard/reconcile/92d987e072ab4649a5a7f1846446a420

Use este ponto de extremidade para responder perguntas de passagem:

  • Quantos itens de fetch ainda estão em fila, em execução, com lease, ignorados, mortos ou prontos para nova tentativa?
  • Quantos itens de parse/index estão em fila?
  • Quantos itens de parse/index foram concluídos?
  • Quantos itens de parse/index foram recebidos de fetch?
  • Há lacuna fetch-para-parse ou acúmulo de parse/index?
  • A contagem completa de estágio/estado corresponde ao formato esperado do fluxo?

Se a execução não existir, o ponto de extremidade retorna 404.

Abre um fluxo Server-Sent Events para atualizações ao vivo do painel.

Terminal window
curl -N http://127.0.0.1:9315/api/dashboard/events

O fluxo envia apenas dicas compactas. Ele não envia instantâneos completos. Um cliente deve tratar eventos como “algo mudou” e então chamar o ponto de extremidade focado de que precisa, normalmente /api/dashboard/status, /api/dashboard/snapshot?forceReload=true ou um ponto de extremidade de execução selecionada.

Tipos de evento:

EventoSignificado
status com status: "connected"Fluxo aberto com sucesso
status com status: "heartbeat"Fluxo ainda vivo; intervalo padrão do sinal de vida é 15 segundos
invalidationEstado de espaço de trabalho, fila, processo de trabalho, tarefa, registro de rastreabilidade ou notificação mudou

Eventos de status incluem os mesmos campos compactos de app/espaço de trabalho/identidade do nó que /api/dashboard/status. Eles ainda são apenas instantâneos de status, não instantâneos completos do painel.

O canal SSE é limitado. Se muitas invalidações chegam rapidamente, o Guida pode descartar dicas antigas. Isso é seguro porque eventos são dicas e os repositórios continuam sendo a fonte da verdade.

StatusSignificado
200Resposta JSON ou fluxo SSE bem-sucedido
403Cliente remoto tentou caminho que não é do painel ou método que não é leitura
404Execução selecionada não existe ou rota inexistente como /dashboard foi solicitada localmente
499Cliente desconectou antes da leitura terminar
503Leitura do painel excedeu o tempo limite
500Leitura do painel falhou inesperadamente
  • Use /api/dashboard/status para verificações leves de vida.
  • Use /api/dashboard/snapshot?forceReload=true para carregamentos iniciais e ressincronização explícita.
  • Use /api/dashboard/events para saber quando recarregar estado focado.
  • Use /api/dashboard/runs/{runId}/counts para matrizes de estágio/estado.
  • Use /api/dashboard/reconcile/{runId} para perguntas de passagem fetch-para-parse/index.
  • Use applicationVersion como versão semântica do app e nodeId como identidade estável do nó Guida.
  • Trate listas limitadas como amostras ou páginas; use totalCount, totais agregados e truncated para o quadro completo.
  • Não faça polling agressivo com uma conexão SSE aberta. Deixe eventos de invalidação dispararem recargas direcionadas.
  • Não presuma que conteúdos de eventos sejam estado durável. Recarregue pelos pontos de extremidade JSON.