更新日志(Changelog)
本文件记录 ACE(Agent for Cangjie to Engine)的所有重要变更。
格式参考 Keep a Changelog, 版本号遵循 语义化版本。
Unreleased
新增
ace-redisRedis 组件:零反射接入的 Redis 能力包,子包划分resp(RESP2 编解码,可离线单测)/client(连接、池、全命令、Pub/Sub、分布式锁,仅触 std.net)/integration(RedisComponent框架装配)。@Component让组件 import 即自注册,读[redis]装配:@Inject RedisClient:连接池化的客户端,覆盖 string/hash/list/set/zset/eval 等命令。@Cacheable[ttlMs, "redis"]:把方法结果缓存落 Redis(命名后端,仅支持返回String),替代进程内TtlCache。- 分布式锁
RedisLockManager:SET NX PX抢锁 + Lua compare-and-del 原子释放 +withLock自动释放;组件 provideRedisLockManager可@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.transaction;EntityManager/QueryRunner事务编排。 - QueryBuilder:innerJoin/leftJoin、andWhere、orderBy、limit/offset、skip/take、distinct、groupBy/having、
getManyAndCount、getRawMany、leftJoinAndSelect/innerJoinAndSelect(对象图)、子查询IN、命名参数;InsertQueryBuilder/UpdateQueryBuilder/DeleteQueryBuilder。 - 富 find 选项:
findBy/findOneBy/countBy/existsBy/findAndCount+ 条件操作符(eq/ne/gt/like/inList/between/isNull 等)。 - 写增强:
save/insertMany/updateWhere/deleteWhere/increment、upsert、软删除、审计列、@VersionColumn乐观锁、remove(e)生命周期钩子。 - 关系:
@ManyToOne对象导航、@OneToMany反向、@OneToOne(含反向侧)、@ManyToMany+@JoinTable;findOne(id, relations)联表装填。 - 列元数据:
nullable/unique/default/length/显式类型、@Index、@PrimaryColumn(非自增主键)。 - 类型系统:DateTime/JSON/Blob/Decimal +
DbBytes,ValueTransformer(经宏声明式绑定到列)。 - 嵌入实体:
@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.md、doc/blog-ace-technical-deep-dive.md。
已知边界(诚实说明)
- 透明 lazy loading 不可行(仓颉无运行时代理,仅支持显式
Lazy<T>)。 - Decimal 以文本存储(仓颉标准库无 Decimal 类型)。
- 迁移离线生成器(
migration:generate)尚未实现。 - MySQL 的
affectedRows(乐观锁)路径已实现但未做 e2e 验证。