Commit Graph
100 Commits
Author SHA1 Message Date
qing 22ade06114 dnfs2: --no-confs 模式 + 全量 CLI 参数(dnfs.ini 字段全部可 CLI 覆盖)
- 新增 --db-host/--db-port/--db-timeout
- 新增 --review-url/--review-timeout
- 新增 --gateway-url/--gateway-timeout
- 新增 --no-confs 开关:跳过 confs 拉取,完全靠 CLI + ENV + 默认值
- services.yaml: dnfs2 启用 --no-confs,所有配置写进 args
2026-08-10 03:35:39 +08:00
qing fc4e1c4a61 feat(dnfs2): CLI 参数标准化 — --host/--log-level/--instance/--config/--help
- 新增 --host 作为 --addr 的规范化别名(两者完全等价)
- 新增 --log-level debug|info|warn|error,实现日志级别过滤
  * _log() 按 Config.log_level 过滤,低于设定级别的日志直接丢弃
  * 兼容现有大写 level 字符串(INFO/WARNING/ERROR)
- 新增 --instance 指定实例名(注册中心用,默认 dnfs2)
- 新增 --config 覆盖 confs 拉取的配置名(默认 dnfs.ini)
- 新增 --help/-h 打印用法并退出
- Config 优先级不变:CLI > env > confs > 默认值
- services.yaml 同步声明 --instance 和 --log-level
- 更新启动输出包含 instance/log-level/config 信息
2026-08-10 03:32:58 +08:00
qing 14971971a1 chore(services.yaml): 为 db2/fsys 显式声明 --instance 和 --log-level 参数
已支持标准化 CLI 的服务(db2/fsys)在 args 中显式传入
--instance 和 --log-level,使 services.yaml 成为配置的唯一事实来源。
其余服务待 CLI 标准化后逐步补充。
2026-08-10 03:29:08 +08:00
qing 391e6b0066 feat(db2): CLI 参数标准化 — --host/--log-level/--instance/--config/--help
- 新增 --host 作为 --addr 的规范化别名(两者完全等价)
- 新增 --log-level debug|info|warn|error,实现日志级别过滤
  * _log_internal() 按 Config.log_level 过滤,低于设定级别的日志直接丢弃
  * 兼容现有大写 level 字符串(INFO)
- 新增 --instance 指定实例名(注册中心用,默认 db2)
- 新增 --config 覆盖 confs 拉取的配置名(默认 db.ini)
- 新增 --help/-h 打印用法并退出
- Config 优先级不变:CLI > env > confs > 默认值
- 更新启动输出包含 instance/log-level/config 信息
2026-08-10 03:27:12 +08:00
qing ac177c73df feat(fsys): CLI 参数标准化 — --host/--log-level/--instance/--config/--help
- 新增 --host 作为 --addr 的规范化别名(两者完全等价)
- 新增 --log-level debug|info|warn|error,实现日志级别过滤
  * _log() 按 Config.log_level 过滤,低于设定级别的日志直接丢弃
  * 兼容现有大写 level 字符串(INFO/WARNING/ERROR)
- 新增 --instance 指定实例名(注册中心用,默认 fsys)
- 新增 --config 覆盖 confs 拉取的配置名(默认 static.ini)
- 新增 --help/-h 打印用法并退出
- Config 优先级不变:CLI > env > confs > 默认值
- 更新启动输出包含 instance/log-level/config 信息
2026-08-10 03:19:00 +08:00
qing 08df3929b2 feat(core): services.yaml 启动配置 + _run.sh 统一参数透传
Step 1: init.txt → services.yaml
- 新增 InitParser (yaml-cpp), 支持 YAML/TXT 双模式解析, 向后兼容 init.txt
- 新增 services.yaml 声明式服务配置 (name/cmd/args/depends_on/sleep_before)
- 改造 pmc_mtd.cpp 集成 InitParser, 支持目录/.yaml/.txt 三种路径模式
- Makefile 添加 InitParser 编译目标 + -lyaml-cpp 链接
- setup 脚本添加 libyaml-cpp-dev / yaml-cpp-devel 依赖
- core/_run.sh 改为 -i . (目录模式, 自动查找 services.yaml → init.txt)

Step 2: 11 个 _run.sh 统一参数透传
- 8 个脚本改动: 追加 "$@" / 移除 sleep / 修引号
- waf 保留 -c config.yaml 作为脚本默认值
- services.yaml waf args 改为 [] 避免重复传递
- 开发方案文档: docs/reports/core_services_yaml_dev_doc.md
2026-08-10 03:16:28 +08:00
qing bba7ee3eb4 feat(pybot): bot4cj 的 Python 迁移版(.mt 解析 + 硬件驱动 + 插件系统)
- parser: FSM 解析器与仓颉版逐语义对齐,修 S01/S02/S04/Q05
- robot/hardvars: 六类硬件变量工厂,修 r.cj:911 重名 FIXME、Q07 倒序释放
- plugin: Python 插件替代 Lua 桥接,修 S07 三级路径查找
- hd: i2c(每fd锁 Q03/S06)/spi/servo/kalman/mpu6050(S05/Q06)/speaker(S03 实声)
- modules: PCA9685 与 Lua 版逐字节对齐;ADS1115 重写(experimental);ADS1256 空桩
- tests: 42 项 pytest 全绿(Mock 总线 journal 断言)
- CLI: --dry-run / --test roundtrip / --verbose;运行时零第三方依赖
2026-08-09 18:57:03 +00:00
qing 85eaa2114e Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-10 02:48:45 +08:00
qing 26c91c6036 docs: 新增 actpred 效果评估报告,移除 INDEX.md 2026-08-09 18:38:24 +00:00
qing cfe30a867c docs(core): 将架构总览合入 core README,新增模块 onboarding 文档
- 重写 core/README.md:整合运行模式/CLI、任务池模型(Tttask/HttpTask/
  ConfsTask)、进程托管核心(PPool/ProcessTask/pmc_mtd)、IPC 层(Mq+Pipe)、
  HTTP 管理接口(5200 gateway 验签)、内嵌 confs 等章节;修正已废弃的
  users/extra 目录说明,改为实际文件结构树
