更新日志(Changelog)

本文件记录 ACE(Agent for Cangjie to Engine)的所有重要变更。

格式参考 Keep a Changelog, 版本号遵循 语义化版本


Unreleased

新增

  • ace-redis Redis 组件:零反射接入的 Redis 能力包,子包划分 resp(RESP2 编解码,可离线单测)/ client(连接、池、全命令、Pub/Sub、分布式锁,仅触 std.net)/ integrationRedisComponent 框架装配)。@Component 让组件 import 即自注册,读 [redis] 装配:
    • @Inject RedisClient:连接池化的客户端,覆盖 string/hash/list/set/zset/eval 等命令。
    • @Cacheable[ttlMs, "redis"]:把方法结果缓存落 Redis(命名后端,仅支持返回 String),替代进程内 TtlCache
    • 分布式锁 RedisLockManagerSET NX PX 抢锁 + Lua compare-and-del 原子释放 + withLock 自动释放;组件 provide RedisLockManager@Inject
    • Redis 后端限流ace-security 限流可切 [redis] 后端(跨实例共享计数)。
    • Pub/Sub 桥接RedisSubscriber 独立订阅连接(读侧无超时,阻塞收 push);[redis].pubsub.bridgeChannels 配置逗号分隔通道,收到消息经应用事件总线发布 RedisMessage@EventListener 消费。onStop 先关订阅(停读协程)再关客户端池,顺序不可反。
    • 示例 examples/redis-demo:一站式演示上述能力。
  • ORM 读写分离RoutingDriver(Driver 装饰器)——只读 SELECT 轮询从库、写与事务内读强制走主库(读己之写一致性);[datasource].replicas = "url1,url2" 配置即开,无配置退化单库,仓储/QueryBuilder/EntityManager 零改动。
  • @Transactional 传播级别@Transactional(REQUIRED,协程本地事务深度跟踪,嵌套加入外层不重复 begin)+ @RequiresNew(REQUIRES_NEW,同连接 SAVEPOINT 独立回滚单元)。
  • 自定义校验器 @Constraint["name"]:实现 Validator 接口 + registerValidator 按名注册,DTO 字段标注即用。
  • 嵌套级联校验 @Valid:对嵌套 @Dto 字段或 Array<@Dto> 递归调用其 validate()
  • 同接口多实现消歧 @Primary / @Qualifier:容器扩为「接口名 → 候选列表 + primary + 限定名」;@Inject 按接口解析走 primary/单候选,注入点 @Qualifier 指定实现。
  • 条件装配 @Conditional / @Profile:按配置项(["key"] / ["key=value"])或激活环境(["env"])决定 Bean 是否装配;守卫在解析期判定,boot 经 setActiveProfile 发布激活 profile。

变更

  • ORM 子包化重构ace-orm 按子包解耦——aceboot::orm.common(方言无关核心)/ aceboot::orm.sqlite / aceboot::orm.mysql / aceboot::orm.postgres(各 FFI 驱动 + 方言,注册表自注册);根包 facade 重导出,import aceboot::orm.* 不变。独立模块 ace-orm-macros 删除并入宏子包 aceboot::orm.macros,宏导入改为 import aceboot::orm.macros.*(破坏性变更),依赖只需声明 aceboot::orm 一项。

修复

  • @Transactional / @RequiresNew 的 String 返回路径误用 ArrayList.append(应为 add)导致返回空体。

0.1.0 - 2026-06

ACE 首个开发里程碑版本:一个用纯仓颉(Cangjie)编写、以编译期宏取代运行时反射的服务端框架, 覆盖「洋葱中间件内核 → 路由/请求解析 → 声明式宏层 → 对标 TypeORM 的零反射 ORM → 智能体运行时」完整分层。

