Commit Graph

977 Commits

Author SHA1 Message Date
c92ad41bd1 feat(control): 视频源状态检测与展示
- 新增 service.FetchVideoSourceStatus: 调 agent /v1/graphs 解析
  input_rtsp 节点 (custom_metrics: streaming/last_error/fail_count)
- 设备详情页运行与服务区块展示每个视频源:
  在线/离线 + 失败原因(如 RTSP 打开失败: 404) + 帧率 + 历史失败次数
- 视频源离线时红色提示,与媒体服务状态区分
2026-08-02 12:20:13 +08:00
dca065e6cc feat(media): /api/graphs 列表返回完整节点快照(含 custom_metrics)
之前列表接口手写简化输出(仅 name/running/fps),无节点信息;
改为 GraphSnapshotJson 完整输出,一次请求即可获取全部节点状态
(供管理端视频源在线/离线检测)
2026-08-02 12:18:41 +08:00
d80a62aabf feat(media): input_rtsp 视频源状态检测与上报
- 节点维护 streaming/fail_count/last_error/last_error_at/ok_at 状态
- 拉流失败分类上报具体原因:
  RTSP 打开失败(带 av_strerror 文本)/无视频流/编码不支持/解码器失败/读取中断
- 实现 GetCustomMetrics,经 /api/graphs 节点快照暴露
  (custom_metrics: type/url/streaming/online/fail_count/last_error/时间戳)
2026-08-02 12:17:17 +08:00
aae5bc36de fix(agent): systemctl 模式 Status 补充失败原因(LastError)
enable=false 时走 NewSystemCtlController,其 Status() 在服务未运行时
只返回 Running:false 无原因。现通过 systemctl show 获取
ActiveState/SubState/Result/ExecMainStatus/NRestarts,
给出可读提示: '启动失败(退出码 X, 已重启 N 次)' 或 '未运行(systemctl: x/y)'
2026-08-02 12:10:44 +08:00
6a995db6e2 fix(ui): 服务状态提示优化 - 区分故障原因,透传媒体错误
- agent: procctl.Status 增加 LastError(未检测到进程/进程已退出原因),
  config/status 透传 media.last_error
- control: ConfigStatusMediaServer 增加 LastError 字段
- control: loadConfigStatus 错误分类(agent 未响应 vs HTTP 错误,含 IP:端口)
- UI 文案: '待确认/未确认' -> '状态未知',媒体服务行显示具体错误
  用户可区分: 服务故障(带原因) vs 配置未取到 vs 视频源问题
2026-08-02 12:06:52 +08:00
80c1e63c95 docs: 新增根级 AGENTS.md 仓库总规范
pi 从 cwd 向上加载 AGENTS.md 并拼接: 根目录工作时不会加载子目录规范,
补根级总览(仓库结构/两端关系/工作流),指向 edge/control 各自细则
2026-08-02 11:45:49 +08:00
cefc155614 chore: 统一 CHANGELOG 到根目录,更新 control/AGENTS.md 过时内容
- 根目录新增 CHANGELOG.md(Keep a Changelog 风格):
  v1.0.0 里程碑(单仓库合并/断电保护/产品镜像/版本机制)+ 早期历史迁移
- 删除 edge/CHANGELOG.md(内容并入根)
- VERSION 保持 edge/ + control/ 两端独立(构建机制依赖,发布节奏不同)
- control/AGENTS.md: managerd→safesightd、旧路径→新单仓库路径、文档引用更新
2026-08-02 11:43:21 +08:00
29d9ef5d0d refactor: 项目结构梳理 - 设备端/管理端对称布局
仓库结构:
  edge/     设备端(原根目录设备端代码整体移入)
  control/  管理端(清理后)
  docs/     文档(PRD 移入 design/)
  README.md 根导航(新增)