- 新增 docs/reports/core_module_overview.md 作为底层逐文件分析记录
2026-08-10 02:17:35 +08:00
qing 6089e7427d docs: 补充 actpred 注意力改造测试报告与 bot4cj Python 迁移开发文档 2026-08-09 18:17:06 +00:00
qing 4dd25486f8 feat(actpred): 多帧注意力架构改造(Transformer 替换 concat 融合,支持多帧图像+历史动作序列) 2026-08-09 18:17:03 +00:00
qing 2959197597 docs(dnfs): 将已修复审计项合入 dnfs.py 注释并精简审计报告 2026-08-10 01:55:58 +08:00
qing c07ad7ac39 docs: 新增架构/模块文档与项目评估资料
- docs/ARCHITECTURE.md: 系统架构说明
- docs/MODULES.md: 模块清单与职责
- docs/blackbird_project_profile.md: 项目画像
- docs/blackbird_project_evaluation.md: 项目评估
- docs/reports/fsys_public_frontend_research_20260810.md: fsys 公开前端调研
2026-08-10 01:27:48 +08:00
qing 685c5c1754 refactor(libmsg): 将审计结论合入代码注释并精简审计报告
- 在 libmsg 各头文件修复位置补充 [libmsg-audit <编号>] 标签(27 处),
  覆盖 16 条安全审计发现(P0-1/P0-2/P1-1~3/P2-1~8/P3-1~3),
  将已完成修复锚定到源码
- 从审计文档删除 335 行逐条详细发现(问题描述/修复方案/触发场景/代码块),
  替换为 16 行「已解决发现」紧凑台账 + 源码定位指针
- 文档保留:严重等级表、修复进度汇总、已有安全机制、已知限制 L-1~L-12、
  变更记录、审计结论
2026-08-10 01:26:10 +08:00
qing 373045f0a3 pymsg: 将已修复安全审计项合入源码注释, 精简审计报告
- 将 P0-1/P0-2/P1-1/P1-2/P1-3/P1-5 共 6 条已修复发现作为
  [SECURITY AUDIT ... ✅ 已修复] 注释合入 pymsg 源码对应位置
- 重写 pymsg 审计报告, 删除已合并条目, 仅保留 10 条未修复项待跟踪
2026-08-10 01:08:55 +08:00
qingandWorkBuddy dbc79c52f3 docs(security): 合并 gateway 审计文档并新建 ca 审计索引
- 三份 gateway 审计(20260801/0807/0809)合并为单一 docs/security/gateway_SECURITY_AUDIT.md
- 已完成修复已合入 gateway/src/main.cpp 注释,认证相关项标注迁 ca
- 新建 docs/security/ca_SECURITY_AUDIT.md,同步迁入 P2-3/P1-7/A2 等开放项
- 更新 docs/INDEX.md 审计表、ca/README.md 引用、auth_service_plan/libhttp 文档链接

Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
2026-08-10 00:56:21 +08:00
qing b634f192ea docs: 新增 Blackbird 暖色调 Logo 并嵌入根 README
- 导出 logo.png(2x PNG,金铜渐变徽章 + 几何黑鸟)
- 副标改为 "Powered by UniServe Framework"
- README 标题下方居中嵌入 Logo
2026-08-10 00:03:06 +08:00
qing 59c5fe1feb feat(core): confs2 合并入 core,内嵌 confs 配置服务 v0.1.0
- 新增 ConfsTask(ITask,与 HttpTask 同构):ConfigStore + INI/JSON 取值
  + get/list/reload/health 四路由,协议与 Python confs 逐字节兼容
- 新增 ConfsLogC 异步日志客户端(沿用 confs2 LogC,服务名 confs)
- main.cpp 新增 --confs <port> 选项与 CONFS_* 环境变量;不传则行为不变
- Makefile 链接 -lus_msg,版本 0.0.4 → 0.1.0
- _run.sh 启用 --confs 8010;_set.sh 自建 configs → ../confs/configs 链接
- init.txt 移除 confs2 自启动行(由 core 内嵌承担)
- 黑盒对比测试 16/16 通过(tests/blackbox/test_core_confs.py)
2026-08-09 15:36:32 +00:00
qing 1b282c6f1a feat: confs2 C++20 重写替代 Python confs,时间戳改系统时区
- 新增 confs2/:C++20 重写统一配置服务(libmsg RpcServer)
  - main.cpp: ConfigStore + 4 路由(get/list/reload/health) + INI/JSON 按键取值
  - LogC.hpp: 异步日志客户端(含 P2-3 日志注入防护)
  - 安全机制:TOCTOU 防护、路径遍历防护、扩展名白名单、1MiB 大小限制、缓存防污染
  - 21/21 对比测试全部通过,性能 3x(0.33ms vs 1.01ms),RSS -66%
- confs/confs.py + log_client.py: 时间戳从 timezone.utc 改为系统时区
- confs2/src/main.cpp + LogC.hpp: 同步改为系统时区(localtime + %z)
- core/init.txt: confs/_run.sh → confs2/_run.sh
2026-08-09 14:18:57 +00:00
qing c13d11aafb docs: 更新 INDEX 索引并补充 confs2 C++ 重写开发文档 2026-08-09 13:40:49 +00:00
qing 407ce3c366 feat(ca): 认证独立化 CA 模块 v1.0.0 + gateway v0.9.0 纯转发瘦身
拓扑:waf:443 → ca:8443(认证+前置转发)→ gateway:8445(仅 loopback 纯转发),
WAF upstream 不变,core/dnfs2/前端零改动。

ca v1.0.0(新模块):
- 认证资产逐字搬迁自 gateway v0.8.0(9 条认证路由、Token 双轨吊销、
  PBKDF2、限流、WS 代理鉴权、wrapperHttp、优雅关闭)
- handleForward 前置转发层:固定上游 gateway:8445;无 Target-Url 公开直转,
  有则本地验签后注入 X-Auth-User/X-Auth-Admin/Authorization(strip-then-set)
- is_special_header 新增剥离 x-auth-user/x-auth-admin;上游不可达统一 502
- confs/configs/ca.ini 新增([Upstream] gateway + UPSTREAM_GATEWAY env)

gateway v0.9.0(2470→约 560 行):
- 删除全部认证代码,退居 127.0.0.1:8445
- 启动 loopback 强制自检(非 loopback 拒绝启动)
- X-Auth-User 存在性不变量:显式 Target-Url 无该头一律 401
- gateway.ini 精简至 [Server]/[Proxy]/[Downstream db]

