每天一个开源项目#46 World Monitor:6.6万星、56层地图的全球情报中枢

每天一个开源项目#46 World Monitor:6.6万星、56层地图的全球情报中枢

GitHub Trending 第 1/21 名|2026-07-22 快照|66,724 Stars|10,331 Forks|TypeScript|AGPL-3.0-only

项目地址:github.com/koala73/wor...

📋 项目概览

项目 信息
项目名 koala73/worldmonitor
一句话定位 将新闻、军事、灾害、金融与基础设施数据汇聚到同一张实时态势图,并向人和 AI Agent 提供统一情报接口
Trending 排名 今日第 1,共收录 21 个项目
Stars / Forks 66,724 / 10,331(Trending 快照)
主要语言 TypeScript 53.0%、JavaScript 43.3%、CSS 2.2%、HTML 0.9%,另含 Rust、Go、Python、Ruby
License 仓库 LICENSEpackage.json 均为 AGPL-3.0;GitHub API 的 NOASSERTION 未正确识别许可证
创建时间 2026-01-08
源码版本 main/package.json:2.10.0
发布版本 GitHub Release:v2.5.23;npm CLI:0.1.3;MCP Server:1.15.0,各发布面版本独立
项目规模 4,415 个文件;281 个 Proto;35 个服务域;56 类地图图层;25 种语言

🔥 为什么值得关注

World Monitor 不是"把 RSS 铺到地图上"的简单看板。它试图解决的是一个更难的工程问题:如何把 567 个新闻源、65+ 上游服务、军事与民航轨迹、灾害、市场、制裁、通信中断和关键基础设施转换为可查询、可关联、可降级的统一态势图。仓库在不到七个月内获得 6.6 万 Stars,并冲到今日 Trending 第一,说明实时 OSINT(开源情报)正在从少数分析师使用的专业系统,走向开发者、媒体、研究机构和 AI Agent 都能消费的平台能力。

它真正有技术含量的地方是"中间层":前端用双地图引擎承载 56 类图层,后台以 Proto 契约生成客户端、服务端类型和 OpenAPI;Redis、CDN、内存缓存与 stale-on-error 构成多级容错;浏览器 Web Worker 又负责聚类、本地 ONNX 推理和语义记忆。项目还把同一套能力暴露成 REST、MCP、CLI 和四种语言 SDK,使其不只是一款产品,也是一套可被自动化系统调用的全球事件数据底座。

不过,规模大不等于结论可靠。CII(国家不稳定指数)、战略风险和级联影响都含有人工权重、基线与启发式规则;数据源也存在授权、时效、地理覆盖和政治偏差。更合适的定位是"态势发现与调查入口",而不是能够替代专业分析、事实核验或投资决策的权威系统。

🏗️ 核心特性

1. 567 个信息源与 56 类地图图层

仓库内由 CI 生成的 docs/generated/stats.json 显示:项目当前维护 567 个 Feed 定义、56 类地图图层、105 个 Panel 类、200 个顶层 Service 入口。六种站点变体从同一代码库构建:

变体 默认图层数 侧重点
Full / World 37 地缘、军事、灾害与综合态势
Tech 13 科技新闻、网络安全、研究动态
Finance 17 交易所、市场、宏观指标
Commodity 18 能源、金属、供应链
Happy 6 正向事件与公益数据
Energy 18 能源设施、价格和运输

地图不是单一路径:平面模式采用 deck.gl + MapLibre GL,支持 GeoJSON、路径、热力、H3 六边形、弧线与聚类;3D 模式采用 globe.gl + Three.js。所有标记使用 _kind 判别联合类型,让 TypeScript 在新增标记类型时暴露未处理的渲染分支。

2. 跨流关联,而非单源告警

项目的热点升级不是由一条新闻直接触发,而是组合多种信号:

text 复制代码
新闻活动 35% + 国家不稳定指数 25%
+ 地理汇聚 25% + 军事活动 15%
                ↓
动态分数 × 70% + 静态基线 × 30%
                ↓
热点升级、战略风险与情报缺口提示