清理:
- control/.brainstorm 临时草稿删除
- control 根级重复文档(API表/PRD_04)并入 docs/design/
- control/plan.md -> docs/implementation/control-plan.md
- control/safesightd-linux-arm64 二进制取消版本控制(.gitignore)
- edge/transform 模型转换产物归入 models/,onnx/pt 大源文件取消跟踪(.gitignore)
- Readme.md(PRD) -> docs/design/PRD_Product_v1.2.md(避开 README 大小写冲突)

更新:
- 根 README.md 导航、docs/README.md 文档索引
- deployment.md/检查表路径加 edge/ 前缀
- .gitignore 重写(edge/control 分区规则)
2026-08-02 11:39:54 +08:00
02be9ddd47 docs: 删除过时命令草稿 命令.md
- 该文档为旧项目(Rk3588Sys/rk3588-agent/managerd)时代命令备忘,
  引用的项目名/路径/二进制名全部过时,比已删的 guide.md 更旧
- 唯一仍有效的模型转换命令(pt2rknn_yolov8.py)已迁移至 guides/models.md
2026-08-02 11:34:46 +08:00
06eab42403 docs: 清理过时文档,简化目录结构
删除(过时/重复/未采用):
- archive/ 源码片段 dump(2)
- workshop_ai/ 合成数据标注临时工作(6, 2026-04 阶段已过)
- design/theme-preview-*.html UI主题预览(3)
- design/PRD_02 React前端PRD(实际UI用Go模板, 未采用)
- requirements/guide.md 过时命令笔记(与guides/命令.md重复)

合并: architecture/ 2个文档并入 design/
目录由 10 个子目录简化为 7 个:
deployment requirements design implementation bugfix testing guides
2026-08-02 11:32:22 +08:00
910febe703 docs: 部署文档归入 docs/deployment/ 子目录
- deployment/control-deployment/检查表/离线部署 4 个部署文档统一移入
- 更新 README 导航、部署手册互引、检查表、deploy.sh 提示中的路径
2026-08-02 11:30:03 +08:00
007a996c37 docs: 规范化文档目录结构
- 根 docs/ 保留产品入口文档(README/部署手册/检查表/离线部署)
- 按内容归类到子目录:
  requirements/(需求) design/(设计/接口/方案/UI) architecture/(架构)
  implementation/(实施/计划/跟踪) bugfix/(缺陷记录) testing/(测试)
  guides/(操作指南:配置/模型/命令/依赖/调试) archive/(源码片段归档)
- 删除 superpowers 目录(edge 与 control 两处, 含历史设计草稿)
- 更新 docs/README.md 导航与新结构一致
2026-08-02 11:28:51 +08:00
dc62cf066c fix: 恢复被覆盖的 Readme.md(PRD),导航文档移至 docs/README.md
- Windows 大小写不敏感导致新 README.md 覆盖了原有 Readme.md(PRD 1305行)
- 从 git 历史恢复 PRD,导航内容另存为 docs/README.md
2026-08-02 11:15:33 +08:00
8d8ba65eef docs: 单仓库整理 - 文档统一到根 docs/ + README
- 检查表/离线部署文档/管理端部署指南移入根 docs/
- control/docs/deployment.md 更名为 control-deployment.md(避免与设备端部署手册混淆)
- 新增 README.md:仓库结构、版本机制、快速开始、合并历史说明
- control-deployment.md 适配新仓库路径(cd control)
2026-08-02 11:14:52 +08:00
98e375dc36 chore: 合并 safesight-control 仓库为 control/ 子目录
项目合并为单仓库:设备端(根) + 管理端(control/)。
两端 git 历史完整保留(git subtree 合并)。

