toshon-jennings/cassandra

GitHub: toshon-jennings/cassandra

一个自托管的全源实时 OSINT 情报平台,聚合全球航空、海事、地震、冲突、加密货币等数十类公开数据,并通过本地 LLM 进行态势预测,同时以 MCP 接口为 AI agent 提供全球实时快照。

Stars: 0 | Forks: 0

# ⬡ CASSANDRA ### 全球情报、侦察与 AI 预测 [![Next.js](https://img.shields.io/badge/Next.js-16-black?style=for-the-badge&logo=next.js)](https://nextjs.org) [![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org) [![MapLibre](https://img.shields.io/badge/MapLibre_GL-GPU_Rendered-396CB2?style=for-the-badge)](https://maplibre.org) [![License](https://img.shields.io/badge/License-MIT-D4AF37?style=for-the-badge)](LICENSE) **一个实时全球情报仪表盘,将实时航班追踪、CCTV 网络、地震监测、冲突地区地图绘制和 24/7 新闻源聚合到一个 GPU 加速的界面中——然后完全在你自己的硬件上预测接下来会发生什么。** **正在构建 agent?** 一次本地调用即可让它获取整个地球的实时状态以及这些预测,并且该接口通过 MCP 作为原生工具暴露出来。 → [面向 agent](#for-agents--give-your-agent-eyes-on-the-planet) 最初 fork 自 [simplifaisoul/osiris](https://github.com/simplifaisoul/osiris) (MIT) 并现已独立开发——请参阅下方的[起源与致谢](#origin--attribution)。与上游项目的在线演示、Patreon 或 Discord 无关。
## 概述 Cassandra 是一个生产级的 OSINT 平台,可提供跨多个情报领域的态势感知——以及 AI 驱动的预测。它基于 Next.js 16 和 MapLibre GL 构建,每一个数据点均通过 WebGL 渲染,即使屏幕上存在数千个并发实体,也能保持 60fps 的性能。 ### 核心功能 | 领域 | 数据点 | 来源 | |--------|------------|---------| | **航空** | 商业、私人、军用、喷气式飞机 | OpenSky Network | | **海事** | 实时 AIS 船只,39 个全球港口,10 个咽喉要道 | aisstream.io(需密钥)+ 静态海军情报 | | **CCTV** | 2,000+ 个摄像头 | TfL, WSDOT, Caltrans, NYC DOT, VicRoads 等 | | **地震** | 实时 M2.5+ | USGS 地震 API | | **火灾** | 活跃热点 | NASA FIRMS | | **新闻** | 24/7 直播流 + 地理定位通讯社报道 | 25+ 个全球广播机构,GDELT | | **天气** | 恶劣天气,美国多边形预警,空气质量 | NASA EONET, NWS, OpenAQ | | **太空** | 太阳能天气,卫星 | NOAA SWPC, N2YO | | **网络** | CVE 威胁,恶意软件与勒索软件受害者,漏洞扫描 | NVD, ransomware.live, 自定义扫描器 | | **冲突** | 13 个活跃战区,乌克兰前线动向 | 静态 OSINT 情报,[DeepStateMap](https://deepstatemap.live) | | **加密货币** | BTC + ETH 钱包追踪,OFAC SDN 匹配 | blockstream.info, Blockscout, OpenSanctions | | **制裁** | 个人/组织/船只 SDN 搜索 | OpenSanctions(US OFAC SDN 镜像) | | **Telegram OSINT** | 来自公共频道的地理解析帖子 | `t.me/s/` 网页预览 | | **网络连通性** | 互联网中断检测(国家级) | [IODA](https://ioda.live) (CAIDA / 佐治亚理工学院研究所) | | **市场** | 股票、大宗商品、加密货币、预测市场赔率 | Yahoo 风格报价,Polymarket | | **人道主义** | 流离失所、粮食安全、疾病爆发、内乱 | UNHCR, WFP HungerMap, WHO, GDELT | | **经济** | GDP 增长、失业率、贫困率 | 世界银行 | | **审查** | 网络干扰测量 | OONI | | **预测** | 使用 4 角色群体进行 24小时/每周/每月/每年预测 | 本地 LLM(见下文) | ## 架构 ``` ┌─────────────────────────────────────────────────┐ │ CASSANDRA CLIENT │ │ ┌──────────┐ ┌──────────┐ ┌───────────────┐ │ │ │ MapLibre │ │ HUD │ │ RECON Toolkit│ │ │ │ GL (GPU) │ │ Panels │ │ Port Scan │ │ │ │ WebGL │ │ Layers │ │ DNS / WHOIS │ │ │ │ Render │ │ Controls │ │ Vuln Scanner │ │ │ └──────────┘ └──────────┘ └───────────────┘ │ ├─────────────────────────────────────────────────┤ │ NEXT.JS API ROUTES │ │ Live layers │ │ /api/flights /api/earthquakes /api/cctv │ │ /api/news /api/fires /api/maritime │ │ /api/gdelt /api/satellites /api/weather │ │ /api/markets /api/ransomware /api/unrest │ │ /api/frontlines /api/displacement … │ │ RECON /api/osint/* /api/scanner │ │ Oracle /api/oracle/* (predict · chat · │ │ scorecard · state/stream SSE) │ │ Agent /api/agent/view /api/agent/events │ │ Worker /api/events /api/watchlists │ ├─────────────────────────────────────────────────┤ │ MCP SERVER (stdio, mcp/) │ │ 7 tools over the Agent + Oracle routes │ ├─────────────────────────────────────────────────┤ │ EXTERNAL DATA SOURCES │ │ OpenSky · USGS · NASA · NOAA · TfL · NVD │ │ GDACS · EONET · FIRMS · N2YO · RSS Feeds │ │ blockstream.info · Blockscout · OpenSanctions │ │ t.me public previews │ └─────────────────────────────────────────────────┘ ``` ## 功能特性 ### AI Oracle —— 不仅是监控,更是预测 Cassandra 将所有实时源整合为一份单一的世界简报,将其交给**本地** LLM,并询问它在四个时间跨度内接下来会发生什么:**24小时、每周、每月和每年**。每一项预测都包含一个概率、基于该快照的一句话推理,以及绘制在地图上的位置。 随后,预测将由一个**四角色群体**重新评判——战略家(地缘政治)、经济学家(市场)、自然主义者(灾害与健康)和怀疑论者(基础概率,即校准制动器)。每位角色通过其自身的视角独立投票,共识将取代基础估计。当他们出现 20 个百分点以上的分歧时,该预测会被标记为 **SPLIT**,因此可见的分歧是一项功能,而不是被平均化的东西。每个角色都可以通过 `SWARM_MODELS` 运行不同的本地模型。 **Brier 记分卡**会跟踪每个角色的校准情况。只有 24 小时预测会自动结算,这是通过对 Cassandra 自身的事件日志进行关键字重叠检查来实现的——这是一种诚实的自洽性启发式方法,刻意*不*声称是外部真实标准。更长跨度的预测将保持待定状态,直到被手动结算。 它可以运行在任何兼容 OpenAI 的 endpoint 上,因此 **[Ollama](https://ollama.com) 和 [LM Studio](https://lmstudio.ai) 均可直接使用,无需更改代码**——只需将 `OSIRIS_ORACLE_BASE_URL` 指向其中任意一个即可。没有任何数据会离开本机。 ### 面向 agent —— 让你的 agent 拥有全球视野 大多数 agent 对真实世界视而不见。将一个 agent 指向 Cassandra,它就能作为原生工具获取地球的实时状态以及上述预测。 **一次调用即可获取所有内容:** ``` curl http://localhost:4000/api/agent/view ``` 这将返回一段文本摘要、按领域分组且带有坐标的每个实时事件、活跃的领域以及当前的预测。 **或者使用过滤器查询事件**,而不是拉取整个世界并自己进行过滤: ``` curl 'http://localhost:4000/api/agent/events?domain=conflict&min_salience=0.7&limit=20' ``` 过滤器包括 `domain`、`source`、`min_salience`、`since` (epoch ms) 和 `limit`。每个响应都带有 `domains_available` 和 `sources_available`,因此 agent 可以发现它能过滤哪些内容,而不是靠猜。 **MCP server** —— 整个接口也通过 stdio 暴露出来,因此 Claude Code、Claude Desktop、Codex 或任何 MCP 客户端都能将 Cassandra 作为原生工具:`world_brief`、`get_events`、`get_predictions`、`ask_oracle`、`get_scorecard`、`predict_now`、`resolve_prediction`。 ``` claude mcp add --scope user cassandra -- node /path/to/cassandra/mcp/server.mjs ``` 任何其他客户端都采用相同的 command/args 对;使用 `CASSANDRA_URL` 将其指向其他地方。该服务器是一个轻量级代理,因此 Cassandra 本身必须处于运行状态。 世界快照会被**缓存并保持预热**——冷构建会分散到所有数据源并花费几秒钟,但后续读取大约在 10ms 内完成,并且在后台刷新时会立即提供过期的缓存。并发调用者共享一次刷新,因此轮询的 agent 不会对上游数据源造成雪崩效应。Oracle 的运行有意绕过缓存,并始终读取实时数据。 ### 后台 worker —— 警报、关注列表、每日简报 在唯一一个实例上设置 `OSIRIS_WORKER=1`,以启用 serverless 模型无法运行的持久循环: - **事件日志** —— 轮询数据源,进行去重,并写入本地 SQLite,为 `/api/events` 提供时序回放源 (`?since=24h&bbox=…`) - **关注列表** —— 通过 `/api/watchlists` 设定关注的地理区域;匹配到新摄入事件时即触发警报 - **每日简报** —— 每天编写一份 AI 情报简报,可通过 [ntfy](https://ntfy.sh) 发送到你的手机 - **世界缓存预热** —— 保持 agent 快照热度 ### 情报图层 - **31 个可切换的数据图层**,带有实时实体计数 - **GPU 加速渲染** —— 所有地图数据均通过 WebGL 渲染,而非 DOM - **渐进式加载** —— 激活图层时按需获取数据 - **视口感知** —— 仅加载可见区域的相关数据 ### RECON 工具包 一个面板内集成了十七款工具。除非另有说明,以下所有工具均**无需密钥**。 **基础设施** - **端口扫描器** —— 带有服务指纹识别的 TCP connect 扫描*(需要扫描器后端)* - **IP 扫描** —— 针对活跃主机的范围扫描*(需要扫描器后端)* - **DNS 查询** —— 完整记录解析 (A, AAAA, MX, NS, TXT, CNAME) - **子域名** —— 子域名枚举 - **WHOIS** —— 域名/IP 注册数据(自动与 OFAC SDN 交叉核对) - **BGP / ASN 路由** —— 通过 [bgpview.io](https://bgpview.io) 进行前缀、ASN 和上游查找 - **SSL/TLS 检查器** —— 证书链分析 - **证书透明度** —— 通过 [crt.sh](https://crt.sh) 获取某个域名的所有已签发证书,这是一种挖掘被遗忘子域名的快捷方式 - **HTTP Headers** —— 安全头检查 - **技术探测** —— 技术栈指纹识别 **威胁与暴露** - **IP 情报** —— 地理定位、ASN、威胁声誉(自动与 OFAC SDN 交叉核对) - **Shodan InternetDB** —— 通过 Shodan 免费的 [InternetDB](https://internetdb.shodan.io) 获取某个 IP 的开放端口、CVE 和标签(无需 Shodan 密钥) - **漏洞扫描器** —— 针对 NVD 数据库进行 CVE 查找 - **威胁源** —— 声誉与 IOC 匹配 - **数据泄露** —— 通过 [XposedOrNot](https://xposedornot.com) 查询电子邮件的泄露暴露情况 **身份与归属** - **GitHub 侦察** —— 账户资料、最近的仓库和活动 - **电话情报** —— 号码验证、运营商和地区 (libphonenumber + 区号地理定位) - **MAC 地址** —— 通过 [macvendors.co](https://macvendors.co) 进行 OUI 供应商查询 - **加密钱包追踪** —— BTC + ETH 查询(余额、交易历史、OFAC SDN 制裁标记) - **OFAC 制裁搜索** —— 查询美国 OFAC SDN 名单中的个人、组织、船只和飞机 ### 实时广播网络 - **来自全球广播机构的 25+ 个实时 24/7 新闻源** - 点击地图上的任何新闻点即可打开实时流 - 来自 NBC、CBS、ABC、Sky News、Al Jazeera、France 24、NHK、WION 等的源 ### Telegram OSINT 图层 - 从无需身份验证的 `t.me/s/` 网页预览中抓取的**公共频道源** —— 无需 Bot API token,无需 MTProto - 默认精选了 5 个频道(英语 + 俄语/乌克兰语战争报道),可通过 `OSIRIS_TELEGRAM_CHANNELS` 覆盖 - 帖子根据多语言地名词典(英语 + 西里尔字母 + 阿拉伯语)进行地理解析,并绘制在地图上 - 点击任何青色圆点即可阅读帖子,并跳转至 Telegram 上的原文 ### 加密钱包情报 - **BTC** 查询通过 [blockstream.info](https://blockstream.info)(Esplora API,无需密钥) - **ETH** 查询通过 [Blockscout](https://github.com/blockscout/blockscout) 的公共 ETH 实例 (`eth.blockscout.com`,无需密钥) - 每次查询都会与 OFAC SDN 制裁地址列表进行交叉核对(镜像自 [`0xB10C/ofac-sanctioned-digital-currency-addresses`](https://github.com/0xB10C/ofac-sanctioned-digital-currency-addresses)) - 受制裁的钱包在 RECON 面板中会显示一个红色的 **SANCTIONED — OFAC SDN** 徽章 ### OFAC SDN 交叉核对 - RECON 工具包中的独立 `SANCTIONS` 标签页 —— 对个人、组织、船只和飞机进行全文搜索 - WHOIS 和 IP 情报路由会自动将注册人/ASN 所有者名称与 SDN 列表进行交叉核对,并显示内联警报 - 数据来源于 [OpenSanctions](https://www.opensanctions.org) (CC-BY 4.0) —— 无需密钥,约 7 MB 在内存中缓存 24 小时 ### 区域档案 右键点击地图上的任意位置,即可将该坐标解析为国家,并提取一份即时档案——通过 [RestCountries](https://restcountries.com) 获取名称、首都、人口、面积和地区,并连同当前在该区域活跃的所有实时信号汇集在一起。 供应链风险图层 将实时灾害(地震、火灾、冲突地区)与静态的 Tier 1/2 供应商坐标进行交叉比对,找出当前处于活跃威胁半径内的供应商。 ### Polybolos SDK —— 接入你自己的实体 外部系统可以将其自身的轨迹合并到通用作战态势图中,而不仅仅是消耗 Cassandra 的数据: - `POST /api/sdk/ingest` —— 推送实体 (`{ source, apiKey, entities[] }`,每个实体包含 `id` 和 `position`) - `GET /api/sdk/stream` —— 标准化实体的 Server-Sent Events 流 数据摄入是**故障关闭**的:在未设置 `SDK_INGEST_KEY` 的情况下,该 endpoint 会返回 `503` 并且不接受任何数据。 ### 冲突地区监控 - **13 个活跃的冲突/紧张地区**,带有严重程度颜色编码的警告标记 - 活跃战争:乌克兰、加沙、苏丹、缅甸、刚果民主共和国、也门 - 高度紧张:叙利亚、黎巴嫩、萨赫勒、索马里、红海 - 风险升高:台湾海峡、朝鲜非军事区 ### 性能优化 - 与初始版本相比,**边缘请求减少了 75%** - 激进的轮询放宽(对稳定数据采用 15-30 分钟的间隔) - 静态数据从内存中提供(新闻源零外部 API 调用) - `layerFetchedRef` 防止重复的 API 请求 ## 快速开始 ``` git clone https://github.com/toshon-jennings/cassandra.git cd cassandra npm install npm run dev ``` 打开 [http://localhost:3000](http://localhost:3000) ### Docker / 自托管 ``` git clone https://github.com/toshon-jennings/cassandra.git cd cassandra cp .env.example .env # optional — configure keys / port docker compose up -d ``` 打开 [http://localhost:3000](http://localhost:3000)。该镜像是一个多阶段 `node:22-alpine` 独立构建版本(约 220 MB,非 root 用户)。compose 文件还 包含 CasaOS 应用元数据 (`x-casaos:`),可实现一键安装在 [CasaOS](https://casaos.io) 上。请参阅 **[DOCKER.md](DOCKER.md)** 获取完整的 Docker、 CasaOS 和 API 密钥指南。 **自定义端口** —— 容器始终监听 `3000`;在 `.env` 中设置 `OSIRIS_PORT` 即可更改发布的主机端口(例如 `OSIRIS_PORT=3005`),而无需 编辑 compose 文件。 ### 环境变量 Cassandra **在没有 API 密钥的情况下也能部分工作** —— 所有核心源都使用公共的、 无需密钥的来源。将 [`.env.example`](.env.example) 复制到 `.env` 并仅设置 你所需的内容: ``` # 已发布的主机端口(容器始终监听 3000)。默认值:3000 OSIRIS_PORT=3000 # RECON scanner 后端。 # SCANNER_KEY 必须与后端的 OSIRIS_KEY 匹配 — 使用以下命令生成:openssl rand -hex 32 SCANNER_URL= SCANNER_KEY= # 可选,用于提高速率限制 / 未来来源(注册链接请参见 DOCKER.md) FIRMS_API_KEY= # NASA FIRMS — firms.modaps.eosdis.nasa.gov/api/map_key/ OPENSKY_CLIENT_ID= # OpenSky OAuth2 (since Mar 2025) — opensky-network.org OPENSKY_CLIENT_SECRET= N2YO_API_KEY= # N2YO satellites — n2yo.com (Profile → API key) AIS_API_KEY= # aisstream.io maritime # ── AI Oracle(任何兼容 OpenAI 的端点;数据不会离开本机) ── OSIRIS_ORACLE_BASE_URL=http://localhost:11434/v1 # Ollama default; LM Studio is :1234/v1 OSIRIS_ORACLE_API_KEY=ollama # LM Studio ignores the value OSIRIS_ORACLE_MODEL=llama3.1 # must be a model you actually have OSIRIS_ORACLE_TIMEOUT_SEC=300 # local CPU inference is slow OSIRIS_ORACLE_PREDICTIONS_PER_HORIZON=3 OSIRIS_ORACLE_SWARM_MAX_TOKENS=3000 # see note below SWARM_MODELS= # e.g. Strategist:llama3.1:70b,Skeptic:qwen3:8b # ── Agent API ── CASSANDRA_WORLD_TTL_SEC=300 # how long the cached world snapshot stays servable # ── 后台工作进程(仅在一个实例上设置) ── OSIRIS_WORKER=1 ALERT_WEBHOOK_URL= # where alerts + the daily briefing get POSTed (ntfy works) # ── Polybolos SDK 数据接入(故障关闭:未设置 = 端点禁用,返回 503) ── SDK_INGEST_KEY= # generate with: openssl rand -hex 32 ``` ## 技术栈 | 层级 | 技术 | |-------|-----------| | 框架 | Next.js 16 (App Router, Turbopack, `output: 'standalone'`) | | 语言 | TypeScript 5 | | 地图引擎 | MapLibre GL JS (WebGL) | | 动画 | Framer Motion | | 图标 | Lucide React | | 样式 | 自定义 CSS 设计系统 | | 持久化 | SQLite (`node:sqlite`) —— 事件日志、oracle 运行、预测分数 | | AI | 任何兼容 OpenAI 的本地 endpoint(Ollama, LM Studio) | | Agent 接口 | Model Context Protocol (stdio) | | 部署 | Docker / CasaOS 自托管,或任何 Node 宿主 | ## 键盘快捷键 | 按键 | 操作 | |-----|--------| | `F` | 全屏 | | `L` | 图层面板 | | `M` | 市场面板 | | `I` | 实体情报面板 | | `C` | 供应链风险面板 | | `S` | 搜索 | | `R` | 重置视图 | | `G` | 切换地球仪/平面投影 | | `Ctrl`/`Cmd` + `F` | 查找 | | `Escape` | 关闭面板 | ## 许可证 MIT —— 详情请参阅 [LICENSE](LICENSE)。 ## 起源与致谢 本项目最初是 [simplifaisoul/osiris](https://github.com/simplifaisoul/osiris) 的一个 fork,基于 MIT 许可证发布。非常感谢原作者提供的初始仪表盘、RECON 工具包和数据层架构。 自 fork 以来,本代码库已发展出自身的功能集(AI 预测/oracle 层、服务器端 API 密钥管理、额外的世界指标数据源等)并且独立进行维护。它与上游项目的在线演示、Patreon 或 Discord **没有任何关联、背书或支持**——请不要将针对此 fork 的支持请求或捐赠引向这些渠道。 如果你正在寻找原始项目、其在线演示或其社区,请访问 [github.com/simplifaisoul/osiris](https://github.com/simplifaisoul/osiris)。
标签:AI风险缓解, ESC4, HTTP/HTTPS抓包, MCP, OSINT, WebGL, 态势感知, 情报分析, 网络诊断, 自动化攻击