验收:黑盒 34 断言对 8443 原样全绿(32 passed/2 skipped,与基线一致);
探针实测伪造 X-Auth-User 经 CA 被剥离(echo 实证)、直连 8445 无头 401、
白名单外 403、gateway 宕机 CA 502。core/init.txt 加入 ca/_run.sh。
2026-08-09 12:15:35 +00:00
qing bbea1ee9d8 test(gateway): 黑盒测试重写 34 断言 + v0.8.0 增量审计闭环文档
- tests/blackbox/test_gateway.py 重写为 6 段 34 断言(输入校验/whoami+admin.verify/
  captcha-image 代理/路径遍历矩阵/限流随机XFF隔离/CORS+脱敏回归),实测 32 passed/2 skipped
- helpers.py 新增 random_xff/assert_no_internal_leak/db_execute
- docs/security/gateway_SECURITY_AUDIT_20260809.md:A1-A8 增量复审(已全部修复)
- docs/reports/libhttp_remote_addr_dev_doc.md:A4 根治方案(X-Remote-Addr 可信头注入)
- docs/INDEX.md:security 29 篇/reports 12 篇同步
2026-08-09 12:15:32 +00:00
qing 35e8d747e1 feat: smtp3 C++20 重写 + 安全审计修复 (P0×2/P1-2/P2/P3 全部已修复)
- 新增 smtp3: pymsg/TCP :8008 邮件验证码服务 (smtp_v2.py 重写, 零新增依赖)
- 审计实证并修复 2 项 P0: SMTP 响应解析颠倒 (发送 100% 失败)、base64 符号扩展
- 修复 P1-2 SIGPIPE、P3-1 日志注入脱敏、P3-3 IPv6、P3-4 模偏差、P3-5 LogC 长连接复用
- 剩余 P1-1 (TLS 证书校验) 与端到端发信验证待 smtp.ini 凭据就绪
- 新增审计报告 docs/security/smtp3_SECURITY_AUDIT_20260809.md 并更新 INDEX
2026-08-09 06:44:33 +00:00
qing 6bd0fcaf9b fix(captcha2): 修复验证码字符垂直定位错误导致显示不全
generate_image() 中 y_dist(2,12) 在 Python 原版是顶部留白语义,
C++ 重写时误用为字符中心 y 坐标(cy = y - rh/2),
旋转后位图高度 rh 约 25~46px,cy 为负值导致字符上半部被裁掉。

修复:恢复 y 为顶部留白语义(cy = y),加边界钳制确保字符完整
落在 160×50 画布内。同步修复 test_gen.cpp 中的同款代码。
2026-08-09 04:58:41 +00:00
qing 6cf535eb79 build: 添加 captcha2 依赖 libfreetype-dev / freetype-devel 到 setup 脚本 2026-08-09 04:37:21 +00:00
qing 546394b681 feat: captcha C++20 重写 + 安全审计修复 (P0/P1/P2/P3, 10/11 已修复)
captcha2 — C++20 验证码服务(FreeType + stb_image_write):
- 完整实现: 图片生成、CaptchaStore、RateLimiter、pymsg RPC 路由
- 协议完全兼容 Python 原版,gateway 零改动

审计修复 (captcha2_SECURITY_AUDIT_20260809.md):
- P0-1: 存储答案小写化 (对齐 Python 版语义)
- P1-1: gateway 按 IP 限流 10/min + captcha2 全局限流 600/min 兜底
- P2-1: generate_text mt19937 → std::random_device
- P2-2: ::tolower UB → unsigned char lambda
- P3-1: parse_int 辅助函数, stoi 异常可诊断
- P3-2: 显式 #include <iomanip>
- P3-3: 补齐 CAPTCHA_LEN/TTL/RATE_LIMIT 环境变量
- P3-4: LogC 日志超时 5.0→1.0s
- P3-5: 限流/满容抛异常, gateway 映射 429/503
- P3-6: 清理死代码

集成:
- core/init.txt: captcha → captcha2
- confs configs/captcha.ini: 新增 max_store/rate_limit_per_min
- docs: 开发方案、安全审计报告、交叉引用更新
2026-08-09 04:26:09 +00:00
qing 29e4f96061 docs: 合并 smtp 安全审计复审(0809)进初版(0801)
- 将 0809 复审新增的 7 项发现(P1-F1/P2-F2/P2-F3/P3-F4~F7)及测试盲区章节
  并入 smtp_SECURITY_AUDIT_20260801.md,形成统一合并版(保留初版验证记录与
  已修复结论)
- 重复的 0809 复审文档(本地未被 git 跟踪)已删除
- docs/INDEX.md smtp 行指回合并版并标注'初版+复审合并版'
2026-08-09 12:03:36 +08:00
qing 63cfdd2066 actpred: 两轮代码审计修复与文档合并
- 第 1 轮安全审计修复: F-1~F-10(路径校验、预训练架构修正等)
- 第 2 轮复审修复 11 项: 3 项上轮修复不完整(R01 checkpoint 键校验/
  R02 fused_hidden_dim 值域/R03 pretrained=False)+ 8 项新问题
  (actions.npy 形状校验、帧数警告、CLI 值域校验、stats 形状与路径、
  onnxscript 依赖、归一化语义、解析去重)
- 单元测试由 17 扩展至 51 用例(50 通过 + 1 环境性跳过)
- 审计文档两轮合并至 actpred_CODE_AUDIT_20260808.md,更新 INDEX
2026-08-08 19:37:41 +00:00
qing 23a855963b actpred: 预训练与推理测试报告
新增: docs/reports/actpred_pretrain_test_20260808.md (312行)
- action_dim=18变更验证(17项测试通过)
- .mt脚本解析器测试(13文件,22样本)
- 预训练结果(val_loss 2125→190,-91%)
- 推理基准(1.61ms / 622 FPS)
- PyTorch NPU/向量计算单元支持调研
更新: docs/INDEX.md reports计数8→9
2026-08-08 17:29:56 +00:00
qing 45e019952e actpred: action_dim改18 + .mt脚本预训练入口
- config.py: action_dim默认值 8→18(对齐bot4cj 18列)
- mt_parser.py: 轻量级.mt @Action解析器(支持-占位符前向填充)
- pretrain_mt.py: 预训练入口(零图像占位,checkpoint兼容现有推理)
- _run.sh: 新增pretrain子命令
- README.md: 新增预训练文档 + action_dim说明
- test_actpred.py: 测试断言更新为18
2026-08-08 17:09:14 +00:00
qing 37206daf13 bot4cj: 代码审计报告(15项发现,待修复)
新增审计: docs/reviews/bot4cj_CODE_AUDIT_20260808.md
- P0(3项): submitLine运算符优先级bug(DoesNotSync从不触发)、
  print(s)调试残留、扬声器仅sleep未发声
