zachary-adam/Argus-OSINT

GitHub: zachary-adam/Argus-OSINT

ARGUS 是一款地图驱动的开源情报监控与分析平台,通过聚合全球事件数据源帮助分析师对区域冲突、政治动荡和人道主义危机进行实时监控、关联分析和评估简报生成。

Stars: 0 | Forks: 1

# ARGUS — 情报监控 ARGUS 是一款地图优先的情报应用:选择一个地区和一个问题,接入 GDELT/RSS/你自己的剪报,对 Feed 进行分类筛选,并生成简报。 **桌面版** — 完整工作区:Map、Events、Research、Canvas 等(⋯ 菜单)。 **移动版** — 项目列表 → 点击项目 → 仅查看 AI 简报历史记录(无地图工作区)。 在 Settings → App 中启用 **Analyst tools**,以使用 velocity、ledger、incidents 和其他专业面板(默认关闭)。 从 GitHub 克隆并运行 — 地图**无需** Mapbox 即可工作(通过 MapLibre 使用免费的 OpenStreetMap)。稍后可以添加 Mapbox 以获取更丰富的底图;只有在需要生成式简报时才需要添加 AI 密钥(规则简报无需它们即可工作)。 云服务运营者:在依赖 journal sync、brief history、plots API 或 snapshots 之前,请运行 [`supabase/MIGRATIONS.md`](supabase/MIGRATIONS.md) 中的所有 SQL。 ## 新功能 (2026年6月) - **Analyst canvas** — 导入事件,将它们关联,运行 ACH(竞争性假设),整理布局,生成评估简报 - **Cases** — 打包事件;一键将整个 case 推送到 canvas - **Feed ↔ canvas** — 从 feed/地图/详情页添加事件;事件会持久化到项目中,因此刷新后 canvas 卡片依然存在 - **ACH 快速开始** — 根据你的项目类型提供起始假设;当 AI 评分/简报不可用时会显示提示信息 - **导出** — Markdown/PDF 报告包含 canvas、cases、plots、forecasts;CSV/GeoJSON 用于 forecasts 和 plots - **项目上的 Forecasts** — 概率性声明与云端备份同步(独立于基于公式的 **Ledger**) - **Map plots** — 按项目划分范围;加载时从 `project.plots` 注入数据 - **分享快照** — 公开链接包含研究问题、cases、canvas 摘要以及可选的 AI 评估 - **Timeline scrubber** — 停靠在地图上;随时间回放事件(以及船只/航空快照) - **Workspace AI** — 简报会提取完整的源文本、cases、ACH、plots、forecasts(非通用聊天) - **AI 情报简报** — 导出 + PDF 包含 IC 风格评估;国家面板简报;canvas 简报 - **简报历史** — 简报 + NLQ 答案自动保存;云端模式同步至 Supabase (`intel_briefs`, `nlq_history`) - **演示回退** — 默认关闭(设置 `NEXT_PUBLIC_DEMO_FALLBACK=true` 以显示带有标签的示例事件) - **演示项目** — 默认关闭(设置 `NEXT_PUBLIC_DEMO_PROJECTS=true` 以预加载主屏幕) - **IOC 粘贴** — 检测到的实体直接进入 canvas(移除了旧版的调查图谱) - **UI 优化** — 工作流导航(Collect / Triage / Analyze / Output),统一的 `TimeTrack` 用于 Chronology 和地图回放,共享基础组件(`PanelShell`, `SegControl`, `EmptyState`),`docs/DESIGN.md` 中的设计 token ## 快速开始 ### 前置条件 [Node.js](https://nodejs.org) v18+。 ### 安装与运行 ``` git clone https://github.com/zachary-adam/argus.git cd argus npm install cp .env.example .env.local # Map 可以在零 keys 的情况下工作。之后可以选择性地添加 Mapbox / AI / Serper。 npm run dev ``` 打开 [http://localhost:3000](http://localhost:3000)。在 `NEXT_PUBLIC_MODE=cloud` 模式下,通过 GitHub 登录。 ## 环境 ### 必需项 **无需任何配置即可启动。** 当未设置 Mapbox 时,地图使用免费的 OpenStreetMap 底图。AI 是可选的 — 基于规则的简报仍会运行。 **Session secret** — 仅当你设置了 `ARGUS_PASSWORD` 时: ``` openssl rand -hex 32 ``` ``` ARGUS_SESSION_SECRET= ``` ### 可选项 | 变量 | 用途 | |---|---| | `NEXT_PUBLIC_MAPBOX_TOKEN` | 更丰富的 Mapbox 底图 + 3D 地形(不设置 = 免费地图) | | `ARGUS_PASSWORD` | 为你的实例设置密码保护 | | `VAULT_MASTER_KEY` | 加密保存在应用内 Vault 中的 API 密钥 | | `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` | 丰富内容、验证、NLQ、ACH 评分、canvas 简报(可选) | | `ACLED_EMAIL` + `ACLED_PASSWORD` | ACLED 冲突和抗议事件 | | `AISSTREAM_API_KEY` | 实时船只追踪(海事/冲突项目) | | `NEXT_PUBLIC_SUPABASE_*` + `NEXT_PUBLIC_MODE=cloud` | 账号 + 跨设备同步 | 有关完整列表,请参阅 `.env.example`。 ## 日常工作流 ``` 1. Create a project → name, region, research question 2. Set your topic → keywords, entities, place filter 3. Add sources → paste articles, scrape URLs, turn on GDELT/RSS 4. Watch the feed → filters, NLQ (⌘K), saved monitors 5. Triage → incidents, cases, watch rules, correlations 6. Canvas → events + ACH + notes → assessment brief 7. Export → CSV, Markdown report, forecasts/plots, print/PDF 8. Share (optional) → publish a read-only snapshot link (optional AI brief for readers) ``` ### 自动化(无需密钥) - 从 GDELT、ReliefWeb、RSS、粘贴的文本中获取数据 - 14 种关联信号(每个项目的阈值可配置) - 事件发生率异常检测 - NATO 风格的来源评级;虚假信息隔离 - 实时 SSE 刷新(约 30 秒) ### AI 助手(可选密钥) | 功能 | 位置 | 说明 | |---|---|---| | **NLQ** | 地图栏 (⌘K) | 自然语言过滤器 — “过去 48 小时内苏丹的紧急事件” | | **Enrich** | 添加来源 | 重新地理编码、提取主体、调整严重程度 | | **Verify** | 事件详情 | 根据你保存的事件检查声明 | | **ACH score** | Canvas | 根据每个假设对事件进行评分(如果可用,将使用全文) | | **Canvas brief** | Canvas | 将 canvas + ACH + 工作区上下文转化为评估 | | **AI 项目简报** | 导出 | 根据整个工作区(事件、cases、plots、forecasts)生成 IC 风格的 BLUF | | **国家简报** | 国家面板 | 包含海事/航空和项目背景的特定国家评估 | | **Timeline scrubber** | Advanced → Scrubber | 随时间回放 Feed;空格键 = 播放,方向键 = 单步执行事件 | 没有通用的聊天框 — AI 只会在这些指定的位置出现。 ## 项目模板 | 模板 | 典型用途 | |---|---| | 选举诚信 | 投票周围的暴力、违规行为 | | 内乱 | 抗议、镇压 | | 武装冲突 | 战斗、流离失所、停火 | | 经济危机 | 货币、债务、制裁 | | 政治稳定 | 政变风险、权力交接 | | 人道主义 | 流离失所、援助获取通道 | 海事/航空实时图层会在“海事安全”和“武装冲突”模板中自动开启。 ## 数据源(默认开启) | 来源 | 密钥 | 提供 | |---|---|---| | GDELT | — | 全球冲突、政治、社会事件 | | ReliefWeb | — | 联合国人道主义报告 | | RSS / 新闻 | — | BBC、Reuters、Al Jazeera 及地区媒体 | | ACLED | 免费账号 | 地理参考的冲突和抗议 | | Wikidata | — | 选举、职位、结构化事实 | 灾害信息源(USGS、GDACS、WHO、NASA FIRMS)默认关闭 — 请在 `lib/features.ts` 中设置 `hazardFeeds: true`。 ## 关联信号 所有 14 个阈值均可按项目编辑(Alerts 面板)。 | 信号 | 触发条件 | |---|---| | 冲突升级 | T 小时内同一国家发生 ≥ N 起冲突事件 | | 复合危机 | 同一地区出现 3 个以上的危机类别 | | 地区动荡 | 每 500 平方公里事件密度超过阈值 | | 海事活动 | 靠近冲突区域的船只聚集 | | 基础设施威胁 | 距离关键基础设施 50 公里以内发生冲突 | | 人道主义汇聚 | 同一国家发生多起人道主义事件 | | 政治动荡 | 政治 + 经济 + 社会重叠 | | 冲突蔓延 | 48 小时内在 2 个以上邻国发生冲突 | | 级联故障 | 3 个以上邻国同时发生动荡 | | 受制裁船只 | 列入 OFAC 名单的船只靠近冲突区域 | | 军事航空 | 200 公里区域内出现 2 架以上军用飞机 | | ISR 行动 | 侦察呼号靠近冲突区域 | | 协同作战 | 船只 + 航空 + 地面事件同时发生 | | 黑暗舰队 | AIS 关闭的船只聚集 | ## 架构 ``` Feeds + pasted sources ↓ /api/events + /api/connectors/* ↓ /api/events/stream (SSE) ↓ mapStore (session) + projectStore (persisted) ↓ Mapbox + panels ``` - **mapStore** — 实时事件、过滤器、图层、面板 - **projectStore** — 项目、cases、canvas、watch rules、ledger、forecasts (`argus-projects` localStorage v3) - **云** — Supabase RLS,每个用户项目一行;情报历史记录在 `intel_briefs` + `nlq_history` 中(运行 `supabase/migrations/20260622_intel_history.sql`) ## 托管 **Railway** — 最适合保持始终在线的 SSE 和船只缓存。 **Vercel** — 可用;冷启动可能会中断 SSE。 ## 开发 ``` npm run dev # dev server npm run dev:clean # wipe .next if chunks/CSS break after big changes npm test # vitest unit tests npm run test:e2e # Playwright UI + API smoke (dev server on :3001) npm run test:e2e:ci # same, but production build (matches CI) npm run build # production build ``` E2E 在纯本地模式下运行(不会清除 Supabase 数据)。首次运行:`npx playwright install chromium`。如果开发缓存损坏,请执行 `rm -rf .next`,然后重新运行 `npm run test:e2e`。 ## 致谢 由 **[Zachary Adam](https://github.com/zachary-adam)** 和 **Maaz Ahmad** 创建 由 **[Shama Research](https://shamaresearch.com/)** 发布 联系方式:[hello@thezacharyadam.com](mailto:hello@thezacharyadam.com) MIT 许可证。
标签:HTTP/HTTPS抓包, MITM代理, 地图, 态势感知, 情报分析, 特征检测, 网络诊断, 自动化攻击