地理汇聚把 24 小时内的抗议、军机、舰船和地震等事件装入 1° × 1° 网格;同一网格出现至少三类事件才发出高优先级告警。CII v8 则为 31 个 Tier-1 国家计算 0---100 分:结构性基线占 40%,事件分占 60%,后者继续拆成抗议、冲突、安全与信息压力。对民主国家的高频抗议采用对数压缩,对部分威权国家采用更接近线性的放大方式,意图降低"事件多就一定更危险"的机械偏差。

这些公式透明、可审计是优点,但权重仍是模型假设。读者应把分数视为线索排序,而非事件真伪或国家风险的客观测量。

3. 浏览器本地 AI 与离线降级

ml.worker.ts 通过 Transformers.js / ONNX Runtime Web 在 Web Worker 中执行 MiniLM-L6 嵌入、情感分析、摘要和实体识别;vector-db.ts 以 IndexedDB 保存向量,用于标题语义记忆。analysis.worker.ts 负责 Jaccard 新闻聚类与跨域关联,避免把重计算压到主线程。

AI 摘要采用多级回退:本地 Ollama → Groq → OpenRouter → 浏览器侧模型。没有任何 API Key 时,地图、静态层与本地模型仍能运行;依赖特定凭据的数据层会被跳过,而不是让整个应用崩溃。这种"能力逐层减少"的设计比宣称"完全离线"更准确。

4. 面向 Agent 的 MCP、REST、CLI 与 SDK

World Monitor 的公开 MCP 端点为 https://worldmonitor.app/mcp,支持 Streamable HTTP、OAuth 2.1 与 X-WorldMonitor-Key。匿名客户端可以执行 initializetools/list 等发现方法;真正返回数据的 tools/call 需要认证。仓库统计给出 41 个 MCP 工具,并提供风险、全球简报、市场、冲突、灾害和预测市场等 10 个可嵌入 MCP Apps 的交互界面。

bash 复制代码
# 无需密钥,查看 MCP 工具目录
npx worldmonitor tools

# 有密钥后查询伊朗风险
npx worldmonitor risk IR --api-key wm_xxx

程序化入口覆盖:

  • REST:https://api.worldmonitor.app
  • MCP:https://worldmonitor.app/mcp
  • CLI:npm 包 worldmonitor,命令别名 wm
  • SDK:Python、Ruby、Go,以及 npm CLI 内置客户端
  • 契约发现:OpenAPI、llms.txt、Agent Skills manifest、API Catalog

5. 多端交付与同构 API

