feat: 拆分 worker 架构并增强 assistant 安全保护

- 新增 daemon/channel/assistant/function/scheduler/logging worker 架构和 JetStream 消息协议

- 修复邮件通知误入 assistant、迁移 checksum、日志 subject 和工具调用无限循环风险

- 新增 assistant 工具轮次熔断、工具结果截断和提示词软收敛规则

- 补充邮件推送关键字、可信发件人配置、升级日志和验证测试
This commit is contained in:
2026-07-10 00:41:36 +08:00
parent 7deae286ca
commit af6cfdaa83
70 changed files with 5953 additions and 1608 deletions
@@ -0,0 +1,46 @@
INSERT INTO ias_upgrade_logs (
version,
released_at,
title,
description,
changes,
modules
) VALUES (
'0.3.0',
'2026-07-09T00:00:00+08:00',
'进程拆分与 JetStream 数据面',
'按架构拆分设计新增 daemon 控制面、独立 worker 和 async-nats JetStream 公共数据面,HTTP、调度、日志和本地 NATS 部署配置同步接入。',
'[
"新增 ias-daemon 控制面,负责 worker 进程管理、control socket、JetStream 初始化和状态汇总;依赖边界测试确保 daemon 不依赖 AI、上下文、微信或邮件业务 crate。",
"ias-common 新增 MessageEnvelope、inbound/outbound/function/schedule/log/DLQ payload、固定 stream/subject 命名和 JetStreamBus 薄封装,统一使用 async-nats + JetStream durable pull consumer、explicit ack、有限并发消费、消费循环持续回收 handler 任务、handler 失败显式 NAK 和最后一次失败后显式 DLQ 转发;DLQ message id 使用原消息 id + UUID,避免同毫秒并发去重碰撞。",
"新增 ias-channel、ias-assistant、ias-function、ias-scheduler 和 ias-logging worker;微信入站、assistant 回复、工具调用、邮件提醒、定时触发和结构化日志均通过 JetStream subject 路由;邮件提醒只发布微信 outbound,不会误进入 assistant inboundWeChat Worker 启动后继续发送上线提醒和版本更新通知。",
"CLI 新增 ias daemon run、ias worker assistant/wechat/mail/function/scheduler/logging 和 ias http --hostias service start/stop/restart/status/logs 改为管理 daemon 控制面。",
"HTTP 新增 /v1/daemon/statusdaemon control socket 不可用时返回 degraded 状态,HTTP 可独立启动。",
"数据库新增 ias_schedules、ias_schedule_fires 和 ias_assistant_turns 表;Scheduler Worker 通过 fire_id 主键保证同一触发只发布一次,失败 fire 可重试,publishing 超时后可回收;Assistant Worker 持久化 active/completed/cancelled turn 状态,worker 重启后 function result 可继续当前 turn。",
"删除 ias-service::run_service、旧 ias-service supervisor、内存队列/control/runtime 单进程代码和旧微信 looper,避免新 daemon 与旧 supervisor 双实现并存;daemon 对初始启动失败或运行后退出的 worker 会在后续健康检查 tick 中按配置重试。",
"新增 docker-compose.nats.yml,本地 NATS JetStream 使用 file store ./data/nats,客户端和监控端口默认只绑定 127.0.0.1。",
"新增 worker 消息序列化/幂等测试、daemon cargo tree 依赖边界测试、max_deliver 语义测试和 JetStream ack/redelivery/DLQ 集成测试模板;/data 已加入 .gitignore,避免误提交 NATS file store;已验证 cargo fmt --check、cargo check 和 cargo test,真实 NATS JetStream 集成测试默认 ignored,需要启动 docker-compose.nats.yml 后手动运行。"
]'::jsonb,
'{
"ias-common": "0.2.0",
"ias-ai": "0.1.14",
"ias-wechat": "0.1.1",
"ias-context": "0.1.6",
"ias-http": "0.1.17",
"ias-mail": "0.1.17",
"ias-db": "0.1.2",
"ias-service": "0.1.27",
"ias-daemon": "0.1.0",
"ias-channel": "0.1.0",
"ias-assistant": "0.1.0",
"ias-function": "0.1.0",
"ias-scheduler": "0.1.0",
"ias-logging": "0.1.0",
"ias-main": "0.3.0"
}'::jsonb
) ON CONFLICT (version) DO UPDATE SET
released_at = EXCLUDED.released_at,
title = EXCLUDED.title,
description = EXCLUDED.description,
changes = EXCLUDED.changes,
modules = EXCLUDED.modules;