qing
0cfb3a7581
refactor(aibox): extract hardcoded prompts to template files
...
- Move all default prompt content from PromptManager._ensure_* methods into aibox/prompts/ template files
- Add 8 new template files: 00_IDENTITY, 100_STATUS, 1_memory_search, 2_memory_save, 5_memo_management, 8_identity_management, 9_language_instruction, 11_emotion_management
- Refactor _ensure_* methods to copy from template directory via _ensure_from_template()
- _ensure_skill_files now auto-discovers N_*.md files instead of hardcoded list
- Update README.md with complete file manifest
- Single source of truth: aibox/prompts/ is the only prompt template source
2026-08-13 08:19:53 +08:00
qing
e77ef8cf76
Merge branch 'main' of https://git.cancerai.top/qing/blackbird
2026-08-13 08:08:11 +08:00
qing
175fa5d244
refactor(fsys): 移除遗留死接口与快捷登录入口
...
删除无调用方的 /api/check_user(Users 无 email 列,生产恒 500)与
/api/hash(前端早改直传密码给 ca,无鉴权 SHA-256 端点徒增哈希预言机
风险),连带清理 _rpc/_call_db/FsysExp/sha256_hex/限速设施等失去唯一
使用方的死代码;login.html 移除 yhdet 快捷登录按钮及"或"分隔线
(fsys 无 /yhdet_callback,入口本就失效)。同步两处 README。
2026-08-13 08:08:01 +08:00
qing
62fab2bc2c
feat(aibox): strengthen proactive ask_user and express_emotion guidance
...
- Rewrite ORCHESTRATOR_TURN_GUIDANCE: remove conservative '宁缺毋滥' principle,
add 5 trigger scenarios each for ask_user and express_emotion
- Rewrite conversation start guidance: split into 3 steps with concrete examples
- Improve AskUserTool description: from passive 'encountered a problem' to
proactive 'actively care about user, clarify needs, confirm intent'
- Improve ExpressEmotionTool description: add 'like caring for a friend' tone
and 4 usage scenarios
- Update 99_SOUL.md: add behavior rules 9 (proactive questioning) and 10
(emotional expression), expand workflow from 7 to 9 steps adding emotion
interaction and follow-up questioning
2026-08-13 07:59:53 +08:00
qing
9b6aa39b94
fix(dnfs2): update_note 成环检测(修复已知限制 L-1)
...
新增 _is_descendant 祖先走查:改 pid 时从新父节点沿 pid 链逐级向上,
命中自身即拒绝(自引用/移入自身子树均成环,子树不可达);深度上限 64
+ visited 集防存量脏数据死循环,db 错误 fail-closed 抛 500。
README 已知限制 L-1 移入安全修复表。
2026-08-13 04:10:35 +08:00
qing
e9463a28fb
feat(aibox): 每轮临时注入互动风格引导(情绪化表达/适时询问用户)
...
编排者每轮请求在 enhanced_messages 末尾临时拼接互动风格提醒
(ORCHESTRATOR_TURN_GUIDANCE),引导用 express_emotion/ask_user
保持有温度的对话,并带适度约束;不写入对话历史,工具调用递归续跑
时跳过,worker 子代理不受影响。
2026-08-13 04:04:08 +08:00
qing
56b6285ffd
fix(fsys): 树状笔记"删除当前节点"按钮按节点权限显隐
...
当前用户非当前节点主人(且非管理员)时隐藏删除按钮:新增与导航栈
平行的 can_operate 权限栈,进入/返回/删除节点时与 stack 同步,
load_notes 渲染后统一刷新按钮显隐;按钮默认隐藏避免根节点状态闪现。
2026-08-13 03:57:37 +08:00
qing
f623294af6
fix(aibox): 拦截编排者误调执行面工具并清理旧版 run_command 引导
...
主代理未注册 run_command 等执行面工具,但内置默认提示词与
search_skills/create_skill/install_skill 文案仍引导其直接调用。
新增 WORKER_ONLY_TOOLS 拦截:编排者误调时返回纠正信息引导改用
create_subagent;同步 3/4/6/7 号默认提示词与默认 SOUL 为编排者口径。
2026-08-13 03:56:19 +08:00
qing
15b4fb5698
chore(aibox): 添加 wo-shi-zhu 幽默互动技能定义
...
用户创建的轻量技能:当用户说"我是猪"/"猪猪"/"哼哼"等时,用可爱猪猪风格幽默回应,
让对话更轻松。纯文本技能描述,无代码逻辑。
2026-08-13 03:39:45 +08:00
qing
45bc019bfc
feat(aibox): 子代理输出转发开关 subagent_stream_output(默认开启)
...
将上一轮的「子代理实时输出可见化」固化为可配置开关,避免在生产环境刷屏或泄露中间过程。
- common/config.py: 默认配置新增 subagent_stream_output: true
- aibox.py run_full_subagent: 读取该开关;关闭时 _effective_output_callback 置 None,
子代理在后台静默执行(主对话侧栏不显示其思考/工具调用/回答),开启时按原逻辑
转发 line/chunk/reasoning。
- 仅影响主对话侧栏可见性,不影响子代理执行与最终返回摘要;老用户配置缺该键默认 True(兼容)。
2026-08-13 03:38:20 +08:00
qing
c9eaf988b3
feat(aibox): 子代理实时输出可见化(转发 line/chunk 到主对话侧栏)
...
此前子代理(create_subagent / run_full_subagent)的输出回调只转发 reasoning_* 三类思考消息,
导致子代理真正的回答文本(chunk)与工具执行过程(line,含命令输出/工具调用)被丢弃,用户看不到。
改动:
1. run_full_subagent 的 sub_think_callback 白名单放开,新增转发 line / chunk;
2. SubAgentTool._subagent_output 处理 line(🔹 [子代理] 前缀)与 chunk;
3. chunk 文本先累积于 _subagent_chunk_buf,遇非 chunk 消息或 execute 结束时由
_flush_subagent_answer 统一冲刷(🤖 [子代理回答]),避免侧栏逐字断行。
仅主对话侧可见,worker 执行子代理本身不受影响。
2026-08-13 03:36:32 +08:00
qing
23a10c37c7
feat(aibox): 对话开始阶段注入引导提示词(查阅记忆/询问用户/情绪化)
...
在 DeepSeekChat._init_system_prompts 末尾(连接初始化、/new、/reload_prompts 均会重跑)注入一段仅对主对话(编排者)生效的系统提示词,引导智能体在对话开始时主动:
1. 用 memory 工具查阅历史记忆、保持上下文连贯;
2. 主动关心/澄清意图,必要时用 ask_user 工具向用户提问;
3. 以情绪化方式开场,适时用 express_emotion 工具表达情绪。
worker 子代理不注入,避免执行面被人格/情绪干扰。
2026-08-13 03:29:37 +08:00
qing
518c8b2b90
feat(aibox): v2.9 编排者-执行者工具分层(tool_profile)
...
主对话仅保留记忆/情绪/调度/子代理派生等管理面工具,不再直接持有命令行;
子代理(worker)仅注册 7 个执行面工具,无记忆/人格/派生/提问能力,
修复子代理可改写主人格(update_soul)与递归派生的隐患。
附 v2.9 配套运行期提示词模板(aibox/prompts/)与实施方案文档。
2026-08-13 03:05:47 +08:00
qing
14db64f7a2
refactor(aibox): 工具基类 Tool/ToolRegistry 抽离至 tools 包
...
延续 common 包的拆分模式,形成 common <- tools <- aibox 单向依赖,
为后续工具子类逐步迁移铺路;aibox.py 瘦身约 230 行,工具子类与注册逻辑零改动。
2026-08-13 02:50:20 +08:00
qing
91b30040c7
refactor(actpred): 模型输入尺寸 image_size → image_width/image_height,默认 1920×1080
...
config/model/dataset/train/pretrain/predict/export 全链路适配非方形输入,
hailo_infer/onnx_infer 从模型元数据动态推导宽高;旧 224 checkpoint 配置键
不兼容(重训后替换)。Pi 5 CPU 冒烟验证 1080p 训练可行(~4.75s/步 batch=2)。
2026-08-13 02:19:30 +08:00
qing
a240377ba1
feat(pybot): Camera 默认采集分辨率 640×480 → 1920×1080
...
为 actpred 高分辨率模型训练积累 1080p 数据;@Camera 块显式
width/height 仍可覆盖默认值。
2026-08-13 02:19:19 +08:00
qing
36feeb4b9f
feat(actpred): 新增 ONNX Runtime 推理后端 OnnxPredictor
...
维度从 ONNX session 元数据自动推导,预处理复现训练流水线;Pi 5 实测
12ms/次含预处理(纯推理 5.9ms),与 torch 前向差异 <1e-5。新增 6 个
单测(真实导出 ONNX 对齐验证),全量 71 测试通过。
2026-08-13 01:54:06 +08:00
qing
ab60b3cafb
feat(actpred): 新增 Hailo HEF 推理封装 HailoPredictor,附 AI HAT 2 调研与测速报告
...
零 torch 依赖(hailo_platform + numpy + PIL),vstream 形状/量化参数从
HEF 动态推导,支持 uint8 量化边缘与动作归一化 stats;新增 6 个免硬件
单测(fake hailo_platform 注入)。调研报告记录 hailort 5.x 新 API 踩坑,
测速报告给出 CPU(ORT 5.9ms) vs NPU(resnet50 4.29ms) 基准与部署建议。
2026-08-13 01:41:42 +08:00
qing
8673515d31
feat(dnfs): 折叠态用户面板改为圆形头像按钮,点击展开
2026-08-12 20:51:44 +08:00
qing
f1d6e9ceb4
feat(dnfs): 用户面板增加系统节点显隐开关,localStorage 持久化
2026-08-12 20:48:50 +08:00
qing
52c6248e2b
feat(dnfs): __ 隐藏节点不渲染卡片但执行特效——style/theme 注入 CSS,js 全屏执行
2026-08-12 20:45:48 +08:00
qing
1e4409f8b1
feat(dnfs): 双下划线标题节点默认隐藏,卡片和 minimap 同步过滤
2026-08-12 20:42:47 +08:00
qing
749fcd4cf7
debug(dnfs): inheritThemeStyle 加入 console.log 诊断日志
2026-08-12 15:52:17 +08:00
qing
49d9a33420
fix: 主题/样式继承查询跳过观看计数——前后端配合 noread 标记
...
前端 inheritThemeStyle 的 fetch 体附加 noread:true,后端 dnfs2
_handle_get_notes 检测到该标记时跳过 _bump_views,避免静默查询
污染节点的观看次数统计。
2026-08-12 15:48:12 +08:00
qing
2d4c60f643
fix(dnfs): 继承查询改用静默 fetch,避免 getNode 的 alert/401 跳转副作用
2026-08-12 15:45:48 +08:00
qing
7af58420cd
fix(dnfs): 修复继承查询目标为父节点子集,await 后补充跨导航取消检查
2026-08-12 15:39:51 +08:00
qing
3fbf17d6cd
Revert "fix(dnfs): 主题/样式继承改为仅查直接父节点,修复 getNode 查询目标错误"
...
This reverts commit 1774d7d64b .
2026-08-12 15:38:03 +08:00
qing
1774d7d64b
fix(dnfs): 主题/样式继承改为仅查直接父节点,修复 getNode 查询目标错误
2026-08-12 15:36:53 +08:00
qing
d7eb46b3a1
feat(dnfs): 新增主题/样式祖先继承——当前节点缺失时沿树向上搜索并注入
...
提取 injectSpCss 复用 CSS 注入逻辑,renderSpCss 的 applyCss 去重。
inheritThemeStyle 在 load_notes 中检查当前层 theme/style,缺失时
沿 stack 向根逐级搜索最近祖先,找到后自动注入,支持跨导航取消。
2026-08-12 15:32:47 +08:00
qing
6db0cf017e
fix(aibox): 补全 common/logger 缺失的 logging 导入并固化 common 包抽取
...
- common/logger.py 漏导 logging / RotatingFileHandler,导致 main() 在
Logger.init_file_logging() 处抛 NameError;现已补回(抽取自 aibox.py 时
未携带该 import)
- 固化 aibox 模块化重构成果:common/ 包(i18n/config/constants/logger
+ __init__ 重导出)已落地,aibox.py 删除内联 I18n 改从 common 导入
- requirements.txt 新增 PySocks 依赖
2026-08-12 09:41:33 +08:00
qing
bcd63e4fde
refactor: 迁移 gateway.ini 至 core/configs/,删除已废弃的 confs 和 confs2 模块
...
- gateway.ini 从 confs/configs/ 迁入 core/configs/(真实目录替代符号链接)
- core/_set.sh 移除创建符号链接逻辑
- core/.gitignore 移除 configs 条目
- 删除 confs(Python)和 confs2(C++20 归档),配置分发已内嵌于 core
- 更新 gateway/README.md 配置文件路径
2026-08-11 23:48:27 +00:00
qing
cca0cdff5f
chore: 删除已废弃的 captcha 模块,由 captcha2 (C++20) 平替
2026-08-11 23:36:11 +00:00
qing
0a79a6f631
chore: 删除已废弃的 dnfs 模块,由 dnfs2 (C++20) 平替
2026-08-11 23:30:45 +00:00
qing
1190a15e1e
chore: 删除已废弃的 static 模块,由 fsys (C++20) 平替
2026-08-11 23:26:45 +00:00
qing
86236bae9d
update: 将 patch_002 时间戳列并入 create_sqlite3.sql
2026-08-11 10:42:56 +00:00
qing
141e2e1ef0
feat: 前端卡片用户名后显示编辑时间
...
updated_at 列(创建/更新均由 dnfs2 填入本地时间),新增节点时等于创建时间。
css/theme.css 新增 .owner-time 样式(小字号 / 三级灰)。
2026-08-11 10:38:39 +00:00
qing
01c699e7a6
feat: Notes 新增创建时间/更新时间列,dnfs2 添加/更新时填入本地时间
...
- patch_002 存量补丁:created_at / updated_at DATETIME 列
- dnfs2 add_note 同时填入两个时间戳,update_note 只更新 updated_at
- 时间格式 local_now():"YYYY-MM-DD HH:MM:S"(本地时间)
2026-08-11 10:34:09 +00:00
qing
d5047d27c7
fix: 修复 getNode 双重请求导致观看数计数不准确
...
dnfs.js 中 8 处导航调用 getNode() 两次(一次 load_notes 一次 loadMap),
每次独立发起 HTTP 请求,导致后端 _bump_views 重复计数。
改为单次 getNode + 组合回调(.then(r => { load_notes(r); loadMap(r) })),
确保每次导航仅一次请求,views 严格 1:1 对应。
2026-08-11 10:18:52 +00:00
qing
c699ff1794
update: 将 patch_001 并入 create_sqlite3.sql
...
新建库一步到位含 Notes views 观看人数列及 pid/owner 索引;
patch_001 保留用于存量库迁移。
2026-08-11 10:11:07 +00:00
qing
c9777cbff8
feat: 前端卡片观看数/子节点数接线后端
...
- dnfs2 get_notes 为每个节点附上 child_count(一次 IN 批量查询统计子节点数,best-effort)
- dnfs.js 卡片眼睛=views 观看数、转发=child_count 子节点数(原 share_count/visit_count 后端无字段恒为 0)
2026-08-11 10:06:33 +00:00
qing
986acab1c5
feat: Notes 新增 views 观看人数列,dnfs2 get_notes 打开节点时自增
...
- db2 补丁 patch_001:Notes 增加 views 列(默认 0),补齐 pid/owner 索引
- dnfs2 get_notes(pid) 打开节点时对 pid 的 views 读改写 +1(best-effort,失败不影响主流程)
2026-08-11 09:51:14 +00:00
qing
049b894416
Merge branch 'main' of https://git.cancerai.top/qing/blackbird
2026-08-11 09:20:29 +00:00
qing
0aa0710a9e
fix: 统一 .mt 首行 '-' 占位符语义——actpred 对齐 pybot/bot4cj 运行时(填 0),弃用 @Servo max 列填充
2026-08-11 16:30:39 +08:00
qing
6d79fc919f
update: actpred 默认图像分辨率 64→224
2026-08-11 02:35:22 +08:00
qing
fee1241e49
feat: pybot 新增 @Camera 摄像头块——picamera2 惰性导入,后台守护线程维护有界帧队列(满丢最旧)
2026-08-11 02:32:20 +08:00
qing
21d93fc505
fix(ai_review): DeepSeek API 调用添加 8s 超时,防止 worker 线程阻塞导致服务不可用
2026-08-10 16:18:35 +00:00
qing
a8ffa73a6b
fix: pybot 审计修复——插件异常类型、I2C 引用校验、卡尔曼除零守卫、CLI 端到端测试
2026-08-10 16:16:40 +00:00
qing
09dc36d591
refactor: 移除全部启动脚本中的 sleep 延时与 services.yaml 中的 sleep_before
2026-08-10 16:05:26 +00:00
qing
da8ebbf9e6
docs: 研究整理——同步认证迁至 ca 后的过时描述、补 liblogc 与测试清单
...
- ARCHITECTURE/MODULES:ca 版本 v1.1.0、共享基础库补 liblogc、tests 描述与实际 9 个文件对齐、docs 篇数 57
- core README/报告/HttpTask 注释:管理员鉴权由"gateway 唯一权威"更正为 ca(v0.9.0 认证迁址后描述滞后)
- ca/gateway README 架构图 static:9200 → fsys:9200、db:8005 → db2:8005
- 主 README 与 blackbox README 补 test_core_confs.py,test_gateway 文档更新为 ca:8443 契约
2026-08-10 15:55:43 +00:00
qing
7467e7bd42
docs: 整理文档——修复全部 file:// 失效链接、补齐缺失模块 README
...
- 将 7 个文档中的 mac 绝对路径链接(file:///Users/qingsong/...)转换为仓库相对路径,
并修正错误目标:aibox 入口 main.py → aibox.py、pymsg C++ 实现 → libmsg/inc/us/Msg.hpp、
bot4cj cpp/cnn → cuda
- 主 README 补 liblogc 基础库条目与 confs2 归档说明,安装顺序补 ca
- 新增 liblogc / libtry / confs2 / 3d / memdb README
- 同步 db2 脚本迁移(db/create_sqlite3.sql → db2/scripts/)导致的失效引用
2026-08-10 15:48:29 +00:00
qing
7072e33d6f
update
2026-08-10 23:46:02 +08:00
qing
30e064996c
docs: 整理文档——分析类归位 reports/、补 captcha2/smtp3 README、修复全部失效链接
...
- profile/evaluation/promo_pack 移入 docs/reports/(按文档管理约定),内部引用同步
- 补建 captcha2/README.md、smtp3/README.md(主 README 曾引用但缺失)
- 重写 README 测试章节(实际为 tests/blackbox/,纯标准库零依赖)
- 清除全部 docs/INDEX.md 残留引用;legacy README 中已删除 ini 的失效链接改文字
- 全仓库链接检查 0 broken
2026-08-10 12:45:26 +00:00
qing
2817dbbab2
docs: 收尾同步——waf/smtp README、项目画像、测试套件与遗留模块标注
...
- waf/smtp README: 链路改 ca:8443 → gateway:8445,启动描述改 services.yaml
- profile/evaluation: 拓扑/请求链路/端口表/模块表同步,口径漂移项标记已解决
- tests/blackbox: README 与 config.py 标注测试条目→生产服务映射(保留历史条目名)
- static/dnfs/db/captcha/confs README 顶部加"已废弃"标注
2026-08-10 12:35:45 +00:00
qing
ad5d91c47a
docs: 同步文档至当前生产架构(ca:8443 → gateway:8445、C++20 重写版为主、confs 内嵌 core)
...
- README: 更新架构图/链路/服务表/端口表,static/dnfs/db/captcha/confs 标注遗留
- MODULES/ARCHITECTURE: 事实来源改为 services.yaml,配置链路收敛为仅 gateway.ini
- fsys/dnfs2 README: 架构图改为 ca 验签与纯 CLI 配置
2026-08-10 12:31:35 +00:00
qing
77bc367d03
dnfs2: 移除样式节点 persist 全局保持机制,样式仅节点作用域生效
2026-08-10 11:52:15 +00:00
qing
75a45313c4
dnfs2: 特殊节点移除 link 类型,精简为 js/file/style/theme 四类
2026-08-10 11:17:19 +00:00
qing
dfa8d0406a
docs: 新增 dnfs 自定义主题说明(style/theme 特殊节点使用指南)
2026-08-10 11:09:20 +00:00
qing
c54e7aca83
dnfs2: 特殊节点移除 image 类型,发布权限放宽为节点拥有者或管理员
2026-08-10 10:52:30 +00:00
qing
75897c68eb
dnfs2: 特殊节点新增 style/theme 类型,支持界面样式注入与主题换肤
2026-08-10 10:39:03 +00:00
qing
42b4a89ed3
清理残留 ini:删除 db.ini/redirect80.ini/example.ini
...
- db.ini/redirect80.ini:对应服务已迁入 CLI args,ini 为残留
- example.ini:旧 gateway 示例模板,无消费方
- README.md:移除 example.ini 表行
2026-08-10 10:09:58 +00:00
qing
c9e8d04815
fsys: 迁移 static.ini 至 CLI args,移除 confs 依赖
...
- fsys/src/fsys.cpp: 移除 parse_ini/IniMap/confs RPC 调用,改为
boost::program_options 14 项 CLI 参数,配置优先级 CLI > env > 默认值
- fsys/Makefile: 添加 -lboost_program_options
- core/services.yaml: fsys 全部参数迁入 CLI args
- confs/configs/static.ini: 已删除
- README.md: 更新 fsys 配置说明,移除 static.ini 表行,更新安全约定
2026-08-10 10:08:29 +00:00
qing
3b6a0fb002
captcha2: 迁移 captcha.ini 至 CLI args,移除 confs 依赖
...
- captcha2/src/main.cpp: 移除 fetch_config_from_confs/merge_ini/RpcClient,
扩展 CLI 至 11 项(--instance/--log-level/--len/--ttl/--font-path/
--max-store/--rate-limit),配置优先级 CLI > env > 默认值
- core/services.yaml: captcha2 全部 8 项参数迁入 CLI args
- confs/configs/captcha.ini: 已删除
- README.md: 移除 captcha.ini 表行
- _inst.sh: 新增 inst_module captcha2
2026-08-10 09:56:41 +00:00
qing
3eafc15602
smtp3: 迁移 smtp.ini 至 CLI args,修复 .env 加载与 TLS SNI
...
- smtp3/src/main.cpp: 移除 confs 依赖(fetch_config_from_confs/merge_ini),
扩展 CLI 参数至 16 项(--instance/--log-level/--smtp-port/--code-len 等),
配置优先级改为 CLI > 环境变量 > 默认值
- smtp3/_run.sh: 新增 ../smtp/.env 加载(与 Python smtp_v2.py 共用凭据),
传递 "",移除 sleep 1
- smtp3/src/main.cpp: SmtpClient 添加 SSL_set_tlsext_host_name (SNI)
- core/services.yaml: 回退到 smtp (Python),smtp3 待生产验证后切换
- confs/configs/smtp.ini: 已删除(配置迁入 services.yaml CLI args)
- README.md: 移除 smtp.ini 表行,更新部署安全约定
- _inst.sh: 新增 inst_module "smtp3"
2026-08-10 09:44:38 +00:00
qing
80969adc9b
db2: 移除confs依赖,配置全部经CLI传递(CLI > ENV > 默认值)
...
- db2.cpp: 移除 RpcClient/parse_ini/IniMap,load_config 改为
默认值 → ENV → CLI 三层;新增 --db-url/--retention-days/
--max-records/--cleanup-interval CLI 参数
- core/services.yaml: db2 条目展开为完整 CLI 声明(10个配置项)
- db2/README.md: 配置章节重写为 CLI 参数表 + 环境变量表 +
services.yaml 示例
- README.md: 配置链路移除 db2,confs 配置表删除 db.ini 行
与 ca/redirect80 保持一致的配置模式,db2 不再依赖 confs 服务。
2026-08-10 09:03:28 +00:00
qing
0954644ee3
redirect80: 移除confs依赖,配置全部经CLI传递(CLI > ENV > 默认值)
...
- redirect80.py: 移除 configparser/pymsg.RpcClient 导入和 confs 拉取逻辑,
配置改为三层加载(默认值 → 环境变量 → CLI 参数)
- core/services.yaml: redirect80 条目展开为完整 CLI 声明
(--host/--port/--redirect-port/--redirect-code)
- redirect80/README.md: 配置表新增 CLI 参数列,init.txt 章节重写为
services.yaml 示例
- README.md: 配置链路移除 redirect80,confs 配置表删除 redirect80.ini 行
与 ca v1.1.0 保持一致的配置模式,redirect80 不再依赖 confs 服务。
2026-08-10 06:40:46 +00:00
qing
9d548c064f
refactor(ca): v1.1.0 配置体系重构为纯 CLI 传递
...
- 移除 confs 依赖:删 Conf.hpp 与 confs/configs/ca.ini,配置加载改为 CLI > 环境变量 > 默认值三层(与 dnfs2 同模式)
- 新增 16 个配置选项,env 以 CA_* 为主并兼容旧名(LISTEN_ADDR/UPSTREAM_GATEWAY/DB_* 等),启动时配置完整性校验
- 原 ca.ini 配置值迁入 core/services.yaml ca 条目 args
- 修复伪造 Token 触发 500:verify_token 统一捕获 RSA 验签异常,按验签失败返回 401(符合黑盒 B3/B4 契约)
- 同步更新 ca/README.md 与根 README.md
2026-08-10 06:13:43 +00:00
qing
8b6eb47c80
docs: 更正 confs 配置分发描述并补充部署安全约定
...
- 架构总览配置链路补全消费方清单(ca/gateway/db2/static/redirect80/smtp/captcha)
- static 章节更正:confs 为强依赖,本地 config.ini fail-safe 回退已废除
- confs 章节新增配置文件清单与依赖强度表(8 个 ini)
- 新增部署安全约定:confs/configs/*.ini 需 root:root 0640(引用 core 审计 20260810 复审)
2026-08-10 05:56:54 +00:00
qing
936a758651
docs(security): core 模块 20260810 复审合入审计报告
...
- 复核原 8 项:P0-1 HTTP 鉴权已修复(ca /admin/verify fail-closed),部分修复 4 / 未修复 4
- 新增 8 项发现(P1x2: PPool 无锁竞态、services.yaml 组可写提权路径;P2x4;P3x2)
- 更新修复路线图与第二轮代码验证记录
2026-08-10 05:51:19 +00:00
qing
b0d71a4c58
core: 移除 init.txt 向后兼容,仅支持 services.yaml
...
- InitParser: 移除 parseTxt(),load() 不再回退 init.txt
- pmc_mtd: parse_self_init_list 移除 TXT 分支,非 .yaml 文件报错退出
- main.cpp: --help 中 -i 参数描述移除 .txt
- Makefile: install/uninstall 移除 init.txt 拷贝/删除
- services.yaml: 头注释移除 init.txt 相关措辞
- 删除 init.txt 文件
- README (core + 项目根): 全部 init.txt 引用替换为 services.yaml
- core README: 补全 liblogc/yaml-cpp 依赖声明,修正文件结构
2026-08-10 05:39:00 +00:00
qing
f041bf284b
fix: 部署脚本补装 liblogc,修复 CA 等服务启动失败
...
_inst.sh 缺少 liblogc 安装步骤,导致生产服务器上
ca/gateway/captcha2/confs2/smtp3/core 链接 libus_logc.so 失败无法启动。
在 libmsg 之后、gateway 之前插入 inst_module liblogc。
2026-08-10 05:01:18 +00:00
qing
aa3741b861
feat(liblogc): 统一集中式日志客户端库 + 全量迁移
...
新增:
- liblogc/: C++ 统一日志库 (libus_logc.so),支持 set_endpoint/set_service_name/set_level
- pymsg/pymsg/logc.py: Python 统一日志模块,基于 AsyncRpcQueue
C++ 迁移 (删除 6 份本地 LogC.hpp 副本):
- ca, gateway: <us/LogC.hpp> + set_service_name
- captcha2, confs2, smtp3: using qing::LogC + set_service_name
- core: ConfsLogC → qing::LogC (ConfsTask.cpp)
- 所有 Makefile 添加 -lus_logc
Python 迁移 (6 个 log_client.py → 4 行薄包装):
- smtp, redirect80, confs, captcha, dnfs, static
- 全部委托到 pymsg.logc.LogClient
Go (waf): 保持现状,自成体系
2026-08-10 04:51:43 +00:00
qing
01ae877673
fix(smtp): 给 LogClient 补 set_log_level 方法,修复启动崩溃
...
commit 9fc3542 把 set_log_level 加成模块级函数,但 smtp_v2.py:319
以 logs.set_log_level() 当实例方法调用,导致服务启动即抛
AttributeError: 'LogClient' object has no attribute 'set_log_level'。
新增 LogClient.set_log_level 委托给模块级函数,保持 logs 单例为
统一公开 API,模块级函数保留不破坏其他调用。
2026-08-10 12:26:59 +08:00
qing
d17677bade
fix(actpred): ONNX opset 升级 + NumPy 兼容 + 断点续训 + MobileNetV2 离线弹性
...
- export_onnx: opset 17→18,dynamic_axes 改 dynamic_shapes 消除弃用警告
- predict: action_stats 改为 torch tensor,消除 NumPy 2.0 __array_wrap__ 警告
- train/pretrain: 每 epoch 保存 last.pt,新增 --resume 断点续训练
- model: MobileNetEncoder 下载失败时回退到已缓存权重
- _set.sh: 安装时预缓存 MobileNetV2 权重,失败给出明确指引
- test: 新增 TestResumeCheckpoint(2 用例),总计 58 测试全绿
2026-08-10 04:07:37 +00:00
qing
9fc3542771
smtp: CLI 标准化补完(--host/--log-level/--instance + log_client 级别过滤)
...
- argparse 新增 --host(别名 --addr)、--log-level、--instance
- --log-level 经 logs.set_log_level() 真正订阅日志过滤
- log_client.py: 新增 _LOG_LEVELS/set_log_level()/_normalize_level() + push() 级别过滤
- 启动日志打印 instance/log-level 及配置来源说明
- services.yaml: smtp 声明 --instance 和 --log-level
- 注: SMTP 账号走 .env/ENV(密码不进 CLI),与全项目约定一致
2026-08-10 12:05:46 +08:00
qing
d0ee948339
ai_review: CLI 标准化(argparse + --host/--port/--log-level/--instance)
...
- 新增 --host/--port 覆盖 $AI_REVIEW_HOST/$AI_REVIEW_PORT(CLI > ENV > 默认值)
- 新增 --log-level debug|info|warn|error(启动打印,ai_review 无 db 日志客户端故仅作标准接口)
- 新增 --instance 实例名(注册中心用)
- 配置加载从模块顶层移入 __main__,argparse 解析
- services.yaml: ai_review 声明 --instance 和 --log-level
2026-08-10 12:02:47 +08:00
qing
29eac70f24
captcha2: CLI 标准化(--host/--config/--log-level/--instance + LogC 级别过滤)
...
- 新增 --host(别名 --addr/-a)覆盖 [server] host
- 新增 --config 覆盖 confs 拉取的配置名(默认 captcha.ini)
- 新增 --log-level debug|info|warn|error(LogC 加级别过滤)
- 新增 --instance 实例名(注册中心用)
- LogC.hpp: 新增 set_level() + push() 级别过滤(atomic 阈值,大写兼容)
- 配置优先级: CLI > ENV > confs > 默认值
- services.yaml: captcha2 声明 --instance 和 --log-level
2026-08-10 12:00:34 +08:00
qing
8eb14cad4a
gateway: CLI 标准化(--host/--port/--config/--log-level/--instance + LogC 级别过滤)
...
- 新增 --host/--port 覆盖 [Server] address/port
- 新增 --config 覆盖 confs 拉取的配置名(默认 gateway.ini)
- 新增 --log-level debug|info|warn|error(LogC 加级别过滤)
- 新增 --instance 实例名(注册中心用)
- LogC.hpp: 新增 set_level() + push() 级别过滤(atomic 阈值,大写兼容)
- 配置优先级: CLI > ENV > confs > 默认值
- services.yaml: gateway 声明 --instance 和 --log-level
2026-08-10 11:55:54 +08:00
qing
4df510712e
ca: CLI 标准化(--host/--port/--log-level/--instance + LogC 级别过滤)
...
- 新增 --host/--port 覆盖 [Server] address/port
- 新增 --config 覆盖 confs 拉取的配置名(默认 ca.ini)
- 新增 --log-level debug|info|warn|error(LogC 加级别过滤)
- 新增 --instance 实例名(注册中心用)
- LogC.hpp: 新增 set_level() + push() 级别过滤(atomic 阈值)
- 配置优先级: CLI > ENV > confs > 默认值
- services.yaml: ca 声明 --instance 和 --log-level
2026-08-10 11:51:43 +08:00
qing
4275f002e0
redirect80: CLI 标准化(argparse + log_client 级别过滤)
...
- 新增 --host/--port/--redirect-port/--redirect-code CLI 参数(覆盖 confs+ENV)
- 新增 --log-level debug|info|warn|error(log_client 加级别过滤)
- 新增 --instance 实例名(注册中心用)
- 自定义 --help 用法文本(argparse,confs 不可用时也能 --help)
- log_client: 新增 set_log_level() + push() 级别过滤
- 修复: redirect_code 配置项原加载但未使用,do_GET/do_HEAD 改为用 _config['redirect_code']
- 配置优先级: CLI > ENV > confs > 默认值
- services.yaml: redirect80 声明 --instance 和 --log-level
2026-08-10 11:45:27 +08:00
qing
01c6d0cb1f
waf: CLI 标准化(--log-level/--instance + config.yaml 字段全 CLI 覆盖)
...
- 新增 --listen/--host (覆盖 listen)、--upstream、--tls-cert、--tls-key、--rules-dir
- 新增 --log-level debug|info|warn|error(logclient 加级别过滤)
- 新增 --instance 实例名(注册中心用)
- 自定义 --help 用法文本
- logclient: 新增 SetLevel() + Debug() + ENV LOG_LEVEL 支持
- services.yaml: waf 声明 --instance 和 --log-level
2026-08-10 11:38:08 +08:00
qing
01e67648e0
dnfs2: 彻底移除 dnfs.ini 依赖,改纯 CLI + ENV + 默认值
...
- 删除 confs/configs/dnfs.ini
- dnfs2.cpp: 移除 INI 解析器、confs 拉取逻辑、--config/--no-confs 参数
- dnfs2.cpp: 移除 confs_host/confs_port/confs_config_name/no_confs 字段
- dnfs2.cpp: 移除 <map>/<sstream>/<fstream> 未使用头文件
- services.yaml: 移除 --no-confs(不再需要)
- 更新 dnfs2/README.md: 配置说明改为 CLI 参数表
- 更新 README.md / confs/README.md: 移除 dnfs.ini 引用
2026-08-10 03:39:10 +08:00
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
qing and WorkBuddy
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