- P1(5项): r"\n"转义不一致、MPU6050地址重复、readI2cReg返回Int8、
  Lua路径硬编码、README D6/D8滞后
- P2(7项): 无测试、注释代码、I2C锁O(n)扫描、Makefile警告关闭等
- 交叉引用旧分析报告D1-D29,新发现S01根因(D11仅说信息不清晰)
更新: docs/INDEX.md reviews计数3→4
2026-08-08 16:40:04 +00:00
qing 397970edc3 docs: 归档 actpred 与 bot4cj 对比研究报告到 reports/ 2026-08-09 00:21:05 +08:00
qing 2151dd5e72 docs: 添加 Blackbird 推广文案包
含主推长文、短平快版本、Slogan 弹药库、配图建议
2026-08-09 00:19:21 +08:00
qing 3d03f7a1ce actpred: 代码审计(16项发现全部修复)+ 文档更新
审计报告: docs/reviews/actpred_CODE_AUDIT_20260808.md
- P0(2项): episode索引错位(dataset.py)、推理归一化静默失败(predict.py)
- P1(6项): 空训练集校验、图像自然排序、空样本防御、形状校验、
  MobileNet下载错误提示、stats路径校验
- P2(8项): README示例修正、公共属性、glob优化、版本约束、
  单元测试(17项)、GPU安装说明、BooleanOptionalAction、ONNX验证

新增文件: actpred/test_actpred.py (17项单元测试, 全部通过)
更新文档: README.md配置表扩充、INDEX.md、审计报告修复总结
2026-08-08 16:05:01 +00:00
qing 1e34348d6c docs: 整理文档模块——归位散落文件、修复双扩展名、补全 INDEX 索引
- 移动 docs/ 根目录散落文件到 reports/(auth_service_plan、aibox_file_network_cli_refactor、blackbird_promo_full)
- 修复 blackbird_research_report.md.md 双扩展名 → blackbird_research_report.md
- INDEX.md 补全缺失条目:dnfs2/fsys/libsqlite3/libth 安全审计,blackbird_research_report、aibox_open_dev_plan 等报告,dnfs2/fsys/libmsg/libtry README
- 更新目录树结构(security 25 篇、reviews 3 篇、reports 8 篇)
- 修正模块描述(BotOps、lci 说明更准确)
- 收录此前未跟踪的 actpred_CODE_AUDIT_20260808.md
2026-08-08 15:55:21 +00:00
qing 0af9019af8 docs: 分发 CHANGELOG 内容到各模块文档并删除 CHANGELOG.md
- gateway/README.md: 新增 0.8.0 版本条目(P0 安全修复、进程退出 bug 修复、完整特性列表),修正版本号 0.7.0→0.8.0
- libhttp/README.md: 新增 v3.4.4 版本条目(Listener::close、doAccept 递归修复、stop() 改进)
- README.md: 修正 gateway 版本号 v0.5.3→v0.8.0
- docs/INDEX.md: 移除 CHANGELOG 引用行
- 删除 CHANGELOG.md(内容已分发,安全审计详情已在 gateway_SECURITY_AUDIT_20260807.md 完整覆盖)
2026-08-08 14:49:21 +00:00
qing 17bc69c45e docs: 添加权限系统独立化计划书 2026-08-08 14:30:44 +00:00
qing c27bd1a161 docs: 新增 core 模块注册中心功能扩展开发文档
- 新增 docs/reports/core_service_registry_dev_doc.md
  包含:服务注册/发现/健康守护/自动重启的完整设计方案
  含 ServiceEntry 数据结构、ServiceRegistry 接口、HealthMonitor 策略、
  HTTP API 定义、Python/C++ SDK、services.yaml 声明式配置、分阶段实现计划
- 更新 docs/INDEX.md 添加文档索引条目
2026-08-08 14:18:29 +00:00
qing 73b72d6889 fix(actpred): 修复归一化统计不一致等 5 项问题并增强可复现性
- train/val 归一化统计量改为仅用训练集计算并落盘复用,修复 val loss 不可信
- predict.py 统计文件路径改用 os.path 处理,修复跨平台与无分隔符路径问题
- dataset.py jpg/png 混合时统一按文件名排序,保证时间顺序
- 新增 --seed 全局随机种子(含 DataLoader generator),训练可复现
- 新增 --max-grad-norm 梯度裁剪(默认 1.0),防 GRU 梯度爆炸
- get_episode_count 与数据集目录过滤条件对齐,避免无效目录导致索引错位
- 空验证集返回 inf 并保底保存最终权重,避免伪造 best 模型
- 清理 export_onnx.py 重复分支死代码
2026-08-08 14:00:49 +00:00
qing c8f2152d0a 调整输出 2026-08-08 16:10:41 +08:00
qing eab58b61f3 更新安装列表和自启动列表 2026-08-08 16:08:48 +08:00
qing bb5e3b973f docs(fsys): 修正 README 缓存/兼容性措辞,测试页补 video Range 用例,审计报告勘误 2026-08-08 07:52:18 +00:00
qing b6a1cadf25 docs(security): libhttp 审计补充下游反馈(P2-7 peer IP / P2-8 流式响应 / P3-3 .so 脱节) 2026-08-08 06:58:24 +00:00
qing 78bf74b067 feat(fsys): C++ 重写 static 模块(libhttp/libmsg 实现 + 安全审计 + 测试页) 2026-08-08 06:58:09 +00:00
qing 575c2a27a4 feat(actpred): 动作预测模块入库(PyTorch 训练/预测/ONNX 导出) 2026-08-08 06:25:06 +00:00
qing f93ae59521 feat: 切换 dnfs 到 dnfs2 启动与安装配置 2026-08-08 13:24:30 +08:00
qing f59988ceda Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-08 08:34:58 +08:00
qing 546b19aece refactor(static): 重写首页,统一设计语言提升视觉和谐感
- index.html: 品牌树 SVG 扩展为 4 层节点,新增径向渐变光晕底衬;
  About 面板新增同心圆装饰 SVG;CTA 树水印重绘为紧凑 7 节点版本
