feat: 拆分 worker 架构并增强 assistant 安全保护
- 新增 daemon/channel/assistant/function/scheduler/logging worker 架构和 JetStream 消息协议 - 修复邮件通知误入 assistant、迁移 checksum、日志 subject 和工具调用无限循环风险 - 新增 assistant 工具轮次熔断、工具结果截断和提示词软收敛规则 - 补充邮件推送关键字、可信发件人配置、升级日志和验证测试
This commit is contained in:
@@ -1,5 +1,28 @@
|
||||
# 更新日志
|
||||
|
||||
## 0.3.0 - 2026-07-09
|
||||
|
||||
- 按 `docs/architecture-split-design.md` 落地第一版进程拆分:新增 `ias-daemon` 控制面、`ias-channel`、`ias-assistant`、`ias-function`、`ias-scheduler` 和 `ias-logging` worker crate。
|
||||
- `ias-common` 新增 JetStream 公共协议和薄封装,定义 `MessageEnvelope`、inbound/outbound/function/schedule/log/DLQ payload、固定 stream/subject 命名、durable pull consumer、explicit ack、有限并发消费、消费循环持续回收 handler 任务、handler 失败显式 NAK、最后一次失败后显式 DLQ 转发和 stream 初始化;DLQ message id 使用原消息 id + UUID,避免同毫秒并发去重碰撞。
|
||||
- CLI 新增 `ias daemon run`、`ias worker assistant`、`ias worker wechat --account-ids ...`、`ias worker mail`、`ias worker function --name ...`、`ias worker scheduler`、`ias worker logging` 和 `ias http --host ...`;`ias service start|stop|restart|status|logs` 改为管理 daemon 控制面。
|
||||
- daemon 只负责 worker 进程、control socket、JetStream 初始化和状态汇总,worker 初始启动失败或运行后退出都会在后续健康检查 tick 中按配置重试;依赖边界测试确保不依赖 `ias-ai`、`ias-context`、`ias-wechat`、`ias-mail`。
|
||||
- 微信和邮件通道改为通过 JetStream 发布/消费业务消息:微信入站发布 `IA_INBOUND`,assistant 生成 outbound/typing/function call,微信 worker 执行 `IA_OUTBOUND`;邮件提醒只发布微信 outbound 消息,不再直接调用微信 manager,也不会误进入 assistant inbound;WeChat Worker 启动后继续发送上线提醒和版本更新通知。
|
||||
- Assistant Worker 新增 token 消耗保护:每个 turn 默认最多 8 轮工具往返、每轮最多 5 个工具调用,超过后自动熔断并结束当前 turn;工具结果返回模型前默认截断到 4000 字符,避免邮件 HTML 等大响应反复进入上下文;修复日志 subject 生成,`logs.worker.assistant` 可正确写入 `IA_LOGS`。
|
||||
- Assistant 系统提示词和入口工具描述新增软收敛规则:已有足够信息时直接回答,`query_capability_detail` 和 `query_api_docs` 不再作为默认前置步骤;宽泛邮件查询默认只汇总列表,禁止同一 turn 重复调用相同能力参数或重复读取同一邮件 ID;每次 LLM 请求都会注入当前工具预算状态,引导模型在接近上限前主动总结或请用户缩小范围。
|
||||
- Scheduler Worker 新增 `ias_schedules` 和 `ias_schedule_fires` 表,通过 `fire_id` 主键保证多副本下同一触发只发布一次;失败 fire 可重试,`publishing` 超时后可回收,避免一次发布失败或 worker 崩溃导致 schedule 永久卡死;Logging Worker 消费 `IA_LOGS` 并写入 `ias_operation_logs`。
|
||||
- Assistant Worker 新增 `ias_assistant_turns` 持久化 active/completed/cancelled turn 状态,worker 重启后 function result 可继续当前 turn,`/new` 取消的旧 turn 不会被误恢复。
|
||||
- 删除 `ias-service::run_service`、旧 `ias-service` supervisor、内存队列/control/runtime 单进程代码和旧微信 looper,避免新 daemon 与旧 supervisor 双实现并存;`ias-service` 仅保留账号管理、控制台和上下文模拟 HTTP routes。
|
||||
- HTTP 新增 `/v1/daemon/status` 代理 daemon control socket,daemon 不在线时返回 degraded 状态;新增 `docker-compose.nats.yml`,本地 NATS JetStream 默认只绑定 `127.0.0.1:4222` 和 `127.0.0.1:8222`,并使用 `./data/nats` file store。
|
||||
- 新增 worker 消息序列化/幂等键测试、daemon `cargo tree` 依赖边界测试、max_deliver 语义测试和被默认忽略的 JetStream ack/redelivery/DLQ 集成测试模板;`/data` 已加入 `.gitignore`,避免误提交 NATS file store;`ias-common` 升级至 `0.2.0`,新增 `ias-daemon`/`ias-channel`/`ias-assistant`/`ias-function`/`ias-scheduler`/`ias-logging` `0.1.0`,`ias-db` 升级至 `0.1.2`,`ias-http` 升级至 `0.1.17`,`ias-service` 升级至 `0.1.27`,`ias-main` 升级至 `0.3.0`;已验证 `cargo fmt --check`、`cargo check` 和 `cargo test`(真实 NATS JetStream 集成测试默认 ignored,需要启动 `docker-compose.nats.yml` 后手动运行)。
|
||||
|
||||
## 0.2.28 - 2026-07-09
|
||||
|
||||
- 邮件账号新增推送标题关键字过滤配置:关键字列表为空时保持全部推送;配置后只有主题命中任一关键字的新邮件才发送微信提醒,邮件本身仍正常入库和刷新缓存。
|
||||
- 邮件账号新增可信发件人列表,邮件详情 API 返回 `rendering.trusted_sender` 和 `rendering.remote_resources_allowed`;前端详情页仅在发件人命中可信列表时允许 HTML 邮件加载远程图片资源。
|
||||
- `ias mail auth` 和 `ias mail edit` 支持录入推送关键字和可信发件人;新增 `ias mail settings <id>` 可单独修改这两项邮箱设置。
|
||||
- 用户配置页面展示邮件账号的推送标题关键字和可信发件人列表,HTTP API 文档同步说明邮件详情渲染策略。
|
||||
- 数据库新增 `ias_mail_accounts.notification_subject_keywords` 和 `ias_mail_accounts.trusted_senders` 两个 `TEXT[]` 字段;新增 `0.2.28` 升级日志记录,`ias-db` 升级至 `0.1.1`,`ias-http` 升级至 `0.1.16`,`ias-mail` 升级至 `0.1.17`,`ias-service` 升级至 `0.1.26`,`ias-main` 升级至 `0.2.28`;已验证 `cargo fmt --check`、`cargo check`、`cargo test -p ias-mail`、`cargo test -p ias-service`、`cargo test -p ias-http` 和 `bun run build`。
|
||||
|
||||
## 0.2.27 - 2026-07-08
|
||||
|
||||
- 新增 `ias-db` crate,集中负责 PostgreSQL 连接池创建、`DATABASE_URL` 读取和 SQLx 迁移执行。
|
||||
|
||||
Reference in New Issue
Block a user