abhijithbhat/aegisgrid-2026
GitHub: abhijithbhat/aegisgrid-2026
面向体育场安全主管的可解释事件融合与响应决策支持系统,通过确定性算法与 AI 协同将多源信号转化为证据驱动的优先级建议。
Stars: 0 | Forks: 0
# AEGISGRID 2026
**面向体育场安全主管的可解释事件融合与响应 Copilot**
[](https://github.com/abhijithbhat/aegisgrid-2026/actions/workflows/ci.yml)
[](https://github.com/abhijithbhat/aegisgrid-2026/actions/workflows/codeql.yml)
[](LICENSE)

[生产预览](https://aegisgrid-2026.abhijithhubli129918.chatgpt.site) · [七分钟评审演示](docs/judge-demo.md) · [架构](docs/architecture.md) · [安全策略](SECURITY.md)
AegisGrid 将嘈杂的人群遥测数据、多语言报告、场馆拓扑结构、团队可用性以及不确定的观察结果,转化为一个经过优先级排序、以证据为基础的建议,供经过培训的**体育场安全主管**参考。它支持运营情报和实时决策支持;它不会自动调度响应人员或取代场馆的标准操作程序。
该产品使用了一个合成的虚拟场馆——**Unity Stadium 2026**——以及原创的界面素材。它不包含任何官方赛事、场馆、俱乐部或联合会的品牌标识。
## 七分钟评审路径
1. 打开 **Command** 并阅读优先级 01 的决策简报:事件、确定性风险、证据、冲突、推荐的团队、安全路线的预计到达时间(ETA),以及明确的人工审批边界。
2. 打开选定的事件,将确定性评分与经过验证的 AI 分类进行比较。检查引用的源 ID、矛盾之处、不确定性以及澄清问题。
3. 打开 **Data Lab**,暂存一个 CSV/JSON/PDF 文件或直接报告,查看建议的 schema 映射,对其进行编辑、验证,并明确批准标准化后的数据行。
4. 在模拟器中使用种子 `2026` 运行 **Accessible Corridor Blockage**;确认确定性路由器是否成功避开了受阻和仅有楼梯的路径。
5. 打开 **Audit** 并验证只允许追加的参与者、状态转换、备注以及建议/路由的版本痕迹。
如果进行离线或无 API 密钥的评审,请将 `GEMINI_API_KEY` 留空。这种诚实的降级状态是刻意设计的,可以准确展示哪些决策需要生成式 AI。
## 评审可以验证的内容
- 合成场景数据源从共享的应用程序状态驱动备战状态、占用率、人流、事件和传感器健康状况。
- 一个真实的二进制最大优先级队列对事件进行排序(`peek O(1)`,插入/移除 `O(log n)`)。
- 事件智能视图将透明的确定性风险评分与 AI 严重程度区分开来,并解释分歧原因。
- 支持性的源 ID、矛盾之处、缺失的信息、澄清问题、不确定性、团队/设备、行动顺序和沟通方式均可进行检查。
- CSV、JSON、PDF 和直接输入的文本进入一个分阶段的 Data Injection Lab:检查 → 映射 → 批准 → 编辑 → 验证 → 导入。
- 每一个映射都是可见的;不确定的映射绝不会被静默应用。验证报告可供下载。
- 基于加权邻接表图的 A*/Dijkstra 路由算法可计算主路线、备用路线和朴素距离路线。LLM 绝不会凭空捏造路径。
- 五个可重现的场景会改变相同的状态:西门人流激增、相互矛盾的烟雾报告、多语言医疗事件、无障碍通道受阻以及误判重复事件挑战。
- 接受/修改/驳回、团队分配、步骤完成、备注和解决方案都会创建仅允许追加的审计事件。“接受”意味着主管批准——而不是调度。
## 混合 AI 架构
| 确定性代码负责 | Gemini 负责 |
|---|---|
| 数值验证与标准化 | 解释非结构化的事件报告 |
| 0–100 的风险计算与因子分解 | 比较可能的跨语言重复项 |
| 二叉堆排序 | 综合矛盾与不确定性 |
| 图路由与动态边成本 | 提出不熟悉的 schema 映射 |
| 文件限制、服务器设定的审计参与者、持久化 | 起草感知受众和紧急程度的公告 |
| 运行时 schema 验证与源 ID 检查 | 生成最小化的高价值澄清问题 |
```
flowchart LR
A["Telemetry, reports, files, topology"] --> B["Strict validation and normalization"]
B --> C["Deterministic risk, priority, and routing"]
B --> D["Gemini interpretation and semantic comparison"]
C --> E["Validated evidence-grounded recommendation"]
D --> E
E --> F["Supervisor review: accept, modify, or dismiss"]
F --> G["Append-only audit event"]
```
AI 响应使用严格的结构化契约、当前官方的 `@google/genai`、受 JSON schema 约束的输出、独立的运行时验证、证据 ID 验证,并且只允许进行一次受约束的修复尝试。`GEMINI_MODEL` 控制模型;文档记录的默认值是稳定且具有成本效益的 `gemini-2.5-flash-lite`,已通过 [Google 模型指南](https://ai.google.dev/gemini-api/docs/models/gemini-2.5-flash-lite) 验证。
当提供商或密钥不可用时,UI 会显示 **“AI analysis unavailable.”**。风险、优先级排序、遥测、上传验证和路由将继续工作。语义融合、矛盾综合、AI 置信度和生成的公告会被标记为不可用,而不是被预设的输出所替代。
请参阅 [架构](docs/architecture.md)、[安全](docs/security.md)、[无障碍性](docs/accessibility.md) 和 [prompt 进化](docs/prompt-evolution.md)。
## 在本地运行
环境要求:Node.js 22+,npm。
```
git clone https://github.com/abhijithbhat/aegisgrid-2026.git
cd aegisgrid-2026
npm install
cp .env.example .env.local
npm run dev
```
打开 `http://localhost:3000`。对于确定性和场景工作流,Gemini 密钥是可选的。要启用实时语义分析,请设置仅限服务器端使用的 `GEMINI_API_KEY`;切勿使用 `NEXT_PUBLIC_` 密钥。
### 环境变量
| 变量 | 用途 |
|---|---|
| `GEMINI_API_KEY` | 仅限服务器端的 Gemini API 凭证 |
| `GEMINI_MODEL` | 提供商模型,默认为 `gemini-2.5-flash-lite` |
| `AI_TIMEOUT_MS` | 单次请求的提供商截止时间(在代码中受限) |
| `AI_MAX_RETRIES` | 瞬时故障重试;最多重试一次 |
| `ENABLE_FIRESTORE` | 启用持久化的服务器端事件/审计存储 |
| `FIREBASE_PROJECT_ID` | 使用应用默认凭证时的 Firestore 项目 |
| `APP_ORIGIN` | 绝对生产环境来源和脚本目标 |
## 验证
```
npm run typecheck
npm test
npm run build
npm run check:size
npm audit --omit=dev --audit-level=high
```
完整的本地检测门禁是 `npm run verify`。浏览器检查使用 `npm run test:e2e`;AI 评估工具包针对 `APP_ORIGIN` 使用 `npm run evals`。
测试涵盖了风险边界、堆排序/复杂度行为、重复项拦截、误判重复项保留、无障碍路由、严格的 AI 契约、修复/故障安全行为、格式错误/对抗性导入、超大文件、未知区域、跨域写入、类型化 API 以及降级模式。
## Data Injection Lab 契约
- 最大文件大小:客户端和服务器端均为 2 MiB。
- 允许的格式:CSV、JSON、可选择文本的 PDF 以及纯文本。
- PDF 限制:50 页和 250,000 个提取字符。扫描/加密的 PDF 会显示有用的错误消息提示失败,而不是假装 OCR 成功。
- 标准遥测数据包括时间戳、区域、占用率/容量、人流、队列、温度、AQI、噪音、传感器健康状况、阻塞情况和事件阶段。
- 负数/不可能的值、缺失的容量、无效的时间戳、NaN/无穷大、嵌套的 JSON、格式错误的行、重复的表头以及未知的区域都无法通过严格标准化。
- 上传的文本被界定为不受信任的数据,不能更改指令,并在处理后丢弃;只有标准化的批准值才能被存储。
## 安全状态
安全审查日期:**2026-07-11**。
- 代码仓库及其两次提交历史中未跟踪任何凭证、私钥、`.env` 文件或已知的 GitHub/Gemini token 格式。
- 生产环境响应设置了 CSP、HSTS、`nosniff`、frame denial、opener isolation、严格的权限策略以及严格的 referrer 处理。
- 浏览器 API 调用仅限于同源;跨域请求在解析上传、验证操作或调用 Gemini 之前就会被拒绝。
- 上传内容受到白名单限制,上限为 2 MiB,在解析时限制了行/页/文本数量,被视为数据而非指令,并且从不进行原始持久化存储。
- Firestore 规则拒绝所有直接的浏览器读/写操作。持久化写入是在服务器端进行的,经过了 schema 验证,并标记了参与者。
- GitHub Actions 运行类型、lint、测试、构建、大小、浏览器无障碍以及高/严重级别生产依赖项的门禁检查。CodeQL 在 `main` 分支和每周定期运行 `security-extended` 的 JavaScript/TypeScript 测试套件。
- 在升级了 Next.js、Firebase Admin、Vite、Wrangler 和 Cloudflare Vite 插件之后,当前的生产环境审计**没有高危或严重级别的建议**。
`npm audit` 仍然报告了八个**中等严重程度的传递性**建议:Next.js 打包了一个较旧版本的 PostCSS,该库仅用于编译受信任的项目 CSS;而 Firebase Admin 的存储链保留了 `uuid@9`,尽管 AegisGrid 并未调用受影响的调用者提供的缓冲区 UUID API。npm 建议的强制修复会错误地降级核心框架,因此刻意未予应用。这些遗留问题已被记录而非被隐藏,并且在上游软件包发布兼容的修复程序时必须重新检查。
有关私有报告,请参阅 [安全策略](SECURITY.md);有关生产环境的限制,请参阅 [详细威胁模型](docs/security.md)。
## 云部署
`Dockerfile` 以 Node 22 和注入的 Cloud Run `PORT` 为目标。通过应用默认凭证配置 Firestore,并将 `GEMINI_API_KEY` 置于 Google Secret Manager 中;Google 建议在 Cloud Run 中使用服务器端的 Admin 初始化和托管密钥。相同的 UI 可以通过 Codex Sites 在诚实的无凭证/降级模式下进行发布。
Firestore 规则拒绝所有直接的浏览器访问。审计事件是通过服务器端设置的主管角色创建的,并使用仅限创建的文档身份。公开的无凭证演示有意将场景/遥测状态保持在瞬时状态;启用 Firestore 可使审计存储持久化。真实的场馆试点仍然需要组织 SSO 和正式的角色授权。
## 演示与操作假设
请按照种子 `2026` 跟随 [七分钟评审演示](docs/judge-demo.md)。所有场馆记录和性能数据都是合成的,不对现实世界的影响做任何声明。在进行真实的试点之前,请添加场馆 SSO、正式的授权角色、托管速率限制、区域性保留策略、安全审查、操作员培训以及批准的事件处理程序。
## 仓库规则
- 一个应用程序,一个分支,无密钥。
- `.env.example` 已提交;`.env*` 保持被忽略。
- `scripts/check-repo-size.mjs` 验证提交的有效载荷保持在 10 MiB 以下。
- CI 和 CodeQL 在单一的提交分支上运行,不创建发布分支。
- 源报告在融合后被保留;隐藏的推理过程绝不会被存储。
- 禁止面部识别、生物识别、医疗诊断、歧视性分析或个人身份推断。
MIT 许可证。为 PromptWars 虚拟挑战赛 4:智能体育场与赛事运营而构建。
标签:MITM代理, 可解释AI, 多源数据融合, 实时决策系统, 应急响应决策支持, 自动化攻击, 请求拦截, 赛事场馆安全, 运营情报