- css/index.css: 统一渐变方向为 135deg;光晕/点阵透明度更克制;
  卡片 hover 阴影更柔和;树动画幅度降低周期放慢;间距节奏统一
- js/index.js: IntersectionObserver 选择器适配新 section 命名
2026-08-08 00:28:30 +00:00
qing 3708a9ca0c Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-08 05:50:31 +08:00
qing 79b2e5b4be Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-08 02:57:22 +08:00
qing 7ec5d71e06 docs: 添加 blackbird 项目深度研究报告
覆盖架构、安全、代码质量与部署运维五大主题,含 15 个引用来源
2026-08-08 02:47:02 +08:00
qing 00ce3eac6a fix(waf): 修复P3安全审计缺陷
P3-1: logclient 复用 TCP 长连接,失败时重建,消除 TIME_WAIT 堆积
P3-2: TLS 显式限定 CipherSuites + CurvePreferences,排除弱加密套件
P3-3: CheckInput query 编码改用 url.Parse + Query().Encode()

修复率 76% -> 94%(P3 全部清零,仅剩 P0-3 为设计依赖)
2026-08-08 02:39:22 +08:00
qing dd9f8e51ff fix(waf): 修复P1/P2安全审计缺陷
P1-1: IPv6 地址解析改用 net.SplitHostPort,修复 XFF 带方括号致限流失效
P1-2: 捕获 ProcessResponseHeaders 返回值,命中记录 WARNING 告警
P1-4: 新增 SIGINT/SIGTERM 优雅关闭 + logclient.Flush()
P1-5: 标准日志输出到 stderr,保留 panic 堆栈
P2-1: 规则文件加载前校验大小(1 MiB 上限)防 OOM
P2-2: logclient db 地址支持 LOG_DB_ADDR 环境变量
P2-5: 日志失败输出到 stderr 而非 stdout

修复率 35% -> 76%(P1/P2 全部清零)
2026-08-08 02:36:22 +08:00
qing bcec529761 fix(static): 第2轮审计修复12项安全缺陷
修复 P1 路径遍历前缀 bypass、代理错误信息泄露、大文件 OOM、邮箱枚举与 CORS 通配;P2 Range 边界、hash 参数校验、db 连接复用、favicon 端口校验、日志批丢、端口解析异常。CSP/SSL 标记为已知限制。审计文档同步更新,修复率 36% → 88%。
2026-08-08 02:21:08 +08:00
qing 1d1b80a049 docs: 修正宣传文案中 7 处不准确描述
- 请求链路补上 redirect80(7步→8步),ai_review 触发条件改为新增节点前
- 模块地图补全 redirect80/db2/dnfs2/BotOps/lci,libtry 归入共享基础库
- core 管理接口修正为实际路由 /list /exec /kill(需管理员 Token)
- 安全评级改为各模块独立评级(gateway A- / dnfs2 A),不再暗示整体升级
- 快速上手 /status 改为 POST /list,init.txt 补全全部模块并强调顺序
- CTA 去掉安全评级从 A 推向更高的表述
- 共享基础库列表补入 libtry
2026-08-08 02:18:31 +08:00
qing 1ed48a1f48 build(db2,dnfs2): 补齐 Dockerfile 支持容器化部署
- db2/Dockerfile: 多阶段构建(libmsg+db2),含 schema 初始化 entrypoint
- dnfs2/Dockerfile: 多阶段构建(libhttp+libmsg+dnfs2),curl 健康检查
- .dockerignore: 豁免 libhttp/libmsg 供 C++ 服务构建

两者均基于 ubuntu:24.04(boost 1.83 含 json.hpp),可平替 Python 版
2026-08-08 01:59:48 +08:00
qing 40bc0ad5c7 docs(readme): 补充未记录模块 db2/dnfs2/redirect80/BotOps/lci
- redirect80: HTTP→HTTPS 重定向服务,补充至架构图/服务表/端口表/启动顺序
- db2/dnfs2: db/dnfs 的 C++20 重实现,补充详细章节
- BotOps: aibox 智能体 TUI 前端,补充详细章节
- lci: 嵌入式帧缓冲图形界面(仅记录该功能)
- 同步更新多语言异构列表与安装顺序
2026-08-08 01:59:14 +08:00
qing 2e0805eb05 fix(dnfs2): 第2轮审计修复 db 错误处理不一致
- P2-N6: _note_exists db 业务错误误判为节点不存在,改抛 500
- P2-N7: delete_note/update_note 所有权检查分离 db 错误(500)和节点不存在(404)
- P3-N8: CONFS_PORT 添加 [1,65535] 范围校验
- P3-N9: main() 添加 curl_global_cleanup,配对 curl_global_init
- 更新审计文档为第 2 轮,评级 A- → A
2026-08-08 01:44:04 +08:00
qing 117fc0241e fix(libhttp,dnfs2): HttpClient 新增超时接口,dnfs2 启用配置超时
修复 dnfs2 审计 L-3(P2-N5):

libhttp HttpClient 硬编码 CURLOPT_TIMEOUT=30L/CONNECTTIMEOUT=10L,
dnfs2 的 gateway_timeout/review_timeout 配置加载后从未使用,实际超时恒为 30s。

修复:
- libhttp HttpClient 新增 set_timeout/set_connect_timeout 接口
  (默认 30s/10s,向后兼容 gateway/core)
- request_stream_sync 使用成员变量替代硬编码值
- dnfs2 decode_token 设置 gateway_timeout
- dnfs2 review_content 设置 review_timeout