git-subtree-dir: control
git-subtree-mainline: 923ab10d5c
git-subtree-split: 70738edb31
2026-08-02 11:13:26 +08:00
70738edb31 feat(control): 双层版本模型 - 语义化主版本显示
- 新增 VERSION 文件(1.0.0)作为 control 主版本号来源
- UI 版本展示分层: 列表页/详情页/footer 显示 V1.0.0, 构建号悬停可见
- init() 兜底: 未注入时 0.0.0
2026-08-01 17:16:13 +08:00
923ab10d5c feat(edge): 双层版本模型 - 语义化主版本 + 构建号
- 新增 VERSION 文件(1.0.0)作为主版本号来源,发版改文件即可,不依赖 git tag
- agent: Version=主版本(VERSION 文件), BuildID=构建号(时间戳), GitSHA 保留
- media: 版本输出 v1.0.0 (build YYYYMMDD.HHMMSS, git xxxxxxx)
- init() 兜底: 主版本 0.0.0 / 构建号自动生成,产品上无占位值
2026-08-01 17:16:09 +08:00
2a6e2ea707 fix(control): 消除 dev 占位版本号,init() 兜底为构建时间
即使构建时忘记注入 ldflags,footer 也不会显示占位版本
2026-08-01 17:01:03 +08:00
140018ac4d fix(edge): 消除 0.0.0-dev 占位版本号,init() 兜底为构建时间
- agent Version/BuildID/GitSHA 默认值改为空+init() 自动填充构建时间
  即使构建时忘记注入 ldflags,产品上也不会出现占位版本号
- version.h 默认值改为 unknown
2026-08-01 17:01:00 +08:00
a4e179f30d fix(control): 版本号改为构建日期时间,不依赖 git tag
- control Version = YYYYMMDD.HHMMSS(构建时间)
- 大量小版本迭代场景:无需打 tag,UI footer 版本号直接可读新旧
2026-08-01 16:59:07 +08:00
75098ce81e fix(edge): 版本号改为构建日期时间,不依赖 git tag
- agent Version/BuildID = YYYYMMDD.HHMMSS(构建时间),GitSHA 保留短 sha
- media(C++) 版本同样注入构建时间(CMake 支持 -DRK_PROJECT_VERSION 覆盖)
- 适应大量小版本迭代:不再依赖 git tag,UI 版本号直接可读新旧
2026-08-01 16:59:03 +08:00
c6da0a6c6d feat(control): 版本机制打通,UI 展示 agent/引擎/control 真实版本
- ui.go: 版本号由硬编码常量改为可注入变量( -X ...web.Version )
- 新增 service.FetchDeviceVersions: 调用 edge /v1/versions 采集
  agent 版本/build_id/git_sha + media 引擎版本 + 设备模型数
- 设备详情页: 新增引擎版本/构建信息/模型数量展示
- 设备列表页: 新增版本列(含 build/git 悬停提示)
- 构建脚本(3处): 注入 control 版本号(git describe)
- 新增模板语法测试(43个模板防回归)
2026-08-01 16:54:10 +08:00
201ad65164 fix(edge): 构建时注入版本信息,修复设备版本恒为 0.0.0-dev
- build.sh / package-offline.sh: agent 编译注入 main.Version/BuildID/BuildType/GitSHA
  (版本号取 git describe, build_id 取构建时间)
- build.sh: media(C++) 编译注入 RK_GIT_SHA
- 修复后 control 设备详情/列表可显示真实版本,不再是占位的 0.0.0-dev
2026-08-01 16:54:07 +08:00
a1064961cc docs: 客户现场部署检查表移入 control 仓库
- 新增 docs/客户现场部署检查表.md
- 更新为产品镜像批量生产流程(16G 母卡 -> Etcher 批量烧录 -> init-device.sh 初始化)
- 新增断电保护(overlayroot)维护备忘章节
2026-08-01 16:46:44 +08:00
227dc04004 feat(edge): 断电保护(overlayroot+/data)与产品镜像批量生产流程
- 新增 setup-overlayroot.sh: 一键断电保护
  - overlayroot(tmpfs) 保护根分区, 断电不再损坏文件系统
  - 自动建 /data 独立分区 + fstab bind 挂载运行数据
  - 迁移存量数据, journald 内存日志限容
  - disable/enable 一键切换维护模式(适配香橙派 U-Boot/extlinux, 无 GRUB)
- 新增 prepare-image.sh: 母卡出厂化清理
  - 清 machine-id/SSH 密钥/device_id/hostname/日志
  - 防误: 检测 overlayroot 启用状态, 保证镜像为可写出厂状态
