nickk02/meridian
GitHub: nickk02/meridian
Meridian 是一个开源的全球实时事件情报仪表盘,通过关联官方公开数据源中的事件,帮助用户以地图、事件流和关系图谱的形式洞察全球动态。
Stars: 0 | Forks: 0
# Meridian
实时连接全球事件。
Meridian 是一个开源的全球事件情报仪表盘。它从世界各地摄取实时的、官方的、公开的数据源,将其解析为具有持久类型化的实体本体,根据实体在空间、时间和身份上的共性与这些对象进行关联,并将结果以实时地图、范围化事件流和关系图谱的形式呈现。每个对象都可以通过时间戳和客观的置信度分数追溯到其来源。相关性分析会展示关联的依据,且绝不断言因果关系。
它完全运行在 Cloudflare 的免费层级上。
实时实例:https://meridian.calm-butterfly-4753.workers.dev
## Meridian 的与众不同之处
大多数“情报仪表盘”只是带有圆点的地图。圆点出现,圆点消失,彼此之间没有任何联系。Meridian 的前提恰恰相反:价值不在于圆点本身,而在于它们之间真实呈现的联系。
* 基于事实,而非凭空捏造。每个事件都包含其来源、获取时间,以及一个会随时间衰减的置信度分数。一个 37 天前的事件会显示为低置信度,因为事实就是如此。没有任何东西是为了显得权威而编造的。
* 相关性,而非伪造的因果关系。当事件被关联时,链接会记录其依据(目前的依据包括同类型的时空聚类和跨域的因果共现;共享实体和语义相似性已在规划中)以及置信度。Meridian 展示的是事件共同发生及其可能相关的原因。它绝不会声称一个事件导致了另一个事件。这种判断留给分析师来做。
* 真正的实体解析。飞机通过 ICAO 十六进制代码进行解析,船舶通过 MMSI 进行解析,地点通过国家和地名录进行解析。通过不同数据源看到的同一个现实世界的事物会合并为一个实体,因此事件之间的联系才真正具有意义。
* 仅限官方和公开数据源。不监视特定的私人个体。不进行网络扫描。不收录无线电监听音频。不进行人脸识别。不收集车牌数据。Meridian 是一个从公开、官方、汇总的信息来了解世界的工具,而不是用于监视个人或探测基础设施。
* Edge 原生且免费。整个系统运行在 Cloudflare 的免费层级内的 Workers、D1、KV、R2 和 Cron 上。Vectorize 和 Workers AI 已为规划中的语义相关性和基于事实的摘要工作完成配置。
## 工作原理
```
Live public feeds -> Cron ingest -> raw archive (R2)
|
v
normalize to typed events
|
v
D1 ontology <-> entity resolution (hex / MMSI / ISO3 / gazetteer)
|
v
correlation engine (spatio-temporal + co-causal cross-domain)
|
v
Map (MapLibre, flat + globe) + scoped event feed + link graph + inspector
```
数据源按计划被拉取并作为原始 JSON 归档在 R2 中,然后被标准化为 D1 中的类型化对象。由于保留了原始层级,上游的故障会从最后归档的数据块重新进行标准化,而不是丢弃该层级,并且该归档同时兼作回放历史记录。对象被解析为实体,通过相关性引擎进行链接,并由前端读取。读取操作永远不会直接访问实时数据源。
## 对象模型
每个事件都被标准化为一个类型化对象:`{ id, domain, lat, lon, timestamp, severity, source, source_url, fetched_at, confidence, properties }`,并标记为 16 个领域之一(地震、环境、灾害、海事、航空、航天、金融、冲突、网络、能源、卫生、交通、体育、市政、政治、其他)以及国家和一级行政区。领域和区域是一等公民,因此“作用域”(例如,今天的欧洲,或全球海事和能源)仅仅是对相同数据的已保存过滤器。
在时空上聚集的事件被折叠为事故:一个锚点事件加上在其附近严格的距离和时间窗口内发生的其他事件,每个成员都与锚点事件相关联,并声明了具体依据。这种聚类在设计上是以锚点为中心的放射状结构,因此一个事故不会蔓延到不相关的区域。
跨域事故则更进一步:不同类型的事件共同发生,并且共享一种合理的机制(例如火山及其伴生的地震群,风暴及其引发的洪水)。其成员资格受明确的共因白名单限制,因此单纯的邻近(仅仅碰巧在地震附近的野火)永远不会形成跨域事故。每一对事件都带有一个与现象持续时间相匹配的时间窗口。
## 溯源与置信度
每个对象都存储了它的来源、获取时间,以及一个源自数据源可靠性和时效性的置信度分数。每个链接都存储了其依据和置信度。没有依据的链接是无法创建的。这是在代码中强制执行的,而不是靠约定。
## 架构
单个 Cloudflare Worker 同时提供 SPA 和 API 服务。
```
Browser (React + TypeScript + MapLibre GL)
|
v
Cloudflare Worker (Hono)
/api/health liveness
/api/objects read ontology from D1
/api/links read derived links from D1
/api/object/:id object detail + neighbors + provenance + entities
/api/incidents correlated incident clusters
/api/incidents/cross-domain co-causal cross-type incidents
/api/incident/:id incident detail + members
/api/entity/:id resolved entity + its events
/api/action write audited action + state
/api/ingest/run guarded manual ingest (token-protected)
* SPA static assets (Vite build in ./dist)
|
+-- D1 (SQLite): ontology, entities, links, incidents, audit trail
+-- KV: short-TTL feed cache + write budgets
+-- R2: raw feed archive (replay + resilience)
+-- Vectorize: semantic-correlation index (provisioned; roadmap)
+-- Workers AI: grounded summaries (provisioned; roadmap)
|
Cron -> ingest feeds -> archive raw (R2) -> normalize -> resolve entities -> derive links -> correlate
```
## 技术栈
* Cloudflare Workers 结合静态资源(非 Pages),使用 Hono 作为 API。
* React 18 + TypeScript + Vite 用于构建 SPA。
* MapLibre GL JS 用于地图、平面和地球仪投影,无需 token。
* d3-force 用于关系图谱视图。
* Cloudflare D1(本体 + 审计),KV(缓存),R2(原始归档),Cron(摄取)。Vectorize 和 Workers AI 已绑定并为规划中的工作(语义相关性、基于事实的摘要)完成了配置。
* zod 用于 API payload 验证。
一切都在 Cloudflare 的免费层级上运行。在生产环境中,没有任何东西是在本地运行的。
## 布局
```
meridian/
worker/ Hono API, D1 access, feed adapters, ingestion + correlation
web/ React + MapLibre SPA (builds to ./dist)
shared/ types shared by Worker and SPA
migrations/ D1 SQL migrations
wrangler.jsonc, vite.config.ts, package.json
```
## 开发
```
npm install
npm run build # vite build -> ./dist
npm run dev # wrangler dev (local config): serves the SPA and the API together
```
## 部署
推送到 `main` 分支会触发 Cloudflare Workers Builds:执行 `npm ci && npm run build`,然后进行部署,并自动应用 D1 迁移。D1、KV、R2 和 Vectorize 索引由操作员一次性创建;它们的绑定位于 `wrangler.jsonc` 中。Secret(`INGEST_TOKEN`、数据源 API 密钥)被设置为 Worker secret,从不提交到代码库中。
## 数据源
Meridian 仅使用官方、公开、免费且合法的数据源。目前实时的层级包括地震(USGS)、航空(通过 airplanes.live 的 ADS-B)、海事 AIS(通过 Digitraffic 的区域数据,以及通过 aisstream.io 的全球实时 AIS)、全球活跃火灾(NASA FIRMS)和野火(NIFC)、天气警报(NWS)、热带气旋(NHC)、环境事件(NASA EONET)、灾害(GDACS)、航天(CNEOS 火流星、Launch Library)和轨道(通过 CelesTrak 的实时卫星),后续还将陆续添加更多官方数据源。有关完整的数据源列表及其来源,请参阅 [SOURCES.md](SOURCES.md)。
快速移动的实时层级(全球 AIS 船舶、卫星)不保存在持久化的本体中,而是作为叠加层进行渲染:一个由 SQLite 支持的 Durable Object 在有限的时间窗口内保持 aisstream.io WebSocket 打开并提供船舶快照,而卫星位置则在客户端通过轨道元素进行推算。两者都保持在免费层级内。
## 路线图
尚未上线,按开发顺序排列:
* 共享实体和语义相关性(Vectorize embeddings + Workers AI),超越目前提供的时空和跨域链接。
* 通过 Workers AI 生成基于事实并引用来源的事件摘要,绝不凭空捏造。
* 实时更新模式:新事件在到达时会以动画形式出现在地图上(一旦亚分钟级延迟足以证明离开纯免费层级是合理的,就会引入 Durable Object WebSocket 报价器)。
* 跨金融、能源、卫生和市政领域的其他官方数据源。
## 范围与伦理
Meridian 仅使用官方、公开、汇总的数据源。它不跟踪特定的私人个体,不扫描或探测其不拥有的基础设施,不收录无线电监听音频,不进行人脸识别,也不收集车牌或个人社交媒体数据。一些免费数据源仅授权用于非商业用途;Meridian 尊重每个数据源的许可协议并按来源进行记录。相关性被标记为相关性,绝不被标记为已证实的因果关系。
## 安全性
我们严肃对待安全发现,并会在发布新功能之前对其进行修复。请参阅 [SECURITY.md](SECURITY.md) 来报告漏洞。
## 贡献
欢迎积极贡献。由于 Meridian 采用双许可证(见下文),外部贡献在合并前需要签署贡献者许可协议(Contributor License Agreement),以便项目保留提供商业许可的权利。有关流程请参阅 [CONTRIBUTING.md](CONTRIBUTING.md),协议本身请参阅 [CLA.md](CLA.md)。
## 许可证
Meridian 的开源使用遵循 AGPL-3.0 协议。Meridian 是原创作品,而非 fork。将修改后的版本作为网络服务运行,需要以相同的许可证提供其源代码。请参阅 [LICENSE](LICENSE)。
若需不受 AGPL 义务限制的商业许可,请联系维护者(Nick Sanchez, github.com/nickk02)。
标签:HTTP/HTTPS抓包, 实体解析, 实时事件追踪, 态势感知, 程序员工具, 自动化攻击