安全评级 A- → A,已知限制 6→5 项。
2026-08-08 01:33:57 +08:00
qing 9804838e96 feat(dnfs2): C++20 重实现 dnfs,修复全部 P0/P1 + 审计新发现 4 项
dnfs2 基于 libhttp + libmsg + boost::json 重写 Python dnfs,接口完全兼容:
- 4 个路由 (get_notes/add_note/delete_note/update_note) + 特殊节点 (link/js/image/file)
- Token 验签经 gateway /whoami (fail-closed 503)
- AI 内容审核 fail-closed
- AsyncQueue 异步日志 → db2 Logs 表
- 安全响应头 (CSP/X-Frame-Options 等)

修复 dnfs 继承的 6 项 P0/P1:
- P0-4 统一 _call_db() 检查 success 后再访问 data
- P1-6 setMaxBodySize(10MB)
- P1-7 日志客户端复用主配置
- P1-8 update_note pid≠0 校验父节点存在
- P1-9 RpcClient retry_on_refused=true
- P1-11 note_id 显式 as_int64() + 类型校验

审计新发现并修复 4 项:
- P1-N1 stop_watcher detach 改 join,修复 use-after-free (CWE-416)
- P1-N2 main() 添加 curl_global_init,修复多线程首次 curl_easy_init 竞态 (CWE-362)
- P2-N3 delete_note 分离 db 错误(500) 和子节点检查(400)
- P2-N4 threads 上限 256,对齐项目约定

安全评级 A-,6 项已知限制已记录。
2026-08-08 01:26:55 +08:00
qing 5628010d45 Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-08 00:16:09 +08:00
qing e815f0ec40 fix(gateway,libhttp): 修复进程无法退出bug,完成P0安全问题修复
安全修复(P0):
- 修复4处错误消息泄露内部步骤问题,替换为用户友好文案
- 修正拼写错误 "Registe" -> "Registration"
- 修正注册失败HTTP状态码 400 -> 500
- 所有P0严重问题100%修复,安全评级提升至A-

稳定性修复(关键):
- 修复信号处理非async-signal-safe问题:仅设置原子标志,杜绝死锁
- 新增SIGPIPE忽略处理,防止写关闭socket时进程意外终止
- 修复Listener::doAccept()关闭后无限递归导致CPU 100%空转bug
- 新增Listener::close()方法,stop()先关闭acceptor再停止ioc
- 改进stop()流程:acceptor->WS客户端->ioc->worker线程 有序关闭
- 新增双重超时保护:stop() 8秒、日志flush 3秒,超时强制exit保证进程绝不挂死
- 服务器事件循环改为独立线程运行,主线程负责信号检测和关闭协调

文档:
- 新增CHANGELOG.md更新日志
- 更新gateway安全审计文档,添加稳定性修复记录
- 更新docs/INDEX.md文档索引
2026-08-07 23:07:35 +08:00
qing b33c5e6d1d fix(gateway): 修复P0安全问题,错误消息脱敏
- 将4处暴露内部处理步骤的错误消息替换为用户友好文案
- 修正拼写错误 "Registe" -> "Registration"
- 修正注册失败HTTP状态码 400 -> 500
- 更新安全审计文档至2026-08-07版本
- P0严重问题全部修复,安全评级提升至A-

修复内容:
- "Login (Query Step) Failed" -> "Login failed, please try again later"
- "Login (Update Step) Failed" -> "Login failed, please try again later"
- "Registe Failed" -> "Registration failed, please try again later"
- "Reset Failed" -> "Password reset failed, please try again later"
2026-08-07 22:53:26 +08:00
qing edbb7ef1c6 fix(db2): 修复第六轮审计定位的 4 个问题并更新审计文档
- ND-1(P2): start() 引入 CleanupGuard RAII 守卫,rpc.start() 异常路径
  下清理线程被优雅回收,消除 std::terminate 硬崩溃
- ND-4(P3): where/limit/offset 类型不符立即抛错,不再静默忽略
- ND-5(P3): _bind_value 对超 INT64_MAX 的 uint64 抛错,防截断溢出
- ND-6(P3): in 运算符非数组值抛错,仅空数组保留恒假语义
- 记录 2 项已知限制 ND-2/ND-3(无结果集上限、无 WHERE 全表更新/删除)

审计文档更新至 26/26(100%) 修复、30 项安全机制;clang++/g++ 双编译验证通过
2026-08-07 21:42:06 +08:00
qing 3ace5931e6 fix(db2): security audit round 5 - fix all remaining P3 issues
- P3-7: replace gmtime() with thread-safe gmtime_r() in utc_now()
- P3-9: validate columns array elements are strings before as_string()
- P3-10: use sqlite3_close_v2() instead of sqlite3_close() in DbConn dtor
- P3-11: introduce safe_stoi() helper wrapping all 9 std::stoi call sites
  with field-name-aware error messages
- P3-12: log _log_internal exceptions to stderr instead of silent swallow
- P3-13: log _do_cleanup COUNT prepare failures to stderr; simplify
  finalize to single exit point
- P3-14: reject invalid order_by elements (non-object, missing column)
  instead of silently skipping
- P3-15: reject non-string action field instead of defaulting to "select"
- P3-16: validate order_by column is string and desc is boolean

All 22 audit issues now resolved (100%).
2026-08-07 21:33:13 +08:00
qing e2f05f9a43 fix(libmsg): security audit round 4 - eliminate residual race + atomic server_fd
- P1-3: introduce ConnectionLock (mutex + atomic active) to close the residual
  CWE-362 race where _remove_client closes fd before reply/broadcast acquires
  the lock; senders now check active after locking and abort if fd was closed
- P2-7: make _server_fd std::atomic<int> to remove the data-race UB between
  stop() and _event_loop
- P2-8: validate on_message is non-null in MsgServer::start()
- P3-2: distinguish missing _route vs wrong-typed _route in RpcServer
- P3-3: set TCP_NODELAY/SO_SNDTIMEO before registering fd in _clients
- doc: add SO_SNDTIMEO precondition note to pmsg_send
2026-08-07 21:27:05 +08:00
qing 63c22a3d60 fix(libmsg): security audit round 3 - add server send timeout + harden RPC validation 2026-08-07 21:13:14 +08:00
qing 3c50a862d3 fix(libmsg): complete security audit round 2 - fix P0 race + harden input validation
- P0: fix _close_all_clients() race condition (CWE-362) - hold per-connection send_lock
  before close() to prevent messages being sent to wrong client after fd reuse
