calesthio/Crucix

GitHub: calesthio/Crucix

一个自托管的OSINT情报聚合与态势感知平台,整合27个公开数据源,通过3D可视化仪表板和智能告报系统实时监控全球事件变化。

Stars: 5808 | Forks: 868

# Crucix **属于你自己的情报终端。27个来源。一条命令。零云依赖。** ## [访问在线网站:crucix.live](https://www.crucix.live/) [![在线网站](https://img.shields.io/badge/live-crucix.live-00d4ff?style=for-the-badge)](https://www.crucix.live/) [![打开演示](https://img.shields.io/badge/open-live%20dashboard-0b1220?style=for-the-badge&logo=googlechrome&logoColor=white)](https://www.crucix.live/) [![Node.js 22+](https://img.shields.io/badge/node-22%2B-brightgreen)](#quick-start) [![许可证:AGPL v3](https://img.shields.io/badge/license-AGPLv3-blue.svg)](LICENSE) [![依赖项](https://img.shields.io/badge/dependencies-1%20(express)-orange)](#architecture) [![来源](https://img.shields.io/badge/OSINT%20sources-27-cyan)](#data-sources-27) [![Docker](https://img.shields.io/badge/docker-ready-blue?logo=docker)](#docker) **加入 Signal 网络** [![Signal Wire](https://img.shields.io/badge/Signal%20Wire-%40crucixmonitor-111111?style=for-the-badge&logo=x&logoColor=white)](https://x.com/crucixmonitor) [![作战室](https://img.shields.io/badge/Ops%20Room-Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/ChVy7SF4) ![Crucix 仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/b6b449f44e160308.png)
更多截图 | 启动序列 | 世界地图 | |:---:|:---:| | ![启动](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/69e91785fb160319.png) | ![地图](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/6557ece7c2160329.png) | | 3D 地球视图 | |:---:| | ![地球](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/d825309a07160344.png) |
Crucix 从27个开源情报源拉取卫星火灾探测、航班追踪、辐射监测、卫星星座追踪、经济指标、实时市场价格、冲突数据、制裁名单和社交情绪——每15分钟并行一次——并将所有内容渲染在一个独立的 Jarvis 风格仪表板上。 将其连接到 LLM,它就会变成一个**双向情报助手**——当有意义的变化发生时,向 Telegram 和 Discord 推送多层级的警报,响应来自你手机的 `/brief` 和 `/sweep` 等命令,并基于真实的跨领域数据生成可操作的交易想法。这是你自己的分析师,在你睡觉时监视着世界。 请先在 [https://www.crucix.live/](https://www.crucix.live/) 试用在线演示,当你想要完整的本地堆栈时再克隆该仓库。 无云服务。无遥测。无订阅。只需 `node server.mjs` 即可运行。 ## Token / 资产警告 ## 为什么会有这个项目 世界上大部分实时情报——卫星图像、辐射水平、冲突事件、经济指标、航班追踪、海事活动——都是公开可用的。只是分散在几十个政府 API、研究机构和开放数据源中,没人有时间逐一查看。 Crucix 将所有这些集中到一个地方。不在付费墙之后,不锁在企业平台里,也不需要安全许可。只是开放数据,在你自己的机器上聚合和相互关联,每15分钟更新一次。 它的构建是为了任何想要了解当今世界真实状况的人——研究人员、记者、交易员、OSINT 分析师,或者只是那些认为获取信息不应取决于预算的好奇人士。 ## 快速开始 ``` # 1. Clone the repo git clone https://github.com/calesthio/Crucix.git cd Crucix # 2. 安装依赖(仅需 Express) npm install # 3. 复制 env 模板并添加你的 API keys(见下方) cp .env.example .env # 4. 启动 dashboard npm run dev ``` 仪表板会在 `http://localhost:3117` 自动打开,并立即开始其第一次情报扫描。此初始扫描会并行查询所有27个来源,通常需要30–60秒——在扫描完成并推送第一次数据更新之前,仪表板将显示为空。之后,它会通过 SSE(Server-Sent Events)每15分钟自动刷新。无需手动刷新页面。 **要求:** Node.js 22+(使用原生 `fetch`、顶层 `await`、ESM) ### Docker ``` git clone https://github.com/calesthio/Crucix.git cd Crucix cp .env.example .env # add your API keys docker compose up -d ``` 仪表板地址为 `http://localhost:3117`。扫描数据通过卷挂载持久化在 `./runs/` 中。包含健康检查端点。 ## 你将获得什么 ### 实时仪表板 一个独立的 Jarvis 风格 HUD,具有: - **3D WebGL 地球仪**(Globe.gl),带有大气辉光、星空背景和平滑旋转——外加经典的平面地图切换 - **9种标记类型**,跨越两种视图:火灾探测、空中交通、辐射点、海事咽喉点、SDR 接收器、OSINT 事件、健康警报、地理定位新闻、冲突事件 - **动画 3D 飞行走廊弧线**,连接空中交通热点和全球枢纽 - **区域过滤器**(世界、美洲、欧洲、中东、亚太、非洲)——旋转地球仪或缩放平面地图 - **实时市场数据**——通过 Yahoo Finance 获取指数、加密货币、能源、大宗商品(无需 API 密钥) - **风险仪表**——VIX、高收益利差、供应链压力指数 - **OSINT 源**——来自17个 Telegram 情报频道的英文帖子(可扩展) - **新闻滚动条**——合并的 RSS + GDELT 标题 + Telegram 帖子,自动滚动 - **扫描增量**——显示自上次扫描以来变化情况的实时面板(新信号、升级、降级及其严重程度) - **跨源信号**——跨卫星、经济、冲突和社交领域的关联情报 - **核观察**——来自 Safecast + EPA RadNet 的实时辐射读数 - **太空观察**——CelesTrak 卫星追踪:近期发射、ISS、军事星座、Starlink/OneWeb 数量 - **可利用的想法**——AI 生成的交易想法(带 LLM)或信号相关的想法(不带) ### 性能模式 顶部栏中的 `VISUALS FULL` / `VISUALS LITE` 按钮仅更改渲染行为——它**不**移除数据源或减少扫描覆盖范围。 当你切换到 **VISUALS LITE** 时,仪表板会: - 禁用装饰性背景效果,如径向/网格覆盖层和扫描线 - 移除面板和覆盖层上昂贵的模糊/背景滤镜效果 - 停止非必要的动画,如 Logo 环闪烁、冲突环和走廊流动效果 - 禁用地球仪自动旋转并关闭动画飞行弧线虚线 - 将水平新闻滚动条和 OSINT 流转换为静态的可滚动列表,而不是连续动画的跑马灯 移动端特定行为: - 在移动设备上,如果你当前处于地球仪视图,`VISUALS LITE` 还会强制仪表板进入**平面地图模式** - 只要启用了低性能模式,未来的移动端加载将继续以平面模式启动 该首选项保存在浏览器本地存储中,因此 UI 会记住你的上次设置。 ### 自动刷新 服务器每15分钟运行一次扫描周期(可配置)。每个周期: 1. 并行查询所有27个来源(约30秒) 2. 将原始数据合成为仪表板格式 3. 计算与上一次运行的增量(变化了什么、升级了什么、降级了什么)——可在仪表板上的 **Sweep Delta** 面板中查看 4. 生成 LLM 交易想法(如果已配置) 5. 评估突发新闻警报——多层次(FLASH / PRIORITY / ROUTINE),带有语义去重。如果已配置,则发送到 Telegram 和/或 Discord。支持 LLM 评估,或者在 LLM 不可用时回退到基于规则的警报。 6. 通过 SSE 将更新推送到所有连接的浏览器 ### Telegram 机器人(双向) Crucix 同时充当交互式 Telegram 机器人。除了发送警报外,它还直接响应来自你聊天的命令: | 命令 | 功能 | |---------|-------------| | `/status` | 系统健康状况、上次扫描时间、源状态、LLM 状态 | | `/sweep` | 触发手动扫描周期 | | `/brief` | 最新情报的简明文本摘要(方向、关键指标、顶部 OSINT) | | `/portfolio` | 投资组合状态(如果已连接 Alpaca) | | `/alerts` | 最近的警报历史及层级 | | `/mute` / `/mute 2h` | 静音警报1小时(或自定义时长) | | `/unmute` | 恢复警报 | | `/help` | 显示所有可用命令 | 这需要在 `.env` 中设置 `TELEGRAM_BOT_TOKEN` 和 `TELEGRAM_CHAT_ID`。机器人每5秒轮询一次消息(可通过 `TELEGRAM_POLL_INTERVAL` 配置)。 ### Discord 机器人(双向) Crucix 还支持 Discord 作为功能齐全的机器人,具有斜杠命令和丰富的嵌入警报。它镜像了 Telegram 机器人的功能,并采用 Discord 原生格式。 | 命令 | 功能 | |---------|-------------| | `/status` | 系统健康状况、上次扫描时间、源状态、LLM 状态 | | `/sweep` | 触发手动扫描周期 | | `/brief` | 最新情报的简明文本摘要 | | `/portfolio` | 投资组合状态(如果已连接 Alpaca) | 警报以带有颜色编码侧边栏的丰富嵌入形式传递:红色代表 FLASH,黄色代表 PRIORITY,蓝色代表 ROUTINE。每个嵌入包含信号详情、置信度分数和跨领域关联。 **设置需要:** `DISCORD_BOT_TOKEN`、`DISCORD_CHANNEL_ID`,以及可选的 `DISCORD_GUILD_ID` 用于即时斜杠命令注册。有关详细信息,请参阅 [API 密钥设置](#api-keys-setup)。 **Webhook 回退:** 如果你不想运行完整的机器人,请改为设置 `DISCORD_WEBHOOK_URL`。这启用了单向警报(无斜杠命令)且零依赖——不需要 `discord.js`。 **可选依赖:** 完整的机器人需要 `discord.js`。使用 `npm install discord.js` 安装它。如果未安装,Crucix 会自动回退到仅 Webhook 模式。 ### 可选 LLM 层 连接6个 LLM 提供商中的任何一个以进行增强分析: - **AI 交易想法**——量化分析师生成5-8个引用具体数据的可操作想法 - **更智能的警报评估**——LLM 将信号分类为 FLASH/PRIORITY/ROUTINE 层级,并附带跨领域关联和置信度评分 - 提供商:Anthropic Claude、OpenAI、Google Gemini、OpenRouter(统一 API)、OpenAI Codex(ChatGPT 订阅)、MiniMax、Mistral - 优雅降级——当 LLM 不可用时,基于规则的引擎接管警报评估。LLM 故障永远不会导致扫描周期崩溃。 ## API 密钥设置 将 `.env.example` 复制到项目根目录下的 `.env`: ``` cp .env.example .env ``` ### 获得最佳效果所需(均为免费) | 密钥 | 来源 | 如何获取 | |-----|--------|------------| | `FRED_API_KEY` | Federal Reserve Economic Data | [fred.stlouisfed.org](https://fred.stlouisfed.org/docs/api/api_key.html) — 即时,免费 | | `FIRMS_MAP_KEY` | NASA FIRMS(卫星火灾数据) | [firms.modaps.eosdis.nasa.gov](https://firms.modaps.eosdis.nasa.gov/api/area/) — 即时,免费 | | `EIA_API_KEY` | US Energy Information Administration | [api.eia.gov](https://www.eia.gov/opendata/register.php) — 即时,免费 | 这三个解锁了最有价值的经济和卫星数据。每一个大约需要60秒来注册。 ### 可选(启用额外来源) | 密钥 | 来源 | 如何获取 | |-----|--------|------------| | `ACLED_EMAIL` + `ACLED_PASSWORD` | 武装冲突事件数据 | [acleddata.com/register](https://acleddata.com/register/) — 免费,OAuth2 | | `AISSTREAM_API_KEY` | 海事 AIS 船舶追踪 | [aisstream.io](https://aisstream.io/) — 免费 | | `ADSB_API_KEY` | 未过滤的航班追踪 | [RapidAPI](https://rapidapi.com/adsbexchange/api/adsbexchange-com1) — 约$10/月 | ### LLM 提供商(可选,用于 AI 增强想法) 将 `LLM_PROVIDER` 设置为以下之一:`anthropic`、`openai`、`gemini`、`codex`、`openrouter`、`minimax`、`mistral` | 提供商 | 所需密钥 | 默认模型 | |----------|-------------|---------------| | `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` | 无(使用 `~/.codex/auth.json`) | gpt-5.3-codex | | `minimax` | `LLM_API_KEY` | MiniMax-M2.5 | | `mistral` | `LLM_API_KEY` | mistral-large-latest | 对于 Codex,运行 `npx @openai/codex login` 以通过你的 ChatGPT 订阅进行身份验证。 ### Telegram 机器人 + 警报(可选) | 密钥 | 如何获取 | |-----|------------| | `TELEGRAM_BOT_TOKEN` | 在 Telegram 上通过 [@BotFather](https://t.me/BotFather) 创建 | | `TELEGRAM_CHAT_ID` | 通过 [@userinfobot](https://t.me/userinfobot) 获取 | | `TELEGRAM_CHANNELS` | *(可选)* 除17个内置频道外,要监视的额外频道 ID(号分隔) | | `TELEGRAM_POLL_INTERVAL` | *(可选)* 机器人命令轮询间隔(毫秒)(默认:5000) | ### Discord 机器人 + 警报(可选) | 密钥 | 如何获取 | |-----|------------| | `DISCORD_BOT_TOKEN` | 在 [Discord Developer Portal](https://discord.com/developers/applications) 创建 → Bot → Token | | `DISCORD_CHANNEL_ID` | 在 Discord 中右键点击频道(开启开发者模式) → Copy Channel ID | | `DISCORD_GUILD_ID` | *(可选)* 右键点击服务器 → Copy Server ID。启用即时斜杠命令注册(否则全局命令最多可能需要1小时) | | `DISCORD_WEBHOOK_URL` | *(可选)* 频道设置 → 整合 → Webhooks → New Webhook → Copy URL。用于仅警报模式,无需机器人 | **Discord 机器人设置:** 1. 前往 [Discord Developer Portal](https://discord.com/developers/applications) 并创建一个新应用程序 2. 前往 **Bot** → 点击 **Reset Token** → 将令牌复制到 `DISCORD_BOT_TOKEN` 3. 在 **Privileged Gateway Intents** 下,启用 **Message Content Intent** 4. 前往 **OAuth2** → **URL Generator** → 选择 `bot` + `applications.commands` 作用域 → 选择 `Send Messages` + `Embed Links` 权限 5. 复制生成的 URL 并在浏览器中打开以邀请机器人加入你的服务器 6. 安装依赖项:`npm install discord.js` 在 Telegram 和 Discord 上,无论是否配置 LLM,警报都可以工作。配置了 LLM 后,信号评估会更丰富、更具上下文意识。如果没有,确定性规则引擎会根据严重程度、跨领域关联和信号计数来评估信号。 ### 无需任何密钥 即使没有任何 API 密钥,Crucix 也能工作。18+ 个来源完全不需要身份验证。需要密钥的来源会返回结构化错误,其余扫描正常继续。 ## 架构 ``` 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 (5 providers, raw fetch, no SDKs) │ │ ├── provider.mjs # Base class │ │ ├── anthropic.mjs # Claude │ │ ├── openai.mjs # GPT │ │ ├── gemini.mjs # Gemini │ │ ├── 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) ``` ### 设计原则 - **纯 ESM**——每个文件都是带有显式导入的 `.mjs` - **最小依赖**——Express 是唯一的运行时依赖。`discord.js` 是可选的(用于 Discord 机器人)。LLM 提供商使用原始 `fetch()`,无需 SDK。 - **并行执行**——`Promise.allSettled()` 同时触发所有27个来源 - **优雅降级**——缺少密钥会产生错误,而不会崩溃。LLM 故障不会终止扫描。 - **每个源都是独立的**——运行 `node apis/sources/gdelt.mjs` 独立测试任何来源 - **独立的仪表板**——HTML 文件无论有没有服务器都能工作 ## 数据来源(27个) ### 第1层:核心 OSINT 与地缘政治(11个) | 来源 | 追踪内容 | 认证 | |--------|---------------|------| | **GDELT** | 全球新闻事件、冲突映射(100+种语言) | 无 | | **OpenSky** | 跨6个热点区域的实时 ADS-B 航班追踪 | 无 | | **NASA FIRMS** | 卫星火灾/热异常探测(3小时延迟) | 免费密钥 | | **Maritime/AIS** | 船舶追踪、暗船、制裁逃避 | 免费密钥 | | **Safecast** | 6个核设施附近的公民科学辐射监测 | 无 | | **ACLED** | 武装冲突事件:战斗、爆炸、抗议 | 免费(OAuth2) | | **ReliefWeb** | 联合国人道主义危机追踪 | 无 | | **WHO** | 疾病爆发和卫生紧急情况 | 无 | | **OFAC** | 美国财政部制裁(SDN 列表) | 无 | | **OpenSanctions** | 聚合的全球制裁(30+个来源) | 部分 | | **ADS-B Exchange** | 未过滤的航班追踪,包括军事航班 | 付费 | ### 第2层:经济与金融(7个) | 来源 | 追踪内容 | 认证 | |--------|---------------|------| | **FRED** | 22个关键指标:收益率曲线、CPI、VIX、联邦基金、M2 | 免费密钥 | | **US Treasury** | 国债、收益率、财政数据 | 无 | | **BLS** | CPI、失业率、非农就业人数、PPI | 无 | | **EIA** | WTI/布伦特原油、天然气、库存 | 免费密钥 | | **GSCPI** | 纽约联储全球供应链压力指数 | 无 | | **USAspending** | 联邦支出和国防合同 | 无 | | **UN Comtrade** | 主要大国之间的战略商品贸易流 | 无 | ### 第3层:天气、环境、科技、社会、SIGINT(7个) | 来源 | 追踪内容 | 认证 | |--------|---------------|------| | **NOAA/NWS** | 美国活跃天气警报 | 无 | | **EPA RadNet** | 美国政府辐射监测 | 无 | | **USPTO Patents** | 7个战略技术领域的专利申请 | 无 | | **Bluesky** | 关于地缘政治/市场话题的社会情绪 | 无 | | **Reddit** | 来自关键子版块的社会情绪 | OAuth | | **Telegram** | 17个精选 OSINT/冲突/财经频道(网页抓取,可通过配置扩展) | 无 | | **KiwiSDR** | 全球 HF 无线电接收器网络(约600个接收器) | 无 | ### 第4层:太空与卫星(1个) | 来源 | 追踪内容 | 认证 | |--------|---------------|------| | **CelesTrak** | 卫星发射、ISS 追踪、军事星座、Starlink/OneWeb 数量 | 无 | ### 第5层:实时市场数据(1个) | 来源 | 追踪内容 | 认证 | |--------|---------------|------| | **Yahoo Finance** | 实时价格:SPY、QQQ、BTC、黄金、WTI、VIX + 另外9种 | 无 | ## npm 脚本 | 脚本 | 命令 | 描述 | |--------|---------|-------------| | `npm run dev` | `node --trace-warnings server.mjs` | 启动仪表板并自动刷新 | | `npm run sweep` | `node apis/briefing.mjs` | 运行单次扫描,将 JSON 输出到 stdout | | `npm run inject` | `node dashboard/inject.mjs` | 将最新数据注入静态 HTML | | `npm run brief:save` | `node apis/save-briefing.mjs` | 运行扫描 + 保存带时间戳的 JSON | | `npm run diag` | `node diag.mjs` | 运行诊断(Node 版本、导入、端口检查) | ## 配置 所有设置都在 `.env` 中,具有合理的默认值: | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `PORT` | `3117` | 仪表板服务器端口 | | `REFRESH_INTERVAL_MINUTES` | `15` | 自动刷新间隔 | | `LLM_PROVIDER` | 禁用 | `anthropic`、`openai`、`gemini`、`codex`、`openrouter`、`minimax` 或 `mistral` | | `LLM_API_KEY` | — | API 密钥(codex 不需要) | | `LLM_MODEL` | 各提供商默认 | 覆盖模型选择 | | `TELEGRAM_BOT_TOKEN` | 禁用 | 用于 Telegram 警报 + 机器人命令 | | `TELEGRAM_CHAT_ID` | — | 你的 Telegram 聊天 ID | | `TELEGRAM_CHANNELS` | — | 要监视的额外频道 ID(逗号分隔) | | `TELEGRAM_POLL_INTERVAL` | `5000` | 机器人命令轮询间隔(毫秒) | | `DISCORD_BOT_TOKEN` | 禁用 | 用于 Discord 警报 + 斜杠命令 | | `DISCORD_CHANNEL_ID` | — | 用于警报的 Discord 频道 | | `DISCORD_GUILD_ID` | — | 服务器 ID(即时斜杠命令注册) | | `DISCORD_WEBHOOK_URL` | — | Webhook URL(仅警报回退,无需机器人) | 增量引擎阈值(系统对扫描之间变化的敏感程度)可以在 `crucix.config.mjs` 的 `delta.thresholds` 部分自定义。默认值经过调整,可过滤噪声同时捕捉有意义的变动。 ## API 端点 运行 `npm run dev` 时: | 端点 | 描述 | |----------|-------------| | `GET /` | Jarvis HUD 仪表板 | | `GET /api/data` | 当前合成情报数据(JSON) | | `GET /api/health` | 服务器状态、运行时间、源数量、LLM 状态 | | `GET /events` | 用于实时推送更新的 SSE 流 | ## 故障排除 ### `npm run dev` 静默退出(无输出,无错误) 这是一个已知问题,npm 的脚本运行器可能会吞掉错误,特别是在 Windows PowerShell 上。请按顺序尝试以下操作: **1. 直接运行 Node(绕过 npm):** ``` node --trace-warnings server.mjs ``` 这在功能上与 `npm run dev` 相同,但会给你完整的错误输出。 **2. 运行诊断脚本:** ``` node diag.mjs ``` 这会逐个测试每个导入,检查你的 Node.js 版本,并验证端口 3117 是否可用。它会告诉你具体是什么失败了。 **3. 检查端口 3117 是否已被占用:** 之前的 Crucix 实例可能仍在后台运行。 ``` # Windows PowerShell netstat -ano | findstr 3117 taskkill /F /PID # 或者终止所有 Node 进程 taskkill /F /IM node.exe ``` ``` # macOS / Linux lsof -ti:3117 | xargs kill ``` 然后尝试再次启动。你也可以通过在 `.env` 文件中设置 `PORT=3118` 来更改端口。 **4. 检查 Node.js 版本:** ``` node --version ``` Crucix 需要 Node.js 22 或更高版本。如果你的版本较旧,请从 [nodejs.org](https://nodejs.org/) 下载最新的 LTS 版本。 ### 首次启动后仪表板显示空面板 这是正常的——第一次扫描需要30–60秒来查询所有27个来源。一旦扫描完成,仪表板将自动填充。请检查终端以获取扫描进度日志。 ### 某些来源显示错误 预期行为。如果未设置密钥,需要 API 密钥的来源将返回结构化错误。其余扫描正常继续。检查仪表板中的 Source Integrity 部分(或服务器日志)以查看哪些来源失败及其原因。最需要添加的3个免费密钥是 `FRED_API_KEY`、`FIRMS_MAP_KEY` 和 `EIA_API_KEY`。 当 OpenSky 的公共热点被过于激进地查询时,也可能返回 `HTTP 429`。Crucix 不会试图规避该限制。相反,它会在源健康状况中显示限制/错误,并保留 `runs/` 中最近的非空空中交通快照,这样仪表板航班层就不会在受限扫描时突然变空白。 ### Telegram 机器人不响应命令 确保在 `.env` 中设置了 `TELEGRAM_BOT_TOKEN` 和 `TELEGRAM_CHAT_ID`。机器人仅响应来自已配置聊天 ID 的消息(安全措施)。启动时,你应该在服务器日志中看到 `[Crucix] Telegram alerts enabled` 和 `[Crucix] Bot command polling started`。如果没有,请使用 `curl https://api.telegram.org/bot/getMe` 仔细检查你的令牌。 ### Discord 机器人不响应斜杠命令 按顺序检查以下内容: 1. 确保在 `.env` 中设置了 `DISCORD_BOT_TOKEN` 和 `DISCORD_CHANNEL_ID` 2. 验证 `discord.js` 已安装:`npm ls discord.js`。如果缺失,运行 `npm install discord.js` 3. 如果斜杠命令未出现,请设置 `DISCORD_GUILD_ID`——没有它,全局命令可能需要长达1小时才能传播。特定于服务器的命令会立即注册 4. 确认机器人是以 `bot` + `applications.commands` 作用域受邀的,并且在目标频道中拥有 `Send Messages` + `Embed Links` 权限 5. 检查服务器日志中启动时是否有 `[Discord] Bot logged in as ...`。如果你看到 `[Discord] discord.js not installed`,请安装它并重启 6. **仅 Webhook 回退:** 如果你只想要警报而不需要斜杠命令,请设置 `DISCORD_WEBHOOK_URL` 而不是机器人令牌。不需要 `discord.js`。 ## 截图 `docs/` 文件夹包含本 README 引用的仪表板截图: | 文件 | 描述 | |------|-------------| | `docs/dashboard.png` | 完整仪表板——本 README 顶部的主图 | | `docs/boot.png` | 电影般的启动序列动画 | | `docs/map.png` | 带有标记类型和飞行弧线的 D3 世界地图 | | `docs/globe.png` | 带有大气辉光和标记的 3D WebGL 地球仪视图 | 要更新它们:运行仪表板,等待完成,然后使用浏览器的开发者工具(`F12` → `Ctrl+Shift+P` → “Capture full size screenshot”)或像 [LICEcap](https://www.cockos.com/licecap/) 这样的工具来制作 GIF。 ## 贡献 发现了错误?想添加第28个来源?欢迎提交 PR。每个来源都是 `apis/sources/` 中的一个独立模块——只需导出一个返回结构化数据的 `briefing()` 函数,并将其添加到 `apis/briefing.mjs` 的编排器中。 如果你觉得这很有用,点个 Star 可以帮助其他人也发现它。 有关贡献指南、审查期望和源添加规则,请参阅 `CONTRIBUTING.md`。有关安全报告,请参阅 `SECURITY.md`。 ## 联系方式 如需合作、集成或其他非问题咨询,你可以通过 `celesthioailabs@gmail.com` 联系我。 对于错误和功能请求,请使用 GitHub Issues,以便讨论保持可见和可操作。 ## Star 历史 Star History Chart ## 许可证 AGPL-3.0
标签:Discord集成, Docker, ESC4, Express, GNU通用公共许可证, HTTP/HTTPS抓包, LLM集成, Node.js, OSINT, Telegram机器人, 人工智能助手, 仪表盘, 冲突监控, 制裁名单, 卫星监测, 多源数据融合, 安全防御评估, 市场行情, 态势感知, 情报分析, 情报收集, 情报终端, 本地部署, 漏洞研究, 监控告警, 离线运行, 经济指标, 网络安全, 网络诊断, 自定义脚本, 舆情分析, 航班追踪, 请求拦截, 辐射监测, 隐私保护