qing
adfa61aa3c
docs: pybot×actpred 训练闭环评估实验报告与归一化逐列权重开发方案
...
实验报告:dry-run 批量录制 13 episodes/804 样本,未归一化 vs z-score
两模型对照训练,R4 闭环评估定位 spk.F 为主导误差列,记录 oob/error_growth
指标退化与 stats 路径 bug 修复。
开发方案:固定物理范围归一化(actpred 侧常量表,舵机 [0,180°])+
逐列加权损失,附评估器修正与 rollout/scheduled sampling 配套计划。
2026-08-14 08:59:53 +00:00
qing
aa271e395a
fix(pybot×actpred): 审计修复 7 项——Hailo 部署链语义对齐 + NaN 安全
...
P1-1: export_deploy.py forward() 从硬编码 3 帧改为 *inputs 动态解析
P1-2: hailo_infer.py 补 predict_delta 支持(残差模式 + --ckpt 自动检测)
P1-3: pybot _load_predictor 自动查找 pred_token.npy/action_stats.npy/
companion checkpoint,恢复 Hailo 推理训练语义
P1-4: pretrain_mt.py random_images 每 batch 重新生成噪声,防 BN 退化
P2-1: predict.py/hailo_infer.py/robot.py 三层 NaN/Inf 防线
P2-3: recorder.py imu_dim 默认 8→0,避免外部直接使用时形状错误
P2-5: _npu_test.py imu_dim 移到函数定义前,消除执行顺序依赖
2026-08-14 16:23:05 +08:00
qing
7ec8c9d0e9
fix(actpred): 训练时 action stats 完整路径传给 val_ds,checkpoint 存裸文件名
...
normalize_actions 默认改为 True 后暴露的潜伏 bug:stats 保存到
checkpoint_dir 后,cfg 只留裸文件名,val_ds 按 cwd 解析导致
FileNotFoundError。现改为验证集用完整路径构建,checkpoint 配置
存裸文件名(推理端按 checkpoint 目录解析)。
同步修正 test_warn_init_from_mismatch 对默认值的隐式依赖。
2026-08-14 06:31:15 +00:00
qing
af0ff56848
feat(pybot): 录制脚本 record_stand.mt——stand 多姿态序列(微动作分解)
...
基于 std.mt 扩展:@Camera 640x480 + MPU6050 绑定 + 5 行 @Action(delay=200)
生成 81 步 actpred 格式 episode(首行不分解 + 4×20 微步插值)
2026-08-14 06:26:25 +00:00
qing
a2c3a579fd
fix(actpred): 默认启用动作归一化,避免未归一化时 loss 虚高(几百→<1.0)
2026-08-14 12:01:26 +08:00
qing
cd4d512ecd
feat(pybot×actpred): R2 多 MPU6050 支持——8×N 姿态向量拼接与归一化平铺
...
- robot:_find_imus/_read_imus 按脚本块行序收集拼接 ≤4 个 MPU6050,_pad_imu 对齐 predictor.imu_dim
- recorder/imu_norm/dataset/config:imu.npy 宽度 8×N,归一化除数按传感器数平铺
- 测试:双传感器闭环拼接/pad/truncate、宽布局录制、16 维归一化加载
2026-08-14 09:34:39 +08:00
qing
b289e7d17c
fix(pybot): Windows 测试环境兼容(scripts 软链解析、os.pathsep 分隔)
...
- conftest:pybot/scripts 为 git 符号链接,Windows 落盘为文本文件(内容=目标相对路径),测试时手动解析到 bot4cj/scripts
- plugin:PYBOT_MODULES_PATH 改按 os.pathsep 分隔,避免 Windows 盘符冒号被切碎导致 find_module 返回丢盘符的路径
2026-08-14 09:34:26 +08:00
qing
a2ba797410
feat(pybot×actpred): R2 姿态反馈方案一——MPU6050 独立 IMU token 全链路
...
- pybot:recorder 逐帧落盘 imu.npy(T×8,roll,pitch,ax,ay,az,gx,gy,gz,与帧/动作同调用对齐);run_loop 对声明 imu_dim 的 predictor 以 predict(..., imu=) 调用(鸭子类型,旧两参调用向后兼容)
- actpred:新增 --imu-dim;model 序列 [img×F, act×H, (IMU), PRED](imu_dim>0 时 F+H+2,IMU token 位于 PRED 前);dataset/train 读 imu.npy(缺失按零向量兜底);predict/ONNX/Hailo 三后端与 export/gen_calibration/dfc_compile/_npu_test 部署链适配 imu 输入
- 姿态按物理量程固定缩放归一化(imu_norm.py,训练/推理共用,零状态)
- 测试:actpred 128 passed / pybot loop+recorder 28 passed
2026-08-14 09:07:24 +08:00
qing
3e773debc9
docs: pybot×actpred 审计报告与 actpred 研究方向报告
...
- docs/reviews/pybot_actpred_AUDIT_20260814.md:双模块审计(15 项既有
修复确认 + 新发现 P1×4/P2×6,含 P1-2 闭环帧源语义、P1-1 节拍失效研究)
- docs/reports/actpred_research_directions_20260814.md:RNN 思想四切入点
(C 残差/B 多步/A GRU 记忆 token/D 全 recurrent)+ R1~R13 分层演进路线
- 迁移文档 §9 更新为已实现:进程内闭环
2026-08-14 07:52:35 +08:00
qing
cc2f7bca79
feat(actpred): R1 残差预测+多步展开训练 与 R4 离线评估基准
...
R1(可选开关,默认关,向后兼容):
- --predict-delta:残差预测,target=Δ=a[t]-a[t-1](归一化空间),
推理端 predict 自动加回 a_{t-1}(惯性先验平滑动作)
- --rollout-len K + --ss-prob:多步展开 + scheduled sampling,
首步真历史、后续步按概率用真历史或自预测回传(detach 截断),
治 exposure bias;dataset 多步样本返回 {steps:[...]},自定义 collate
- 旧 checkpoint getattr 默认 False 兼容;pybot 闭环/部署链零改动
R4(新增 evaluate.py):
- 留出 episode 开环滚动预测,复刻闭环口径(图像真值滚动、动作自预测回写)
- 5 个闭环代理指标:overall_mse/error_growth(发散)/error_curve/
smoothness_ratio(平滑)/oob_rate(越界,数据经验界 min/max+margin)
- 支持 --compare A/B 对比与 --output JSON 报告
- 端到端验证:正确捕捉开环发散(单步 MSE 盲区)与残差平滑收益
新增 17 用例(R1×10 + R4×7),全量 100 passed 无回归
2026-08-14 07:52:22 +08:00
qing
fe12dd7b33
feat(pybot): 进程内实时预测闭环(--loop)与帧源/节拍修复
...
- 新增 run_loop 闭环:F 帧+H 步历史双滑窗,冷启动重复同帧+零动作,
每步 采样→推理→执行→回写,hz 节拍控制,可选同步录制
- --loop CKPT/--hz/--loop-steps 参数,按 .hef 后缀选 Hailo/PyTorch 后端,
actpred 软依赖(仅 --loop 时 import),保持 pybot 零依赖
- P1-2 帧源修复:闭环改从 camera 守护线程队列取最近 F 帧(低延迟),
替代 capture() 同步曝光阻塞,framerate/capacity 配置真正生效
- P1-1 overrun 告警:超时步记录实际耗时,汇总 overrun 比例并给降频建议
- 剔除 Speaker.delay 发声阻塞,speaker 补 delay=0 非阻塞
- 新增 tests/test_loop.py 11 用例(冷启动/历史滑动/索引映射/帧源等)
2026-08-14 07:52:07 +08:00
qing
5af863a2c5
feat(actpred): 训练时安全图像增强(ColorJitter),支持任意 frame_len
...
训练集启用 --augment 后对每帧施加亮度/对比度/饱和度/色调变换,
同一样本内所有帧共享参数(模拟连续帧光照不变),验证集不增强。
仅颜色空间变换,无空间变换,动作标签不受影响。
删除 t1.mt(@TEST 块无对应插件,录制时报错)。
2026-08-13 09:35:37 +00:00
qing
85133868f3
refactor(aibox): 抽离ConversationHistory至subsystems(Wave2阶段1)
...
- 新增 subsystems/conversation_history.py: 迁移对话历史管理器(318行),MemoryDatabase用TYPE_CHECKING注解避免循环导入
- subsystems/__init__.py: 导出ConversationHistory,更新docstring含Wave2
- aibox.py: 移除ConversationHistory类定义(3706->3388行),仅保留import与类型注解
- 新增 tests/test_conversation_history.py: 41项单测,覆盖构造/当前对话/归档/历史加载/memory_db集成
- 测试基线: 171->212项全过(12.13s),无回归
2026-08-13 16:54:32 +08:00
qing
8cb822b511
docs: pybot 微动作分解与自监督数据集录制特性报告
2026-08-13 16:43:12 +08:00
qing
bfa6d8deb6
fix(pybot): 录制时改用同步 capture() 按需抓帧,避免帧重复
...
_grab_frame 从 camera.latest()(读后台队列)改为 camera.capture()
(直接调 grabber 同步抓帧),确保每个微动作拿到独立帧而非队列中
可能重复的旧帧。Camera 新增 capture() 方法。
2026-08-13 16:38:15 +08:00
qing
3fc213e7b9
feat(pybot): 微动作分解——带时延的 @Action 行按 10ms 粒度插值执行
...
每行带 delay 的动作分解为 N=delay//10 个微步,舵机角度从上一行
目标值线性插值到当前行目标值。首行不分解(设初始位置),每步调
speaker.play(freq, 10) 提供声音+时序,dry_run 下补 sleep(0.01)。
delay 必须是 10 的倍数。录制时每个微步产出一帧+插值动作向量。
2026-08-13 16:28:00 +08:00
qing
d47ef6efb4
docs(aibox): 同步v3.0模块化文档,修复测试路径漂移
...
- README.md: 更新行数(8450->3706)、重写目录结构(含tools/subsystems/tests包)、补充包依赖方向与测试运行说明、新增v3.0更新日志
- test_basic_tools.py: 4个ReadFileTool测试改用tmp_path fixture,消除cwd依赖
- 新增 docs/reports/aibox_refactor_progress_20260814.md: 重构进度报告
2026-08-13 16:26:41 +08:00
qing
791fac0efd
refactor(aibox): 抽离B批12个工具类至tools包,附58个单测
...
B批(tools/):迁移依赖子系统的12个工具类(CommandLineTool/SearchSkills/ReloadSkills/InstallSkill/CreateSkill/MemoryTool/MemoTool/UpdateIdentity/UpdateSoul/SaveMemoryAndEndConversation/SetProxy/GetProxy/AskUser),aibox.py减少~1739行
修复MemoryDatabase.get_recent_memories(limit=None)的SQL错误(既有bug,None传给LIMIT ?导致datatype mismatch)
171个单测全绿,循环依赖障碍消除:B批工具直接依赖subsystems而非反向依赖aibox.py
2026-08-13 16:09:31 +08:00
qing
b9f8abdfeb
feat(pybot): 运行 .mt 脚本时录制 actpred 格式自监督数据集
...
新增 EpisodeRecorder,在 run() 每行 @Action 执行前抓取摄像头帧
+ 构建动作向量,产出 actpred ActionDataset 可直接加载的
episode_XXXX/images/*.jpg + actions.npy 格式。dry_run 下生成
随机噪声帧替代真实图像。
CLI 新增 --record DIR 和 --action-dim 选项。
2026-08-13 16:08:47 +08:00
qing
eadba81c26
refactor(aibox): 抽离工具类与子系统,附单测基线
...
A 批(tools/basic_tools.py):迁移 7 个无外部依赖工具类(FileToolBase/ReadFileTool/WriteFileTool/ListFilesTool/SimpleWebCrawlerTool/GetCurrentTimeTool/CalculatorTool)
Wave1(subsystems/):迁移 5 个叶子子系统(CommandExecutor/SubprocessCommandExecutor/PromptManager/MemoryDatabase/MemoDatabase/SkillManager),aibox.py 减少 ~1440 行
新增 tests/ 单测 113 个用例全绿,依赖方向维持 common -> subsystems -> tools -> aibox 单向
2026-08-13 15:48:55 +08:00
qing
8af8dec1b0
refactor(actpred): 默认图像分辨率改回 640×480
...
实机测速显示 1080p 采集的预处理缩放(约 45ms)主导端到端延迟
(测速报告 §6.1),640×480 下端到端 18.6ms,与 NPU/ORT 推理开销
更匹配。640×480 亦能被 16 整除,部署导出池化无损失。
已有 checkpoint 自带配置不受影响,仅改新训练默认值。
2026-08-13 15:25:09 +08:00
qing
823e91a30e
fix(actpred): 修复 HEF 帧归一化误判与部署图数值不等价,补齐 P3 审计项
...
- hailo_infer: 帧归一化判定改为量化网格 dequant(0)(旧启发式把归一化
帧当原始像素喂入,图像路径饱和破坏;实机 max_diff 2.55→0.37,
img 敏感性 1.44→22.26)
- export_deploy: pool kernel 由卷积真实输出尺寸探测(H//16 在 1080
高度下静默丢弃末行);mobilenet backbone 给出明确报错
- mt_parser: @Action 为文件末位块时解析成功,不再静默丢数据
- config: checkpoint train 段未知键/非 dict 校验;init-from 兼容性
警告助手(normalize/action_dim),train 与 pretrain 共用
- dataset: stats 文件形状校验;predict: 移除误导性 --action-dim
- dfc_compile: --frame-count 参数化(原硬编码 3 帧)
- gen_calibration: 旧模式校准图像改分块 memmap 生成(1080p 原一次性
分配 ~600MB)
- _npu_test: torch 参考反归一化对齐后再与 HEF 比较
- 单测 81→90 全过;README 与测速报告更新为验证轮次数据
2026-08-13 15:22:34 +08:00
qing
316758d80e
fix(actpred): 修复动作归一化统计量未覆盖 history 导致的 z-score 爆炸
...
两个问题(本轮归一化编译链路上实测暴露):
1. 统计量只按 targets 计算:targets 中恒定的列 std 落到 1e-8
地板值,而 history 窗口可能含该列的其他取值(.mt 脚本前几行),
z-score 爆炸(实测 (90-45)/1e-8=4.5e9)→ act_tokens ±1e9 →
DFC optimize 报 NegativeSlopeExponentNonFixable(desired shift
23 > 15 data bits)。pretrain_mt.py 与 dataset.py 的统计量改为
history∪target 联合计算,修复后校准数据 max|z| = 4.77。
2. action_stats_path 存成含目录的相对路径("./checkpoints/
action_stats.npy"),推理端(predict/export_deploy/gen_calibration)
按 checkpoint 目录解析时二次拼接成 checkpoints/./checkpoints,
导出直接 FileNotFoundError。train.py/pretrain_mt.py 改存裸文件名
"action_stats.npy"(stats 与 checkpoint 同目录,语义一致)。
新增回归测试 test_stats_cover_history_values(history 独有取值不
得被 1e-8 地板值打爆),全量 77 通过。
归一化重编译全链路通过:token 量级 |img|=0.53 |act|=2.93 健康,
optimize 通过,连通性检查 5/5,HEF 2.02MB 已部署 Pi 待 _npu_test
复验。
2026-08-13 06:43:51 +00:00
qing
52c0ade3c4
fix(actpred): 定位 HEF 输入不敏感根因,补齐归一化预训练链路
...
根因:预训练全零图像占位使 BN running_var 停在初始小值,推理时
特征放大至 ±1e6,DFC 在 token merge 点按最大幅度分配共享量化
scale,pred_token/act_tokens 全部被压成 0,HEF 输出对任何输入
恒定(详见 docs/reports/actpred_hef_insensitivity_rootcause_20260813.md)
- export_deploy.py:新增 check_token_ranges 导出前 token 量级检查
(|img|>100 中止导出并提示微调;act/img 比例过大警告;归一化
模型在 z 空间采样,避免零方差列爆炸)
- pretrain_mt.py:新增 --random-images(ImageNet 归一化噪声占位,
恢复 BN 统计)、--init-from(微调起点,含动作空间一致性警告)、
--normalize-actions 完整支持(训练集 stats 计算与保存、验证集复用)
- gen_calibration.py:归一化模型的校准集自动 z-score 动作历史
- _onnx_validate.py / _npu_test.py:归一化模型适配(torch 参考
z-score、HailoPredictor 传 stats_path)
- README:预训练章节补充新参数与 NPU 部署警告
- 单测 76/76 通过;冒烟验证:1 epoch 噪声微调后 |img| 2.46e5→8,
归一化后 |act| 694→2.9
2026-08-13 13:57:38 +08:00
qing
8c58770280
fix(actpred): 修复 DFC 连通性检查在 5.3 HAR 下被静默跳过的缺陷
...
DFC 5.3 的 HAR 不含 .edges 文件,原检查从未真正执行(仅打印
WARNING 跳过),输入断连的 HEF 仍可编译通过。改为解析主 hn 图
(layer output 边)做 BFS 可达性验证,任一输入层不可达输出层即
报错阻断;har_input_layer_names 同步改为数字后缀排序并优先取
主图 hn。新增 3 个单测(排序/通过/断连拦截),全量 76 通过。
本轮 224×224 重编译实测:优化后 HAR 5 输入均可达输出层(此前
64 版 HEF 输入不敏感的连通性隐患已消除);但 NPU 复验输出仍不
敏感,pred_token 边缘 scale=1965.92 表明抖动校准未生效,根因
待查(见后续提交)。
2026-08-13 05:13:18 +00:00
qing
a6e1781185
docs(actpred): 更新 Hailo 部署文档与报告,清理过时引用
...
- README: 部署工作流更新(224×224、pred-token-out、抖动校准、
连通性检查),首版 HEF 输入不敏感警告改为修复清单,ONNX 测速
数字更新为 224 实测
- hailo 调研报告:驱动 5.3.0、vstream 乱序踩坑、编译断连排查与
修复表、重编译待办
- 测速报告:新增 §6 Pi 5 224×224 复测
- 清理已删除报告的 4 处失效引用(审计报告/迁移文档/项目画像)
2026-08-13 12:22:41 +08:00
qing
14964b9574
fix(actpred): 修复 Hailo HEF 编译链路的输入断连与封装问题
...
- hailo_infer: 帧输入按 input_layerN 排序绑定(vstream 报告顺序实测
为 1,5,4,3,2,按报告顺序会 frame1/frame2 错位),新增 --pred-token
- gen_calibration: pred_token 校准改为学习值 ±30% 抖动,修复常量
校准量化退化(scale=18571.7,任何输入都被量化成 0)
- export_deploy: 新增 --pred-token-out 保存学习值供推理端喂入
- dfc_compile: parser/optimize 后自动检查输入层连通性,断开即报错
- 新增 _npu_test.py(NPU 4 角敏感性复验)与 _onnx_validate.py
(编译前 ONNX 数值门槛),test_actpred 补乱序帧序用例
2026-08-13 12:22:26 +08:00
qing
2068319c3a
fix(actpred): 落实 0812 代码审计 N-2/N-3 修复项
...
- 默认 batch_size 32→4(1920×1080 下 CPU/Pi 内存不可行)
- 速度基准报告补 1080p 复测注记(CPU 不可实时,需 NPU 或降分辨率)
- 附重写后首轮全量审计报告(含 N-1 checkpoint 兼容性回归记录)
2026-08-13 01:34:00 +00:00
qing
0d16832612
feat(actpred): 新增 Hailo DFC 编译链路,ONNX → HEF 全流程打通
...
训练态 ONNX(5D 输入/AdaptiveAvgPool/注意力 head reshape)无法被 DFC 解析,
新增 export_deploy.py 做权重不变的等价图改造:帧分支展开 CNN、img_proj
折叠为 1x1 卷积、注意力按头展开、全程 (1,1,S,d) 无 transpose 布局。
dfc_compile.py 一键走 parser→optimize→compiler(DFC 5.3),
gen_calibration.py --deploy 生成部署布局校准集。
已验证 110 层完整网络编译为 hailo10h HEF(1.8MB,4 contexts)。
2026-08-13 01:33:58 +00:00
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