- P2: add comprehensive input validation for all public APIs
  (timeout/port/workers/max_connections/batch_size etc. bounds checking)
- P2: add UTF-8 payload validation (isValidUtf8) aligning with Python pymsg behavior,
  rejecting overlong encodings, surrogate pairs, truncated/invalid sequences
- P2: document pmsg_recv(int) precondition and recommend deadline mode
- add constructor validation for MsgClient/MsgServer/AsyncQueue/RpcClient/RpcServer
- add add_route() validation for empty route name and null handler
- update security audit report with round 2 findings and fixes (8 issues total, 100% fixed)
2026-08-07 21:01:34 +08:00
qing 9256a8157b fix(db2): add numeric config range validation (fix P2-3/P3-8)
- Add range checks in load_config() for all numeric config values:
  * listen_port: 1-65535
  * workers: >= 1
  * cleanup_interval: >= 1 (prevents busy loop DoS when misconfigured to 0/negative)
  * retention_days: >= 0
  * max_records: >= 1
- Fix unused lambda capture 'this' in RpcServer error handler
  (-Wunused-lambda-capture with -Wall -Werror)
- Update security audit doc: mark P2-3/P3-8 fixed, mark production ready

Verified: g++ -std=c++20 -O3 -Wall -Werror compiles with zero warnings.
2026-08-07 20:48:22 +08:00
qing cc0475e5dc Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-07 15:47:34 +08:00
qing 761cfd4987 fix(db2): 修复剩余P3问题(limit/offset负值、WHERE/IN规模上限)
- limit/offset 增加非负校验
- WHERE 条件数上限 64,单个 IN 元素上限 1000
- 审计文档:11/11 问题全部修复
2026-08-07 07:46:46 +00:00
qing 2f7a99c2a4 fix(db2): schema缓存基于schema_version自动失效,更新审计文档
- 缓存项携带 PRAGMA schema_version,DDL变更后自动重新反射
- 修复P3-1低危问题,剩余未修复P3问题降至2项
2026-08-07 07:26:29 +00:00
qing 176fb13908 fix(db2): 修复空values和未知运算符问题,更新审计文档
P3-5: INSERT/UPDATE 空 values 前置校验,不再生成无效 SQL
P3-6: 未知 WHERE 运算符立即报错,不再静默跳过

审计文档:新增并发性分析章节,更新进度至 8/11 已修复

剩余 3 项 P3(schema缓存失效、limit负值、条件数上限)待后续迭代
2026-08-07 07:07:55 +00:00
qing ec626dc8d5 fix(db2): 修复清理时间戳格式偏差,增加配置完整性校验
P2-1: 清理 SQL 改用 strftime 统一 T 分隔格式,消除保留期约 1 天偏移
P2-2: load_config 对 7 个必需字段做必填校验,缺失则 exit(1)

审计进度:已修复 6/9(P0×2 P1×1 P2×2 P3×1),剩余 3 项 P3
2026-08-07 06:55:31 +00:00
qing 6644775934 Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-07 14:06:20 +08:00
qing c45e2e13f4 refactor(static): 首页统一 1024px 版心,特性网格改为 2×2 等宽布局
- 新增 .wrap 统一版心,头部胶囊、特性、关于、CTA、页脚全部对齐同一内容栏
- 特性卡片由 Bento 跨列网格改为 2×2 等宽,取消旋转装饰
- 关于面板改为居中排版,数据行移至底部横排
- 章节间距统一由 .section 控制,移动端断点适配同步收敛
2026-08-07 06:04:15 +00:00
qing df39e5d006 迁移db到db2 2026-08-07 13:43:55 +08:00
qing 64907f45c5 Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-07 13:42:19 +08:00
qing f3ba13a6b9 fix(static): 特效节点全屏 iframe 改挂 body,修复被后续卡片盖住
全屏特效 iframe 原挂载在卡片容器内,卡片入场动画的 opacity<1 会在
卡片上产生层叠上下文,iframe 的 z-index:9999 被困在卡片内部生效,
DOM 序靠后的兄弟卡片把整张卡片(含特效)压在下面。改为全屏特效
直接挂载 document.body,z-index 在根层叠上下文竞争;in-node 特效
保持挂在卡片内。清理路径(clearAllEffects 全文档按 class 查找)
不受影响。
2026-08-07 05:40:28 +00:00
qing 7f358faaf4 Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-07 13:04:21 +08:00
qing 74aaa668ce Merge branch 'main' of https://git.cancerai.top/qing/blackbird 2026-08-07 05:03:33 +00:00
qing 46c1fdd914 feat(static): 首页新增 Bento 特性卡、CTA 横幅与品牌页脚
- 特性区改 Bento 网格(首尾卡跨两列)并加底部标签胶囊
- 关于区改左文右数据面板,移动端转竖排横数据
- 新增结尾品牌渐变 CTA 横幅(含深色模式适配)
- 页脚重构为品牌+导航+备案三段
- CTA 按钮改 data-cta 多按钮绑定,渐显目标同步补全
2026-08-07 05:02:35 +00:00
qing 8a661291c0 chore(db2): 从索引移除 build/db2,交由 .gitignore 忽略 2026-08-07 04:57:53 +00:00
qing e2b99529fc chore(db2): 添加 .gitignore,忽略 build/ 与编译产物 2026-08-07 04:56:34 +00:00
qing 9676e5cacb docs(readme): 补充 libmsg 到共享基础库表格 2026-08-07 02:26:12 +00:00
qing 5dc8956b55 fix(gateway): implement dual-track token revocation mechanism (P0-1)
Add thread-safe in-memory token revocation to fix the critical issue
where logged-out or password-reset tokens remain valid until expiry.

- Add jti (uuid v4) to all issued tokens for single-token revocation
- Add per-user version number for bulk revocation on password reset
- Add jti blacklist with TTL-based auto-cleanup to prevent memory leaks
- Introduce unified verify_token() replacing 4 copies of inline logic
- Refactor all handlers (login/logout/refresh/reset_password/proxy/whoami/
  admin_verify/ws_admin) to use the new verification pipeline
