bradleybond512/crystal-ball

GitHub: bradleybond512/crystal-ball

一款基于 Tauri 2 的桌面情报聚合应用,通过 168+ 实时面板与 3D 地球仪提供跨领域实时监测与 AI 辅助决策。

Stars: 1 | Forks: 0

# 水晶球 Tauri 2 + TypeScript + Rust 桌面应用:4 种产品变体共 168+ 个实时数据面板,Cesium.js/DeckGL 3D 地球仪含 74 个地理空间图层,SGP4 轨道传播运行于 Web Worker,基于 Ollama/Groq/Claude/OpenRouter fallback 链的 AI 摘要,Protobuf/Buf 驱动的 API 层,OS 钥匙串密钥存储,承载认证本地端口的 Node.js sidecar 代理,以及带有分析抑制的 PostHog-instrumented Ghost Mode。 [![Version](https://img.shields.io/github/v/release/bradleybond512/crystal-ball?label=version)](https://github.com/bradleybond512/crystal-ball/releases/latest) [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6)](tsconfig.json) [![Platform](https://img.shields.io/badge/platform-macOS-lightgrey)](https://github.com/bradleybond512/crystal-ball/releases/latest) 下载最新版本 | 体验网页版 ## 上帝之眼 全视口 Cesium.js 3D 地球仪模式。通过 `G` 或侧边栏激活。 **74 个实时数据图层:** 军事基地、核设施、地震、活跃冲突、空中打击、旋风、野火、船舶、航班、网络威胁、潜艇、电缆、港口、卫星、国际空间站等。 **HUD 覆盖层:** 威胁评估卡片、模式徽标、热点/高度/冲突/灾难状态标签、最近热点(哈弗辛公式)、太阳相位徽章(白天/黄金/民用/航海/天文/夜晚)、相机经度处的本地时钟、滚动实时警报条、顶部 5 警报列表、图层切换栏。 **飞行模式:** 类游戏的 WASD/鼠标第一人称飞行。右键拖动查看,滚轮调节速度。 **时间机器:** 在可配置的时间窗口内回溯历史数据。 **卫星跟踪:** SGP4 轨道传播在 Web Worker 中运行——国际空间站、星链、气象卫星。无需 API 密钥,TLE 数据来自 CelesTrak。 **3D 建筑:** 五级回退——Google 拟真 > Cesium OSM 建筑 > 2D 拉伸 > 平面。拟真需要 `GOOGLE_MAPS_API_KEY`。 **影像:** Bing 卫星(Cesium Ion 令牌)> ArcGIS 世界影像回退。 ## 情报覆盖 | 领域 | 包含内容 | |------|----------| | **冲突与地缘政治** | 实时冲突区域、空中打击跟踪、ACLED 事件、军事基地、核设施、战区多边形、杀伤链、ORBAT、STIX/TAXII 馈送 | | **天气** | 7 天预报、RainViewer 全球雷达、Blitzortung 闪电、NOAA GOES/日冕卫星图像、潮汐预测、花粉追踪、NWS 严重警报、SPC 强对流展望、热带气旋跟踪、红色火警预警 | | **网络与威胁** | ThreatFox IOCs、OpenPhish 馈送、Spamhaus 阻止列表、CISA KEV、ICS/OT 威胁、网络拓扑、24 会话 EMA 威胁预测、Palantir/Dragos 风格的情报面板 | | **市场与金融** | 标普 500、BTC、原油、黄金、大宗商品、宏观信号、央行馈送(需 Finnhub 密钥) | | **空间与卫星** | ISS、星链、气象卫星跟踪、SGP4 传播、实时轨道位置、卫星 ISR 情报 | | **基础设施** | 海底电缆、海事船舶、航班跟踪、港口状态、数据中心停机、互联网交换点、CCTV 与网络摄像头 | | **灾害** | GDACS 红/橙色事件、M6.5+ 地震、NASA FIRMS 野火边界、旋风路径 | ## 为何难以实现 **本地优先的桌面安全边界** 渲染器从不直接接触 API 密钥。密钥通过 Tauri 的密钥库存储,在启动时注入 Node.js sidecar,并通过承载认证的本地位口代理。渲染器动态解析 sidecar 端口——不对运行时环境做任何硬编码假设。 **CSP 在真实约束下** `script-src` 需要 `'unsafe-eval'`,因为 Cesium 动态编译 GLSL 着色器。移除它会静默破坏 God's Eye(动态导入失败 > 重载循环,无可见错误)。补偿控制措施:可信窗口 IPC 网关、sidecar 承载认证、script-src 上无 `'unsafe-inline'`、生产构建中禁用开发者工具。 **无需分叉的变体架构** 四个产品变体(Full、Tech、Finance、Happy)共享同一应用外壳。面板清单、地图图层默认值和馈送配置通过 `src/config/panels.ts` 和 `src/config/variant.ts` 切换——无需独立构建或条件编译。 **AI 回退链** 汇总在运行时解析:Ollama(本地)> Groq > Claude > OpenRouter > 浏览器推理。每一步都是明确的边界,而非 catch-all 尝试。在脱网和隐私敏感环境中均适用。 **应用模式状态机** 五种模式(和平/金融/战争/灾难/幽灵)由实时信号阈值触发——S&P >=2.5%、>=2 个置信度归一化后的战争信号(冲突基线)、GDACS 红色事件。幽灵模式会抑制分析,将轮询间隔放大 5 倍,并更改 UI 主题。模式转换是确定性的且可测试。 **本地定位通过 CoreLocation IPC** WKWebView 完全阻止 `navigator.geolocation`。Crystal Ball 通过 Rust 中的 ObjC FFI 调用本地 CLLocationManager 绕过此限制,并以 Tauri IPC 命令暴露。需要定位访问的硬化运行时权限。 **WKWebView 约束** CSS `-webkit-app-region: drag` 被静默忽略。窗口拖动需通过 JS `mousedown` > `tryInvokeTauri('plugin:window|start_dragging')`。所有本地 iframe 必须使用 `http://127.0.0.1:{port}` 而非 `localhost`——WKWebView 将其视为不同源,且 CSP 仅允许 `127.0.0.1`。 ## 架构 | 层 | 技术栈 | |----|--------| | 前端 | TypeScript、Vite、MapLibre GL、deck.gl、Cesium.js、D3、i18next | | 合约 | Buf、Protobuf、生成的 TypeScript 客户端 + OpenAPI 输出 | | 桌面外壳 | Tauri v2、Rust、OS 钥匙串、Node.js sidecar(端口 46123) | | AI 层 | Ollama > Groq > Claude > OpenRouter > 浏览器推理 | | 验证 | TypeScript 严格模式、Playwright 端到端 + 视觉测试、sidecar 单元测试 | | CI/CD | 标签驱动的桌面发布、发布清单验证、CodeQL | ## 用数字说话 | 指标 | 值 | 来源 | |------|----|------| | 产品变体 | 4 | `src/config/variant.ts` | | 桌面构建目标 | 3 | `package.json` | | 默认面板库存 | 168 完整 / 35 技术 / 31 金融 / 10 快乐 | `src/config/panels.ts` | | God's Eye 数据图层 | 74 | `src/config/panels.ts` | | 支持的密钥 | 47 | `src-tauri/src/main.rs` | | 本地化 | 19 | `src/locales/` | | 生成的 OpenAPI 规范 | 21 | `docs/api/` | ## 变体 | 变体 | Web | 桌面 | 重点 | |------|-----|------|------| | `full` | 是 | 是 | 地缘政治、基础设施、网络、冲突、灾难 | | `tech` | 是 | 是 | 人工智能、初创公司、云、服务健康、开发者生态 | | `finance` | 是 | 是 | 市场、大宗商品、宏观信号、央行 | | `happy` | 是 | 否 | 积极新闻、进展、保护 | ## 快速开始 ``` npm ci && npm run dev # web, default variant npm run dev:tech # tech variant npm run dev:finance # finance variant npm run desktop:dev # Tauri dev build npm run desktop:build:full # production desktop npm run typecheck:all # zero-error type check ``` `happy` 变体使用默认开发服务器(`npm run dev`)。密钥设置请参考 [docs/API_KEYS.md](docs/API_KEYS.md),sidecar 配置请参考 [docs/DESKTOP_CONFIGURATION.md](docs/DESKTOP_CONFIGURATION.md)。 ## 文档 | 指南 | 用途 | |------|------| | [docs/API_KEYS.md](docs/API_KEYS.md) | 所有 47 个 API 密钥——分类、注册链接、免费/付费 | | [docs/DESKTOP_CONFIGURATION.md](docs/DESKTOP_CONFIGURATION.md) | 桌面密钥、特性可用性、回退机制 | | [docs/RELEASE_PACKAGING.md](docs/RELEASE_PACKAGING.md) | 桌面打包与签名流程 | | [CONTRIBUTING.md](CONTRIBUTING.md) | 贡献者流程、检查项、PR 期望 | | [SECURITY.md](SECURITY.md) | 漏洞报告与范围界定 | ## 贡献 如果你更改了产品行为、API 契约或运营流程,请在同个分支中更新文档。当实现与文档同步演进时,项目更易于评估。 ## 许可与署名 根据 AGPL-3.0-only 许可。本桌面项目基于 [koala73/worldmonitor](https://github.com/koala73/worldmonitor) 构建,感谢 Elie Habib。
标签:3D地球, AGPL-3.0, AI汇总, AI风险缓解, Buf, Cesium.js, Claude, CVE检测, DeckGL, Ghost Mode, LLM评估, MITM代理, Node.js sidecar, Ollama, OpenRouter, PostHog, Protobuf, Rust, SGP4, Tauri, TypeScript, Web Worker, 分析抑制, 卫星轨道, 可视化界面, 合约驱动API, 回退链, 地理空间数据, 地缘政治, 天气, 安全插件, 实时数据, 密钥链, 市场情报, 开源协议, 承载认证, 本地优先, 本地端口代理, 桌面应用, 版本徽章, 秘密存储, 网络威胁, 网络流量审计, 自动化攻击