v2.2.0 — 开发者工具箱 + Redisson 分布式锁 + 工作区会话跨页保留 + CI 稳定性修复
概览
v2.1.0 之后合入 3 个 PR(#40、#41、#43),主线三条:开发者工具箱(Agent 系统工具 + admin 前端本地工具页双出口)、分布式锁组件化(starter 新增 lock 包,菜单排序加锁落地)、admin 工作区体验(进行中会话跨页面保留等)。另修复 main 分支 CI 连续失败的两个根因。全仓测试 1227 个,CI 全部通过(starter 700 + app-server 78 + customer-channel 8 + admin-server 440 + gateway 1)。
⚠️ 升级须知
- 数据库迁移:customer_admin 库新增 Flyway V27(
ai_system_tool种子devtoolbox、「系统管理」下新增菜单 id=150/system/devtools、权限点devtools:view) - 新增依赖:admin-web 前端新增
crypto-js(本地 AES/哈希计算);starter 与 admin-server 两处 pom 显式声明redisson 3.52.0(agentscope-bom 不托管,升级需两处同步) - 新增配置:
customer-work.distributed-lock.*(Redisson 分布式锁自动装配,惰性连接,Redis 不可达不影响应用启动) - 新增错误码:
MENU_REORDER_CONFLICT(40032)(菜单拖拽锁冲突 fast fail)
新增:开发者工具箱(PR #43)
JSON 格式化/校验、时间戳转换、Base64/URL/Hex 编解码、哈希(HMAC)/UUID、AES 加解密、正则测试,同一套能力两个出口:
- Agent 出口(复用系统工具机制,零侵入):starter 新增
tool/devtool/包——四组纯函数 Ops +DevToolboxTools壳(13 个@Tool方法);admin-server 以@Bean("devtoolbox")显式装配,bean 名对齐ai_system_tool.tool_code,智能体配置页勾选即挂载,不改 ToolRegistrar、不进 8080 主链路 - admin 前端出口(纯本地计算,零后端接口):
/system/devtools工具箱页,300ms debounce 实时计算、一键复制、localStorage 历史(AES 密钥/IV 不落存储)、?tool=直达路由;JSON 校验带行列定位、时间戳双向联动 + 多时区对照、AES 支持 CBC/ECB/CTR - LLM 出口防护:异常统一收敛为可自我纠正的
{"error":...};结果超 8000 字符截断标注,防大 JSON 撑爆上下文
新增:Redisson 分布式锁组件 + 菜单排序加锁(PR #41)
- starter 新增
lock包:DistributedLockExecutor接口 + Redisson 实现 + 自动装配(均@ConditionalOnMissingBean),惰性连接 MenuAdminController#reorder加锁修复多管理员并发拖拽乱序:PermissionService.reorder拆为加锁外层 +@Lazy自注入代理调用的@Transactional内层,保证锁释放严格晚于事务提交
admin 工作区体验(PR #41)
- 进行中会话跨页面/跨智能体保留:会话与 SSE 流从组件本地 ref 提升到 Pinia store,面板变纯视图;切菜单、切智能体、新建会话不再中断进行中的流;历史侧边栏合并内存活跃会话并标「进行中」;MainLayout
keep-alive精确缓存 WorkspaceView - 模型列表「厂商」列更名「接入协议」(provider 语义为接入协议,openai=所有 OpenAI 兼容端点),单元格显示友好文案;工作区三按钮统一胶囊规格
- 知识库问答 ask 链路注入 SYSTEM 系统提示词(检索专家定位 + 无依据即答不知道),抑制幻觉
CI / 测试稳定性(PR #40)
- ci.yml 补映射 Nacos gRPC 端口
9848,修复三个 Nacos 集成测试在 CI 必挂(探活 8848 可达但客户端连不上 gRPC) - 修复会话串行化并发测试的计数竞态(
doFinally→doOnTerminate,零时序假设);已核实会话锁串行化保证本身无缺陷,产品代码不动