- Refresh token now revokes old jti (prevents replay after refresh)
- Bump version to 0.8.0
2026-08-07 02:35:08 +08:00
qing daf4bbe6c2 docs(index): 补充 db2 审计报告与 README 索引 2026-08-06 18:26:12 +00:00
qing 00421182e4 fix(db2): 按 JSON 类型分别绑定 SQLite 参数,修复类型丢失
- _coerce_value 改为返回 json::value,保留 int/double/bool/null 原始类型
- 新增 _bind_value,按类型调用 sqlite3_bind_int64/double/text/null
- WhereClause::params 改为 vector<json::value>,删除 is_null 向量
- INSERT/UPDATE/SELECT/DELETE 统一使用按类型绑定

修复 P1-1(所有值绑定为 TEXT)和 P3-2(_coerce_value null 处理误导)
2026-08-06 18:23:30 +00:00
qing cb31db1078 docs(security): 更新 libsqlite3 审计报告修复状态
- P0-3 参数化 exec 已修复
- P1-2/P1-3/P1-4 绑定类型与异常信息已修复
- P2-2/P2-3 读取接口与文档已修复
- 修正 P2 问题数量统计(6 项而非 5 项)
2026-08-06 18:14:01 +00:00
qing 48714b88af fix(libsqlite3): 增加参数化 exec 与完整绑定/读取接口
- 新增模板 exec(sql, args...) 参数化执行,支持 int / int64_t / double /
  std::string / const char* / nullptr / std::vector<unsigned char>
- 扩展 Sqlite3_stmt:bind_int64、bind_double、bind_blob、bind_null、execute
- 增加 read_int64、read_double,read_text 补充生命周期注释
- 构造/打开异常携带 sqlite3_errmsg 详情
- 原 exec(sql) 增加硬编码 SQL 警告注释
2026-08-06 18:13:52 +00:00
qing 1c55443d43 docs(security): 新增 libsqlite3 安全审计报告
- 记录 P0/P1/P2 级别问题与修复状态
- 已修复 double free / 移动语义、close_v2、const 引用等 5 项问题
2026-08-06 18:07:14 +00:00
qing 985ff47c84 fix(libsqlite3): 修复 double free 与移动语义缺陷
- 为 Sqlite3 与 Sqlite3_stmt 显式 delete 拷贝、实现 noexcept 移动构造/赋值
- 析构函数判空后释放,防止重复释放与 use-after-free
- ~Sqlite3() 改用 sqlite3_close_v2,确保所有 statement 释放后再关闭
- stmt() 参数改为 const std::string&,支持字符串字面量
- 成员指针显式初始化为 nullptr,errMsg 初始化为 nullptr
2026-08-06 18:07:06 +00:00
qing b781a8d2fe fix(static): 修复特效节点全屏 iframe 被卡片 transform 困住的问题
卡片入场动画的 translateY 使卡片成为 position:fixed 后代的包含块,
全屏特效 iframe 被限制在卡片内渲染,表现为部分特效不自动启动
(in-node 特效为 relative 定位不受影响)。卡片入场改为纯 opacity 淡入;
带位移的 rise-in 仅用于无 fixed 后代的骨架元素,并排除依赖
transform 垂直居中的 .minimap。
2026-08-06 17:49:15 +00:00
qing fad749f9aa docs(db2): 添加 README 2026-08-06 17:42:50 +00:00
qing 577386bff2 feat(static): 同步美化注册/找回密码/树状笔记页
- 新增 auth.css:表单页共享美化(点阵背景、品牌渐变顶条卡片、eyebrow 标题、
  渐变提交按钮、入场动画),register/forgot 各加一行 link 与 eyebrow
- 新增 dnfs.css:笔记页美化(顶部底纹暖光、卡片逐张入场、编辑卡聚焦光环);
  顺带修复节点编辑卡裸 <button> 无主题底色的问题
- 动效均遵循 prefers-reduced-motion,颜色全部消费 theme.css 变量
2026-08-06 17:42:38 +00:00
qing 6150c60441 chore: .gitignore 忽略 venv/.env 虚拟环境、build 产物与 waf 证书 2026-08-06 17:42:17 +00:00
qing 1970f3f824 feat(db2): C++20 数据库 RPC 服务,对齐 Python db 模块 execute 路由
- 完整实现 execute 路由(select/insert/update/delete)
- 相同 where 语法(eq/ne/gt/lt/ge/le/like/in)及响应格式
- 启动时从 confs 拉取 db.ini,支持环境变量和命令行覆盖
- per-thread SQLite 连接 + WAL/mmap/busy_timeout PRAGMA
- PRAGMA table_info 驱动的列类型反射与缓存
- $now 哨兵值自动替换为 UTC 时间
- 内置 Logs 表自动建表 + 后台清理线程(retention_days + max_records)
- 表名白名单校验防 SQL 注入
- gateway DbC::call_msg() 零改动可直接切换
2026-08-06 17:40:07 +00:00
qing 49ed3f738f fix(deploy): _inst.sh 补全 ai_review/aibox/redirect80; ai_review 模型走 ModelScope 镜像
- _inst.sh: 补入遗漏的 3 个模块(confs 之后、core 之前)
- ai_review/_fetch_onnx_model.sh: 新增 chromadb onnx 模型预下载脚本
  (默认 ModelScope 镜像,支持 ONNX_MODEL_BASE_URL/CHROMA_CACHE_DIR 覆盖,
  断点续传+幂等,绕过 chromadb 写死的 AWS S3 下载)
- ai_review/_set.sh: 安装后自动调用模型下载
- README.md: 更新部署说明
- docs/reviews/DEPLOY_DEFECT_AUDIT_20260806.md: 新增部署缺陷审查报告
- docs/INDEX.md: 登记审查报告
2026-08-06 17:39:42 +00:00
qing ea2717c400 feat(static): 优化社区首页美观度与高级感
- index.html: hero 新增品牌徽章、节点树装饰 SVG、下滑提示;章节增加 eyebrow 小标题
- index.css: 主按钮渐变+扫光、卡片序号水印+图标点亮、标题渐变流光、点阵底纹、
  品牌树描绘动画、关于卡装饰、胶囊快捷链接;全部基于 theme.css 变量,深浅色自适应
- index.js: 追加滚动渐显(IntersectionObserver)与特性卡片光标光斑,与登录逻辑解耦
2026-08-06 17:31:40 +00:00