From 119fb7b2a994d54e4d0a40f7bc2ef6238b162387 Mon Sep 17 00:00:00 2001 From: ila <2+ila@noreply.git.ilapage.cn> Date: Fri, 14 Aug 2026 09:05:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E4=BB=A3=E7=A0=81=E5=9C=B0=E5=9B=BE?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=88=B0=20GoAdmin=20=E9=87=8D=E5=BB=BA?= =?UTF-8?q?=E5=9F=BA=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Architecture-and-Code-Map.-.md | 44 +++++++--------------------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/Architecture-and-Code-Map.-.md b/Architecture-and-Code-Map.-.md index 2aab14a..c885902 100644 --- a/Architecture-and-Code-Map.-.md +++ b/Architecture-and-Code-Map.-.md @@ -23,15 +23,15 @@ Bell 也可接收合成事件、传感器平台或第三方系统事件;Sense | 能力 | 路径 | 首个阅读入口 | 验证位置 | 风险 | |---|---|---|---|---| -| Sense 产品 | `Sense/` | `Sense/AGENTS.md`;后续 README/入口 | `Sense/` 内测试 | 高:设备、媒体、凭据、并发对账 | +| Sense 产品 | `Sense/` | `Sense/AGENTS.md`;待 GoAdmin 派生工单建立 README/入口 | 待新骨架建立 | 高:GoAdmin 派生、设备、媒体、凭据 | | Brain 推理 | `Brain/` | `Brain/AGENTS.md`;后续包入口 | `Brain/` 内测试与契约测试 | 高:模型、GPU、隐私、事件语义 | -| Bell 产品 | `Bell/` | `Bell/README.md`、`Bell/server/main.go`、`Bell/web/src/main.js` | `Bell/server` Go 测试与 `Bell/web` lint/build | 高:认证、不可变事件、告警状态机、并发处置 | +| Bell 产品 | `Bell/` | `Bell/AGENTS.md`;待 GoAdmin 派生工单建立 README/入口 | 待新骨架建立 | 高:GoAdmin 派生、认证、事件与告警状态机 | | 共享契约 | `contracts/` | `contracts/AGENTS.md` | 三端消费者/生产者测试 | 高:兼容性与跨项目影响 | | Harness | `dev_scripts/` | `check_harness.py` | `tests/` | 中 | | 工单模板 | `.gitea/issue_template/` | `task.md` | Harness 严格检查 | 中 | | Wiki 镜像 | `docs/` | `docs/README.md` | `sync_wiki_docs.py --check` | 低;禁止直接编辑 | -Sense 与 Bell 已建立独立业务入口;Brain 的具体函数、路由和测试入口仍须随骨架工单更新,不复制旧仓库代码地图。 +旧 Sense、Bell 入口仅存在于 `explore` 快照,不是 `main` / `dev` 当前代码地图。三个项目的新入口必须随新骨架工单建立;不得把旧自研基础框架复制回 `dev`。 ## 两条主要执行路径 @@ -73,47 +73,21 @@ Sense/Brain 生成事件 - 单项目工单不得顺带修改其他项目;共享契约变更必须由协调工单统筹。 -## Sense 代码入口与模块边界 +## Sense 新代码入口 -- `Sense/server/main.go`:后端进程入口,调用 `cmd/sense` 启动。 -- `Sense/server/cmd/sense/root.go`:配置、数据库、迁移、模块注册和优雅退出编排;后续功能通过独立 `modules_.go` 注册,不反复修改共享入口。 -- `Sense/server/internal/platform/`:PostgreSQL、迁移、HTTP/JSON、健康检查与静态资源宿主。 -- `Sense/ui/src/bootstrap/`:Vue、路由、Vuex、请求封装和功能模块自动发现。 -- `Sense/ui/src/layout/AppLayout.vue`:基于 go-admin-ui 交互约定的侧栏、顶部导航、标签栏和页面容器。 -- `Sense/config/`:无秘密配置模板;真实数据库 URL 和后续签名密钥只能由仓库外环境提供。 -- `Sense/scripts/bootstrap/`:精确工具链检查和无需 Brain/Bell 的内存模式 smoke。 - -默认只注册工作台、健康检查和系统信息;go-admin 演示与代码生成菜单、路由和后端接口均未注册。正式启动默认要求独立 PostgreSQL;`memory` 只用于自动化测试和本地 smoke。 +Sense 当前处于重建前的空基线。新入口必须由 GoAdmin 派生工单从冻结 go-admin/go-admin-ui 源码建立,并在来源清单记录上游 commit;不得沿用 `explore` 中自研的 HTTP、认证、RBAC 或前端外壳作为基础框架。 -## Sense MVP 模块地图 +## Sense 旧 MVP 对照 -Sense 后端功能以 `Sense/server/app/sense/` 为根,并通过 `Sense/server/cmd/sense/modules_.go` 独立注册: - -- `identity/`:Sense 独立账户、bcrypt 密码、会话、四角色 RBAC 与统一审计;签发者和受众只属于 Sense。 -- `device/`:Device 台账、状态、分页和 AES-256-GCM 凭据保险箱;ONVIF 与 RTSP 凭据可分离或显式复用,读取模型只返回两组凭据是否已配置。 -- `adapters/onvif/`、`adapters/rtsp/`、`admission/`:获准网卡上的受控发现、手工 ONVIF 接入、Media 服务发现、Basic/Digest 认证、Profile/StreamUri 读取和 RTSP 验证。跨主机 Media 地址固定回用户已授权的 Device Service origin;跨主机 RTSP URI 只替换为授权主机并保留报告端口与路径。接入结果和脱敏 Profile 持久化到 PostgreSQL,重启后可恢复。 -- `adapters/mediamtx/`、`media/`:外部 MediaMTX 进程所有权、localhost Control API、媒体期望态与实际态对账;接入验证出可用 Profile 后自动按 Device/Profile 幂等建立并对账媒体路径。首次路径使用 add、已有路径使用 replace,控制 API 启动竞态在限定时间内重试;Sense 完成数据库迁移后自动恢复 `desired=running` 路径。路径不存在必须报告配置失败,不能伪装为 waiting。 -- `liveview/`:绑定当前用户、最长两分钟的单路播放会话;列表投影设备名称、位置、码流名称与用途,只在内部保留 ID,不暴露源 URI 或摄像机秘密。`waiting` 会话立即加载播放器以触发 MediaMTX 按需拉流,会话轮询只读刷新媒体实际状态。播放器包装页仅允许被 Sense 同源页面嵌入(`SAMEORIGIN` 与 `frame-ancestors 'self'`),其他页面继续使用全局 `DENY`。iframe 导航使用有效 Sense 会话 Cookie、媒体读取权限及同源 iframe Fetch Metadata 认证,不依赖浏览器导航无法附加的 `X-Product` 请求头;普通 API 仍要求产品头。 -- `area/`:归一化多边形/方向警戒线、不可变版本、并发版本校验和分辨率变化后的重新校准。 - -前端在 `Sense/ui/src/{api,views,router/modules,components}/sense/` 使用对应模块;通用页面复用 Element Plus 表单、表格、分页、Dialog、Tag 和应用容器,只为播放器与区域画布新增局部业务组件。项目内 `identity.RecordAudit`、`device.ReadRTSPCredential`、`device.Describe`、`admission.VerifiedProfile`、`media.PlaybackRoute` 和 `area.ExportCurrent` 是窄适配端口,不是跨项目契约。 +旧设备、ONVIF/RTSP、MediaMTX、实时监看和区域配置实现保存在 `explore`。迁移时只提取已确认业务需求和必要业务适配器;通用认证、权限、菜单、请求封装和管理端外壳必须优先使用 GoAdmin/go-admin-ui。 -## Bell MVP 模块地图 +## Bell 旧 MVP 对照 -- `Bell/server/main.go` 与 `cmd/bell/root.go`:命令入口、配置、迁移、HTTP 注册和优雅退出。 -- `Bell/server/app/auth/`、`rbac/`、`audit/`:Bell 独立账户、bcrypt 密码、服务端会话、管理员/操作员/只读角色与只追加审计。 -- `Bell/server/app/event/`、`receipt/`:不可变 Event、`(producer_id, source_event_id)` 永久幂等回执和游标查询。 -- `Bell/server/app/synthetic/` 与 `server/testdata/events/`:只在 development/test 注册的匿名合成事件,复用正式 Event 服务。 -- `Bell/server/app/rule/`:规则版本、每次评估解释、实际规则快照和按规则/地点关联 Alert。 -- `Bell/server/app/alert/query/`、`alert/lifecycle/`:Event/Alert 双向追溯、单一 ack 获胜者、结果必填的 close、幂等重复和只追加时间线。 -- `Bell/server/migrations/`:事务迁移与数据库不可变触发器;所有表只属于 Bell 数据库。 -- `Bell/web/src/{api,views,store,layout}/`:Vue 3 + Element Plus 管理端,一级导航为工作台、预警管理、事件查询、规则配置;系统与合成入口按权限/环境出现。 - -Event 写入、幂等 Receipt、规则评估和 Alert 创建/关联处于同一数据库事务;规则或关联失败时不保留半成品 Event。一个 Event 可匹配多个规则,一个未关闭 Alert 可聚合相同规则与地点的多个 Event。 +旧 Event → Rule → Alert → ack/close 实现在 `explore`。迁移时保留业务语义、不可变与幂等约束,但新的通用认证、RBAC、菜单、审计和管理端外壳必须基于冻结 GoAdmin 源码。