陈兴炀
d7873bda96
feat(apps): add standalone database commands and extend the db family
Aily × PaaS 独立数据库的 CLI 落地:9 条新命令 + 5 条存量命令支持独立库。
命令面全部对齐设计文档 https://bytedance.larkoffice.com/docx/UwqJd0yt6oCB2Ox8pglcQe2BnEe
新增 9 条
- 生命周期:+db-create / +db-list / +db-delete
- 权限: +db-permission-list / -set / -revoke(只认 --database-id)
- MCP: +db-mcp-enable / -disable / -get(--app-id 或 --database-id 二选一)
存量 5 条支持独立库(+db-execute / +db-table-list / +db-table-get /
+db-data-import / +db-data-export)
- 新增 --database-id,与 --app-id 二选一,统一走 requireDBResource;--app-id 的
Required 随之去掉,否则 cobra 会在二选一判定之前拒掉只传 --database-id 的调用
- 路由按标识分流:两套 path 函数并列,不在存量函数里加 if
- App 支路行为逐字不变(BOE e2e 291 用例验证,见下)
几个刻意的设计点
- 独立库无环境概念:这些命令不带 env 键,显式传 --environment 在 Validate 阶段拒;
判据用 Changed() 而非取值,否则「吃到默认值」会被误判成显式传参
- 表名不进路径段:独立库走 /table?table=xxx。url.PathEscape 挡不住 "..",让它进
路径段会被规范化到上一级、打到别的接口上(App 支路的 /tables/{table} 属存量债)
- DryRun 与 Execute 共用同一个分派函数:dry-run 是 agent 唯一的自检手段
- +db-execute 独立库支路不发 transactional:该接口固定 DBA 模式,给个恒为 false 的
参数只会让人以为传 true 能拿到事务
- +db-mcp-* 两支路径域段不对称:/databases/{id}/mcp vs /apps/{id}/db/mcp(多一段 db/)
- 输出不伪造服务端状态:+db-delete 的 deleted、+db-mcp-* 的 enabled 都取服务端结果
errclass 登记 3 个业务码(400002900 / 400002901 / 500002901)。这批是设计文档里的
占位码,服务端发号后需回来对齐真值;未命中时框架兜底成 api/unknown。
测试:新增 10 个测试文件(一命令一测),apps 域命令数断言 96 → 105。
BOE e2e(存量套件、只走 App 支路)291 用例 287 通过,2 个失败是 BOE 审计链路的
服务端故障(dataloom 调火山 ModifyTransmissionTask 返 400 及其级联),与本次改动无关。
服务端接口尚未实现(IDL 见 idl-larkgw 的 feat/standalone_db),故 --database-id
支路目前只能验到 dry-run 与参数校验层。
2026-08-13 21:08:51 +08:00
..
2026-08-06 15:16:11 +08:00
2026-07-16 14:09:41 +08:00
2026-06-13 14:00:30 +08:00
2026-06-10 21:45:45 +08:00
2026-06-13 14:00:30 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-20 18:27:32 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-31 14:13:56 +08:00
2026-07-31 14:13:56 +08:00
2026-07-31 14:13:56 +08:00
2026-07-31 14:13:56 +08:00
2026-06-17 19:42:38 +08:00
2026-06-10 21:45:45 +08:00
2026-06-11 19:04:34 +08:00
2026-08-07 00:11:11 +08:00
2026-08-07 00:11:11 +08:00
2026-07-08 14:06:22 +08:00
2026-07-08 14:06:22 +08:00
2026-07-08 14:06:22 +08:00
2026-07-14 10:54:16 +08:00
2026-07-14 10:54:16 +08:00
2026-07-08 14:06:22 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-07-14 10:54:16 +08:00
2026-08-13 21:08:51 +08:00
2026-07-14 10:54:16 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-07-08 14:06:22 +08:00
2026-07-14 10:54:16 +08:00
2026-07-14 10:54:16 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-07-08 14:06:22 +08:00
2026-07-08 14:06:22 +08:00
2026-08-11 18:21:32 +08:00
2026-08-11 18:21:32 +08:00
2026-08-11 18:21:32 +08:00
2026-08-11 18:21:32 +08:00
2026-08-11 18:21:32 +08:00
2026-08-11 18:21:32 +08:00
2026-08-11 18:21:32 +08:00
2026-08-11 18:21:32 +08:00
2026-07-14 10:54:16 +08:00
2026-08-13 21:08:51 +08:00
2026-07-14 10:54:16 +08:00
2026-08-13 21:08:51 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-07-20 20:15:43 +08:00
2026-07-20 20:15:43 +08:00
2026-06-30 21:11:27 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-07-23 15:55:08 +08:00
2026-07-23 15:55:08 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-07-23 17:52:49 +08:00
2026-07-23 17:52:49 +08:00
2026-07-13 16:43:07 +08:00
2026-07-20 20:15:43 +08:00
2026-06-10 21:45:45 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-07-20 20:15:43 +08:00
2026-07-20 20:15:43 +08:00
2026-07-20 20:15:43 +08:00
2026-08-07 00:11:11 +08:00
2026-06-10 21:45:45 +08:00
2026-06-10 21:45:45 +08:00
2026-08-07 00:11:11 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-08-07 16:20:02 +08:00
2026-08-07 16:20:02 +08:00
2026-08-07 16:20:02 +08:00
2026-08-07 16:20:02 +08:00
2026-07-20 20:15:43 +08:00
2026-08-07 00:11:11 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-06-10 21:45:45 +08:00
2026-07-13 16:43:07 +08:00
2026-07-20 20:15:43 +08:00
2026-06-12 16:58:47 +08:00
2026-07-20 20:15:43 +08:00
2026-06-10 21:45:45 +08:00
2026-06-13 14:00:30 +08:00
2026-07-16 14:09:41 +08:00
2026-07-16 14:09:41 +08:00
2026-07-16 14:09:41 +08:00
2026-07-16 14:09:41 +08:00
2026-07-16 14:09:41 +08:00
2026-07-16 14:09:41 +08:00
2026-06-30 21:11:27 +08:00
2026-06-10 21:45:45 +08:00
2026-06-13 14:00:30 +08:00
2026-06-10 21:45:45 +08:00
2026-06-11 19:04:34 +08:00
2026-06-10 21:45:45 +08:00
2026-06-13 14:00:30 +08:00
2026-06-17 20:12:22 +08:00
2026-06-17 20:12:22 +08:00
2026-06-10 21:45:45 +08:00
2026-06-11 19:04:34 +08:00
2026-06-10 21:45:45 +08:00
2026-07-14 10:54:16 +08:00
2026-06-30 21:11:27 +08:00
2026-06-10 21:45:45 +08:00
2026-06-13 14:00:30 +08:00
2026-08-11 19:14:52 +08:00
2026-08-11 19:14:52 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-15 15:55:53 +08:00
2026-07-31 14:13:56 +08:00
2026-06-10 21:45:45 +08:00
2026-06-10 21:45:45 +08:00
2026-08-07 15:13:31 +08:00
2026-08-07 15:13:31 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-07-14 10:54:16 +08:00
2026-08-02 14:55:05 +08:00
2026-08-02 14:55:05 +08:00
2026-06-11 19:04:34 +08:00
2026-08-06 15:16:11 +08:00
2026-08-05 01:44:50 +08:00
2026-05-21 20:30:42 +08:00
2026-06-11 19:04:34 +08:00
2026-06-30 21:11:27 +08:00
2026-06-30 21:11:27 +08:00
2026-05-25 23:24:40 +08:00
2026-05-25 23:24:40 +08:00
2026-08-13 21:08:51 +08:00
2026-08-13 21:08:51 +08:00
2026-06-10 21:45:45 +08:00
2026-06-11 19:04:34 +08:00
2026-06-11 14:58:58 +08:00
2026-06-11 19:04:34 +08:00