| feat: 初始化 ACE 框架与核心模块 - ace-web: Koa 式洋葱中间件内核(App/Context/compose/错误兜底) - ace-router: 完整 path-to-regexp 路由(vendored path_to_regex, 去 stdx 依赖) - ace-bodyparser: urlencoded 表单解析中间件 - ace-http: stdx.net.http 服务端 catch-all 适配器 - examples/hello-api: 端到端示例(路径参数/洋葱日志) - doc: 需求规格与开发计划 - scripts: 构建环境(SDKROOT 绕过)与 stdx dynamicLoader 垫片构建 - CLAUDE.md / README: 开发者指南与项目说明 | 14 天前 |
| feat: 完成 M7-M10 声明式增强、AOP、调度、安全与工程化 M7 声明式核心增强: - @PostConstruct/@PreDestroy Bean 生命周期 + 优雅停机(幂等、best-effort) - @Valid 参数校验(@NotEmpty/@Email/@Size/@Min/@Max)失败 400 JSON - @Dto 自动序列化 toJson + 零反射 JSON 解析器 - 字段 @Inject、@Query/Bool 绑定、@Put/@Delete/@Patch、错误->JSON/health 中间件、Config M8 AOP 编译期方法拦截内核:@Timed + wrapMethodBody 织入 helper M9 调度/异步/缓存:@Cacheable 记忆化、@Async(Future)、@Scheduled 调度器 M10 安全:ace-security 模块,JWT(HS256/stdx.crypto)+ jwtAuth/requireRoles 授权 guard A组:rate-limit 中间件、请求头小写化归一、multipart/form-data bodyparser 其他模块:ace-agent-claude(Claude Messages 报文构造)、查询解析、config 工程化:README 全面更新、CONTRIBUTING、语义化版本与 API 稳定性策略 71 单测全绿;di-demo/auth-demo 端到端验证 exit 0 | 13 天前 |
| feat: 完成 M3-M6 声明式IoC框架、智能体、单体/微服务统一、控制面 - ace-framework: 编译期宏 + IoC 容器(单例/prototype + 构造器注入), @Service/@Prototype/@Controller/@Get/@Post 声明式路由 + 类型化参数绑定, 响应头/CORS/日志中间件,AceApplication 一行起真实 HTTP (四 module: macros/runtime/facade/boot) - ace-agent: LlmProvider/Tool/Agent 工具调用循环 + asHandler(agent-as-a-service) - ace-rpc: Transport 抽象,业务面向接口、本地实现与 RPC 代理透明切换 - ace-autopilot: 分级护栏控制面(钳制/白名单自动执行/危险只建议/审计) - ace-web: Context 增加 query/请求体/响应头/setHeader - ace-http: 适配器读请求体、回写响应头 - examples: di-demo、web-server(声明式控制器 + 智能体 /chat),均真实 HTTP 验证 38 单测全绿,零运行时反射 | 13 天前 |
| feat: 完成 M7-M10 声明式增强、AOP、调度、安全与工程化 M7 声明式核心增强: - @PostConstruct/@PreDestroy Bean 生命周期 + 优雅停机(幂等、best-effort) - @Valid 参数校验(@NotEmpty/@Email/@Size/@Min/@Max)失败 400 JSON - @Dto 自动序列化 toJson + 零反射 JSON 解析器 - 字段 @Inject、@Query/Bool 绑定、@Put/@Delete/@Patch、错误->JSON/health 中间件、Config M8 AOP 编译期方法拦截内核:@Timed + wrapMethodBody 织入 helper M9 调度/异步/缓存:@Cacheable 记忆化、@Async(Future)、@Scheduled 调度器 M10 安全:ace-security 模块,JWT(HS256/stdx.crypto)+ jwtAuth/requireRoles 授权 guard A组:rate-limit 中间件、请求头小写化归一、multipart/form-data bodyparser 其他模块:ace-agent-claude(Claude Messages 报文构造)、查询解析、config 工程化:README 全面更新、CONTRIBUTING、语义化版本与 API 稳定性策略 71 单测全绿;di-demo/auth-demo 端到端验证 exit 0 | 13 天前 |
| feat(macros): @File/@Files 文件上传参数宏 + 修复同名多文件覆盖 此前文件上传需取 ctx 手动 fileValue,不够声明式;且多文件同名会被 HashMap 覆盖(多文件实际未支持)。 - UploadedFile/fileValue/fileValues/requireFile 上移到 ace-web(facade 可见,供宏生成代码引用) - bodyparser parseMultipartBytes 改 HashMap<String, ArrayList<UploadedFile>> 支持同名多文件 - 新增 @File["k"]/@File["k!"](单文件,! 必填缺失 400)与 @Files["k"](同名多文件 Array<UploadedFile>) 参数宏,经 getChildMessages → routeMeta(源 f/fs)→ bindArgs 类型化直传(不走字符串转换) - task-api demo 改用 @File/@Files,加 /upload-multi;docs/README 更新 实机验证:@File 单文件 ok、必填缺失 400;@Files 同名多文件 count=2/550 字节;全量回归 265/0。 | 8 天前 |
| feat(client): 新增 ace-client HTTP 客户端模块 服务间调用 / 调外部 API 此前完全缺失(ace-rpc 仅进程内)。新模块 ace-client: - AceClient 封装 stdx.net.http 的 ClientBuilder/Client - get(url) / post(url, contentType, body),响应 body 自动读尽为 String,支持超时构造 - 加入 workspace members;web-server 加 /proxy/ping 演示(出站自调 /api/ping) 实机验证:/proxy/ping -> "upstream status=200 body=pong"。 | 8 天前 |
| feat(m12-m15): AOP/@Around、Request作用域、Cron、Session、i18n、ace-test、ace-cli M12 - Container & AOP 完善: - interceptor.cj: MethodInterceptor 接口 + Invocation + 拦截器注册表 - macros.cj @Around["name"]: 编译期方法拦截织入(无反射 AOP) - container.cj: Scope.Request + 循环依赖检测(resolvingStack) + BeanPostProcessor (resolveHooks) + ContainerSnapshot/snapshot/restore 供测试隔离 - macros.cj @Service["scope"]: 新增有属性变体支持 singleton/prototype/request - config.cj: ${key} / ${key:default} 占位符插值(深度限制 8,防循环引用) M13 - Web 机制完善: - cron.cj: 5/6字段 cron 表达式解析、matchesCronMs、nextAfterMs(Julian Day算法) - scheduler.cj: CronTask + registerCronTask + startScheduler cron 协程(秒级轮询) - macros.cj @Scheduled: 支持 @Scheduled["0 * * * * *"] cron 字符串 vs 整数周期 - session.cj: SessionStore 接口 + MemorySessionStore(TTL) + sessionMiddleware - content_negotiation.cj: Accept 协商 + Body Encoder 注册表 + 参数 Converter - i18n.cj: key=value 消息文件解析 + {0}{1} 占位符替换 + localeMiddleware M14 - 测试套件: - ace-test/: TestRequest/TestResponse(内嵌 App 执行) + withMockBean + withConfig - ops.cj: /ace/beans /ace/env /ace/mappings /ace/loggers 运维端点 M15 - 工具链: - tools/ace-cli/: ace new/g controller/service/entity 脚手架命令 - scripts/dev.sh: fswatch watch+recompile 开发脚本 全量测试 445 通过。 | 5 天前 |
| feat(runtime): ApplicationRunner/健康指标/事件系统/ORM 参考文档 - ApplicationRunner 接口 + resolvedApplicationRunners(按 order 排序) - HealthIndicator 接口 + readinessHandler 聚合检查(全 UP→200 否则 503) - events.cj: ApplicationStarting/EnvironmentPrepared/Ready/Stopping/Stopped 事件 - scheduler.cj: startScheduler/stopScheduler 优雅停机 - container.cj: resolveBeanInject(接口+限定 + @Primary 消歧) - server.cj: ListenOptions.onShutdown 钩子 - middlewares_test.cj: 新增覆盖 - docs/09-orm-reference.md: ORM 完整参考 | 5 天前 |
| feat(observability): 日志输出格式与级别可配置(json/simple/text) 支持经全局配置文件指定日志输出格式与最低级别,底座三种 stdx.logger 实现(JsonLogger/SimpleLogger/TextLogger)按配置切换: - ace-observability 新增 LogFormat 枚举、parseLogFormat/parseLogLevel 解析(大小写不敏感、未知回退默认)、setLogFormat(重建共享 sink 并 重注册 stdx 全局 logger),format() 渲染随之切换; - 共享 sink 由 let 改为可重建 var,默认 json 行为不变; - LogManager.setDefaultLevel 追溯更新已缓存 logger 与全局 logger, 使启动期设一次即对全部 Logger 生效; - ace-framework-boot 启动读 logging.format / logging.level 配置并应用 (先于一切启动日志),覆盖 run/runWith 两条启动路径; - task-api 示例配置补充 [logging] 段说明。 配置: [logging] format = "json" # json(默认) | simple | text level = "info" # info(默认) | trace | debug | warn | error 对外 API 与默认输出保持不变。新增 4 项单测,全量 417 通过;运行时验证 format=text 输出 KV 文本。 | 5 天前 |
| feat(orm): 实体继承 STI(单表继承 @TableInheritance/@ChildEntity) 基类 @Entity+@TableInheritance[判别列] 与子类 @ChildEntity[基类, 判别值] 共用一张基表, 靠判别列区分行的具体子类型(零反射,对标 TypeORM STI / JPA SINGLE_TABLE)。 - 子类型注册表 sti.cj:@ChildEntity 启动期 registerSubtype(基类型名, 判别值, 工厂)自注册; 基映射器多态 fromRow 据行内判别值 lookupSubtype 构造正确子类实例(擦除 Any 再下转基类)。 - 基映射器生成 baseColumns/baseFromRow/baseInsertParams 供子映射器委托装填基列;columns() 追加可空判别列。 - 子映射器委托基映射器处理基列 + 处理自有 @Column 列;insertParams 写判别值,列/参数顺序对齐。 - 读路径:子仓储经 discriminatorValue 过滤只见本类型行;基仓储不过滤、多态返回各子类实例, 并经 subtypeExtraColumns 把全部子类型自有列并入 SELECT 投影。 - 建表:基/子共表走幂等 syncTable(dropMissing:false);基仓储建表一次性提供整层完整 schema。 - 字段级子宏放宽父上下文:allow @Entity 或 @ChildEntity(insideParentContext),既有 @Entity 场景不变。 - 自有列恒可空(共表兄弟行该列 NULL);非 STI 实体生成物字节不变。 | 5 天前 |
| feat(orm): PG数组/SQLSTATE/cursor流式/迁移历史兼容四项修复 - DbValue 新增 DbArray(Array<DbValue>) 变体 + Row.getArray() - OrmException 添加 code: String 字段(默认"")用于 SQLSTATE 程序化判断 - postgres.cj: PQresultErrorField 提取 SQLSTATE 赋 OrmException.code - postgres.cj: parsePgArray 解析 PG 文本协议一维数组 {1,2,NULL} - Driver 接口新增 streamQuery 默认实现(LIMIT/OFFSET 降级) - PostgresDriver.streamQuery 覆盖为 DECLARE/FETCH/CLOSE 原生游标 - 事务感知: txn.get() Some 复用钉连接跳 BEGIN/COMMIT - 无事务: 借新连接自建事务包裹游标生命周期 - InstrumentedDriver 显式委托 inner.streamQuery 防接口默认绕过 PG 游标 - Repository.stream(chunkSize, cb): 用 allColNames()+baseFilter 正确投影+软删除过滤 - QueryBuilder.stream: 构建 SQL 时临时清 lim/off 避免双重 LIMIT 语法错误 - MigrationRunner.ensureHistoryTable: hasColumn 检测缺 executedAt 则 addColumn - MigrationRunner.revertLast: SELECT 加 LIMIT 1 避全表拉取 - 新增 stream_test.cj: 4 个 SQLite 流式读测试(批次边界/空表/QB 流式) - 新增 migration_test.cj: revertLast 幂等性回归测试 - 各驱动 match DbArray 穷尽 arm; 移除 postgres/mysql 未使用 std.sync 导入 | 4 天前 |
| feat(m12-m15): AOP/@Around、Request作用域、Cron、Session、i18n、ace-test、ace-cli M12 - Container & AOP 完善: - interceptor.cj: MethodInterceptor 接口 + Invocation + 拦截器注册表 - macros.cj @Around["name"]: 编译期方法拦截织入(无反射 AOP) - container.cj: Scope.Request + 循环依赖检测(resolvingStack) + BeanPostProcessor (resolveHooks) + ContainerSnapshot/snapshot/restore 供测试隔离 - macros.cj @Service["scope"]: 新增有属性变体支持 singleton/prototype/request - config.cj: ${key} / ${key:default} 占位符插值(深度限制 8,防循环引用) M13 - Web 机制完善: - cron.cj: 5/6字段 cron 表达式解析、matchesCronMs、nextAfterMs(Julian Day算法) - scheduler.cj: CronTask + registerCronTask + startScheduler cron 协程(秒级轮询) - macros.cj @Scheduled: 支持 @Scheduled["0 * * * * *"] cron 字符串 vs 整数周期 - session.cj: SessionStore 接口 + MemorySessionStore(TTL) + sessionMiddleware - content_negotiation.cj: Accept 协商 + Body Encoder 注册表 + 参数 Converter - i18n.cj: key=value 消息文件解析 + {0}{1} 占位符替换 + localeMiddleware M14 - 测试套件: - ace-test/: TestRequest/TestResponse(内嵌 App 执行) + withMockBean + withConfig - ops.cj: /ace/beans /ace/env /ace/mappings /ace/loggers 运维端点 M15 - 工具链: - tools/ace-cli/: ace new/g controller/service/entity 脚手架命令 - scripts/dev.sh: fswatch watch+recompile 开发脚本 全量测试 445 通过。 | 5 天前 |
| feat: 完成 M3-M6 声明式IoC框架、智能体、单体/微服务统一、控制面 - ace-framework: 编译期宏 + IoC 容器(单例/prototype + 构造器注入), @Service/@Prototype/@Controller/@Get/@Post 声明式路由 + 类型化参数绑定, 响应头/CORS/日志中间件,AceApplication 一行起真实 HTTP (四 module: macros/runtime/facade/boot) - ace-agent: LlmProvider/Tool/Agent 工具调用循环 + asHandler(agent-as-a-service) - ace-rpc: Transport 抽象,业务面向接口、本地实现与 RPC 代理透明切换 - ace-autopilot: 分级护栏控制面(钳制/白名单自动执行/危险只建议/审计) - ace-web: Context 增加 query/请求体/响应头/setHeader - ace-http: 适配器读请求体、回写响应头 - examples: di-demo、web-server(声明式控制器 + 智能体 /chat),均真实 HTTP 验证 38 单测全绿,零运行时反射 | 13 天前 |
| refactor(json)!: JSON 改用 stdx.encoding.json,删除自维护解析器 修订设计纲领:JSON DOM/解析统一基于 stdx(native 后端、整数/浮点分离、流式/美化能力), 不再自维护递归下降解析器。布局: - 新增 ace-framework-runtime/json.cj:parseJson/stringifyJson/field*/fieldArray/mapJsonArray/ mapToJson/jsonToMap/jsonToValueMap/valueMapToJson,re-export stdx JsonValue;runtime 加 stdx 依赖。 - 删除 ace-web 的 json_parse.cj(自带 JsonValue 枚举+递归解析器)与 json_map.cj。 - ace-web 保留纯字符串辅助 json.cj(jsonEscape/jsonStringArray/joinJsonArray),仍零 stdx。 - ace-security/jwt.cj 改用 stdx.encoding.json 直接解析(层级在 framework 之下)。 - @Dto 宏无需改动(生成的 parseJson/field* 经 facade 解析到 runtime)。 分层结果:纯内核 ace-web/ace-router/ace-bodyparser 仍零 stdx、可独立单测; 声明层(runtime 起)编译期依赖 stdx。README/CLAUDE.md/docs 纲领相应更新。 验证:全量回归 265/0;@Dto 数组/嵌套端到端 round-trip 正确;jwt 13/0;ace-web 50/0(纯净)。 | 8 天前 |
| feat(m12-m15): AOP/@Around、Request作用域、Cron、Session、i18n、ace-test、ace-cli M12 - Container & AOP 完善: - interceptor.cj: MethodInterceptor 接口 + Invocation + 拦截器注册表 - macros.cj @Around["name"]: 编译期方法拦截织入(无反射 AOP) - container.cj: Scope.Request + 循环依赖检测(resolvingStack) + BeanPostProcessor (resolveHooks) + ContainerSnapshot/snapshot/restore 供测试隔离 - macros.cj @Service["scope"]: 新增有属性变体支持 singleton/prototype/request - config.cj: ${key} / ${key:default} 占位符插值(深度限制 8,防循环引用) M13 - Web 机制完善: - cron.cj: 5/6字段 cron 表达式解析、matchesCronMs、nextAfterMs(Julian Day算法) - scheduler.cj: CronTask + registerCronTask + startScheduler cron 协程(秒级轮询) - macros.cj @Scheduled: 支持 @Scheduled["0 * * * * *"] cron 字符串 vs 整数周期 - session.cj: SessionStore 接口 + MemorySessionStore(TTL) + sessionMiddleware - content_negotiation.cj: Accept 协商 + Body Encoder 注册表 + 参数 Converter - i18n.cj: key=value 消息文件解析 + {0}{1} 占位符替换 + localeMiddleware M14 - 测试套件: - ace-test/: TestRequest/TestResponse(内嵌 App 执行) + withMockBean + withConfig - ops.cj: /ace/beans /ace/env /ace/mappings /ace/loggers 运维端点 M15 - 工具链: - tools/ace-cli/: ace new/g controller/service/entity 脚手架命令 - scripts/dev.sh: fswatch watch+recompile 开发脚本 全量测试 445 通过。 | 5 天前 |
| feat(m12-m15): AOP/@Around、Request作用域、Cron、Session、i18n、ace-test、ace-cli M12 - Container & AOP 完善: - interceptor.cj: MethodInterceptor 接口 + Invocation + 拦截器注册表 - macros.cj @Around["name"]: 编译期方法拦截织入(无反射 AOP) - container.cj: Scope.Request + 循环依赖检测(resolvingStack) + BeanPostProcessor (resolveHooks) + ContainerSnapshot/snapshot/restore 供测试隔离 - macros.cj @Service["scope"]: 新增有属性变体支持 singleton/prototype/request - config.cj: ${key} / ${key:default} 占位符插值(深度限制 8,防循环引用) M13 - Web 机制完善: - cron.cj: 5/6字段 cron 表达式解析、matchesCronMs、nextAfterMs(Julian Day算法) - scheduler.cj: CronTask + registerCronTask + startScheduler cron 协程(秒级轮询) - macros.cj @Scheduled: 支持 @Scheduled["0 * * * * *"] cron 字符串 vs 整数周期 - session.cj: SessionStore 接口 + MemorySessionStore(TTL) + sessionMiddleware - content_negotiation.cj: Accept 协商 + Body Encoder 注册表 + 参数 Converter - i18n.cj: key=value 消息文件解析 + {0}{1} 占位符替换 + localeMiddleware M14 - 测试套件: - ace-test/: TestRequest/TestResponse(内嵌 App 执行) + withMockBean + withConfig - ops.cj: /ace/beans /ace/env /ace/mappings /ace/loggers 运维端点 M15 - 工具链: - tools/ace-cli/: ace new/g controller/service/entity 脚手架命令 - scripts/dev.sh: fswatch watch+recompile 开发脚本 全量测试 445 通过。 | 5 天前 |
| feat(websocket): 补齐 @OnError(完成 JSR 356 式 ws 宏全集) @WsController 宏全集现为 @OnOpen/@OnMessage/@OnClose/@OnError。 aceWsEndpoint 加 onError 回调(帧循环异常时触发,签名 (session, error)); wsClosure 加 "error" shape;@OnError 宏上送方法名。未声明则空 no-op。文档同步。 | 8 天前 |
| feat(logging): @Log 宏 token 注入 + task-api 示例 + 使用文档 - @Log 宏:改用 injectClassMember 将 prop 注入类体末尾(extend 属性对类内 方法不可见,token 注入可见),扫描最后一个 '}' 用 .value != "}" 而非 不存在的 TokenKind.RBRACE - @Controller 同步支持 @Log 注入 - task-api/TaskService + TaskController:演示 @Log 五级日志调用 - examples/task-api/cjpm.toml:补充 ace_observability 依赖 - fix: let result: ?TaskView = match ... 显式类型注解,消除 None 泛型推断歧义 - docs/16-logging.md:完整使用文档(@Log、MDC、级别、JSON 格式、@Inject ctx、测试) | 5 天前 |
| feat(observability): 日志输出格式与级别可配置(json/simple/text) 支持经全局配置文件指定日志输出格式与最低级别,底座三种 stdx.logger 实现(JsonLogger/SimpleLogger/TextLogger)按配置切换: - ace-observability 新增 LogFormat 枚举、parseLogFormat/parseLogLevel 解析(大小写不敏感、未知回退默认)、setLogFormat(重建共享 sink 并 重注册 stdx 全局 logger),format() 渲染随之切换; - 共享 sink 由 let 改为可重建 var,默认 json 行为不变; - LogManager.setDefaultLevel 追溯更新已缓存 logger 与全局 logger, 使启动期设一次即对全部 Logger 生效; - ace-framework-boot 启动读 logging.format / logging.level 配置并应用 (先于一切启动日志),覆盖 run/runWith 两条启动路径; - task-api 示例配置补充 [logging] 段说明。 配置: [logging] format = "json" # json(默认) | simple | text level = "info" # info(默认) | trace | debug | warn | error 对外 API 与默认输出保持不变。新增 4 项单测,全量 417 通过;运行时验证 format=text 输出 KV 文本。 | 5 天前 |
| feat(m12-m15): AOP/@Around、Request作用域、Cron、Session、i18n、ace-test、ace-cli M12 - Container & AOP 完善: - interceptor.cj: MethodInterceptor 接口 + Invocation + 拦截器注册表 - macros.cj @Around["name"]: 编译期方法拦截织入(无反射 AOP) - container.cj: Scope.Request + 循环依赖检测(resolvingStack) + BeanPostProcessor (resolveHooks) + ContainerSnapshot/snapshot/restore 供测试隔离 - macros.cj @Service["scope"]: 新增有属性变体支持 singleton/prototype/request - config.cj: ${key} / ${key:default} 占位符插值(深度限制 8,防循环引用) M13 - Web 机制完善: - cron.cj: 5/6字段 cron 表达式解析、matchesCronMs、nextAfterMs(Julian Day算法) - scheduler.cj: CronTask + registerCronTask + startScheduler cron 协程(秒级轮询) - macros.cj @Scheduled: 支持 @Scheduled["0 * * * * *"] cron 字符串 vs 整数周期 - session.cj: SessionStore 接口 + MemorySessionStore(TTL) + sessionMiddleware - content_negotiation.cj: Accept 协商 + Body Encoder 注册表 + 参数 Converter - i18n.cj: key=value 消息文件解析 + {0}{1} 占位符替换 + localeMiddleware M14 - 测试套件: - ace-test/: TestRequest/TestResponse(内嵌 App 执行) + withMockBean + withConfig - ops.cj: /ace/beans /ace/env /ace/mappings /ace/loggers 运维端点 M15 - 工具链: - tools/ace-cli/: ace new/g controller/service/entity 脚手架命令 - scripts/dev.sh: fswatch watch+recompile 开发脚本 全量测试 445 通过。 | 5 天前 |
| feat(skills): 导出仓颉语言 skill 并完善 AI 辅助开发文档 - 将 ~/.claude/skills/cangjie/ 打包导出到 skills/cangjie.skill(含 19 个专题参考文件) - 重构 website/cli/ai-assist.md:扩展为覆盖 cangjie + ace-framework 双 skill 的完整使用说明 - 对比表格说明两个 skill 的分工(语言层 vs 框架层) - 分别列出各自的触发条件、Skill 内容目录树、使用示例 - 新增"两个 Skill 如何协作"章节说明自动分工机制 - 新增"更新 Skill"章节说明重新打包流程 | 4 天前 |
| feat(ace-cli): ace new 生成完整分层项目结构(对齐 task-api) | 5 天前 |
| chore(website): 更新版权信息为 2026 福州九匠科技有限公司 | 4 天前 |
| docs(website): 新增 VitePress 文档站点,含 35 页中文文档 涵盖指南/Web/AOP/ORM/安全/高级/CLI 全部章节,MidwayJS 风格, 含代码示例、API 表格、callout 提示框;VitePress 1.6.3 构建通过。 | 5 天前 |
| feat(ioc): @Primary/@Qualifier 多实现消歧 + @Conditional/@Profile 条件装配 容器(container.cj): - 扩为「接口名→候选列表 + primaryOf + qualifierOf + conditionOf」 - registerInterface/registerPrimary/registerQualifier/registerCondition - resolveByInterface(过滤被禁用候选→单候选/primary/歧义报错)、resolveQualified - resolveBeanInject:精确类名命中优先,否则按接口解析(@Inject 默认路径) - BeanCondition + conditionMet:解析期对照 appConfig/currentProfile 求值 - setActiveProfile/currentProfile;boot loadProfiles 后发布激活 profile 宏(macros.cj): - @Primary(类位标记)、@Qualifier(类位登记/注入点指定,按声明区分 class/field scope 避免 getChildMessages 冒泡误判)、@Conditional["k"]/["k=v"]、@Profile["env"] - serviceReg/@Controller 经 beanMetaRegs 生成接口候选 + primary/qualifier/condition 自注册 - @Inject:带 @Qualifier 走 resolveBeanQualified,否则 resolveBeanInject 单测:容器解析逻辑(container_resolve_test 5 例)+ 宏端到端(di-demo ioc_qualifier_test 2 例) 文档:backlog 两项标完成;04 章补多实现消歧/条件装配;CHANGELOG | 8 天前 |
| refactor(json)!: JSON 改用 stdx.encoding.json,删除自维护解析器 修订设计纲领:JSON DOM/解析统一基于 stdx(native 后端、整数/浮点分离、流式/美化能力), 不再自维护递归下降解析器。布局: - 新增 ace-framework-runtime/json.cj:parseJson/stringifyJson/field*/fieldArray/mapJsonArray/ mapToJson/jsonToMap/jsonToValueMap/valueMapToJson,re-export stdx JsonValue;runtime 加 stdx 依赖。 - 删除 ace-web 的 json_parse.cj(自带 JsonValue 枚举+递归解析器)与 json_map.cj。 - ace-web 保留纯字符串辅助 json.cj(jsonEscape/jsonStringArray/joinJsonArray),仍零 stdx。 - ace-security/jwt.cj 改用 stdx.encoding.json 直接解析(层级在 framework 之下)。 - @Dto 宏无需改动(生成的 parseJson/field* 经 facade 解析到 runtime)。 分层结果:纯内核 ace-web/ace-router/ace-bodyparser 仍零 stdx、可独立单测; 声明层(runtime 起)编译期依赖 stdx。README/CLAUDE.md/docs 纲领相应更新。 验证:全量回归 265/0;@Dto 数组/嵌套端到端 round-trip 正确;jwt 13/0;ace-web 50/0(纯净)。 | 8 天前 |
| feat: 完成 M7-M10 声明式增强、AOP、调度、安全与工程化 M7 声明式核心增强: - @PostConstruct/@PreDestroy Bean 生命周期 + 优雅停机(幂等、best-effort) - @Valid 参数校验(@NotEmpty/@Email/@Size/@Min/@Max)失败 400 JSON - @Dto 自动序列化 toJson + 零反射 JSON 解析器 - 字段 @Inject、@Query/Bool 绑定、@Put/@Delete/@Patch、错误->JSON/health 中间件、Config M8 AOP 编译期方法拦截内核:@Timed + wrapMethodBody 织入 helper M9 调度/异步/缓存:@Cacheable 记忆化、@Async(Future)、@Scheduled 调度器 M10 安全:ace-security 模块,JWT(HS256/stdx.crypto)+ jwtAuth/requireRoles 授权 guard A组:rate-limit 中间件、请求头小写化归一、multipart/form-data bodyparser 其他模块:ace-agent-claude(Claude Messages 报文构造)、查询解析、config 工程化:README 全面更新、CONTRIBUTING、语义化版本与 API 稳定性策略 71 单测全绿;di-demo/auth-demo 端到端验证 exit 0 | 13 天前 |
| docs: 添加 Apache-2.0 LICENSE 与 CHANGELOG | 9 天前 |
| feat(websocket): 独立 ace-websocket 组件 + @WsController(JSR 356 式) 第二梯队 WebSocket(对标 Spring Boot starter-websocket 的独立模块): - 新模块 ace-websocket:WsSession(send/sendBytes/close)+ aceWsEndpoint(封装帧循环, 使宏生成代码不直接依赖 stdx)。单向依赖 ace-http。 - 宏 @WsController["/path"] / @OnOpen / @OnMessage / @OnClose(ace-framework-macros, 复用 lifecycleFactory/ctorArgs/getChildMessages):注册单例 Bean + aceWsEndpoint 推端点。 - task-api ChatSocket(/ws/chat)演示;workspace 加 ace-websocket 成员;docs/15 + 导航 + README + backlog。 分层:ace-http(注册表+升级分支,上一提交)← ace-websocket(宏+会话),依赖倒置无环,核心 ace-web/router 不含 ws。 实机验证(python websockets):@OnOpen welcome、@OnMessage echo。全量回归 265/0。 | 8 天前 |
| feat(m12-m15): AOP/@Around、Request作用域、Cron、Session、i18n、ace-test、ace-cli M12 - Container & AOP 完善: - interceptor.cj: MethodInterceptor 接口 + Invocation + 拦截器注册表 - macros.cj @Around["name"]: 编译期方法拦截织入(无反射 AOP) - container.cj: Scope.Request + 循环依赖检测(resolvingStack) + BeanPostProcessor (resolveHooks) + ContainerSnapshot/snapshot/restore 供测试隔离 - macros.cj @Service["scope"]: 新增有属性变体支持 singleton/prototype/request - config.cj: ${key} / ${key:default} 占位符插值(深度限制 8,防循环引用) M13 - Web 机制完善: - cron.cj: 5/6字段 cron 表达式解析、matchesCronMs、nextAfterMs(Julian Day算法) - scheduler.cj: CronTask + registerCronTask + startScheduler cron 协程(秒级轮询) - macros.cj @Scheduled: 支持 @Scheduled["0 * * * * *"] cron 字符串 vs 整数周期 - session.cj: SessionStore 接口 + MemorySessionStore(TTL) + sessionMiddleware - content_negotiation.cj: Accept 协商 + Body Encoder 注册表 + 参数 Converter - i18n.cj: key=value 消息文件解析 + {0}{1} 占位符替换 + localeMiddleware M14 - 测试套件: - ace-test/: TestRequest/TestResponse(内嵌 App 执行) + withMockBean + withConfig - ops.cj: /ace/beans /ace/env /ace/mappings /ace/loggers 运维端点 M15 - 工具链: - tools/ace-cli/: ace new/g controller/service/entity 脚手架命令 - scripts/dev.sh: fswatch watch+recompile 开发脚本 全量测试 445 通过。 | 5 天前 |