核心内核(ace-web / ace-router / ace-bodyparser / ace-http)

  • ace-web:Koa 式洋葱中间件内核,框架无关的 Context 请求/响应载体,App 驱动洋葱并兜底异常(不依赖 stdx,可独立单测)。
  • ace-router:路由中间件,vendored path_to_regex 支持 :name/*name/:name?/:name([0-9]+)/可选分组等全规则;根/组中间件正确叠加。
  • ace-bodyparser:请求解析中间件,解析 urlencoded 表单(含 URL 解码)。
  • ace-http:唯一接触 stdx 的层,catch-all 分发器把所有路径交给同一入口进洋葱;listen 起服务。
  • 路由尾斜杠归一化(/api/tasks/api/tasks/ 等价)。
  • 连接超时、TLS、优雅停机接线。

声明式宏层(ace-framework)

  • @Controller/@Service/@Inject/@Get/@Post/@Put/@Delete 等注解,编译期展开为显式注册代码(可 --debug-macro 审计),无反射、无运行时枚举。
  • 完整组件系统:@Component(自动补接口实现,组件无需手写 <: Component)。
  • @Exception 宏:免手写 <: Exception 与样板构造器。
  • @Value 全局配置注入、@Catch 异常过滤器、@AppConfig 配置注入。
  • 多环境配置 Profile(公共 + 环境专属自动合并,CLI / 配置键切换),配置改用 TOML。
  • AOP、调度、生命周期钩子等 M7–M10 声明式增强与工程化收尾。
  • 插件契约 AcePlugin;OpenAPI 3.0 自动生成(/openapi.json + /docs)。

安全与可观测(ace-security / ace-observability)

  • 安全响应头、CSRF 双提交令牌、限流插件。
  • 缓存升级 TtlCache@Cacheable[ttlMs] 过期支持。
  • 结构化日志与请求追踪(接入真实延迟)。

智能体层(ace-agent / ace-agent-claude)

  • LlmProvider 抽象与 ClaudeProvider(Claude Messages API,x-api-key/anthropic-version 头,API Key 从 ANTHROPIC_API_KEY 环境变量读取)。

ace-orm —— 对标 TypeORM 的零反射 ORM

  • 基础@Entity/@Id/@Column/列别名,实体映射器(零反射)+ 自增 id 回填 + 仓储工厂自注册;泛型 Repository<T>(CRUD/count);免写 init()
  • 多方言SqliteDialect/PostgresDialect/MySqlDialect(占位符、自增、类型映射、RETURNING)。
  • 多驱动(FFI):SqliteDriver(libsqlite3)/PostgresDriver(libpq)/MySqlDriver(libmysqlclient),真连数据库 e2e 验证;按配置选驱动;驱动工厂自注册。
  • 事务@Transactional + DataSource.transactionEntityManager/QueryRunner 事务编排。
  • QueryBuilder:innerJoin/leftJoin、andWhere、orderBy、limit/offset、skip/take、distinct、groupBy/having、getManyAndCountgetRawManyleftJoinAndSelect/innerJoinAndSelect(对象图)、子查询 IN、命名参数;InsertQueryBuilder/UpdateQueryBuilder/DeleteQueryBuilder
  • 富 find 选项findBy/findOneBy/countBy/existsBy/findAndCount + 条件操作符(eq/ne/gt/like/inList/between/isNull 等)。
  • 写增强save/insertMany/updateWhere/deleteWhere/incrementupsert、软删除、审计列、@VersionColumn 乐观锁、remove(e) 生命周期钩子。
  • 关系@ManyToOne 对象导航、@OneToMany 反向、@OneToOne(含反向侧)、@ManyToMany + @JoinTablefindOne(id, relations) 联表装填。
  • 列元数据nullable/unique/default/length/显式类型、@Index@PrimaryColumn(非自增主键)。
  • 类型系统:DateTime/JSON/Blob/Decimal + DbBytesValueTransformer(经宏声明式绑定到列)。
  • 嵌入实体@Embeddable/@Embedded[prefix=] 展平到宿主表列。
  • 连接池:PG/MySQL 每操作借还、事务钉连接,idleTimeout 空闲连接回收(SQLite 维持线程亲和的每操作连接)。
  • 迁移Migration/MigrationRunner/历史表,schema sync(建表/加列/改列类型/删列 diff)。
  • 运维:多数据源注册、查询缓存、慢查询日志、连接重试与健康检查。
  • ORM 模块化历程:宏移出框架核心独立为 ace-orm-macros;驱动独立后合并为单一 ace-orm

示例与文档

  • examples/hello-api 探活示例;task-api 企业级示例(接入 ORM 真实持久化、SQLite 每操作连接保证线程安全、真连 PostgreSQL 验证)。
  • doc/roadmap-m12-plus.mddoc/blog-ace-technical-deep-dive.md

已知边界(诚实说明)

  • 透明 lazy loading 不可行(仓颉无运行时代理,仅支持显式 Lazy<T>)。
  • Decimal 以文本存储(仓颉标准库无 Decimal 类型)。
  • 迁移离线生成器(migration:generate)尚未实现。
  • MySQL 的 affectedRows(乐观锁)路径已实现但未做 e2e 验证。