feat: Bitable P0 UX Polish + Agent Parity #23

Merged
fischer merged 12 commits from feat/bitable-enhancement into main 2026-07-04 01:05:05 +08:00
1 changed files with 377 additions and 0 deletions
Showing only changes of commit e9821a3b7f - Show all commits

View File

@ -0,0 +1,377 @@
---
date: 2026-07-03
topic: bitable-comparative-evaluation
---
# 多维表格三向对比评估与优先级建议
## Summary
评估 agentkit bitable 当前实现与 Twenty、飞书多维表格在样式/功能/UX 三维的差距,按 C 先行UX 打磨)→ A 跟进(功能广度)策略给出分优先级建议,并把 P0 差距交接给 ce-plan。Agent-as-data-author 作为贯穿差异化主线不阻塞任何一条。
---
## Problem Frame
agentkit bitable 后端 v1 已基本齐全:`BitableFile→Table→Field/Record/View` 三层骨架、28 个 REST 端点、公式引擎10 函数 + AST 白名单 + DAG + 异步重算、三类采集Excel/DB/API全部就位。但前端产品形态残缺——`ViewType` 枚举列 5 种只渲染 grid、列头菜单"编辑"仍跳右侧抽屉、无记录详情抽屉、无分组/条件格式、视觉未达飞书/Twenty 水准。
既有的 2026-06-24 模块需求与 2026-06-29 UI 完善需求两份文档已规划方向,但缺乏一份**基于实际代码盘点 + 竞品对标**的差距评估来驱动下一轮优先级决策。本评估填补这个空缺:用 grounding 实证当前实现状态(非规划状态),用竞品研究锁定差距坐标,用优先级策略锚定 ce-plan 交接范围。
---
## Current Implementation Inventory
以下为代码盘点的实证状态(已逐条验证)。
**后端(已就位):**
- 容器层级:`BitableFile``src/agentkit/bitable/models.py:65-84`)→ `Table``file_id` 外键)→ `Field`/`Record`/`View`schema V2`src/agentkit/bitable/db.py:40`,含 `bitable_files` 表 + `file_id` 列迁移)
- REST 端点28 个,前缀 `/api/v1/bitable``src/agentkit/server/routes/bitable.py`JWT 或 `X-Internal-Token` 认证404-before-403 所有权检查
- 字段类型(后端 `FieldType` 枚举):`text`/`number`/`date`/`select`/`multiselect`/`attachment`/`image`/`formula`/`lookup`9 种)
- 字段所有权:`FieldOwner.agent`/`user`upsert 只更新 agent 列,用户列不被覆盖
- 默认字段5 个模板(标题 `text` / 状态 `select` / 日期 `date` / 创建人 `text` / 创建时间 `date`)——注意 `FieldType` 枚举无 `user`/`datetime` 类型,创建人与创建时间实际是 `text`/`date`
- 公式引擎10 函数(`SUM`/`AVG`/`COUNT`/`MIN`/`MAX`/`ABS`/`ROUND`/`IF`/`LEN`/`CONCAT`AST 节点白名单(见 `formula/parser.py`,永不 eval/execDAG 拓扑排序 + 环检测,异步 `RecalcWorker`0.5s 轮询、300s reaper、600s 过期阈值)
- 跨表引用:单向 `lookup``lookup_target` 配 `table_id`/`field_id`/`filter_field_id`/`filter_value`
- 采集ExcelSSRF 守护的 URL 抓取 + openpyxl`src/agentkit/bitable/ingestion/excel.py`、数据库SQLAlchemy 反射,`database.py`、API形状变换`api_collector.py`
- CLI4 命令list-tables / create-table / import-excel / query`src/agentkit/cli/bitable.py`
**前端(部分就位):**
- 文件层:`BitableFileListView.vue`(文件列表 + `FileCard` + `FileCreateModal`)、`BitableFileDetailView.vue`(文件详情 + 顶栏 + 左侧表列表 + 主区 grid
- grid 视图:`BitableGrid.vue`vxe-grid 封装,列头菜单 `ColumnHeaderMenu` 编辑/隐藏/删除select/multiselect 编辑器 `SelectCellEditor`/`SelectDisplay`,附件/图片单元格 `AttachmentCell`/`ImageCell`
- 字段配置:`FieldManagePanel.vue`(右侧抽屉,宽 480+ `FieldConfigForm.vue`8 类型text/number/date/select/multiselect/formula/attachment/image——**UI 无 `lookup` 选项**,尽管后端支持)
- 视图切换:`ViewSwitcher.vue`editable-card tabs**无视图类型选择**`handleCreateView` 硬编码 `'grid'``src/agentkit/server/frontend/src/views/BitableFileDetailView.vue:242`
- 视图配置:`ViewConfigPanel.vue`(筛选 `FilterBuilder` + 排序 + 隐藏字段,**无分组、无条件格式**
- store`src/agentkit/server/frontend/src/stores/bitable.ts`Pinia含 recalc 轮询 2s 间隔)
- API 客户端:`src/agentkit/server/frontend/src/api/bitable.ts`**无 `deleteView` 方法**,后端也无 DELETE 视图端点)
**未就位:**
- 视图组件:仅 `BitableGrid`,无 `KanbanView`/`GalleryView`/`GanttView`/`FormView`
- 记录详情抽屉:无(仅 grid 单元格编辑)
- 列内联字段配置:无(列头"编辑"跳右侧 `FieldManagePanel`,非内联)
- 分组、条件格式:无
- 仪表盘、自动化、表单、甘特:无
- 字段级/记录级权限:无(仅文件/表所有权)
- 前端采集入口 UI后端三类采集已就位前端无触发入口
**测试覆盖:**
- 单元测试:`tests/unit/bitable/` 13 个文件test_service/test_routes/test_recalc/test_models/test_ingestion_excel/test_formula_parser/test_formula_engine/test_file_crud/test_default_fields/test_db/test_cli/test_bitable_tool/test_attachment
- e2e 测试:`src/agentkit/server/frontend/e2e/` 含 3 个 bitable specbitable-view / bitable-file-flow / bitable-field-ops
**既有规划执行进度(对照 2026-06-29 UI 完善需求):**
- 阶段一2026-06-29-R1 文件层 [OK]、2026-06-29-R2 默认字段 [OK](受限:无 user/datetime 类型、2026-06-29-R3 表内字段操作 部分列头菜单存在但编辑跳抽屉、2026-06-29-R4 select 编辑器 [OK]、2026-06-29-R5 三层导航 [OK]
- 阶段二/三/四:未开始
---
## Three-Way Comparison
| 维度 | agentkit bitable当前 | Twenty | 飞书多维表格 |
|---|---|---|---|
| **样式** | | | |
| 视觉密度 | 中等vxe-grid 默认 | 中低Notion/Linear 风 | 中高,业务工具质感 |
| 配色体系 | 功能性,无强设计语言 | 浅色 + 蓝紫主调,克制留白 | 浅色 + 蓝紫,彩色 chip 标签活泼 |
| 字段类型图标 | 无 | 有 | 有,清晰 |
| 彩色标签 chip | select 有 `SelectDisplay`,未达飞书水准 | 有 | 有,活泼成熟 |
| 整体质感 | "薄、形态残缺" | Figma 级,开源最佳之一 | 业务工具成熟质感 |
| **功能** | | | |
| 容器层级 | `BitableFile→Table` [OK] | `Object→Record`(无文件层) | `App→Table` [OK] |
| 字段类型数 | 9后端/ 8前端 UI 无 lookup | 20+ | 25+ |
| 视图类型 | 枚举 5实际只渲染 grid | 3Table/Kanban/Calendar | 5-6grid/kanban/gallery/gantt/form/+calendar |
| 公式 | 10 函数 + AST 白名单 + DAG + 异步重算 | 无原生Workflow + Code Action 替代) | 丰富函数库 + LOOKUP/ROLLUP/FILTER + AI 生成 |
| 跨表关联 | 单向 lookup | Relation多向+ 关系上挂属性 | 单向/双向 link + Lookup + Rollup |
| 采集/导入 | [OK] Excel/DB/API 三类agent 驱动) | 无CRM 手动录入) | Excel 导入 + OpenAPI无 agent |
| 字段所有权 | [OK] agent/user 列 + upsert 保留用户列 | 无 | 无 |
| 仪表盘 | 无 | 基础 | 12+ 图表 + 关联多表 + 千人千面 + AI 解释 |
| 表单视图 | 无 | 无 | [OK]NPS/评分 + AI 搭建) |
| 自动化 | 无 | WorkflowsBeta+ Serverless + MCP | 6 触发 × 9 动作 + AI 节点 + 字段捷径 |
| 单表容量 | PG 部门级(<10 万行规划 | PG未公开 | 百万热行 |
| **UX** | | | |
| 字段管理入口 | 列头菜单(编辑跳右侧抽屉)+ 字段管理抽屉 | Settings 后台集中 + 表头 `+` | 列头 `+`/字段配置面板/记录详情页/AI 生成 |
| 记录详情 | 无(仅 grid 单元格) | 右侧抽屉Notes/Tasks/活动线) | 展开记录详情面板 |
| 内联编辑 | grid 单元格可编辑,字段配置非内联 | 单元格内联编辑 | 单元格内联 + 字段内联配置 |
| 命令面板 | 无 | ⌘K 全局命令 | 无(飞书系全局搜索替代) |
| 视图切换 | tabs无类型选择 | 视图保存 + 可见性控制 | 视图切换 + 类型绑定字段自动生成 |
| 分组 | 无 | 有 | 有(多字段分组) |
| 条件格式 | 无 | 无 | 有 |
| 筛选/排序 | [OK] 有 | [OK] AND/OR + 多字段 | [OK] + 字段名搜索 |
| 协作 | 单用户 | Notes/Tasks/@mention + 邮件日历同步 | 实时 + 评论 + 机器人通知 + 飞书 IM |
| 移动端 | 响应式 web | 响应式 web无原生 App | 飞书 App 原生 + 移动 web |
| 权限 | 文件/表所有权 | RBAC对象/字段/记录)+ SSO + 审计 | 高级权限(颗粒级)+ AI 配置 + 组织架构继承 |
| 默认字段 | [OK] 5 字段(但创建人=text、创建时间=date | 无默认集 | 主索引字段1-2 列) |
| AI 能力 | Agent-as-data-author差异化 | AI Agents + MCP ServerCloud | 全家桶(搭建/问数/公式/选项/配色/解释/侧边栏) |
---
## Gap Analysis
### 样式差距
- **G1.** 无字段类型图标(飞书/Twenty 均有,列头视觉辨识度低)
- **G2.** 彩色标签 chip 未达飞书水准select 选项有 `SelectDisplay` 但配色/质感粗糙)
- **G3.** 整体质感"薄"(密度/留白/配色无统一设计语言,未达 Twenty 的 Figma 级或飞书的业务成熟感)
### 功能差距
- **G4.** 视图只有 grid枚举 5 种但只渲染 1 种)——飞书 5-6 种、Twenty 3 种
- **G5.** 字段类型 9 种(前端 UI 8 种无 lookup——飞书 25+、Twenty 20+;关键缺:`user`/`checkbox`/`url`/`email`/`phone`/`auto-number`/`datetime`/`modified-by`/`location`/`barcode`/`rating`/`progress`/`currency`/`rich-text`/`date-range`/`json`/双向关联
- **G6.** 默认字段"创建人"=`text`、"创建时间"=`date`——因 `FieldType``user`/`datetime`,默认字段集本身暴露字段类型缺口
- **G7.** 公式仅 10 函数——缺 `LOOKUP`/`ROLLUP`/`FILTER`/`SORT`/日期函数/条件函数/字符串函数;飞书有丰富函数库 + AI 生成公式
- **G8.** 跨表关联仅单向 lookup——无双向关联、无 rollup 聚合
- **G9.** 无仪表盘——飞书 12+ 图表类型 + 关联多表 + 千人千面
- **G10.** 无表单视图——飞书有(含 NPS/评分 + AI 搭建)
- **G11.** 无自动化触发器——飞书 6 触发 × 9 动作 + AI 节点Twenty 有 Workflows + Serverless + MCP
- **G12.** 无甘特视图——飞书有(基于日期+状态)
- **G13.** 单表容量部门级——飞书百万热行v3 规划列式/分区,尚未实施)
### UX 差距
- **G14.** 字段配置非内联——列头"编辑"跳右侧抽屉,飞书/Twenty 支持列头直接管理
- **G15.** 无记录详情抽屉——飞书/Twenty 均有(行点击展开详情面板)
- **G16.** 无视图类型选择——`ViewSwitcher` 无类型切换,`handleCreateView` 硬编码 grid
- **G17.** 无分组——飞书/Twenty 均有(多字段分组)
- **G18.** 无条件格式——飞书有(规则自动着色)
- **G19.** 无命令面板⌘K——Twenty 有全局快捷操作
- **G20.** 协作单用户——飞书实时 + 评论 + 通知Twenty 有 Notes/Tasks/@mention
- **G21.** 无移动端原生——飞书有原生 App
- **G22.** 权限粗粒度——仅文件/表所有权,飞书/Twenty 有字段级/记录级 + SSO + 审计
- **G23.** 前端无采集入口 UI——后端三类采集就位但前端无触发入口2026-06-29 阶段二未做)
### 差异化优势(非差距,应加倍投入)
- **D1.** Agent-as-data-author三类 agent 驱动采集 + upsert 保留用户列——飞书/Twenty 均无 agent 原生模型
- **D2.** 字段所有权模型agent/user 列分离,用户列跨采集保留——独一无二
- **D3.** 内部服务令牌agent 用 `X-Internal-Token` 认证——agent 原生设计
- **D4.** 公式引擎安全AST 白名单 + DAG + 异步重算——比 Twenty 的 Workflow 变通方案更原生
---
## Key Decisions
**KD1. 优先级策略C 先行UX 打磨)→ A 跟进功能广度BAgent 差异化)作为贯穿主线。** 理由:后端已齐,最大感知差距是已存在的 grid 体验未达飞书/Twenty 水准G14-G19先打磨已有功能到竞品水准再补广度。B 不阻塞任何一条,作为持续投入线。
**KD2. 飞书为主标杆Twenty 为辅。** 飞书是更接近的纯多维表格形态通用结构化数据载体agentkit bitable 不是 CRMTwenty 的 CRM 领域特性不适用。Twenty 贡献 UX 模式⌘K 命令面板、记录详情抽屉、代码优先 `defineObject`)而非功能广度。
**KD3. Agent-as-data-author 是差异化强项,评估中不当差距处理。** 飞书的 AI 全家桶(搭建/问数/公式生成)与 agentkit 的 agent 采集是不同范式——飞书 AI 辅助人类建表agentkit agent 自主建表写入。后者是 agentkit 身份主线,应加倍投入而非追赶飞书的 AI 辅助形态。
**KD4. 评估覆盖样式/功能/UX + 邻近能力(仪表盘/自动化/协作/移动/AI但以 agentkit 产品身份过滤。** 飞书生态绑定IM/文档/日历深度集成)与 Twenty 的 CRM 特性(管线/邮件同步)标记为本产品身份之外,不纳入优先级。
**KD5. 视觉决策用文字探讨,不开浏览器探针。** 沿用 2026-06-29 KD5本次评估为分析交付形状决策留待 ce-plan。
**KD6. P0/P1 关键范围决议Resolve Before Planning 解决)。**
- R3 视图切换器P0 暴露全部 5 种类型grid/kanban/gallery/gantt/form未实现的禁用态展示并标注"规划中",预告路线图而非隐藏。
- R5 视觉对齐P0 引入统一设计 token 系统CSS 变量层:颜色/间距/圆角/字号),以 token 驱动重写列头/chip/密度等,避免后续 P1/P2 视觉不一致。
- R8 字段类型扩展P1 一次性补全 16 字段类型 + 1 双向关联 = 17 项与飞书对齐全面schema V3 迁移复杂度接受。
---
## Agent 对等评估方法
bitable 后端有 28 个 REST 端点,但 `BitableTool``src/agentkit/tools/bitable_tool.py`)仅暴露 6 个动作(`create_table`/`list_tables`/`query_records`/`create_record`/`update_record`/`delete_record`),存在系统性 agent 孤儿风险。下表为每个 R-ID 标注复用端点、需新增的 BitableTool 动作、以及 agent 孤儿风险等级。
| R-ID | 复用/新增端点 | BitableTool 需新动作 | Agent 孤儿风险 |
|------|--------------|---------------------|---------------|
| R1 | 复用 PATCH /fields | `update_field` | 高 — agent 无法内联改字段 |
| R2 | 复用 GET /records/{id} | (无需新动作,复用 `query_records` | 低 |
| R3 | 复用 POST /views需扩展 schema 接受 type | `create_view` | 高 — agent 无法建非 grid 视图 |
| R4 | 复用 PATCH /views需扩展 group_by/conditional_formatting | `update_view` | 高 — agent 无法配置分组/条件格式 |
| R5 | 纯前端 token 系统 | (无需新动作) | 无 |
| R6/R7 | 复用 POST /views + PATCH /views | `create_view`/`update_view`(同 R3/R4 | 中 — 与 R3/R4 共享动作 |
| R8 | 复用 POST /fields需扩展类型枚举 | `create_field`可选R1 的 `update_field` 已覆盖部分) | 中 |
| R9/R10 | 复用公式引擎(`formula/parser.py`+ POST /fields双向关联 schema | (无需新动作,复用 `create_field`/`update_field` | 低 |
| R11 | 复用 POST /views | `create_view`(同 R3 | 中 |
| R15a | 复用 DELETE /views需新增后端端点 | `delete_view` | 高 — 后端 + agent 双侧缺口 |
| R15b | 复用 `create_table` + `create_field` + `create_view` 编排 | (无新动作,编排层) | 低 |
| R15c | 路径 (a) 新增 /collections 端点;路径 (b) 复用 BitableTool | 路径 (b) 需 `create_collection`/`update_collection` | 中 — 取决于路径决策 |
**评估结论**R15a 是 agent 对等的最高优先级子项,应与 R3/R4 同步推进(共享 `create_view`/`update_view` 动作)。其余 R-ID 的 agent 孤儿风险可通过 R1/R3/R4/R15a 四个新动作一并闭合。
---
## Priority Recommendations
以下 R-ID 为分优先级的差距闭合建议P0 交接 ce-plan。
### P0 — UX 打磨C 先行,立即交接 ce-plan
- R1. 列内联字段配置:列头菜单直接编辑字段(重命名/改类型/选项管理),不跳右侧抽屉。闭合 G14。
- R2. 记录详情侧边抽屉:行点击展开详情面板,含所有字段类型的可视化展示与编辑。闭合 G15。
- R3. 视图类型切换与创建:`ViewSwitcher` 支持选 grid/kanban/gallery/gantt/form新建视图选类型不再硬编码 grid。P0 暴露全部 5 种类型,未实现的以禁用态展示并标注"规划中"(预告路线图)。闭合 G16为 P1 视图实现铺路。
- R4. grid 视图内分组与条件格式:多字段分组 + 规则自动着色。**后端扩展**View.config 新增 `group_by`/`conditional_formatting` schema通过 PATCH /views 暴露。**Agent 对等**BitableTool 的 `create_view`/`update_view` 动作需支持传入这些配置(见 Agent 对等评估方法)。闭合 G17、G18。
- R5. 视觉风格对齐P0 引入统一设计 token 系统CSS 变量层:颜色/间距/圆角/字号),以 token 驱动重写列头/chip/密度等,配套字段类型图标与彩色 chip 标签达飞书水准。闭合 G1、G2、G3。
### P1 — 功能广度A 跟进,下一轮 ce-plan
- R6. 看板视图实现:按 select 字段分列 + 拖拽卡片改值。闭合 G4部分
- R7. 画廊视图实现:以附件/图片为主视觉的卡片网格。闭合 G4部分
- R8. 字段类型扩展P1 一次性补全 16 字段类型 + 1 双向关联 = 17 项(`user`/`checkbox`/`url`/`email`/`phone`/`auto-number`/`datetime`/`modified-by`/`location`/`barcode`/`rating`/`progress`/`currency`/`rich-text`/`date-range`/`json` + 双向关联),与飞书对齐全面,修正默认字段的 `user`/`datetime` 缺口。注:`datetime` 为通用日期时间类型,默认字段「创建时间」使用 `datetime` 类型;`modified-by` 为自动管理的用户类型。闭合 G5、G6。
- R9. 公式库扩展:补 `LOOKUP`/`ROLLUP`/日期/条件/字符串函数,对标飞书函数库。闭合 G7。
- R10. 跨表关联增强:双向关联 + rollup 聚合。闭合 G8。
### P2 — 后续轮次
- R11. 甘特视图 + 表单视图。闭合 G4完整、G10、G12。
- R12. 自动化触发器:事件(记录新增/字段变更/定时)→ 动作(写字段/发通知/调 API。闭合 G11。
- R13. 仪表盘:图表组件库 + 关联多表。闭合 G9。
- R14. 细粒度权限:字段级/记录级 + 角色自定义。闭合 G22。
### B 线 — Agent 差异化(贯穿,不阻塞 P0/P1
- R15a. BitableTool 动作补全:从 6 个动作扩展到 10 个(新增 `create_view`/`update_view`/`update_field`/`delete_view`),消除与 28 个 REST 端点的 agent 孤儿风险。强化 D1、D2闭合 Agent 对等缺口(见 Agent 对等评估方法)。
- R15b. 自然语言→表结构 agent 技能agent 接收自然语言描述,调用 BitableTool 完成「建表 + 建字段 + 建视图」一站式编排,作为 agentkit 差异化主线。强化 D1、D2。
- R15c. 定时采集 + 前端采集入口 UI在现有 Excel/DB/API 三类采集基础上新增定时调度能力cron 表达式驱动)+ 前端采集入口 UI闭合 G23。**路径决策**(a) 新增 REST 端点 `/api/v1/bitable/collections`CRUD + 调度器管理);(b) 由 agent 通过 BitableTool 触发(依赖 R15a 完成。ce-plan 阶段二选一。
---
## Acceptance Criteria (P0)
每个 P0 R-ID 的可测试验收标准Given/When/Then供 ce-plan 估算测试工作量。
**R1. 列内联字段配置**
- Given select 字段有 3 选项When 用户点击列头菜单Then 重命名/改类型/选项管理均内联完成(不跳右侧抽屉)
- Given 字段名变更提交When 后端 PATCH /fields/{id}Then 返回 200 + grid 在 1 帧内重渲染新标签
- Given 字段类型从 text 改为 numberWhen 现有记录值不可转换Then 显示警告 + 阻止提交
**R2. 记录详情侧边抽屉**
- Given grid 行When 用户点击行Then 右侧抽屉展开显示所有字段(含 attachment/formula/lookup
- Given 抽屉打开且字段为 attachment/imageWhen 渲染Then 显示缩略图/预览(非原始 URL
- Given 抽屉打开且字段为 formulaWhen 渲染Then 显示计算结果(只读,不可编辑)
- Given 抽屉中编辑 user-owned 字段并提交When 后端 upsertThen agent 列不被覆盖
**R3. 视图类型切换与创建**
- Given ViewSwitcherWhen 用户点击新建视图Then 显示 5 种类型选择grid/kanban/gallery/gantt/form
- Given kanban/gallery/gantt/form 未实现When 渲染Then 以禁用态展示 + 标注"规划中" + tooltip 说明
- Given 新建视图选 gridWhen 创建Then 调用 POST /views 传 type=grid不再硬编码
- Given 禁用态类型When 点击Then 不触发创建 + 显示路线图提示
**R4. grid 视图内分组与条件格式**
- Given grid 视图When 用户开启分组Then 支持最多 3 字段分组(对标飞书/Twenty
- Given 条件格式规则When 运算符为 equals/not-equals/contains/is-empty/greater-than/less-than/betweenThen 匹配单元格自动着色
- Given 两条规则匹配同一单元格When 冲突Then 首条规则优先(按用户排序)
- Given 着色When 颜色来源审计Then 全部来自 design token 调色板8 色预设,无硬编码 hex
**R5. 视觉风格对齐**
- Given 任何 bitable 组件When 审计 CSSThen 所有颜色来自 design tokengrep 无硬编码 hex
- Given 字段类型渲染When 列头图标Then 9 种P0类型各有 Ant Design Outlined iconComponent 类型)
- Given select 选项 chipWhen 渲染Then 对比度 ≥4.5:1WCAG AAaxe-core 可测试)
- Given chip 配色When 审计Then 全部来自 design token 调色板
---
## Test Strategy
**测试约定**:后端 pytestasyncio_mode=auto标记 integration/redis/postgres前端 vitest纯函数抽 helpers/,不用 @vue/test-utilse2e Playwright。
**Test File Mapping**R-ID → 测试文件映射):
| R-ID | 后端单元测试 | 前端单元测试 | e2e 测试 | 集成标记 |
|---|---|---|---|---|
| R1 | tests/unit/bitable/test_routes.pyPATCH /fields/{id} | helpers/fieldRenderUtils.ts | bitable-field-ops.spec.tsextend | - |
| R2 | tests/unit/bitable/test_service.pyupsert 保留 user 列) | helpers/recordDrawerUtils.ts | new: bitable-record-drawer.spec.ts | - |
| R3 | tests/unit/bitable/test_routes.pyPOST /views type 参数) | helpers/viewSwitcherUtils.ts | bitable-view.spec.tsextend | - |
| R4 | new: test_grouping.py + test_conditional_formatting.py | helpers/groupingRulesUtils.ts | new: bitable-grouping.spec.ts | - |
| R5 | - | helpers/designTokenAudit.tsgrep token 使用) | bitable-view.spec.tsvisual regression | - |
| R8 | test_models.py + test_default_fields.py + test_service.py | helpers/fieldTypeUtils.ts | bitable-field-ops.spec.tsextend | integrationschema V3 迁移) |
| R15 | test_bitable_tool.pynew actions | - | new: bitable-agent-parity.spec.ts | redisnotify_callback |
**Agent 对等测试契约**:每个 P0/P1 R-ID 交付时,附 BitableTool 调用契约测试——验证 agent 能完成等价操作(人类可做的 agent 也能做。BitableTool 当前 6 actions vs 28 REST 端点,新增端点的 R-ID 需同步补 BitableTool 动作 + 契约测试。
---
## R8 Field Type Acceptance Matrix
R8 扩展的 16 字段类型 + 1 双向关联的逐类型验收标准。每行映射约 4-6 个单元测试test_models.py / test_service.py / test_default_fields.py
| 类型 | 有效输入 | 无效输入422 | 所有权 | 公式参与 | V2→V3 迁移 |
|---|---|---|---|---|---|
| `user` | user_id 字符串 | 非存在 user_id | both | 不支持 | 创建人 `text``user` |
| `checkbox` | `true`/`false` | 非布尔值 | both | 支持IF 条件) | - |
| `url` | `https://example.com` | 非合法 URL | both | 不支持 | - |
| `email` | `a@b.com` | 非合法邮箱 | both | 不支持 | - |
| `phone` | `+86-...` 字符串 | 空字符串 OK | both | 不支持 | - |
| `auto-number` | 自增整数(后端分配) | 不可手动写 | agent only | 不支持 | - |
| `datetime` | ISO 8601 `2026-07-03T12:00:00Z` | 非日期格式 | both | 支持(日期函数) | 创建时间 `date``datetime` |
| `modified-by` | user_id自动管理 | 不可手动写 | agent only | 不支持 | - |
| `location` | `{lat: float, lng: float}` | 非合法坐标 | both | 不支持 | - |
| `barcode` | 字符串 | 空字符串 OK | both | 不支持 | - |
| `rating` | 1-5 整数 | 超范围 | both | 支持AVG | - |
| `progress` | 0-100 整数 | 超范围 | both | 支持AVG | - |
| `currency` | `{amount: number, code: str}` | 负数 OK | both | 支持SUM | - |
| `rich-text` | HTML 子集(无 `<script>` | 含 `<script>` 标签 | both | 不支持 | - |
| `date-range` | `{start: ISO, end: ISO}` | `end < start` | both | 不支持 | - |
| `json` | 任意合法 JSON | 非法 JSON | both | 不支持 | - |
| 双向关联 | `target_record_id` | 非存在 record | both | 支持ROLLUP | 新增,无 V2 数据 |
**迁移测试**V2 → V3 迁移需覆盖 (a) 创建人 `text``user`(现有值保留为字符串,运行时解析为 user_id(b) 创建时间 `date``datetime`(现有值追加 `T00:00:00Z`(c) 未迁移字段行为不变(旧字段 `type='text'` 不因新类型引入而变)。
**RecalcWorker cache 失效**FieldType 枚举扩展后,`worker.invalidate_engine(table_id)` 必须在 schema 变更路径调用(见 `docs/solutions/architecture-patterns/bitable-companion-service-security-reliability-patterns.md` 模式 6
---
## Scope Boundaries
### 本次评估范围内
- 三向差距分析(样式/功能/UX + 邻近能力)
- 分优先级建议P0/P1/P2/B 线)
- P0 交接 ce-plan 的范围界定
### 延后(后续轮次)
- P1/P2 差距的 ce-plan 规划(本次只界定范围,不规划实现)
- 大规模优化(列式存储/分区/物化视图v3 范围)
- 多人实时协作(光标/选区同步)
### 本产品身份之外
- **CRM 领域特性**Twenty 的管线阶段、邮件/日历同步、营销自动化——agentkit 不是 CRM
- **飞书生态绑定**IM/文档/日历/知识库深度集成、组织架构继承——agentkit 不是飞书套件产品
- **通用电子表格**单元格自由编辑——bitable 是字段化记录模型
- **BI 仪表盘产品**R13 仪表盘服务于表格内聚合,非独立 BI
- **飞书式 AI 辅助建表**agentkit 走 agent 自主建表路线D1不追飞书 AI 辅助形态
---
## Dependencies / Assumptions
- **依赖**:后端 v1 齐全28 端点 + 公式引擎 + 三类采集P0 主要在前端
- **依赖**vxe-table 4 已用于 `BitableGrid`,继续作为 grid 实现基础
- **依赖**Ant Design Vue 4 + Vue 3 + Pinia + TypeScript强类型禁 any
- **假设**:现有 PostgreSQL 性能足以支撑 v1/v2 规模;大规模(百万行)延后 v3
- **假设**用户接受分阶段交付P0 先行可独立验证
- **假设**`FieldType` 枚举扩展(补 `user`/`datetime`/`checkbox` 等)是 schema V3 升级,不破坏现有 V2
- **假设**P0 视觉风格对齐不需引入新 UI 库,基于现有 Ant Design Vue + vxe-table 主题定制即可
---
## Outstanding Questions
### Resolve Before Planning
(已全部解决,见 KD6
### Deferred to Planning
- 列内联字段配置R1用 vxe-table 内置能力还是自定义组件
- 记录详情抽屉R2的布局单列纵向 vs 双列紧凑
- 看板视图R6组件选型自建 vs 现成库
- 公式库扩展R9是否引入第三方 formula-parser
- `FieldType` 扩展的 schema V3 迁移策略
- 视图删除端点(后端 + 前端均缺 `deleteView`)是否在 P0 补齐
---
## Sources / Research
- **现有后端实现**`src/agentkit/bitable/{models,db,service,repository,recalc_worker}.py` + `formula/{parser,functions,engine}.py` + `ingestion/{excel,database,api_collector}.py`
- **现有前端实现**`src/agentkit/server/frontend/src/views/BitableFile{List,Detail}View.vue` + `src/agentkit/server/frontend/src/components/bitable/*.vue`15 组件)+ `src/agentkit/server/frontend/src/stores/bitable.ts` + `src/agentkit/server/frontend/src/api/bitable.ts`
- **REST 路由**`src/agentkit/server/routes/bitable.py`28 端点)
- **测试**`tests/unit/bitable/`13 文件)+ `src/agentkit/server/frontend/e2e/{bitable-view,bitable-file-flow,bitable-field-ops}.spec.ts`
- **既有规划**`docs/brainstorms/2026-06-24-bitable-module-requirements.md`(模块需求,自建+底座心智)+ `docs/brainstorms/2026-06-29-bitable-ui-completeness-requirements.md`UI 完善四阶段)
- **领域词汇**`CONCEPTS.md`Bitable/BitableFile/Field Ownership/Recalc 四条目)
- **Twenty**[twentyhq/twenty](https://github.com/twentyhq/twenty)v2.8.0, 50.9k stars, AGPL-3.0+ [官方文档](https://docs.twenty.com)Fields/Views/Workflows/Formula Fields
- **飞书多维表格**[飞书帮助中心](https://www.feishu.cn/hc/zh-CN/articles/624094577996) + [OpenAPI Base 结构](https://open.larkoffice.com/document/server-docs/docs/bitable-v1/bitable-structure) + [功能变化路径 2026](https://www.feishu.cn/hc/zh-CN/articles/360043073734)
- **已记录方案**`docs/solutions/architecture-patterns/bitable-companion-service-security-reliability-patterns.md`