
Seu agente de inteligência pessoal. Monitora o mundo a partir de múltiplas fontes de dados e notifica você quando algo muda.
Seu próprio terminal de inteligência. 27 fontes. Um comando. Zero nuvem.
Entre na Rede Signal

| Sequência de inicialização | Mapa mundial |
|---|---|
![]() | ![]() |
Site ao vivo: https://www.crucix.live/ Explore a demonstração pública primeiro, depois clone o repositório para executar o Crucix localmente.
O Crucix coleta detecção de incêndios por satélite, rastreamento de voos, monitoramento de radiação, rastreamento de constelações de satélites, indicadores econômicos, preços de mercado ao vivo, dados de conflitos, listas de sanções e sentimento social de 27 fontes de inteligência de código aberto — em paralelo, a cada 15 minutos — e renderiza tudo em um único painel estilo Jarvis independente.
Conecte-o a um LLM e ele se torna um assistente de inteligência bidirecional — enviando alertas multicamadas para Telegram e Discord quando algo significativo muda, respondendo a comandos como /brief e /sweep do seu telefone, e gerando ideias de negociação acionáveis baseadas em dados reais de múltiplos domínios. Seu próprio analista que observa o mundo enquanto você dorme.
Experimente a demonstração ao vivo primeiro em https://www.crucix.live/, depois clone o repositório quando quiser a pilha local completa.
Sem nuvem. Sem telemetria. Sem assinaturas. Apenas node server.mjs e você está rodando.
[!WARNING] Crucix não lançou nenhum token, moeda, NFT, airdrop, pré-venda ou outro ativo baseado em blockchain oficial. Qualquer token ou ativo digital que use o nome, logotipo ou marca do Crucix não é afiliado ou endossado pelo Crucix. Não compre, promova, conecte uma carteira para reivindicá-lo, assine transações ou envie fundos com base em postagens de terceiros, DMs ou sites.
A maior parte da inteligência em tempo real do mundo — imagens de satélite, níveis de radiação, eventos de conflito, indicadores econômicos, rastreamento de voos, atividade marítima — está disponível publicamente. Está apenas espalhada por dezenas de APIs governamentais, instituições de pesquisa e feeds de dados abertos que ninguém tem tempo de verificar individualmente.
O Crucix reúne tudo em um só lugar. Não atrás de um paywall, não trancado em uma plataforma empresarial, não exigindo autorização de segurança. Apenas dados abertos, agregados e correlacionados em sua própria máquina, atualizados a cada 15 minutos.
Foi construído para qualquer pessoa que queira entender o que está realmente acontecendo no mundo agora — pesquisadores, jornalistas, traders, analistas de OSINT, ou apenas pessoas curiosas que acreditam que o acesso à informação não deve depender do seu orçamento.
git clone https://github.com/calesthio/Crucix.git cd Crucix
npm install
cp .env.example .env
npm run dev
> **Se `npm run dev` falha silenciosamente** (sai sem saída), execute o Node diretamente:
> ```bash
> node --trace-warnings server.mjs
> ```
> Isso ignora o executor de scripts do npm, que pode engolir erros em alguns sistemas (particularmente PowerShell no Windows). Você também pode executar `node diag.mjs` para diagnosticar o problema exato — ele verifica sua versão do Node, testa cada importação de módulo individualmente e verifica a disponibilidade da porta. Veja [Solução de problemas](#troubleshooting) para mais informações.
O painel abre automaticamente em `http://localhost:3117` e imediatamente inicia sua primeira varredura de inteligência. Essa varredura inicial consulta todas as 27 fontes em paralelo e normalmente leva de 30 a 60 segundos — o painel aparecerá vazio até que a varredura termine e envie a primeira atualização de dados. Depois disso, ele atualiza automaticamente a cada 15 minutos via SSE (Eventos Enviados pelo Servidor). Nenhuma atualização manual da página é necessária.
**Requisitos:** Node.js 22+ (usa `fetch` nativo, `await` de nível superior, ESM)
### Docker```bash
git clone https://github.com/calesthio/Crucix.git
cd Crucix
cp .env.example .env # add your API keys
docker compose up -d
Painel em http://localhost:3117. Os dados de varredura persistem em ./runs/ através de montagem de volume. Inclui um endpoint de verificação de integridade.
Um HUD autônomo no estilo Jarvis com:
O botão VISUALS FULL / VISUALS LITE na barra superior apenas altera o comportamento de renderização - ele não remove fontes de dados nem reduz a cobertura da varredura.
Quando você alterna para VISUALS LITE, o painel:
Comportamento específico para dispositivos móveis:
VISUALS LITE também força o painel para o modo de mapa plano se você estiver atualmente no globoA preferência é salva no armazenamento local do navegador, para que a interface se lembre da sua última configuração.
O servidor executa um ciclo de varredura a cada 15 minutos (configurável). Cada ciclo:
Crucix também funciona como um bot interativo do Telegram. Além de enviar alertas, ele responde a comandos diretamente do seu chat:
Isso requer TELEGRAM_BOT_TOKEN e TELEGRAM_CHAT_ID no .env. O bot verifica mensagens a cada 5 segundos (configurável via TELEGRAM_POLL_INTERVAL).
Crucix também oferece suporte ao Discord como um bot completo com comandos de barra e alertas rich embed. Ele espelha as capacidades do bot do Telegram com formatação nativa do Discord.
| Comando | O Que Faz |
|---|---|
/status | Saúde do sistema, horário da última varredura, status das fontes, status do LLM |
Os alertas são entregues como rich embeds com barras laterais codificadas por cores: vermelho para FLASH, amarelo para PRIORITY, azul para ROUTINE. Cada embed inclui detalhes do sinal, pontuações de confiança e correlações entre domínios.
Configuração requer: DISCORD_BOT_TOKEN, DISCORD_CHANNEL_ID e opcionalmente DISCORD_GUILD_ID para registro instantâneo de comandos de barra. Consulte Configuração de Chaves de API para detalhes.
Fallback via Webhook: Se você não quiser executar um bot completo, defina DISCORD_WEBHOOK_URL em vez disso. Isso permite alertas unidirecionais (sem comandos de barra) com zero dependências — nenhum discord.js necessário.
Dependência opcional: O bot completo requer discord.js. Instale-o com npm install discord.js. Se não estiver instalado, o Crucix automaticamente recai para o modo apenas webhook.
Conecte qualquer um dos 8 provedores de LLM para análise aprimorada:
Copie .env.example para .env na raiz do projeto:```bash
cp .env.example .env
### Necessário para Melhores Resultados (todos gratuitos)
| Chave | Fonte | Como Obter |
|-----|--------|------------|
| `FRED_API_KEY` | Federal Reserve Economic Data | [fred.stlouisfed.org](https://fred.stlouisfed.org/docs/api/api_key.html) — instantâneo, gratuito |
| `FIRMS_MAP_KEY` | NASA FIRMS (dados de satélite de incêndios) | [firms.modaps.eosdis.nasa.gov](https://firms.modaps.eosdis.nasa.gov/api/area/) — instantâneo, gratuito |
| `EIA_API_KEY` | US Energy Information Administration | [api.eia.gov](https://www.eia.gov/opendata/register.php) — instantâneo, gratuito |
Estas três desbloqueiam os dados económicos e de satélite mais valiosos. Cada uma leva cerca de 60 segundos para registar.
### Opcional (ativar fontes adicionais)
| Chave | Fonte | Como Obter |
|-----|--------|------------|
| `ACLED_EMAIL` + `ACLED_PASSWORD` | Dados de eventos de conflito armado | [acleddata.com/register](https://acleddata.com/register/) — gratuito, OAuth2 |
| `AISSTREAM_API_KEY` | Rastreamento marítimo AIS de embarcações | [aisstream.io](https://aisstream.io/) — gratuito |
| `ADSB_API_KEY` | Rastreamento de voos sem filtro | [RapidAPI](https://rapidapi.com/adsbexchange/api/adsbexchange-com1) — ~$10/mês |
### Provedor de LLM (opcional, para ideias melhoradas por IA)
Defina `LLM_PROVIDER` para um de: `anthropic`, `openai`, `gemini`, `codex`, `openrouter`, `minimax`, `mistral`, `grok`
| Provedor | Chave Necessária | Modelo Padrão |
|----------|-------------|---------------|
| `anthropic` | `LLM_API_KEY` | claude-sonnet-4-6 |
| `openai` | `LLM_API_KEY` | gpt-5.4 |
| `gemini` | `LLM_API_KEY` | gemini-3.1-pro |
| `openrouter` | `LLM_API_KEY` | openrouter/auto |
| `codex` | Nenhuma (usa `~/.codex/auth.json`) | gpt-5.3-codex |
| `minimax` | `LLM_API_KEY` | MiniMax-M2.5 |
| `mistral` | `LLM_API_KEY` | mistral-large-latest |
| `grok` | `LLM_API_KEY` | grok-4-latest |
Para Codex, execute `npx @openai/codex login` para autenticar através da sua subscrição ChatGPT.
### Bot do Telegram + Alertas (opcional)
| Chave | Como Obter |
|-----|------------|
| `TELEGRAM_BOT_TOKEN` | Crie via [@BotFather](https://t.me/BotFather) no Telegram |
| `TELEGRAM_CHAT_ID` | Obtenha via [@userinfobot](https://t.me/userinfobot) |
| `TELEGRAM_CHANNELS` | *(Opcional)* IDs de canais extra separados por vírgula para monitorizar além dos 17 canais incorporados |
| `TELEGRAM_POLL_INTERVAL` | *(Opcional)* Intervalo de polling de comandos do bot em ms (padrão: 5000) |
### Bot do Discord + Alertas (opcional)
| Chave | Como Obter |
|-----|------------|
| `DISCORD_BOT_TOKEN` | Crie no [Portal de Desenvolvedor do Discord](https://discord.com/developers/applications) → Bot → Token |
| `DISCORD_CHANNEL_ID` | Clique com o botão direito no canal do Discord (Modo de Desenvolvedor ativado) → Copiar ID do Canal |
| `DISCORD_GUILD_ID` | *(Opcional)* Clique com o botão direito no servidor → Copiar ID do Servidor. Permite o registo instantâneo de comandos slash (caso contrário, leva até 1 hora para comandos globais) |
| `DISCORD_WEBHOOK_URL` | *(Opcional)* Definições do Canal → Integrações → Webhooks → Novo Webhook → Copiar URL. Use isto para modo apenas de alertas sem um bot |
**Configuração do bot do Discord:**
1. Vá para [Portal de Desenvolvedor do Discord](https://discord.com/developers/applications) e crie uma nova aplicação
2. Vá para **Bot** → clique em **Redefinir Token** → copie o token para `DISCORD_BOT_TOKEN`
3. Em **Intenções de Gateway Privilegiadas**, ative **Intenção de Conteúdo de Mensagem**
4. Vá para **OAuth2** → **Gerador de URL** → selecione os escopos `bot` + `applications.commands` → selecione as permissões `Send Messages` + `Embed Links`
5. Copie o URL gerado e abra-o no seu navegador para convidar o bot para o seu servidor
6. Instale a dependência: `npm install discord.js`
Os alertas funcionam com ou sem um LLM tanto no Telegram como no Discord. Com um LLM configurado, a avaliação de sinais é mais rica e mais consciente do contexto. Sem um, um motor de regras determinístico avalia os sinais com base na gravidade, correlação entre domínios e contagens de sinais.
### Sem Qualquer Chave
Crucix ainda funciona com zero chaves de API. 18+ fontes não requerem qualquer autenticação. As fontes que precisam de chaves retornam erros estruturados e o resto da varredura continua normalmente.
---
## Arquitetura```
crucix/
├── server.mjs # Express dev server (SSE, auto-refresh, LLM, bot commands)
├── crucix.config.mjs # Configuration with env var overrides + delta thresholds
├── diag.mjs # Diagnostic script — run if server fails to start
├── .env.example # All documented env vars
├── package.json # Runtime: express | Optional: discord.js
├── docs/ # Screenshots for README
│
├── apis/
│ ├── briefing.mjs # Master orchestrator — runs all 27 sources in parallel
│ ├── save-briefing.mjs # CLI: save timestamped + latest.json
│ ├── BRIEFING_PROMPT.md # Intelligence synthesis protocol
│ ├── BRIEFING_TEMPLATE.md # Briefing output structure
│ ├── utils/
│ │ ├── fetch.mjs # safeFetch() — timeout, retries, abort, auto-JSON
│ │ └── env.mjs # .env loader (no dotenv dependency)
│ └── sources/ # 27 self-contained source modules
│ ├── gdelt.mjs # Each exports briefing() → structured data
│ ├── fred.mjs # Can run standalone: node apis/sources/fred.mjs
│ ├── space.mjs # CelesTrak satellite tracking
│ ├── yfinance.mjs # Yahoo Finance — free live market data
│ └── ... # 23 more
│
├── dashboard/
│ ├── inject.mjs # Data synthesis + standalone HTML injection
│ └── public/
│ └── jarvis.html # Self-contained Jarvis HUD
│
├── lib/
│ ├── llm/ # LLM abstraction (8 providers, raw fetch, no SDKs)
│ │ ├── provider.mjs # Base class
│ │ ├── anthropic.mjs # Claude
│ │ ├── openai.mjs # GPT
│ │ ├── gemini.mjs # Gemini
│ │ ├── grok.mjs # Grok
│ │ ├── openrouter.mjs # OpenRouter (Unified API)
│ │ ├── codex.mjs # Codex (ChatGPT subscription)
│ │ ├── minimax.mjs # MiniMax (M2.5, 204K context)
│ │ ├── mistral.mjs # Mistral AI
│ │ ├── ideas.mjs # LLM-powered trade idea generation
│ │ └── index.mjs # Factory: createLLMProvider()
│ ├── delta/ # Change tracking between sweeps
│ │ ├── engine.mjs # Delta computation — semantic dedup, configurable thresholds, severity scoring
│ │ ├── memory.mjs # Hot memory (3 runs, atomic writes) + cold storage (daily archives)
│ │ └── index.mjs # Re-exports
│ └── alerts/
│ ├── telegram.mjs # Multi-tier alerts (FLASH/PRIORITY/ROUTINE) + two-way bot commands
│ └── discord.mjs # Discord bot (slash commands, rich embeds) + webhook fallback
│
└── runs/ # Runtime data (gitignored)
├── latest.json # Most recent sweep output
└── memory/ # Delta memory (hot.json + cold/YYYY-MM-DD.json)
.mjs com imports explícitosdiscord.js é opcional (para bot do Discord). Provedores de LLM usam fetch() bruto, sem SDKs.Promise.allSettled() dispara todas as 27 fontes simultaneamentenode apis/sources/gdelt.mjs para testar qualquer fonte individualmente| Fonte | O que Rastreia | Autenticação |
|---|---|---|
| CelesTrak | Lançamentos de satélites, rastreamento da ISS, constelações militares, contagens de Starlink/OneWeb | Nenhum |
| Fonte | O que Rastreia | Autenticação |
|---|---|---|
| Yahoo Finance | Preços em tempo real: SPY, QQQ, BTC, Ouro, WTI, VIX + mais 9 | Nenhum |
Todas as configurações estão em .env com padrões sensatos:
Os limiares do mecanismo delta (quão sensível o sistema é a mudanças entre varreduras) podem ser personalizados em crucix.config.mjs na seção delta.thresholds. Os padrões são ajustados para filtrar ruídos enquanto capturam movimentos significativos.
Ao executar npm run dev:
| Endpoint | Descrição |
|---|---|
GET / | Painel Jarvis HUD |
GET /api/data |
npm run dev sai silenciosamente (sem saída, sem erro)Este é um problema conhecido onde o executor de script do npm pode engolir erros, particularmente no Windows PowerShell. Tente estas opções em ordem:
1. Execute o Node diretamente (ignorando o npm):```bash node --trace-warnings server.mjs
Isto é funcionalmente idêntico a `npm run dev`, mas fornece a saída completa de erros.
**2. Execute o script de diagnóstico:**```bash
node diag.mjs
Isso testa cada importação uma a uma, verifica sua versão do Node.js e confirma se a porta 3117 está disponível. Ele informará exatamente o que está falhando.
3. Verifique se a porta 3117 já está em uso:
Uma instância anterior do Crucix pode ainda estar em execução em segundo plano.```powershell
netstat -ano | findstr 3117 taskkill /F /PID <the_PID_from_above>
taskkill /F /IM node.exe
Um arquivo de configuração base é criado na primeira execução, por exemplo:
```bash
cat dir/snickerdoodle-dog.yaml
``````bash
# macOS / Linux
lsof -ti:3117 | xargs kill
Em seguida, tente iniciar novamente. Você também pode alterar a porta definindo PORT=3118 no seu arquivo .env.
4. Verifique a versão do Node.js:```bash node --version
O Crucix requer Node.js 22 ou posterior. Se você tiver uma versão mais antiga, baixe a LTS mais recente em [nodejs.org](https://nodejs.org/).
### O painel mostra painéis vazios após a primeira inicialização
Isso é normal — a primeira varredura leva de 30 a 60 segundos para consultar todas as 27 fontes. O painel será preenchido automaticamente assim que a varredura for concluída. Verifique o terminal para logs de progresso da varredura.
### Algumas fontes exibem erros
Comportamento esperado. Fontes que exigem chaves de API retornarão erros estruturados se a chave não estiver definida. O restante da varredura continua normalmente. Verifique a seção de Integridade da Fonte no painel (ou os logs do servidor) para ver quais fontes falharam e por quê. As 3 chaves gratuitas mais impactantes a adicionar são `FRED_API_KEY`, `FIRMS_MAP_KEY` e `EIA_API_KEY`.
O OpenSky também pode retornar `HTTP 429` quando seus hotspots públicos são consultados de forma muito agressiva. O Crucix não tenta evadir esse limite. Em vez disso, ele exibe a limitação/erro na saúde da fonte e preserva a captura de tráfego aéreo não vazia mais recente de `runs/` para que a camada de voo do painel não fique repentinamente em branco em uma varredura limitada.
### O bot do Telegram não responde a comandos
Certifique-se de que tanto `TELEGRAM_BOT_TOKEN` quanto `TELEGRAM_CHAT_ID` estejam definidos em `.env`. O bot só responde a mensagens do ID de chat configurado (medida de segurança). Você deve ver `[Crucix] Telegram alerts enabled` e `[Crucix] Bot command polling started` nos logs do servidor na inicialização. Caso contrário, verifique novamente seu token com `curl https://api.telegram.org/bot<YOUR_TOKEN>/getMe`.
### O bot do Discord não responde a comandos de barra
Verifique nesta ordem:
1. Certifique-se de que `DISCORD_BOT_TOKEN` e `DISCORD_CHANNEL_ID` estão definidos em `.env`
2. Verifique se `discord.js` está instalado: `npm ls discord.js`. Se estiver faltando, execute `npm install discord.js`
3. Se os comandos de barra não aparecerem, defina `DISCORD_GUILD_ID` — sem ele, comandos globais podem levar até 1 hora para propagar. Comandos específicos de servidor são registrados instantaneamente
4. Confirme que o bot foi convidado com os escopos `bot` + `applications.commands` e tem permissões `Send Messages` + `Embed Links` no canal alvo
5. Verifique os logs do servidor para `[Discord] Bot logged in as ...` na inicialização. Se você vir `[Discord] discord.js not installed`, instale-o e reinicie
6. **Fallback apenas com webhook:** Se você deseja apenas alertas sem comandos de barra, defina `DISCORD_WEBHOOK_URL` em vez do token do bot. Não é necessário `discord.js`.
---
## Capturas de tela
A pasta `docs/` contém capturas de tela do painel referenciadas por este README:
| Arquivo | Descrição |
|---------|-----------|
| `docs/dashboard.png` | Painel completo — imagem principal no topo deste README |
| `docs/boot.png` | Animação cinematográfica da sequência de inicialização |
| `docs/map.png` | Mapa mundial D3 com tipos de marcadores e arcos de voo |
| `docs/globe.png` | Visão 3D do globo WebGL com brilho atmosférico e marcadores |
Para atualizá-las: execute o painel, aguarde a conclusão de uma varredura, use as Ferramentas do Desenvolvedor do seu navegador (`F12` → `Ctrl+Shift+P` → "Capturar captura de tela de tamanho completo") ou uma ferramenta como [LICEcap](https://www.cockos.com/licecap/) para GIFs.
---
## Contribuindo
Encontrou um bug? Quer adicionar uma 28ª fonte? PRs são bem-vindos. Cada fonte é um módulo independente em `apis/sources/` — basta exportar uma função `briefing()` que retorna dados estruturados e adicioná-la ao orquestrador em `apis/briefing.mjs`.
Se você acha isso útil, uma estrela ajuda outros a encontrá-lo também.
Para diretrizes de contribuição, expectativas de revisão e regras de adição de fontes, veja `CONTRIBUTING.md`. Para relatórios de segurança, veja `SECURITY.md`.
## Contato
Para parcerias, integrações ou outras consultas que não sejam problemas, você pode me contatar em `[email protected]`.
Para bugs e solicitações de funcionalidades, use GitHub Issues para que a discussão permaneça visível e acionável.
---
## Histórico de Estrelas
<a href="https://www.star-history.com/#/calesthio/Crucix&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=calesthio/Crucix&type=date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=calesthio/Crucix&type=date" />
<img alt="Gráfico do Histórico de Estrelas" src="https://api.star-history.com/svg?repos=calesthio/Crucix&type=date" />
</picture>
</a>
---
## Licença
AGPL-3.0
| Visão do globo 3D |
|---|
![]() |
| Comando | O Que Faz |
|---|
/status | Saúde do sistema, horário da última varredura, status das fontes, status do LLM |
/sweep | Acionar um ciclo de varredura manual |
/brief | Resumo textual compacto da inteligência mais recente (direção, métricas principais, OSINT principal) |
/portfolio | Status do portfólio (se Alpaca estiver conectado) |
/alerts | Histórico de alertas recentes com níveis |
/mute / /mute 2h | Silenciar alertas por 1h (ou duração personalizada) |
/unmute | Retomar alertas |
/help | Mostrar todos os comandos disponíveis |
/sweep | Acionar um ciclo de varredura manual |
/brief | Resumo textual compacto da inteligência mais recente |
/portfolio | Status do portfólio (se Alpaca estiver conectado) |
| Fonte | O que Rastreia | Autenticação |
|---|
| GDELT | Eventos globais de notícias, mapeamento de conflitos (100+ idiomas) | Nenhum |
| OpenSky | Rastreamento de voos ADS-B em tempo real em 6 regiões críticas | Nenhum |
| NASA FIRMS | Detecção de incêndios/anomalias térmicas por satélite (latência de 3h) | Chave gratuita |
| Marítimo/AIS | Rastreamento de embarcações, navios clandestinos, evasão de sanções | Chave gratuita |
| Safecast | Monitoramento de radiação por ciência cidadã perto de 6 sítios nucleares | Nenhum |
| ACLED | Eventos de conflito armado: batalhas, explosões, protestos | Gratuito (OAuth2) |
| ReliefWeb | Rastreamento de crises humanitárias da ONU | Nenhum |
| WHO | Surtos de doenças e emergências de saúde | Nenhum |
| OFAC | Sanções do Tesouro dos EUA (lista SDN) | Nenhum |
| OpenSanctions | Sanções globais agregadas (30+ fontes) | Parcial |
| ADS-B Exchange | Rastreamento de voos sem filtro, incluindo militares | Pago |
| Fonte | O que Rastreia | Autenticação |
|---|
| FRED | 22 indicadores-chave: curva de juros, IPC, VIX, fundos federais, M2 | Chave gratuita |
| Tesouro dos EUA | Dívida nacional, rendimentos, dados fiscais | Nenhum |
| BLS | IPC, desemprego, folhas de pagamento não agrícolas, PPI | Nenhum |
| EIA | Petróleo WTI/Brent, gás natural, estoques | Chave gratuita |
| GSCPI | Índice de Pressão da Cadeia de Suprimentos Global do NY Fed | Nenhum |
| USAspending | Gastos federais e contratos de defesa | Nenhum |
| UN Comtrade | Fluxos comerciais de commodities estratégicas entre grandes potências | Nenhum |
| Fonte | O que Rastreia | Autenticação |
|---|
| NOAA/NWS | Alertas meteorológicos ativos nos EUA | Nenhum |
| EPA RadNet | Monitoramento de radiação do governo dos EUA | Nenhum |
| USPTO Patentes | Depósitos de patentes em 7 áreas tecnológicas estratégicas | Nenhum |
| Bluesky | Sentimento social sobre tópicos geopolíticos/de mercado | Nenhum |
| Sentimento social de subreddits-chave | OAuth | |
| Telegram | 17 canais selecionados de OSINT/conflito/finanças (raspagem web, expansível via config) | Nenhum |
| KiwiSDR | Rede global de receptores de rádio HF (~600 receptores) | Nenhum |
| Script | Comando | Descrição |
|---|
npm run dev | node --trace-warnings server.mjs | Iniciar painel com atualização automática |
npm run sweep | node apis/briefing.mjs | Executar uma varredura única, saída JSON para stdout |
npm run inject | node dashboard/inject.mjs | Injetar dados mais recentes no HTML estático |
npm run brief:save | node apis/save-briefing.mjs | Executar varredura + salvar JSON com timestamp |
npm run diag | node diag.mjs | Executar diagnóstico (versão do Node, importações, verificação de porta) |
| Variável | Padrão | Descrição |
|---|
PORT | 3117 | Porta do servidor do painel |
REFRESH_INTERVAL_MINUTES | 15 | Intervalo de atualização automática |
LLM_PROVIDER | desabilitado | anthropic, openai, gemini, codex, openrouter, minimax, mistral ou grok |
LLM_API_KEY | — | Chave de API (não necessária para codex) |
LLM_MODEL | padrão por provedor | Substituir seleção de modelo |
TELEGRAM_BOT_TOKEN | desabilitado | Para alertas do Telegram + comandos do bot |
TELEGRAM_CHAT_ID | — | Seu ID de chat do Telegram |
TELEGRAM_CHANNELS | — | IDs de canais extras para monitorar (separados por vírgula) |
TELEGRAM_POLL_INTERVAL | 5000 | Intervalo de consulta de comandos do bot (ms) |
DISCORD_BOT_TOKEN | desabilitado | Para alertas do Discord + comandos slash |
DISCORD_CHANNEL_ID | — | Canal do Discord para alertas |
DISCORD_GUILD_ID | — | ID do servidor (registro instantâneo de comandos slash) |
DISCORD_WEBHOOK_URL | — | URL do webhook (fallback apenas para alertas, sem necessidade de bot) |
| Dados de inteligência sintetizados atuais (JSON) |
GET /api/health | Status do servidor, tempo de atividade, contagem de fontes, status do LLM |
GET /events | Stream SSE para atualizações push em tempo real |