- 新增 init-device.sh: 每台初始化
  - 主机名/静态IP(netplan)/身份验证
  - /data 自动 growpart 扩容到整卡剩余空间(64G 产品卡)
  - 统一启用断电保护
- deploy.sh/ops.sh/package-offline.sh: 集成新脚本
  - ops.sh 新增 overlay-status/disable/enable/verify
- docs/deployment.md: 重写为主流程文档
  - 产品镜像批量生产(16G 母卡->小镜像->Etcher 批量烧录->每台初始化)
  - 移除废弃的克隆卡流程
2026-08-01 16:45:47 +08:00
e931e4d95b feat: mock alarm server logs full JSON body 2026-07-31 15:18:46 +08:00
0c52d01c0b fix: channelNo defaults to video source name, cleanup orphan units, disable date prefix in template 2026-07-31 15:18:27 +08:00
decc980665 docs: add third-party alarm API spec from customer 2026-07-30 12:43:40 +08:00
eaee750443 docs: add rule - deploy must check systemctl is-active after stop, no fixed sleep 2026-07-30 11:31:04 +08:00
35c413367f docs: add update steps and empty config fix to debug guide 2026-07-29 23:12:35 +08:00
9ed574050f fix: save last_good.json on successful reload, no rollback on failure 2026-07-29 23:03:11 +08:00
f721bb8d9f fix: remove config rollback from normal deploy path - false restores caused by slow graph rebuild 2026-07-29 23:00:51 +08:00
33a7367ecd fix: add InjectIntegrationsIntoConfig to device detail deploy path; docs: add edge config check command 2026-07-29 22:35:36 +08:00
69ae1803ad docs: clarify journalctl -f equals tail -f, edge-server hot-reloads config 2026-07-29 21:58:16 +08:00
267ec2c237 docs: add multi-line bash continuation rule to AGENTS.md 2026-07-29 21:53:16 +08:00
805814fcdf docs: simplify debug guide, clean multi-line commands 2026-07-29 21:52:10 +08:00
25734f5775 docs: 客户现场第三方接口调试指南 2026-07-29 21:44:21 +08:00
24386d9cf0 chore: delete 29 legacy skipped tests, fix storage test build error 2026-07-27 21:11:20 +08:00
e4608f48a0 fix: integration test video source detection for Chinese names 2026-07-27 21:04:54 +08:00
b256ecc5d2 test: add 9 integration tests against live safesightd API 2026-07-27 21:03:14 +08:00
5433065925 docs: update test plan - all P1/P2 complete, add new feature tests 2026-07-27 19:44:17 +08:00
d1f85ee794 test: add 18 tests - injectIntegrations, device overlays, tuning, template clone, mergeRuntimeInstancePatch, wizard, ResolveChannelToSource, SaveVideoSourceAsset 2026-07-27 19:43:59 +08:00
148fe97a27 fix: clamp face score to 0.00-0.99 and format with 2 decimal places 2026-07-27 19:30:26 +08:00
85e91f3c2f fix: use stranger likelihood (1 - best_sim) as confidence for unknown face alarms 2026-07-27 19:26:58 +08:00
1ae06ec1fb refactor: reorganize tuning groups by detection function (shoe violation, unknown face, known person, etc.) 2026-07-27 19:19:34 +08:00
43cb4b8411 feat: add description text to tuning sliders explaining parameter behavior 2026-07-27 19:17:23 +08:00
6e32d15c86 feat: add hint with reference values to tuning sliders 2026-07-27 19:14:27 +08:00
3084ddc524 fix: add space between number and unit on tuning sliders 2026-07-27 19:10:24 +08:00
6229a340a8 fix: tune slider formatting - max 2 decimals, integers show no decimal 2026-07-27 19:09:45 +08:00
1de96c4c02 refactor: use hardcoded tuning definitions instead of template-embedded tuning section 2026-07-27 19:07:00 +08:00