同一代码库产出 Vercel Web、PWA、Tauri 2 桌面程序、Docker 镜像和六个专题站点。桌面版并非简单 WebView 包壳:Rust 负责生命周期、系统密钥环与 IPC,Node.js Sidecar 动态加载 api/ 处理器;渲染进程把 /api/* 请求重写到本地 Sidecar,并用五分钟 TTL 的 Bearer 凭据鉴权,Sidecar 故障时再回退云端 API。

🔬 技术架构深度解析

总体数据路径

text 复制代码
567 Feeds / 65+ APIs / WebSocket
        │
        ├── Railway Relay + 21 类 Seed 任务
        │         └── 原子发布、数据校验、freshness 元数据
        │
        ├── Vercel Edge Functions
        │         └── CORS → API Key → 限流 → 路由 → ETag → 缓存
        │
        └── Upstash Redis
                  ├── 批量 Bootstrap
                  ├── 防缓存击穿
                  └── stale-on-error
                         │
                 Browser / Tauri
        ┌────────────────┼─────────────────┐
        │                │                 │
 deck.gl 平面图     globe.gl 3D 地球   105 个 Panel
        │                │                 │
        └──── Web Workers / IndexedDB ─────┘
              聚类、关联、ONNX、本地向量
                         │
               REST / MCP / CLI / SDK

契约优先:281 个 Proto 驱动 35 个服务域

API 的核心不是手写路由集合,而是 sebuf + Protocol Buffers:

text 复制代码
proto/*.proto
   ├── protoc-gen-ts-client  → 类型安全 Fetch 客户端
   ├── protoc-gen-ts-server  → Handler 接口与路由描述
   └── protoc-gen-openapiv3  → OpenAPI 3.1 文档

Proto 注解把 RPC 映射到 HTTP 动词与路径,buf.validate 描述字段约束。CI 运行代码生成并检查提交结果是否漂移,也用 buf breaking 捕获破坏性契约变更。部署时,各领域的 Edge Function 通过 createDomainGateway 组合对应 Handler,而非把整个服务端一起打包。

共享 Gateway 的处理顺序值得借鉴:来源检查 → CORS → OPTIONS → API Key → 端点与全局限流 → 静态/动态路由 → Handler 边界 → FNV-1a ETag → Cache-Control。其价值不是算法新颖,而是把 35 个领域服务必须遵守的安全和缓存规则固定在一条管线上。

从 38 次冷启动请求压到 2 次

项目将常用数据集分成 fast 与 slow 两个 Bootstrap 层,在页面初始化时并行读取;服务端通过一次 Redis Pipeline 拉取一组键,浏览器把结果放入一次性 hydration cache,Panel 首次挂载时直接消费。

工程指标 仓库文档给出的实现/结果 本次核验结论
首屏数据请求 38 个独立请求合并为 2 个 Bootstrap 请求 架构与源码文档一致
首屏收益 文档声称典型网络可缩短 2---4 秒 未做独立性能复测,不应当作普适基准
缓存层 浏览器内存 → Redis → 上游,外加 CDN 架构文档与 Gateway 设计一致
并发 Cache Miss 同键请求共享 in-flight Promise 可避免同一实例内的缓存击穿
后台刷新 指数退避,最高 4 倍;隐藏标签页降频 通过 SmartPollLoop 统一编排
带宽 Relay 响应启用 gzip;文档声称约降 80% 属项目方陈述,取决于响应内容

这里也存在文档版本差异:根 ARCHITECTURE.md 描述 fast/slow 超时分别为 3 秒与 5 秒,而设计文档仍写两个 800ms Abort;因此精确超时应以当前源码为准,不宜只抄某一页文档。

缓存与失败语义

项目没有把"请求成功"误当成"数据新鲜"。Seed 任务在写业务键的同时写入 seed-meta:<key>,记录抓取时间和数据量;Health API 按每个数据源的最大陈旧时间返回 OK / STALE / WARN / EMPTY。如果上游失败,缓存可以返回旧值,同时界面以 Intelligence Gap 显示看不到的数据源。

负缓存也很重要:上游错误会被短暂缓存,避免大量客户端立即重试;Redis 不可用时回退到内存;并发 miss 由 Promise 合并。对于实时数据平台,"如何失败"往往比"顺利时多快"更决定可用性。

代码规模与工程成熟度

本次对 main 分支做了浅克隆和静态统计(排除 .git、构建产物与依赖目录):

指标 数量
仓库文件 4,415
TypeScript 文件 / 行 1,355 / 345,750
JavaScript 文件 / 行 111 / 19,537
Proto 文件 / 行 281 / 13,378
Rust 文件 / 行 3 / 1,578
名称含 test/spec 的文件 1,048
tests/ 文件 949
e2e/ 文件 113
CI 工作流 21

"1,048 个测试文件"是文件名口径,并不等于同等数量的独立测试用例;但测试目录规模、Playwright 六变体冒烟、Proto 漂移检查、API 契约 lint、安全审计和 MCP 在线探针,足以说明它已超出展示型 Demo 的工程阶段。

无框架前端:优势与代价

主应用使用 Vanilla TypeScript,而不是 React/Vue/Svelte。组件由 Panel 基类、事件委托、CustomEventlocalStorage、集中式 AppContext 和 SmartPollLoop 组合完成。优势是运行时开销低、DOM 和 WebView 行为可控;代价则是中央可变状态会随功能增长而变复杂,直接拼接 HTML 也要求严格落实转义、DOMPurify 和安全 lint。

值得注意的是依赖中仍包含 Preact,但核心 Dashboard 的 Panel 系统不以 Preact 为主;因此更准确的表述是"主应用无通用 UI 框架",而不是"仓库完全没有任何框架依赖"。

📖 README 核心内容摘要

README 将 World Monitor 定义为统一态势感知界面,核心承诺可归纳为五层:

  1. 数据层:500+(当前生成统计为 567)精选 Feed,覆盖 15 类新闻及军事、灾害、金融、气候、网络安全等垂直数据。
  2. 分析层:新闻聚类、跨流关联、热点升级、CII v8、市场七信号合成和基础设施级联传播。
  3. 交互层globe.gl 三维地球与 deck.gl 平面地图,56 种图层、105 类信息面板、25 种语言和 RTL 支持。
  4. 运行层:Web、PWA、Tauri 桌面、Docker、自托管及本地 Ollama;无环境变量也可启动基础应用。
  5. Agent 层:MCP、REST、OpenAPI、CLI 与 Python/Ruby/Go SDK,把看板能力转化为机器可调用能力。

README 中最值得保留的设计思想不是"AI 驱动",而是三条工程原则:Speed over perfection、Assume failure、Show what you can't see。即先用快速分类给出结果,再异步精炼;默认外部 API 会失败;数据缺口必须显式展示。

版本信息需要分面理解:源码应用版本已到 2.10.0,但最新 GitHub Release 是 v2.5.23,npm CLI 为 0.1.3,MCP 文档标识 1.15.0。这不必然是发布错误,却说明 App、桌面发行物、CLI 与协议服务并不共享一个版本轴,集成前应分别锁定版本。

🚀 快速上手指南

方式一:直接体验托管版

方式二:本地启动

需要 Node.js 22+。基础应用不要求环境变量:

bash 复制代码
git clone https://github.com/koala73/worldmonitor.git
cd worldmonitor
npm install
npm run dev

当前 vite.config.ts 将开发端口默认设为 3000,可通过环境变量覆盖:

bash 复制代码
DEV_PORT=4173 npm run dev

然后访问 http://localhost:3000 或自定义端口。部分旧版 Getting Started 文档仍写 Vite 默认的 5173,实际应以当前配置和终端输出为准。

专题变体:

bash 复制代码
npm run dev:tech
npm run dev:finance
npm run dev:commodity
npm run dev:happy
npm run dev:energy

方式三:调用公开 MCP 发现接口

匿名列举工具不需要 API Key:

bash 复制代码
curl -s https://worldmonitor.app/mcp \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  --data '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"tools/list",
    "params":{}
  }'

tools/call 和数据型 resources/read 需要 OAuth 或 X-WorldMonitor-Key。不要把 wm_... API Key 当作 Bearer Token;MCP 文档明确要求 API Key 使用专用请求头。

方式四:完整自托管

Docker 自托管不等于"一条命令零配置"。完整栈包含 Dashboard、Relay、Redis 和 Seed 任务,并要求设置 RELAY_SHARED_SECRETREDIS_PASSWORDREDIS_TOKEN 等无安全默认值的变量。若要重生成 Proto 客户端和 OpenAPI,还需要 Go 1.21+、Buf 和 sebuf 插件。

AGPL-3.0 对网络服务尤其重要:如果你修改后通过网络向用户提供服务,通常需要向这些用户提供对应修改版源代码。商业部署前应审阅许可证与第三方数据源条款。

📊 增长速度与社区热度

增长速度评估

项目从 2026-01-08 创建到 2026-07-22 快照约 194.3 天,累计 66,724 Stars。由此得到的终身均值是:

  • 约 343.5 Stars/天
  • 折合约 10,304 Stars/30 天
  • Fork/Star 比约 15.48%

这个均值只能说明项目自创建以来总体增长极快,不能冒充今日新增 Stars。本次 Trending 快照没有保存"今日新增 Star"字段,因此无法严谨计算当日增速,也不能从排名第一反推出新增量。

同日稍后的 GitHub API 补充核验显示 Stars 已从快照的 66,724 增至 66,725、Forks 从 10,331 增至 10,333;这只是小时级变化,不足以构成日增长统计。

社区活跃度

指标 2026-07-22 同日 API 补充核验
Watchers / Subscribers 417
Open Issues(不含 PR) 141
Open PR 97
Closed Issues 852
Closed PR 4,221
Issue 历史关闭率 85.8%
PR 历史关闭率 97.8%
近 7 天提交 42(约 6.0/天)
近 7 天新 Issue 47(约 6.7/天)
近 7 天新 PR 65(约 9.3/天)
GitHub Contributors 分页口径 约 104 个(含匿名口径)

活跃度很高,但贡献仍明显集中:API 的贡献榜中维护者 koala73 为 4,465 次,第二名为 84 次。大量外部 PR 与 97 个待处理 PR 说明生态在扩张,同时也意味着合并队列、架构一致性和维护者负荷是后续风险。

脚本仅保留了除冠军外项目的仓库名,没有保留它们各自的 Stars、语言和今日新增量;下表因此只呈现可验证的名次与仓库,不补造缺失数据。

排名 仓库 排名 仓库
1 koala73/worldmonitor 12 hyprwm/Hyprland
2 bojieli/ai-agent-book 13 chrislgarry/Apollo-11
3 tirth8205/code-review-graph 14 DioxusLabs/dioxus
4 ayghri/i-have-adhd 15 langchain-ai/open_deep_research
5 earthtojake/text-to-cad 16 diegosouzapw/OmniRoute
6 1jehuang/jcode 17 agegr/pi-web
7 oblien/openship 18 schollz/croc
8 AstrBotDevs/AstrBot 19 microsoft/Ontology-Playground
9 every-app/open-seo 20 dottxt-ai/outlines
10 tradesdontlie/tradingview-mcp 21 KnockOutEZ/wigolo
11 AlexsJones/llmfit

🎯 适用场景

场景 价值 使用建议
OSINT 与地缘研究 将新闻、冲突、军机、舰船、灾害和基础设施叠加,快速发现值得调查的交汇点 用作线索发现,回到 ACLED、UCDP、USGS 等原始来源复核
媒体编辑与应急值班 统一观察突发新闻、网络中断、航班延误和灾害 配置专题 Panel,并把数据陈旧状态纳入值班规则
企业风险与供应链 追踪港口、航道、海缆、能源与制裁变化 CII 和级联分数只能作为辅助,不替代行业模型
AI Agent / RAG 通过 MCP、REST、OpenAPI 获取结构化实时数据 先用匿名 discovery 评估工具,再规划认证、配额和缓存
数据可视化教学 学习 deck.glglobe.gl、H3、Web Worker 和多源地图叠加 从单一变体或少量图层切入,不必先理解完整平台
内网或私有部署 Tauri Sidecar、Docker 与本地 Ollama 支持敏感工作流 审查 AGPL、数据源授权、密钥隔离和网络出口

不适合直接承担的任务

  • 不能将 AI 摘要、启发式评分或预测直接当作事实结论。
  • 不应据此自动执行交易、军事、安全或人员撤离决策。
  • 不能假定"自托管"就意味着所有数据都离线;大量图层依赖外部 API。
  • 不应忽略数据源覆盖差异、宣传偏差、API 延迟和许可证限制。

💡 总结

World Monitor 最值得研究的不是暗色地图或"开源 Palantir"式视觉冲击,而是它把实时数据产品的几条困难链路放在了同一仓库:多源抓取、契约生成、缓存容错、浏览器本地计算、双地图渲染、多端交付,以及面向 Agent 的标准接口。66,724 Stars 与 15.48% 的 Fork/Star 比证明其需求强烈,42 次周提交和 65 个周新增 PR 则显示项目仍处于高速演进期。

对开发者而言,它是一份大型 TypeScript 实时系统的工程样本;对分析者而言,它是一块高密度"线索雷达";对 Agent 团队而言,它展示了如何把可视化产品进一步变成 MCP/REST 数据能力。真正的采用门槛不在 npm install,而在数据授权、评分解释、来源核验、版本治理和 AGPL 合规。

相关推荐
Xu_youyaxianshen6 小时前
Git 零基础常用指令手册(Gitee / GitHub 通用 )
git·gitee·github
阿里嘎多学长6 小时前
2026-07-22 GitHub 热点项目精选
开发语言·程序员·github·代码托管
小蠢驴打代码7 小时前
记忆库能通过测试,不等于回答值得信:Coding Agent Memory 的两层评估设计
github·ai编程
武子康7 小时前
Copilot Code Review 从固定 Reviewer 演进为可编程 Runtime,仓库控制面、Setup 供应链、Runner 资源和 MCP 工具同时被纳入审查决策
人工智能·github·aigc
wangruofeng18 小时前
opencodex 解锁 Codex 任意模型,一个本地代理打通 Claude/Kimi/GLM/DeepSeek
llm·github·openai
一点一木20 小时前
从60首歌到1个网站:输入你的故事,还你一首歌
前端·github
刘较瘦_1 天前
AI 开发中的 Git Submodule 父子仓库模式:前后端分仓管理与协作实践
前端·github
DeMinds1 天前
内容没有丢,我为什么总在重新整理?|DeMinds 如何让工作接着继续
ios·github·markdown