[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-calesthio--Crucix":3,"tool-calesthio--Crucix":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",154349,2,"2026-04-13T23:32:16",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":78,"owner_website":76,"owner_url":79,"languages":80,"stars":93,"forks":94,"last_commit_at":95,"license":96,"difficulty_score":32,"env_os":97,"env_gpu":98,"env_ram":99,"env_deps":100,"category_tags":107,"github_topics":108,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":112,"updated_at":113,"faqs":114,"releases":144},7353,"calesthio\u002FCrucix","Crucix","Your personal intelligence agent. Watches the world from multiple data sources and pings you when something changes.","Crucix 是一款专为个人打造的开源智能情报终端，旨在帮助用户实时掌控全球动态。它解决了关键信息分散在数十个政府 API、科研机构和公开数据源中，导致普通人难以高效获取和交叉验证的痛点。\n\n通过整合卫星火情监测、航班追踪、辐射水平、地缘冲突、经济指标及社交媒体情绪等 27 类开源情报（OSINT），Crucix 每 15 分钟并行更新一次数据，并将所有信息汇聚在一个类似\"Jarvis\"风格的本地仪表盘上直观呈现。其独特之处在于完全去中心化：无需依赖云端服务、无遥测监控、零订阅费用，仅需一条命令即可在本地运行，确保数据隐私与安全。此外，它还支持对接大语言模型，变身双向智能助手，能通过 Telegram 或 Discord 推送分级警报，并响应自然语言指令生成基于真实数据的分析简报。\n\n这款工具非常适合研究人员、记者、交易员、开源情报分析师以及任何希望低成本获取高质量全球实时信息的普通用户。无论您是想洞察市场先机，还是单纯关心世界正在发生什么，Crucix 都能成为您不知疲倦的私人分析师。","\u003Cdiv align=\"center\">\n\n# Crucix\n\n**Your own intelligence terminal. 27 sources. One command. Zero cloud.**\n\n## [Visit The Live Site: crucix.live](https:\u002F\u002Fwww.crucix.live\u002F)\n\n[![Live Website](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flive-crucix.live-00d4ff?style=for-the-badge)](https:\u002F\u002Fwww.crucix.live\u002F)\n[![Open Demo](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fopen-live%20dashboard-0b1220?style=for-the-badge&logo=googlechrome&logoColor=white)](https:\u002F\u002Fwww.crucix.live\u002F)\n\n[![Node.js 22+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-22%2B-brightgreen)](#quick-start)\n[![License: AGPL v3](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-AGPLv3-blue.svg)](LICENSE)\n[![Dependencies](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdependencies-1%20(express)-orange)](#architecture)\n[![Sources](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOSINT%20sources-27-cyan)](#data-sources-27)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocker-ready-blue?logo=docker)](#docker)\n\n**Enter The Signal Network**\n\n[![Signal Wire](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSignal%20Wire-%40crucixmonitor-111111?style=for-the-badge&logo=x&logoColor=white)](https:\u002F\u002Fx.com\u002Fcrucixmonitor)\n[![Ops Room](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOps%20Room-Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002FChVy7SF4)\n\n![Crucix Dashboard](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_fa9cc960c245.png)\n\n\u003Cdetails>\n\u003Csummary>More screenshots\u003C\u002Fsummary>\n\n| Boot Sequence | World Map |\n|:---:|:---:|\n| ![Boot](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_57f7da3f506b.png) | ![Map](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_ff600ea15d7b.png) |\n\n| 3D Globe View |\n|:---:|\n| ![Globe](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_acd305d6ff32.png) |\n\n\u003C\u002Fdetails>\n\n\u003C\u002Fdiv>\n\n> **Live website:** [https:\u002F\u002Fwww.crucix.live\u002F](https:\u002F\u002Fwww.crucix.live\u002F)\n> Explore the public demo first, then clone the repo to run Crucix locally.\n\nCrucix pulls satellite fire detection, flight tracking, radiation monitoring, satellite constellation tracking, economic indicators, live market prices, conflict data, sanctions lists, and social sentiment from 27 open-source intelligence feeds — in parallel, every 15 minutes — and renders everything on a single self-contained Jarvis-style dashboard.\n\nHook it up to an LLM and it becomes a **two-way intelligence assistant** — pushing multi-tier alerts to Telegram and Discord when something meaningful changes, responding to commands like `\u002Fbrief` and `\u002Fsweep` from your phone, and generating actionable trade ideas grounded in real cross-domain data. Your own analyst that watches the world while you sleep.\n\nTry the live demo first at [https:\u002F\u002Fwww.crucix.live\u002F](https:\u002F\u002Fwww.crucix.live\u002F), then clone the repo when you want the full local stack.\n\nNo cloud. No telemetry. No subscriptions. Just `node server.mjs` and you're running.\n\n## Token \u002F Asset Warning\n\n> [!WARNING]\n> **Crucix has not launched any official token, coin, NFT, airdrop, presale, or other blockchain-based asset.**\n> Any token or digital asset using the Crucix name, logo, or branding is not affiliated with or endorsed by Crucix.\n> Do not buy it, promote it, connect a wallet to claim it, sign transactions, or send funds based on third-party posts, DMs, or websites.\n\n---\n\n## Why This Exists\n\nMost of the world's real-time intelligence — satellite imagery, radiation levels, conflict events, economic indicators, flight tracking, maritime activity — is publicly available. It's just scattered across dozens of government APIs, research institutions, and open data feeds that nobody has time to check individually.\n\nCrucix brings it all into one place. Not behind a paywall, not locked in an enterprise platform, not requiring a security clearance. Just open data, aggregated and cross-correlated on your own machine, updated every 15 minutes.\n\nIt was built for anyone who wants to understand what's actually happening in the world right now — researchers, journalists, traders, OSINT analysts, or just curious people who believe access to information shouldn't depend on your budget.\n\n---\n\n## Quick Start\n\n```bash\n# 1. Clone the repo\ngit clone https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix.git\ncd Crucix\n\n# 2. Install dependencies (just Express)\nnpm install\n\n# 3. Copy env template and add your API keys (see below)\ncp .env.example .env\n\n# 4. Start the dashboard\nnpm run dev\n```\n\n> **If `npm run dev` fails silently** (exits with no output), run Node directly instead:\n> ```bash\n> node --trace-warnings server.mjs\n> ```\n> This bypasses npm's script runner, which can swallow errors on some systems (particularly PowerShell on Windows). You can also run `node diag.mjs` to diagnose the exact issue — it checks your Node version, tests each module import individually, and verifies port availability. See [Troubleshooting](#troubleshooting) for more.\n\nThe dashboard opens automatically at `http:\u002F\u002Flocalhost:3117` and immediately begins its first intelligence sweep. This initial sweep queries all 27 sources in parallel and typically takes 30–60 seconds — the dashboard will appear empty until the sweep completes and pushes the first data update. After that, it auto-refreshes every 15 minutes via SSE (Server-Sent Events). No manual page refresh needed.\n\n**Requirements:** Node.js 22+ (uses native `fetch`, top-level `await`, ESM)\n\n### Docker\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix.git\ncd Crucix\ncp .env.example .env    # add your API keys\ndocker compose up -d\n```\n\nDashboard at `http:\u002F\u002Flocalhost:3117`. Sweep data persists in `.\u002Fruns\u002F` via volume mount. Includes a health check endpoint.\n\n---\n\n## What You Get\n\n### Live Dashboard\nA self-contained Jarvis-style HUD with:\n- **3D WebGL globe** (Globe.gl) with atmosphere glow, star field, and smooth rotation — plus a classic flat map toggle\n- **9 marker types** across both views: fire detections, air traffic, radiation sites, maritime chokepoints, SDR receivers, OSINT events, health alerts, geolocated news, conflict events\n- **Animated 3D flight corridor arcs** between air traffic hotspots and global hubs\n- **Region filters** (World, Americas, Europe, Middle East, Asia Pacific, Africa) — rotates the globe or zooms the flat map\n- **Live market data** — indexes, crypto, energy, commodities via Yahoo Finance (no API key needed)\n- **Risk gauges** — VIX, high-yield spread, supply chain pressure index\n- **OSINT feed** — English-language posts from 17 Telegram intelligence channels (expandable)\n- **News ticker** — merged RSS + GDELT headlines + Telegram posts, auto-scrolling\n- **Sweep delta** — live panel showing what changed since last sweep (new signals, escalations, de-escalations with severity)\n- **Cross-source signals** — correlated intelligence across satellite, economic, conflict, and social domains\n- **Nuclear watch** — real-time radiation readings from Safecast + EPA RadNet\n- **Space watch** — CelesTrak satellite tracking: recent launches, ISS, military constellations, Starlink\u002FOneWeb counts\n- **Leverageable ideas** — AI-generated trade ideas (with LLM) or signal-correlated ideas (without)\n\n### Performance Modes\nThe `VISUALS FULL` \u002F `VISUALS LITE` button in the top bar only changes rendering behavior - it does **not** remove data sources or reduce sweep coverage.\n\nWhen you switch to **VISUALS LITE**, the dashboard:\n- Disables decorative background effects such as the radial\u002Fgrid overlays and scanlines\n- Removes expensive blur\u002Fbackdrop-filter effects on panels and overlays\n- Stops non-essential animations like the logo ring blink, conflict rings, and corridor flow effects\n- Disables globe auto-rotation and turns off animated flight-arc dashes\n- Converts the horizontal news ticker and OSINT stream into static, scrollable lists instead of continuously animated marquees\n\nMobile-specific behavior:\n- On mobile, `VISUALS LITE` also forces the dashboard into **flat map mode** if you are currently on the globe\n- Future mobile loads will continue to start flat while low-perf mode is enabled\n\nThe preference is saved in browser local storage, so the UI will remember your last setting.\n\n### Auto-Refresh\nThe server runs a sweep cycle every 15 minutes (configurable). Each cycle:\n1. Queries all 27 sources in parallel (~30s)\n2. Synthesizes raw data into dashboard format\n3. Computes delta from previous run (what changed, escalated, de-escalated) — visible in the **Sweep Delta** panel on the dashboard\n4. Generates LLM trade ideas (if configured)\n5. Evaluates breaking news alerts — multi-tier (FLASH \u002F PRIORITY \u002F ROUTINE) with semantic dedup. Sends to Telegram and\u002For Discord if configured. Works with LLM evaluation or falls back to rule-based alerting when LLM is unavailable.\n6. Pushes update to all connected browsers via SSE\n\n### Telegram Bot (Two-Way)\nCrucix doubles as an interactive Telegram bot. Beyond sending alerts, it responds to commands directly from your chat:\n\n| Command | What It Does |\n|---------|-------------|\n| `\u002Fstatus` | System health, last sweep time, source status, LLM status |\n| `\u002Fsweep` | Trigger a manual sweep cycle |\n| `\u002Fbrief` | Compact text summary of the latest intelligence (direction, key metrics, top OSINT) |\n| `\u002Fportfolio` | Portfolio status (if Alpaca connected) |\n| `\u002Falerts` | Recent alert history with tiers |\n| `\u002Fmute` \u002F `\u002Fmute 2h` | Silence alerts for 1h (or custom duration) |\n| `\u002Funmute` | Resume alerts |\n| `\u002Fhelp` | Show all available commands |\n\nThis requires `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` in `.env`. The bot polls for messages every 5 seconds (configurable via `TELEGRAM_POLL_INTERVAL`).\n\n### Discord Bot (Two-Way)\n\nCrucix also supports Discord as a full-featured bot with slash commands and rich embed alerts. It mirrors the Telegram bot's capabilities with Discord-native formatting.\n\n| Command | What It Does |\n|---------|-------------|\n| `\u002Fstatus` | System health, last sweep time, source status, LLM status |\n| `\u002Fsweep` | Trigger a manual sweep cycle |\n| `\u002Fbrief` | Compact text summary of the latest intelligence |\n| `\u002Fportfolio` | Portfolio status (if Alpaca connected) |\n\nAlerts are delivered as rich embeds with color-coded sidebars: red for FLASH, yellow for PRIORITY, blue for ROUTINE. Each embed includes signal details, confidence scores, and cross-domain correlations.\n\n**Setup requires:** `DISCORD_BOT_TOKEN`, `DISCORD_CHANNEL_ID`, and optionally `DISCORD_GUILD_ID` for instant slash command registration. See [API Keys Setup](#api-keys-setup) for details.\n\n**Webhook fallback:** If you don't want to run a full bot, set `DISCORD_WEBHOOK_URL` instead. This enables one-way alerts (no slash commands) with zero dependencies — no `discord.js` needed.\n\n**Optional dependency:** The full bot requires `discord.js`. Install it with `npm install discord.js`. If it's not installed, Crucix automatically falls back to webhook-only mode.\n\n### Optional LLM Layer\nConnect any of 8 LLM providers for enhanced analysis:\n- **AI trade ideas** — quantitative analyst producing 5-8 actionable ideas citing specific data\n- **Smarter alert evaluation** — LLM classifies signals into FLASH\u002FPRIORITY\u002FROUTINE tiers with cross-domain correlation and confidence scoring\n- Providers: Anthropic Claude, OpenAI, Google Gemini, OpenRouter (Unified API), OpenAI Codex (ChatGPT subscription), MiniMax, Mistral, Grok\n- Graceful fallback — when LLM is unavailable, a rule-based engine takes over alert evaluation. LLM failures never crash the sweep cycle.\n\n---\n\n## API Keys Setup\n\nCopy `.env.example` to `.env` at the project root:\n\n```bash\ncp .env.example .env\n```\n\n### Required for Best Results (all free)\n\n| Key | Source | How to Get |\n|-----|--------|------------|\n| `FRED_API_KEY` | Federal Reserve Economic Data | [fred.stlouisfed.org](https:\u002F\u002Ffred.stlouisfed.org\u002Fdocs\u002Fapi\u002Fapi_key.html) — instant, free |\n| `FIRMS_MAP_KEY` | NASA FIRMS (satellite fire data) | [firms.modaps.eosdis.nasa.gov](https:\u002F\u002Ffirms.modaps.eosdis.nasa.gov\u002Fapi\u002Farea\u002F) — instant, free |\n| `EIA_API_KEY` | US Energy Information Administration | [api.eia.gov](https:\u002F\u002Fwww.eia.gov\u002Fopendata\u002Fregister.php) — instant, free |\n\nThese three unlock the most valuable economic and satellite data. Each takes about 60 seconds to register.\n\n### Optional (enable additional sources)\n\n| Key | Source | How to Get |\n|-----|--------|------------|\n| `ACLED_EMAIL` + `ACLED_PASSWORD` | Armed conflict event data | [acleddata.com\u002Fregister](https:\u002F\u002Facleddata.com\u002Fregister\u002F) — free, OAuth2 |\n| `AISSTREAM_API_KEY` | Maritime AIS vessel tracking | [aisstream.io](https:\u002F\u002Faisstream.io\u002F) — free |\n| `ADSB_API_KEY` | Unfiltered flight tracking | [RapidAPI](https:\u002F\u002Frapidapi.com\u002Fadsbexchange\u002Fapi\u002Fadsbexchange-com1) — ~$10\u002Fmo |\n\n### LLM Provider (optional, for AI-enhanced ideas)\n\nSet `LLM_PROVIDER` to one of: `anthropic`, `openai`, `gemini`, `codex`, `openrouter`, `minimax`, `mistral`, `grok`\n\n| Provider | Key Required | Default Model |\n|----------|-------------|---------------|\n| `anthropic` | `LLM_API_KEY` | claude-sonnet-4-6 |\n| `openai` | `LLM_API_KEY` | gpt-5.4 |\n| `gemini` | `LLM_API_KEY` | gemini-3.1-pro |\n| `openrouter` | `LLM_API_KEY` | openrouter\u002Fauto |\n| `codex` | None (uses `~\u002F.codex\u002Fauth.json`) | gpt-5.3-codex |\n| `minimax` | `LLM_API_KEY` | MiniMax-M2.5 |\n| `mistral` | `LLM_API_KEY` | mistral-large-latest |\n| `grok` | `LLM_API_KEY` | grok-4-latest |\n\nFor Codex, run `npx @openai\u002Fcodex login` to authenticate via your ChatGPT subscription.\n\n### Telegram Bot + Alerts (optional)\n\n| Key | How to Get |\n|-----|------------|\n| `TELEGRAM_BOT_TOKEN` | Create via [@BotFather](https:\u002F\u002Ft.me\u002FBotFather) on Telegram |\n| `TELEGRAM_CHAT_ID` | Get via [@userinfobot](https:\u002F\u002Ft.me\u002Fuserinfobot) |\n| `TELEGRAM_CHANNELS` | *(Optional)* Comma-separated extra channel IDs to monitor beyond the 17 built-in channels |\n| `TELEGRAM_POLL_INTERVAL` | *(Optional)* Bot command polling interval in ms (default: 5000) |\n\n### Discord Bot + Alerts (optional)\n\n| Key | How to Get |\n|-----|------------|\n| `DISCORD_BOT_TOKEN` | Create at [Discord Developer Portal](https:\u002F\u002Fdiscord.com\u002Fdevelopers\u002Fapplications) → Bot → Token |\n| `DISCORD_CHANNEL_ID` | Right-click channel in Discord (Developer Mode on) → Copy Channel ID |\n| `DISCORD_GUILD_ID` | *(Optional)* Right-click server → Copy Server ID. Enables instant slash command registration (otherwise takes up to 1 hour for global commands) |\n| `DISCORD_WEBHOOK_URL` | *(Optional)* Channel Settings → Integrations → Webhooks → New Webhook → Copy URL. Use this for alert-only mode without a bot |\n\n**Discord bot setup:**\n1. Go to [Discord Developer Portal](https:\u002F\u002Fdiscord.com\u002Fdevelopers\u002Fapplications) and create a new application\n2. Go to **Bot** → click **Reset Token** → copy the token to `DISCORD_BOT_TOKEN`\n3. Under **Privileged Gateway Intents**, enable **Message Content Intent**\n4. Go to **OAuth2** → **URL Generator** → select `bot` + `applications.commands` scopes → select `Send Messages` + `Embed Links` permissions\n5. Copy the generated URL and open it in your browser to invite the bot to your server\n6. Install the dependency: `npm install discord.js`\n\nAlerts work with or without an LLM on both Telegram and Discord. With an LLM configured, signal evaluation is richer and more context-aware. Without one, a deterministic rule engine evaluates signals based on severity, cross-domain correlation, and signal counts.\n\n### Without Any Keys\n\nCrucix still works with zero API keys. 18+ sources require no authentication at all. Sources that need keys return structured errors and the rest of the sweep continues normally.\n\n---\n\n## Architecture\n\n```\ncrucix\u002F\n├── server.mjs                 # Express dev server (SSE, auto-refresh, LLM, bot commands)\n├── crucix.config.mjs          # Configuration with env var overrides + delta thresholds\n├── diag.mjs                   # Diagnostic script — run if server fails to start\n├── .env.example               # All documented env vars\n├── package.json               # Runtime: express | Optional: discord.js\n├── docs\u002F                      # Screenshots for README\n│\n├── apis\u002F\n│   ├── briefing.mjs           # Master orchestrator — runs all 27 sources in parallel\n│   ├── save-briefing.mjs      # CLI: save timestamped + latest.json\n│   ├── BRIEFING_PROMPT.md     # Intelligence synthesis protocol\n│   ├── BRIEFING_TEMPLATE.md   # Briefing output structure\n│   ├── utils\u002F\n│   │   ├── fetch.mjs          # safeFetch() — timeout, retries, abort, auto-JSON\n│   │   └── env.mjs            # .env loader (no dotenv dependency)\n│   └── sources\u002F               # 27 self-contained source modules\n│       ├── gdelt.mjs          # Each exports briefing() → structured data\n│       ├── fred.mjs           # Can run standalone: node apis\u002Fsources\u002Ffred.mjs\n│       ├── space.mjs          # CelesTrak satellite tracking\n│       ├── yfinance.mjs       # Yahoo Finance — free live market data\n│       └── ...                # 23 more\n│\n├── dashboard\u002F\n│   ├── inject.mjs             # Data synthesis + standalone HTML injection\n│   └── public\u002F\n│       └── jarvis.html        # Self-contained Jarvis HUD\n│\n├── lib\u002F\n│   ├── llm\u002F                   # LLM abstraction (8 providers, raw fetch, no SDKs)\n│   │   ├── provider.mjs       # Base class\n│   │   ├── anthropic.mjs      # Claude\n│   │   ├── openai.mjs         # GPT\n│   │   ├── gemini.mjs         # Gemini\n│   │   ├── grok.mjs           # Grok\n│   │   ├── openrouter.mjs     # OpenRouter (Unified API)\n│   │   ├── codex.mjs          # Codex (ChatGPT subscription)\n│   │   ├── minimax.mjs        # MiniMax (M2.5, 204K context)\n│   │   ├── mistral.mjs        # Mistral AI\n│   │   ├── ideas.mjs          # LLM-powered trade idea generation\n│   │   └── index.mjs          # Factory: createLLMProvider()\n│   ├── delta\u002F                 # Change tracking between sweeps\n│   │   ├── engine.mjs         # Delta computation — semantic dedup, configurable thresholds, severity scoring\n│   │   ├── memory.mjs         # Hot memory (3 runs, atomic writes) + cold storage (daily archives)\n│   │   └── index.mjs          # Re-exports\n│   └── alerts\u002F\n│       ├── telegram.mjs       # Multi-tier alerts (FLASH\u002FPRIORITY\u002FROUTINE) + two-way bot commands\n│       └── discord.mjs        # Discord bot (slash commands, rich embeds) + webhook fallback\n│\n└── runs\u002F                      # Runtime data (gitignored)\n    ├── latest.json            # Most recent sweep output\n    └── memory\u002F                # Delta memory (hot.json + cold\u002FYYYY-MM-DD.json)\n```\n\n### Design Principles\n- **Pure ESM** — every file is `.mjs` with explicit imports\n- **Minimal dependencies** — Express is the only runtime dependency. `discord.js` is optional (for Discord bot). LLM providers use raw `fetch()`, no SDKs.\n- **Parallel execution** — `Promise.allSettled()` fires all 27 sources simultaneously\n- **Graceful degradation** — missing keys produce errors, not crashes. LLM failures don't kill sweeps.\n- **Each source is standalone** — run `node apis\u002Fsources\u002Fgdelt.mjs` to test any source independently\n- **Self-contained dashboard** — the HTML file works with or without the server\n\n---\n\n## Data Sources (27)\n\n### Tier 1: Core OSINT & Geopolitical (11)\n\n| Source | What It Tracks | Auth |\n|--------|---------------|------|\n| **GDELT** | Global news events, conflict mapping (100+ languages) | None |\n| **OpenSky** | Real-time ADS-B flight tracking across 6 hotspot regions | None |\n| **NASA FIRMS** | Satellite fire\u002Fthermal anomaly detection (3hr latency) | Free key |\n| **Maritime\u002FAIS** | Vessel tracking, dark ships, sanctions evasion | Free key |\n| **Safecast** | Citizen-science radiation monitoring near 6 nuclear sites | None |\n| **ACLED** | Armed conflict events: battles, explosions, protests | Free (OAuth2) |\n| **ReliefWeb** | UN humanitarian crisis tracking | None |\n| **WHO** | Disease outbreaks and health emergencies | None |\n| **OFAC** | US Treasury sanctions (SDN list) | None |\n| **OpenSanctions** | Aggregated global sanctions (30+ sources) | Partial |\n| **ADS-B Exchange** | Unfiltered flight tracking including military | Paid |\n\n### Tier 2: Economic & Financial (7)\n\n| Source | What It Tracks | Auth |\n|--------|---------------|------|\n| **FRED** | 22 key indicators: yield curve, CPI, VIX, fed funds, M2 | Free key |\n| **US Treasury** | National debt, yields, fiscal data | None |\n| **BLS** | CPI, unemployment, nonfarm payrolls, PPI | None |\n| **EIA** | WTI\u002FBrent crude, natural gas, inventories | Free key |\n| **GSCPI** | NY Fed Global Supply Chain Pressure Index | None |\n| **USAspending** | Federal spending and defense contracts | None |\n| **UN Comtrade** | Strategic commodity trade flows between major powers | None |\n\n### Tier 3: Weather, Environment, Tech, Social, SIGINT (7)\n\n| Source | What It Tracks | Auth |\n|--------|---------------|------|\n| **NOAA\u002FNWS** | Active US weather alerts | None |\n| **EPA RadNet** | US government radiation monitoring | None |\n| **USPTO Patents** | Patent filings in 7 strategic tech areas | None |\n| **Bluesky** | Social sentiment on geopolitical\u002Fmarket topics | None |\n| **Reddit** | Social sentiment from key subreddits | OAuth |\n| **Telegram** | 17 curated OSINT\u002Fconflict\u002Ffinance channels (web scraping, expandable via config) | None |\n| **KiwiSDR** | Global HF radio receiver network (~600 receivers) | None |\n\n### Tier 4: Space & Satellites (1)\n\n| Source | What It Tracks | Auth |\n|--------|---------------|------|\n| **CelesTrak** | Satellite launches, ISS tracking, military constellations, Starlink\u002FOneWeb counts | None |\n\n### Tier 5: Live Market Data (1)\n\n| Source | What It Tracks | Auth |\n|--------|---------------|------|\n| **Yahoo Finance** | Real-time prices: SPY, QQQ, BTC, Gold, WTI, VIX + 9 more | None |\n\n---\n\n## npm Scripts\n\n| Script | Command | Description |\n|--------|---------|-------------|\n| `npm run dev` | `node --trace-warnings server.mjs` | Start dashboard with auto-refresh |\n| `npm run sweep` | `node apis\u002Fbriefing.mjs` | Run a single sweep, output JSON to stdout |\n| `npm run inject` | `node dashboard\u002Finject.mjs` | Inject latest data into static HTML |\n| `npm run brief:save` | `node apis\u002Fsave-briefing.mjs` | Run sweep + save timestamped JSON |\n| `npm run diag` | `node diag.mjs` | Run diagnostics (Node version, imports, port check) |\n\n---\n\n## Configuration\n\nAll settings are in `.env` with sensible defaults:\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `PORT` | `3117` | Dashboard server port |\n| `REFRESH_INTERVAL_MINUTES` | `15` | Auto-refresh interval |\n| `LLM_PROVIDER` | disabled | `anthropic`, `openai`, `gemini`, `codex`, `openrouter`, `minimax`, `mistral`, or `grok` |\n| `LLM_API_KEY` | — | API key (not needed for codex) |\n| `LLM_MODEL` | per-provider default | Override model selection |\n| `TELEGRAM_BOT_TOKEN` | disabled | For Telegram alerts + bot commands |\n| `TELEGRAM_CHAT_ID` | — | Your Telegram chat ID |\n| `TELEGRAM_CHANNELS` | — | Extra channel IDs to monitor (comma-separated) |\n| `TELEGRAM_POLL_INTERVAL` | `5000` | Bot command polling interval (ms) |\n| `DISCORD_BOT_TOKEN` | disabled | For Discord alerts + slash commands |\n| `DISCORD_CHANNEL_ID` | — | Discord channel for alerts |\n| `DISCORD_GUILD_ID` | — | Server ID (instant slash command registration) |\n| `DISCORD_WEBHOOK_URL` | — | Webhook URL (alert-only fallback, no bot needed) |\n\nDelta engine thresholds (how sensitive the system is to changes between sweeps) can be customized in `crucix.config.mjs` under the `delta.thresholds` section. The defaults are tuned to filter out noise while catching meaningful moves.\n\n---\n\n## API Endpoints\n\nWhen running `npm run dev`:\n\n| Endpoint | Description |\n|----------|-------------|\n| `GET \u002F` | Jarvis HUD dashboard |\n| `GET \u002Fapi\u002Fdata` | Current synthesized intelligence data (JSON) |\n| `GET \u002Fapi\u002Fhealth` | Server status, uptime, source count, LLM status |\n| `GET \u002Fevents` | SSE stream for live push updates |\n\n---\n\n## Troubleshooting\n\n### `npm run dev` exits silently (no output, no error)\n\nThis is a known issue where npm's script runner can swallow errors, particularly on Windows PowerShell. Try these in order:\n\n**1. Run Node directly (bypasses npm):**\n```bash\nnode --trace-warnings server.mjs\n```\nThis is functionally identical to `npm run dev` but gives you full error output.\n\n**2. Run the diagnostic script:**\n```bash\nnode diag.mjs\n```\nThis tests every import one by one, checks your Node.js version, and verifies port 3117 is available. It will tell you exactly what's failing.\n\n**3. Check if port 3117 is already in use:**\n\nA previous Crucix instance may still be running in the background.\n\n```powershell\n# Windows PowerShell\nnetstat -ano | findstr 3117\ntaskkill \u002FF \u002FPID \u003Cthe_PID_from_above>\n\n# Or kill all Node processes\ntaskkill \u002FF \u002FIM node.exe\n```\n\n```bash\n# macOS \u002F Linux\nlsof -ti:3117 | xargs kill\n```\n\nThen try starting again. You can also change the port by setting `PORT=3118` in your `.env` file.\n\n**4. Check Node.js version:**\n```bash\nnode --version\n```\nCrucix requires Node.js 22 or later. If you have an older version, download the latest LTS from [nodejs.org](https:\u002F\u002Fnodejs.org\u002F).\n\n### Dashboard shows empty panels after first start\n\nThis is normal — the first sweep takes 30–60 seconds to query all 27 sources. The dashboard will populate automatically once the sweep completes. Check the terminal for sweep progress logs.\n\n### Some sources show errors\n\nExpected behavior. Sources that require API keys will return structured errors if the key isn't set. The rest of the sweep continues normally. Check the Source Integrity section in the dashboard (or the server logs) to see which sources failed and why. The 3 most impactful free keys to add are `FRED_API_KEY`, `FIRMS_MAP_KEY`, and `EIA_API_KEY`.\n\nOpenSky can also return `HTTP 429` when its public hotspots are queried too aggressively. Crucix does not try to evade that limit. Instead, it surfaces the throttle\u002Ferror in source health and preserves the most recent non-empty air traffic snapshot from `runs\u002F` so the dashboard flight layer does not suddenly go blank on a throttled sweep.\n\n### Telegram bot not responding to commands\n\nMake sure both `TELEGRAM_BOT_TOKEN` and `TELEGRAM_CHAT_ID` are set in `.env`. The bot only responds to messages from the configured chat ID (security measure). You should see `[Crucix] Telegram alerts enabled` and `[Crucix] Bot command polling started` in the server logs on startup. If not, double-check your token with `curl https:\u002F\u002Fapi.telegram.org\u002Fbot\u003CYOUR_TOKEN>\u002FgetMe`.\n\n### Discord bot not responding to slash commands\n\nCheck these in order:\n1. Make sure `DISCORD_BOT_TOKEN` and `DISCORD_CHANNEL_ID` are set in `.env`\n2. Verify `discord.js` is installed: `npm ls discord.js`. If missing, run `npm install discord.js`\n3. If slash commands don't appear, set `DISCORD_GUILD_ID` — without it, global commands can take up to 1 hour to propagate. Guild-specific commands register instantly\n4. Confirm the bot was invited with `bot` + `applications.commands` scopes and has `Send Messages` + `Embed Links` permissions in the target channel\n5. Check server logs for `[Discord] Bot logged in as ...` on startup. If you see `[Discord] discord.js not installed`, install it and restart\n6. **Webhook-only fallback:** If you just want alerts without slash commands, set `DISCORD_WEBHOOK_URL` instead of the bot token. No `discord.js` needed.\n\n---\n\n## Screenshots\n\nThe `docs\u002F` folder contains dashboard screenshots referenced by this README:\n\n| File | Description |\n|------|-------------|\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_fa9cc960c245.png` | Full dashboard — hero image at the top of this README |\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_57f7da3f506b.png` | Cinematic boot sequence animation |\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_ff600ea15d7b.png` | D3 world map with marker types and flight arcs |\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_acd305d6ff32.png` | 3D WebGL globe view with atmosphere glow and markers |\n\nTo update them: run the dashboard, wait for a sweep to complete, then use your browser's DevTools (`F12` → `Ctrl+Shift+P` → \"Capture full size screenshot\") or a tool like [LICEcap](https:\u002F\u002Fwww.cockos.com\u002Flicecap\u002F) for GIFs.\n\n---\n\n## Contributing\n\nFound a bug? Want to add a 28th source? PRs welcome. Each source is a standalone module in `apis\u002Fsources\u002F` — just export a `briefing()` function that returns structured data and add it to the orchestrator in `apis\u002Fbriefing.mjs`.\n\nIf you find this useful, a star helps others find it too.\n\nFor contribution guidelines, review expectations, and source-add rules, see `CONTRIBUTING.md`. For security reports, see `SECURITY.md`.\n\n## Contact\n\nFor partnerships, integrations, or other non-issue inquiries, you can reach me at `celesthioailabs@gmail.com`.\n\nFor bugs and feature requests, please use GitHub Issues so discussion stays visible and actionable.\n\n---\n\n## Star History\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=calesthio%2FCrucix&type=date&legend=top-left\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fimage?repos=calesthio\u002FCrucix&type=date&theme=dark&legend=top-left\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_8c3e5f9fc483.png\" \u002F>\n    \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_8c3e5f9fc483.png\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n---\n\n## License\n\nAGPL-3.0\n","\u003Cdiv align=\"center\">\n\n# Crucix\n\n**您自己的智能终端。27个数据源。一条命令。无需云端。**\n\n## [访问在线站点：crucix.live](https:\u002F\u002Fwww.crucix.live\u002F)\n\n[![在线网站](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flive-crucix.live-00d4ff?style=for-the-badge)](https:\u002F\u002Fwww.crucix.live\u002F)\n[![开放演示](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fopen-live%20dashboard-0b1220?style=for-the-badge&logo=googlechrome&logoColor=white)](https:\u002F\u002Fwww.crucix.live\u002F)\n\n[![Node.js 22+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-22%2B-brightgreen)](#quick-start)\n[![许可证：AGPL v3](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-AGPLv3-blue.svg)](LICENSE)\n[![依赖项](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdependencies-1%20(express)-orange)](#architecture)\n[![数据源](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOSINT%20sources-27-cyan)](#data-sources-27)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdocker-ready-blue?logo=docker)](#docker)\n\n**进入信号网络**\n\n[![Signal Wire](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSignal%20Wire-%40crucixmonitor-111111?style=for-the-badge&logo=x&logoColor=white)](https:\u002F\u002Fx.com\u002Fcrucixmonitor)\n[![作战室](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOps%20Room-Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002FChVy7SF4)\n\n![Crucix仪表盘](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_fa9cc960c245.png)\n\n\u003Cdetails>\n\u003Csummary>更多截图\u003C\u002Fsummary>\n\n| 启动序列 | 世界地图 |\n|:---:|:---:|\n| ![启动](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_57f7da3f506b.png) | ![地图](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_ff600ea15d7b.png) |\n\n| 3D地球视图 |\n|:---:|\n| ![地球](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_acd305d6ff32.png) |\n\n\u003C\u002Fdetails>\n\n\u003C\u002Fdiv>\n\n> **在线网站:** [https:\u002F\u002Fwww.crucix.live\u002F](https:\u002F\u002Fwww.crucix.live\u002F)\n> 先探索公开演示，再克隆仓库以在本地运行Crucix。\n\nCrucix从27个开源情报源并行、每15分钟拉取卫星火灾探测、航班跟踪、辐射监测、卫星星座跟踪、经济指标、实时市场价格、冲突数据、制裁名单以及社会情绪等信息，并将所有内容渲染到一个独立的Jarvis风格仪表盘上。\n\n若接入大型语言模型，它便成为**双向情报助手**——当有重要变化时向Telegram和Discord推送多级警报，响应手机上的`\u002Fbrief`和`\u002Fsweep`等指令，并基于真实的跨领域数据生成可操作的交易建议。这就像一位属于您的分析师，在您熟睡时时刻关注着全球动态。\n\n请先在[https:\u002F\u002Fwww.crucix.live\u002F](https:\u002F\u002Fwww.crucix.live\u002F)体验在线演示，待您准备好完整的本地环境后再克隆仓库。\n\n无需云端、无需遥测、无需订阅。只需运行`node server.mjs`即可启动。\n\n## 代币\u002F资产警告\n\n> [!WARNING]\n> **Crucix尚未推出任何官方代币、币种、NFT、空投、预售或其他基于区块链的资产。**\n> 任何使用Crucix名称、标志或品牌标识的代币或数字资产均与Crucix无关，也未得到Crucix的认可。\n> 请勿根据第三方帖子、私信或网站购买、推广、连接钱包领取、签署交易或转账资金。\n\n---\n\n## 为何存在\n\n世界上大部分实时情报——卫星图像、辐射水平、冲突事件、经济指标、航班跟踪、海上活动——都是公开可用的。只是这些信息分散在数十个政府API、研究机构和开放数据源中，没有人有时间逐一查看。\n\nCrucix将这一切汇聚到一处。既不在付费墙后，也不被锁定在企业级平台中，更不需要安全许可。只是开放数据，在您的设备上聚合并交叉关联，每15分钟更新一次。\n\n它专为那些希望了解当前世界真实状况的人而打造——研究人员、记者、交易员、开源情报分析师，或是仅仅相信信息获取不应受预算限制的好奇人士。\n\n---\n\n## 快速开始\n\n```bash\n# 1. 克隆仓库\ngit clone https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix.git\ncd Crucix\n\n# 2. 安装依赖（仅需Express）\nnpm install\n\n# 3. 复制环境模板并添加您的API密钥（见下文）\ncp .env.example .env\n\n# 4. 启动仪表盘\nnpm run dev\n```\n\n> **如果`npm run dev`静默失败**（无输出直接退出），请改用Node直接运行：\n> ```bash\n> node --trace-warnings server.mjs\n> ```\n> 这样可以绕过npm的脚本运行器，因为它在某些系统上可能会吞掉错误（尤其是在Windows的PowerShell中）。您也可以运行`node diag.mjs`来诊断具体问题——它会检查您的Node版本、逐个测试每个模块的导入，并验证端口是否可用。更多信息请参阅[故障排除](#troubleshooting)。\n\n仪表盘会自动在`http:\u002F\u002Flocalhost:3117`打开，并立即开始首次情报扫描。首次扫描会并行查询所有27个源，通常需要30–60秒——在此期间仪表盘会显示为空，直到扫描完成并推送第一条数据更新。之后，它将通过SSE（服务器发送事件）每15分钟自动刷新，无需手动刷新页面。\n\n**要求:** Node.js 22+（使用原生`fetch`、顶级`await`、ESM）\n\n### Docker\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix.git\ncd Crucix\ncp .env.example .env    # 添加您的API密钥\ndocker compose up -d\n```\n\n仪表盘地址为`http:\u002F\u002Flocalhost:3117`。扫描数据通过卷挂载保存在`.\u002Fruns\u002F`目录中。包含健康检查端点。\n\n---\n\n## 您将获得\n\n### 实时仪表盘\n一个自包含的Jarvis风格HUD，具备：\n- **3D WebGL地球仪**（Globe.gl），带有大气辉光、星空背景和流畅旋转效果——还可切换至经典平面地图\n- **9种标记类型**，覆盖两种视图：火灾探测、航空交通、辐射站点、海上咽喉要道、SDR接收器、开源情报事件、健康警报、地理定位新闻、冲突事件\n- **动画化的3D飞行走廊弧线**，连接航空热点与全球枢纽\n- **区域过滤器**（全球、美洲、欧洲、中东、亚太、非洲）——可旋转地球仪或缩放平面地图\n- **实时市场数据**——指数、加密货币、能源、大宗商品，通过Yahoo Finance获取（无需API密钥）\n- **风险指标**——VIX、高收益利差、供应链压力指数\n- **OSINT信息流**——来自17个Telegram情报频道的英文帖子（可扩展）\n- **新闻滚动条**——整合RSS + GDELT头条 + Telegram帖子，自动滚动\n- **扫描增量**——实时面板，显示自上次扫描以来的变化（新信号、升级、降级及其严重程度）\n- **跨源信号**——卫星、经济、冲突和社会领域的相关情报\n- **核监控**——来自Safecast和EPA RadNet的实时辐射读数\n- **太空监控**——CelesTrak卫星跟踪：近期发射、国际空间站、军用星座、Starlink\u002FOneWeb数量\n- **可利用的想法**——由AI生成的交易建议（结合LLM）或基于信号的相关建议（无需LLM）\n\n### 性能模式\n顶部栏中的“VISUALS FULL”\u002F“VISUALS LITE”按钮仅改变渲染行为，并不会移除数据源或减少扫描覆盖范围。\n\n切换到“VISUALS LITE”时，仪表盘会：\n- 禁用装饰性背景效果，如径向\u002F网格叠加层和扫描线；\n- 移除面板和叠加层上的高开销模糊\u002F背景滤镜效果；\n- 停止非必要的动画，例如标志环闪烁、冲突环以及走廊流动效果；\n- 禁用地球仪自动旋转，并关闭飞行轨迹的动画虚线；\n- 将水平新闻滚动条和OSINT信息流转换为静态可滚动列表，而非持续动画的跑马灯。\n\n移动端特定行为：\n- 在移动端，“VISUALS LITE”还会在当前显示地球仪视图时，强制将仪表盘切换至**平面地图模式**；\n- 未来在启用低性能模式的情况下，移动端加载时将继续以平面地图模式启动。\n\n该偏好设置会保存在浏览器的本地存储中，因此界面会记住您上次的选择。\n\n### 自动刷新\n服务器每15分钟（可配置）执行一次扫描周期。每个周期包括以下步骤：\n1. 并发查询所有27个数据源（约30秒）；\n2. 将原始数据整合为仪表盘格式；\n3. 计算与上一次运行的差异（哪些内容发生变化、升级或降级），这些信息会在仪表盘的“扫描差异”面板中显示；\n4. 生成LLM交易建议（若已配置）；\n5. 评估突发新闻警报——采用多层级（紧急\u002F优先\u002F常规）机制，并进行语义去重处理。如果已配置，则通过Telegram和\u002F或Discord发送警报。当LLM可用时，使用LLM评估；若LLM不可用，则回退到基于规则的警报系统；\n6. 通过SSE将更新推送至所有已连接的浏览器。\n\n### Telegram机器人（双向）\nCrucix同时也是一个交互式的Telegram机器人。除了发送警报外，它还能直接响应您的聊天指令：\n\n| 命令 | 功能 |\n|------|------|\n| `\u002Fstatus` | 显示系统健康状况、上次扫描时间、数据源状态及LLM状态 |\n| `\u002Fsweep` | 手动触发一次扫描周期 |\n| `\u002Fbrief` | 提供最新情报的简洁文本摘要（方向、关键指标、顶级OSINT） |\n| `\u002Fportfolio` | 显示投资组合状态（若已连接Alpaca） |\n| `\u002Falerts` | 最近的警报历史及层级 |\n| `\u002Fmute` \u002F `\u002Fmute 2h` | 静音警报1小时（或自定义时长） |\n| `\u002Funmute` | 恢复警报 |\n| `\u002Fhelp` | 显示所有可用命令 |\n\n这需要在`.env`文件中配置`TELEGRAM_BOT_TOKEN`和`TELEGRAM_CHAT_ID`。机器人每5秒轮询一次消息（可通过`TELEGRAM_POLL_INTERVAL`配置轮询间隔）。\n\n### Discord机器人（双向）\nCrucix还支持作为功能齐全的Discord机器人，具备斜杠命令和富嵌入式警报功能。其功能与Telegram机器人相同，但采用Discord原生格式。\n\n| 命令 | 功能 |\n|------|------|\n| `\u002Fstatus` | 显示系统健康状况、上次扫描时间、数据源状态及LLM状态 |\n| `\u002Fsweep` | 手动触发一次扫描周期 |\n| `\u002Fbrief` | 提供最新情报的简洁文本摘要 |\n| `\u002Fportfolio` | 显示投资组合状态（若已连接Alpaca） |\n\n警报以富嵌入式消息形式发送，带有颜色编码的侧边栏：红色代表紧急，黄色代表优先，蓝色代表常规。每条嵌入消息包含信号详情、置信度评分以及跨领域关联信息。\n\n**设置要求：** 需要配置`DISCORD_BOT_TOKEN`、`DISCORD_CHANNEL_ID`，以及可选的`DISCORD_GUILD_ID`以便即时注册斜杠命令。详细信息请参阅[API密钥设置]部分。\n\n**Webhook备用方案：** 如果您不想运行完整的机器人，可以设置`DISCORD_WEBHOOK_URL`。这样即可实现单向警报（无斜杠命令），且无需任何依赖——不需要`discord.js`。\n\n**可选依赖：** 完整版机器人需要`discord.js`。您可以通过`npm install discord.js`进行安装。若未安装，Crucix会自动回退到仅使用Webhook的模式。\n\n### 可选的LLM层\n您可以连接8家LLM提供商之一，以获得更强大的分析能力：\n- **AI交易建议**——量化分析师会根据具体数据生成5–8条可操作的交易建议；\n- **更智能的警报评估**——LLM会将信号分类为紧急\u002F优先\u002F常规三个级别，并结合跨领域关联和置信度评分；\n- 支持的提供商包括：Anthropic Claude、OpenAI、Google Gemini、OpenRouter（统一API）、OpenAI Codex（ChatGPT订阅用户）、MiniMax、Mistral、Grok；\n- 好的回退机制——当LLM不可用时，基于规则的引擎将接管警报评估工作。LLM故障绝不会导致扫描周期崩溃。\n\n---\n\n## API密钥设置\n\n将项目根目录下的`.env.example`复制为`.env`：\n\n```bash\ncp .env.example .env\n```\n\n### 为获得最佳效果所需（全部免费）\n\n| 键 | 来源 | 获取方式 |\n|----|--------|------------|\n| `FRED_API_KEY` | 联邦储备经济数据 | [fred.stlouisfed.org](https:\u002F\u002Ffred.stlouisfed.org\u002Fdocs\u002Fapi\u002Fapi_key.html) — 即刻获取，免费 |\n| `FIRMS_MAP_KEY` | NASA FIRMS（卫星火灾数据） | [firms.modaps.eosdis.nasa.gov](https:\u002F\u002Ffirms.modaps.eosdis.nasa.gov\u002Fapi\u002Farea\u002F) — 即刻获取，免费 |\n| `EIA_API_KEY` | 美国能源信息管理局 | [api.eia.gov](https:\u002F\u002Fwww.eia.gov\u002Fopendata\u002Fregister.php) — 即刻获取，免费 |\n\n以上三项能够解锁最有价值的经济和卫星数据。每项注册大约需要60秒。\n\n### 可选（用于启用更多数据源）\n\n| 键 | 来源 | 获取方式 |\n|----|--------|------------|\n| `ACLED_EMAIL` + `ACLED_PASSWORD` | 武装冲突事件数据 | [acleddata.com\u002Fregister](https:\u002F\u002Facleddata.com\u002Fregister\u002F) — 免费，OAuth2认证 |\n| `AISSTREAM_API_KEY` | 海事AIS船舶追踪 | [aisstream.io](https:\u002F\u002Faisstream.io\u002F) — 免费 |\n| `ADSB_API_KEY` | 未过滤的航班追踪 | [RapidAPI](https:\u002F\u002Frapidapi.com\u002Fadsbexchange\u002Fapi\u002Fadsbexchange-com1) — 大约10美元\u002F月 |\n\n### LLM提供商（可选，用于AI增强型建议）\n\n将`LLM_PROVIDER`设置为以下选项之一：anthropic、openai、gemini、codex、openrouter、minimax、mistral、grok。\n\n| 提供商 | 所需密钥 | 默认模型 |\n|----------|-------------|---------------|\n| `anthropic` | `LLM_API_KEY` | claude-sonnet-4-6 |\n| `openai` | `LLM_API_KEY` | gpt-5.4 |\n| `gemini` | `LLM_API_KEY` | gemini-3.1-pro |\n| `openrouter` | `LLM_API_KEY` | openrouter\u002Fauto |\n| `codex` | 无需密钥（使用`~\u002F.codex\u002Fauth.json`） | gpt-5.3-codex |\n| `minimax` | `LLM_API_KEY` | MiniMax-M2.5 |\n| `mistral` | `LLM_API_KEY` | mistral-large-latest |\n| `grok` | `LLM_API_KEY` | grok-4-latest |\n\n对于Codex，您需要运行`npx @openai\u002Fcodex login`来通过您的ChatGPT订阅进行身份验证。\n\n### Telegram机器人+警报（可选）\n\n| 键 | 获取方式 |\n|-----|------------|\n| `TELEGRAM_BOT_TOKEN` | 通过Telegram上的[@BotFather](https:\u002F\u002Ft.me\u002FBotFather)创建 |\n| `TELEGRAM_CHAT_ID` | 通过[@userinfobot](https:\u002F\u002Ft.me\u002Fuserinfobot)获取 |\n| `TELEGRAM_CHANNELS` | *(可选)* 除内置的17个频道外，额外监控的频道ID，用逗号分隔 |\n| `TELEGRAM_POLL_INTERVAL` | *(可选)* 机器人命令轮询间隔，单位为毫秒（默认值：5000） |\n\n### Discord 机器人 + 警报（可选）\n\n| 键 | 获取方式 |\n|-----|------------|\n| `DISCORD_BOT_TOKEN` | 在 [Discord 开发者门户](https:\u002F\u002Fdiscord.com\u002Fdevelopers\u002Fapplications) → 机器人 → 令牌 中创建 |\n| `DISCORD_CHANNEL_ID` | 在 Discord 中右键点击频道（启用开发者模式）→ 复制频道 ID |\n| `DISCORD_GUILD_ID` | *(可选)* 右键点击服务器 → 复制服务器 ID。启用即时 slash 命令注册（否则全局命令可能需要长达 1 小时）|\n| `DISCORD_WEBHOOK_URL` | *(可选)* 频道设置 → 集成 → Webhook → 新建 Webhook → 复制 URL。用于仅警报模式，无需机器人 |\n\n**Discord 机器人设置：**\n1. 前往 [Discord 开发者门户](https:\u002F\u002Fdiscord.com\u002Fdevelopers\u002Fapplications)，创建一个新的应用\n2. 进入 **机器人** → 点击 **重置令牌** → 将令牌复制到 `DISCORD_BOT_TOKEN`\n3. 在 **特权网关意图** 中，启用 **消息内容意图**\n4. 进入 **OAuth2** → **URL 生成器** → 选择 `bot` 和 `applications.commands` 权限范围 → 选择 `发送消息` 和 `嵌入链接` 权限\n5. 复制生成的 URL，在浏览器中打开以将机器人邀请到您的服务器\n6. 安装依赖：`npm install discord.js`\n\n警报功能在 Telegram 和 Discord 上均可使用，无论是否配备 LLM。配置了 LLM 后，信号评估会更加丰富且更具上下文感知能力。如果没有 LLM，则由确定性规则引擎根据严重性、跨领域相关性以及信号数量来评估信号。\n\n### 无需任何密钥\n\nCrucix 即使不使用任何 API 密钥也能正常运行。超过 18 个数据源完全不需要身份验证。而需要密钥的数据源则会返回结构化错误，其余部分的扫描仍会正常进行。\n\n---\n\n## 架构\n\n```\ncrucix\u002F\n├── server.mjs                 # Express 开发服务器（SSE、自动刷新、LLM、机器人命令）\n├── crucix.config.mjs          # 配置文件，支持环境变量覆盖及增量阈值\n├── diag.mjs                   # 诊断脚本 — 如果服务器无法启动则运行\n├── .env.example               # 所有已记录的环境变量\n├── package.json               # 运行时：express | 可选：discord.js\n├── docs\u002F                      # README 的截图\n│\n├── apis\u002F\n│   ├── briefing.mjs           # 主调度器 — 并行运行所有 27 个数据源\n│   ├── save-briefing.mjs      # CLI：保存带时间戳和最新 JSON 文件\n│   ├── BRIEFING_PROMPT.md     # 情报整合协议\n│   ├── BRIEFING_TEMPLATE.md   # 简报输出结构\n│   ├── utils\u002F\n│   │   ├── fetch.mjs          # safeFetch() — 超时、重试、取消、自动解析 JSON\n│   │   └── env.mjs            # .env 加载器（无需 dotenv 依赖）\n│   └── sources\u002F               # 27 个自包含的数据源模块\n│       ├── gdelt.mjs          # 每个模块导出 briefing() → 结构化数据\n│       ├── fred.mjs           # 可独立运行：node apis\u002Fsources\u002Ffred.mjs\n│       ├── space.mjs          # CelesTrak 卫星跟踪\n│       ├── yfinance.mjs       # Yahoo Finance — 免费实时市场数据\n│       └── ...                # 另外 23 个\n│\n├── dashboard\u002F\n│   ├── inject.mjs             # 数据合成 + 独立 HTML 注入\n│   └── public\u002F\n│       └── jarvis.html        # 自包含的 Jarvis HUD\n│\n├── lib\u002F\n│   ├── llm\u002F                   # LLM 抽象层（8 家提供商，原生 fetch，无 SDK）\n│   │   ├── provider.mjs       # 基类\n│   │   ├── anthropic.mjs      # Claude\n│   │   ├── openai.mjs         # GPT\n│   │   ├── gemini.mjs         # Gemini\n│   │   ├── grok.mjs           # Grok\n│   │   ├── openrouter.mjs     # OpenRouter（统一 API）\n│   │   ├── codex.mjs          # Codex（ChatGPT 订阅）\n│   │   ├── minimax.mjs        # MiniMax（M2.5，204K 上下文）\n│   │   ├── mistral.mjs        # Mistral AI\n│   │   ├── ideas.mjs          # LLM 驱动的交易想法生成\n│   │   └── index.mjs          # 工厂：createLLMProvider()\n│   ├── delta\u002F                 # 扫描之间的变化追踪\n│   │   ├── engine.mjs         # 增量计算 — 语义去重、可配置阈值、严重性评分\n│   │   ├── memory.mjs         # 热存储（3 次运行，原子写入）+ 冷存储（每日归档）\n│   │   └── index.mjs          # 重新导出\n│   └── alerts\u002F\n│       ├── telegram.mjs       # 多层级警报（紧急\u002F优先\u002F常规）+ 双向机器人命令\n│       └── discord.mjs        # Discord 机器人（slash 命令、丰富嵌入）+ webhook 备用\n│\n└── runs\u002F                      # 运行时数据（被 .gitignore 忽略）\n    ├── latest.json            # 最新扫描输出\n    └── memory\u002F                # 增量内存（hot.json + cold\u002FYYYY-MM-DD.json）\n```\n\n### 设计原则\n- **纯 ESM** — 每个文件都是 `.mjs`，并使用显式导入\n- **最小依赖** — Express 是唯一的运行时依赖。`discord.js` 是可选的（用于 Discord 机器人）。LLM 提供商使用原生 `fetch()`，无需 SDK。\n- **并行执行** — 使用 `Promise.allSettled()` 同时触发所有 27 个数据源\n- **优雅降级** — 缺少密钥只会产生错误，不会导致崩溃。LLM 故障也不会中断整个扫描过程。\n- **每个数据源独立运行** — 可以通过运行 `node apis\u002Fsources\u002Fgdelt.mjs` 来单独测试任意一个数据源\n- **自包含仪表盘** — HTML 文件无论是否有服务器都能正常工作\n\n---\n\n## 数据源（27 个）\n\n### 第一层：核心 OSINT 和地缘政治（11 个）\n\n| 数据源 | 追踪内容 | 身份验证 |\n|--------|-----------|----------|\n| **GDELT** | 全球新闻事件、冲突地图（100 多种语言）| 无 |\n| **OpenSky** | 实时 ADS-B 飞行跟踪，覆盖 6 个热点地区 | 无 |\n| **NASA FIRMS** | 卫星火灾\u002F热异常检测（3 小时延迟）| 免费密钥 |\n| **Maritime\u002FAIS** | 船舶跟踪、暗影船只、制裁规避 | 免费密钥 |\n| **Safecast** | 公民科学辐射监测，靠近 6 个核设施 | 无 |\n| **ACLED** | 武装冲突事件：战斗、爆炸、抗议活动 | 免费（OAuth2）|\n| **ReliefWeb** | 联合国人道主义危机追踪 | 无 |\n| **WHO** | 疾病爆发和卫生紧急情况 | 无 |\n| **OFAC** | 美国财政部制裁名单（SDN 名单）| 无 |\n| **OpenSanctions** | 全球制裁汇总（30 多个来源）| 部分需要 |\n| **ADS-B Exchange** | 未过滤的飞行跟踪，包括军用航班 | 收费 |\n\n### 第二层：经济与金融（7 个）\n\n| 数据源 | 追踪内容 | 身份验证 |\n|--------|-----------|----------|\n| **FRED** | 22 个关键指标：收益率曲线、CPI、VIX、联邦基金利率、M2 | 免费密钥 |\n| **美国财政部** | 国家债务、收益率、财政数据 | 无 |\n| **BLS** | CPI、失业率、非农就业人数、PPI | 无 |\n| **EIA** | WTI\u002FBrent 原油、天然气、库存 | 免费密钥 |\n| **GSCPI** | 纽约联储全球供应链压力指数 | 无 |\n| **USAspending** | 联邦支出和国防合同 | 无 |\n| **UN Comtrade** | 主要大国之间的战略商品贸易流动 | 无 |\n\n### 第三层级：天气、环境、科技、社交、信号情报（7个）\n\n| 来源 | 追踪内容 | 认证方式 |\n|--------|---------------|------|\n| **NOAA\u002FNWS** | 美国实时天气预警 | 无 |\n| **EPA RadNet** | 美国政府辐射监测 | 无 |\n| **USPTO专利** | 7个战略科技领域的专利申请 | 无 |\n| **Bluesky** | 地缘政治\u002F市场话题的社交情绪 | 无 |\n| **Reddit** | 关键子版块的社交情绪 | OAuth |\n| **Telegram** | 17个精选的开源情报\u002F冲突\u002F金融频道（网页抓取，可通过配置扩展） | 无 |\n| **KiwiSDR** | 全球短波无线电接收网络（约600台接收器） | 无 |\n\n### 第四层级：太空与卫星（1个）\n\n| 来源 | 追踪内容 | 认证方式 |\n|--------|---------------|------|\n| **CelesTrak** | 卫星发射、国际空间站跟踪、军事星座、Starlink\u002FOneWeb数量 | 无 |\n\n### 第五层级：实时市场数据（1个）\n\n| 来源 | 追踪内容 | 认证方式 |\n|--------|---------------|------|\n| **Yahoo Finance** | 实时行情：SPY、QQQ、BTC、黄金、WTI、VIX等9种 | 无 |\n\n---\n\n## npm脚本\n\n| 脚本 | 命令 | 描述 |\n|--------|---------|-------------|\n| `npm run dev` | `node --trace-warnings server.mjs` | 启动带自动刷新的仪表盘 |\n| `npm run sweep` | `node apis\u002Fbriefing.mjs` | 执行一次数据采集，将JSON输出到标准输出 |\n| `npm run inject` | `node dashboard\u002Finject.mjs` | 将最新数据注入静态HTML |\n| `npm run brief:save` | `node apis\u002Fsave-briefing.mjs` | 执行数据采集并保存带时间戳的JSON文件 |\n| `npm run diag` | `node diag.mjs` | 运行诊断程序（Node版本、模块导入、端口检查） |\n\n---\n\n## 配置\n\n所有设置均在`.env`文件中，默认值合理：\n\n| 变量 | 默认值 | 描述 |\n|----------|---------|-------------|\n| `PORT` | `3117` | 仪表盘服务器端口 |\n| `REFRESH_INTERVAL_MINUTES` | `15` | 自动刷新间隔 |\n| `LLM_PROVIDER` | 已禁用 | 支持`anthropic`、`openai`、`gemini`、`codex`、`openrouter`、`minimax`、`mistral`或`grok` |\n| `LLM_API_KEY` | — | API密钥（codex无需） |\n| `LLM_MODEL` | 各提供商默认 | 覆盖模型选择 |\n| `TELEGRAM_BOT_TOKEN` | 已禁用 | 用于Telegram提醒及机器人命令 |\n| `TELEGRAM_CHAT_ID` | — | 您的Telegram聊天ID |\n| `TELEGRAM_CHANNELS` | — | 需要监控的额外频道ID（逗号分隔） |\n| `TELEGRAM_POLL_INTERVAL` | `5000` | 机器人命令轮询间隔（毫秒） |\n| `DISCORD_BOT_TOKEN` | 已禁用 | 用于Discord提醒及slash命令 |\n| `DISCORD_CHANNEL_ID` | — | 用于发送提醒的Discord频道 |\n| `DISCORD_GUILD_ID` | — | 服务器ID（可即时注册slash命令） |\n| `DISCORD_WEBHOOK_URL` | — | Webhook URL（仅用于提醒，无需机器人） |\n\nDelta引擎的阈值（系统对两次采集间变化的敏感度）可在`crucix.config.mjs`文件的`delta.thresholds`部分自定义。默认设置旨在过滤噪声，同时捕捉有意义的变化。\n\n---\n\n## API端点\n\n运行`npm run dev`时：\n\n| 端点 | 描述 |\n|----------|-------------|\n| `GET \u002F` | Jarvis HUD仪表盘 |\n| `GET \u002Fapi\u002Fdata` | 当前合成的情报数据（JSON） |\n| `GET \u002Fapi\u002Fhealth` | 服务器状态、运行时间、数据源数量、LLM状态 |\n| `GET \u002Fevents` | SSE流，用于实时推送更新 |\n\n---\n\n## 故障排除\n\n### `npm run dev`静默退出（无输出，无错误）\n\n这是已知问题，npm的脚本运行器可能会吞掉错误，尤其是在Windows PowerShell上。请按以下顺序尝试：\n\n**1. 直接运行Node（绕过npm）：**\n```bash\nnode --trace-warnings server.mjs\n```\n这与`npm run dev`功能相同，但会显示完整的错误信息。\n\n**2. 运行诊断脚本：**\n```bash\nnode diag.mjs\n```\n该脚本会逐一测试每个模块的导入情况，检查Node.js版本，并验证3117端口是否可用。它会明确指出具体失败原因。\n\n**3. 检查3117端口是否已被占用：**\n\n可能是之前的Crucix实例仍在后台运行。\n\n```powershell\n# Windows PowerShell\nnetstat -ano | findstr 3117\ntaskkill \u002FF \u002FPID \u003C上述PID>\n\n# 或者直接终止所有Node进程\ntaskkill \u002FF \u002FIM node.exe\n```\n\n```bash\n# macOS \u002F Linux\nlsof -ti:3117 | xargs kill\n```\n\n然后再次尝试启动。您也可以通过在`.env`文件中设置`PORT=3118`来更改端口。\n\n**4. 检查Node.js版本：**\n```bash\nnode --version\n```\nCrucix需要Node.js 22或更高版本。如果您的版本较旧，请从[https:\u002F\u002Fnodejs.org](https:\u002F\u002Fnodejs.org\u002F)下载最新的LTS版本。\n\n### 仪表盘首次启动后显示为空白面板\n\n这是正常现象——首次采集需要30–60秒来查询所有27个数据源。一旦采集完成，仪表盘会自动填充。请查看终端中的采集进度日志。\n\n### 部分数据源显示错误\n\n这是预期行为。需要API密钥的数据源若未设置密钥，会返回结构化错误。其余数据源的采集仍会正常进行。请查看仪表盘中的“数据源完整性”部分（或服务器日志），以了解哪些数据源失败及其原因。最值得添加的三个免费密钥是`FRED_API_KEY`、`FIRMS_MAP_KEY`和`EIA_API_KEY`。\n\nOpenSky在公共热点被过度查询时也可能返回`HTTP 429`错误。Crucix不会试图规避这一限制，而是会在数据源健康状况中显示限流\u002F错误信息，并保留来自`runs\u002F`目录的最近一次非空航空交通快照，以防止仪表盘飞行图层在被限流的采集中突然变为空白。\n\n### Telegram机器人不响应命令\n\n请确保`.env`文件中已设置`TELEGRAM_BOT_TOKEN`和`TELEGRAM_CHAT_ID`。机器人仅响应来自配置聊天ID的消息（安全措施）。启动时，您应在服务器日志中看到`[Crucix] Telegram提醒已启用`和`[Crucix] 机器人命令轮询已开始`。如果没有，请使用`curl https:\u002F\u002Fapi.telegram.org\u002Fbot\u003CYOUR_TOKEN>\u002FgetMe`再次确认您的令牌。\n\n### Discord机器人不响应slash命令\n\n请按以下步骤检查：\n1. 确保`.env`文件中已设置`DISCORD_BOT_TOKEN`和`DISCORD_CHANNEL_ID`。\n2. 验证`discord.js`是否已安装：`npm ls discord.js`。若缺失，运行`npm install discord.js`。\n3. 如果slash命令未出现，请设置`DISCORD_GUILD_ID`——没有它，全局命令可能需要长达1小时才能生效。而针对特定服务器的命令则会立即生效。\n4. 确认机器人是以包含`bot`和`applications.commands`权限范围受邀加入，并且在目标频道中拥有`发送消息`和`嵌入链接`权限。\n5. 查看服务器日志，确认启动时是否有`[Discord] 机器人已登录为...`。若出现`[Discord] discord.js未安装`，请安装后重启。\n6. **仅使用Webhook作为备用方案：** 如果您只希望接收提醒而不需要slash命令，可以设置`DISCORD_WEBHOOK_URL`，而非机器人令牌。这样就不需要`discord.js`了。\n\n---\n\n## 截图\n\n`docs\u002F` 文件夹包含本 README 引用的仪表板截图：\n\n| 文件 | 描述 |\n|------|-------------|\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_fa9cc960c245.png` | 完整仪表板 — 位于本 README 顶部的英雄图片 |\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_57f7da3f506b.png` | 影视级启动动画 |\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_ff600ea15d7b.png` | 带有标记类型和飞行弧线的 D3 世界地图 |\n| `https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_acd305d6ff32.png` | 带有大气辉光和标记的 3D WebGL 地球仪视图 |\n\n要更新这些截图：运行仪表板，等待一次扫描完成，然后使用浏览器的开发者工具（`F12` → `Ctrl+Shift+P` → “捕获全尺寸截图”）或像 [LICEcap](https:\u002F\u002Fwww.cockos.com\u002Flicecap\u002F) 这样的工具来生成 GIF 动画。\n\n---\n\n## 贡献\n\n发现 bug？想添加第 28 个数据源？欢迎提交 PR。每个数据源都是 `apis\u002Fsources\u002F` 中的一个独立模块——只需导出一个返回结构化数据的 `briefing()` 函数，并将其添加到 `apis\u002Fbriefing.mjs` 中的编排器即可。\n\n如果你觉得这个项目有用，请给它点个赞，这样其他人也能更容易找到它。\n\n有关贡献指南、评审期望以及添加数据源的规则，请参阅 `CONTRIBUTING.md`。如需报告安全问题，请参阅 `SECURITY.md`。\n\n## 联系方式\n\n如需洽谈合作、集成或其他非问题相关的咨询，可通过 `celesthioailabs@gmail.com` 联系我。\n\n对于 bug 和功能请求，请使用 GitHub Issues，以便讨论内容保持可见且可操作。\n\n---\n\n## 星标历史\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F?repos=calesthio%2FCrucix&type=date&legend=top-left\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fimage?repos=calesthio\u002FCrucix&type=date&theme=dark&legend=top-left\" \u002F>\n    \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_8c3e5f9fc483.png\" \u002F>\n    \u003Cimg alt=\"星标历史图表\" src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_readme_8c3e5f9fc483.png\" \u002F>\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n---\n\n## 许可证\n\nAGPL-3.0","# Crucix 快速上手指南\n\nCrucix 是一个本地化的开源情报（OSINT）终端，能够聚合 27 个数据源（包括卫星火灾检测、航班追踪、辐射监测、经济指标、冲突数据等），并在一个自包含的 Jarvis 风格仪表盘中实时展示。它无需云端服务，完全在本地运行。\n\n## 环境准备\n\n### 系统要求\n- **Node.js**: 版本 **22+**（必须，利用原生 `fetch`、顶层 `await` 和 ESM 特性）\n- **操作系统**: Windows, macOS, 或 Linux\n- **网络**: 需要能够访问全球公开数据源（部分数据源可能需要代理）\n\n### 前置依赖\n- Git\n- npm (随 Node.js 安装)\n- (可选) Docker 及 Docker Compose\n\n## 安装步骤\n\n### 方法一：直接使用 Node.js 运行（推荐）\n\n1. **克隆仓库**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix.git\n   cd Crucix\n   ```\n\n2. **安装依赖**\n   ```bash\n   npm install\n   ```\n   > **国内加速提示**: 如果下载缓慢，可配置淘宝镜像源：\n   > ```bash\n   > npm config set registry https:\u002F\u002Fregistry.npmmirror.com\n   > npm install\n   > ```\n\n3. **配置环境变量**\n   复制示例配置文件并填入必要的 API 密钥（详见下文“关键配置”）：\n   ```bash\n   cp .env.example .env\n   ```\n   *编辑 `.env` 文件，至少填入以下免费密钥以获得最佳效果：*\n   - `FRED_API_KEY` (美联储经济数据)\n   - `FIRMS_MAP_KEY` (NASA 卫星火灾数据)\n   - `EIA_API_KEY` (美国能源信息署)\n\n4. **启动服务**\n   ```bash\n   npm run dev\n   ```\n   > **注意**: 如果命令执行后无输出直接退出（特别是在 Windows PowerShell 中），请改用以下命令直接运行以查看错误详情：\n   > ```bash\n   > node --trace-warnings server.mjs\n   > ```\n\n### 方法二：使用 Docker 运行\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix.git\ncd Crucix\ncp .env.example .env    # 编辑此文件添加 API 密钥\ndocker compose up -d\n```\n\n## 基本使用\n\n1. **访问仪表盘**\n   启动成功后，在浏览器打开：\n   ```\n   http:\u002F\u002Flocalhost:3117\n   ```\n\n2. **初始数据加载**\n   - 页面加载后会自动开始第一次全量情报扫描（Sweep）。\n   - 首次扫描并行查询所有 27 个数据源，通常耗时 **30-60 秒**。\n   - 在此期间仪表盘可能显示为空，请耐心等待扫描完成并推送第一批数据。\n\n3. **核心功能体验**\n   - **实时监控**: 查看 3D 地球上的火灾、航班、辐射点及冲突事件标记。\n   - **自动刷新**: 系统每 15 分钟自动执行一次扫描并通过 SSE 推送更新，无需手动刷新页面。\n   - **性能模式**: 点击顶部 `VISUALS LITE` 按钮可关闭特效以提升低配设备或移动端的流畅度。\n   - **消息通知**: 若配置了 Telegram 或 Discord，系统将自动推送分级警报（FLASH\u002FPRIORITY\u002FROUTINE）。\n\n4. **交互式命令 (需配置 Bot)**\n   如果在 `.env` 中配置了 `TELEGRAM_BOT_TOKEN` 或 Discord 相关密钥，您可以在聊天窗口中使用以下命令：\n   - `\u002Fbrief`: 获取最新情报摘要\n   - `\u002Fsweep`: 手动触发一次扫描\n   - `\u002Fstatus`: 查看系统健康状态\n\n> **安全警告**: Crucix 官方未发行任何代币、NFT 或进行空投。切勿相信任何借用 Crucix 名义进行的加密货币推广或钱包连接请求。","一位关注地缘政治风险的对冲基金分析师，需要在夜间实时监控全球突发事件以调整次日交易策略。\n\n### 没有 Crucix 时\n- **数据分散且获取困难**：必须手动轮流刷新卫星火点、航班追踪、辐射监测及制裁名单等二十多个独立的政府或科研网站，耗时费力。\n- **信息滞后严重**：无法做到每 15 分钟自动轮询所有数据源，往往在新闻大规模报道后才知晓冲突或灾害发生，错失最佳反应窗口。\n- **缺乏关联分析**：面对孤立的原始数据，难以快速将“某地突发火灾”与“附近航线改变”或“能源价格波动”进行跨域关联，依赖人工拼凑线索。\n- **夜间监控盲区**：分析师无法 24 小时值守，睡眠期间发生的重大事件只能等到第二天上班处理，导致决策被动。\n\n### 使用 Crucix 后\n- **一站式全景监控**：Crucix 通过单一命令本地聚合 27 个开源情报源，在 Jarvis 风格的仪表盘上实时呈现全球卫星、经济及冲突数据，无需切换网页。\n- **毫秒级主动预警**：系统每 15 分钟并行抓取最新数据，一旦检测到异常变化（如辐射值飙升或特定航班备降），立即通过 Telegram 或 Discord 推送多级警报。\n- **智能交叉洞察**：结合 LLM 后，Crucix 能自动分析跨领域数据，直接生成基于实情的交易建议（如“某港口封锁可能导致航运股波动”），而非罗列枯燥数字。\n- **全天候无人值守**：作为私人智能代理，Crucix 在分析师睡眠时持续“观察”世界，确保任何风吹草动都能被即时捕获并推送到手机端。\n\nCrucix 将原本需要团队轮班完成的多源情报监控工作，转化为个人可掌控的自动化实时决策流，让信息获取不再受限于预算与人力。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fcalesthio_Crucix_fa9cc960.png","calesthio","Calesthio","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fcalesthio_0f2f9d0f.png","Building open source intelligence tools.\r\nCreator of Crucix — crucix.live\r\n",null,"celesthioailabs@gmail.com","calesthioailabs","https:\u002F\u002Fgithub.com\u002Fcalesthio",[81,85,89],{"name":82,"color":83,"percentage":84},"JavaScript","#f1e05a",67.7,{"name":86,"color":87,"percentage":88},"HTML","#e34c26",32.3,{"name":90,"color":91,"percentage":92},"Dockerfile","#384d54",0.1,8764,1393,"2026-04-13T22:04:14","AGPL-3.0","Linux, macOS, Windows","不需要 GPU","未说明",{"notes":101,"python":102,"dependencies":103},"该工具基于 Node.js 运行，无需 Python 环境或 GPU 支持。主要依赖为 Node.js 22+ 版本（利用原生 fetch、顶层 await 和 ESM 模块）。核心后端依赖仅为 Express。若需完整的 Discord 机器人功能（非 Webhook 模式），需额外安装 discord.js。支持通过 Docker 部署。首次运行时会并行查询 27 个数据源，初始扫描约需 30-60 秒。部分高级功能（如 AI 交易建议、智能警报分级）需配置第三方 LLM API 密钥，但非运行必需，缺失时会自动降级为规则引擎。","不需要 Python",[104,105,106],"Node.js 22+","express","discord.js (可选)",[15,13,14],[109,110,111],"ai","intelligence","osint","2026-03-27T02:49:30.150509","2026-04-14T12:30:11.747640",[115,120,125,130,135,140],{"id":116,"question_zh":117,"answer_zh":118,"source_url":119},33015,"配置了 Anthropic API 密钥后，前端仍然显示\"LLM NOT CONFIGURED\"错误，如何解决？","这通常是因为 .env 文件中的注释格式不正确。请检查您的 .env 文件：\n1. 确保其结构与 .env.example 一致。\n2. **关键点**：注释必须独占一行，不能与 API 密钥写在同一行。例如，不要写成 `API_KEY=sk-... # 我的密钥`，而应将注释单独放在上一行或下一行。\n3. 修改后请重启服务生效。","https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix\u002Fissues\u002F7",{"id":121,"question_zh":122,"answer_zh":123,"source_url":124},33016,"Docker 部署后页面显示黑屏，但日志正常且 Telegram 机器人可用，如何修复？","这是一个已知的前端检测问题。请按以下步骤修复：\n1. 找到文件 `dashboard\u002Fpublic\u002Fjarvis.html`。\n2. 定位到第 1053 行左右，删除代码中的 `location.hostname === 'localhost' &&` 部分。\n3. 确保该行代码最终看起来像这样：`const isServer = location.protocol !== 'file:';`\n4. **重要**：修改后必须重新构建 Docker 镜像（rebuild the image），否则更改不会生效。","https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix\u002Fissues\u002F3",{"id":126,"question_zh":127,"answer_zh":128,"source_url":129},33017,"项目是否支持使用 Ollama 运行本地大模型以实现离线和隐私保护？","是的，社区已经贡献并合并了相关功能（PR #38）。现在您可以配置本地 LLM：\n1. 设置环境变量 `LLM_PROVIDER=ollama`。\n2. （可选）通过 `OLLAMA_BASE_URL` 指定地址（默认为 `http:\u002F\u002Flocalhost:11434`）。\n3. 通过 `LLM_MODEL` 指定模型名称（如 `llama3.1:8b` 或 `qwen2.5:14b`）。\n配置完成后无需 API 密钥即可使用本地模型进行推理。","https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix\u002Fissues\u002F30",{"id":131,"question_zh":132,"answer_zh":133,"source_url":134},33018,"如何手动添加新的海事咽喉要道（如直布罗陀海峡）到监控列表中？","您可以通过修改源代码数组来添加新的监控点：\n1. 打开文件 `apis\u002Fsources\u002Fships.mjs`。\n2. 找到 `CHOKEPOINTS` 常量对象。\n3. 在对象中添加新条目，格式如下：\n   `straitOfGibraltar: { label: 'Strait of Gibraltar', lat: 36.0, lon: -5.5, note: 'Atlantic-Med gateway' },`\n   （请根据实际地理位置调整 lat\u002Flon 坐标）。\n4. 保存并重启服务即可在仪表盘上看到新标记。","https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix\u002Fissues\u002F40",{"id":136,"question_zh":137,"answer_zh":138,"source_url":139},33019,"官方是否提供预构建的 Docker 镜像，以避免从源码构建？","是的，项目已支持自动构建和发布 Docker 镜像。\n您可以直接从 GitHub Container Registry (GHCR) 拉取镜像，无需本地构建：\n- 镜像地址：`ghcr.io\u002Fcalesthio\u002Fcrucix`\n- 支持多架构：包括 `linux\u002Famd64` (x86) 和 `linux\u002Farm64` (如 Apple Silicon, Raspberry Pi)。\n- 标签策略：`latest` 对应主分支最新版本，`v*` 标签对应具体的发行版本。","https:\u002F\u002Fgithub.com\u002Fcalesthio\u002FCrucix\u002Fissues\u002F25",{"id":141,"question_zh":142,"answer_zh":143,"source_url":124},33020,"在 Docker 环境中运行时遇到 \"xgd-open not found\" 错误，这会影响服务吗？","通常不会影响核心服务运行。该错误是因为容器内缺少用于在桌面环境打开浏览器的工具 `xgd-open`。\n由于 Crucix 是服务端应用，主要通过浏览器访问 IP:端口 或使用 Telegram 机器人交互，因此容器内不需要图形界面打开能力。只要日志中没有其他严重错误且能正常访问网页或接收 Telegram 消息，可以忽略此警告。",[]]