Phase 2 测试与验证报告 - MaybeAI Sheet CLI
总体结论
PASS
Phase 2 已实现已验证的公开 play-be 路由命令;缺失路由保持未实现。
本地测试
81/81 PASS
uv run python -m unittest discover -s tests -v 通过。
真实 API 验证
PASS=29 / FAIL=0 / SKIP=0
真实请求已发送到 https://play-be.omnimcp.ai。
验证工作簿
https://www.maybe.ai/docs/spreadsheets/d/6a44a2abef4212b56a15f5d0?gid=0
Document ID: 6a44a2abef4212b56a15f5d0
范围
本报告覆盖 docs/superpowers/plans/2026-07-01-mbs-agent-friendly-phase-2.md 中 Phase 2 的已验证命令族:worksheet lifecycle、row、column、range search、style、formula calculate/lineage、history、file。
以下命令保持未实现:range used-range、range last-row、range last-column、formula compile。原因是没有公开 routed API 合同。
流程
sequenceDiagram
participant User as 用户/Agent
participant CLI as mbs CLI
participant API as play-be /api/v1/excel
participant Book as 一次性验证工作簿
User->>CLI: 创建 workbook + 写入 seed 数据
CLI->>API: workbook/range/formula Phase 1 基础请求
API->>Book: 创建并写入 Sheet1
User->>CLI: 执行 Phase 2 命令族
CLI->>API: worksheet,row,column,range,style,formula,history,file
API->>Book: 真实变更/读取/导出
CLI-->>User: JSON envelope + endpoint + target
Note over CLI,API: 所有请求发送到 https://play-be.omnimcp.ai
Note over Book: 验证工作簿 6a44a2abef4212b56a15f5d0
Mermaid 源文本
sequenceDiagram participant User as 用户/Agent participant CLI as mbs CLI participant API as play-be /api/v1/excel participant Book as 一次性验证工作簿 User->>CLI: 创建 workbook + 写入 seed 数据 CLI->>API: workbook/range/formula Phase 1 基础请求 API->>Book: 创建并写入 Sheet1 User->>CLI: 执行 Phase 2 命令族 CLI->>API: worksheet,row,column,range,style,formula,history,file API->>Book: 真实变更/读取/导出 CLI-->>User: JSON envelope + endpoint + target Note over CLI,API: 所有请求发送到 https://play-be.omnimcp.ai Note over Book: 验证工作簿 6a44a2abef4212b56a15f5d0
验证命令
| 命令 | 结果 | 说明 |
|---|---|---|
uv run python -m unittest discover -s tests -v | PASS | 81 个本地单元测试全部通过,包含 Phase 2 CLI、endpoint registry、verbose metadata。 |
uv run mbs ... --help | PASS | 已检查 mbs、worksheet、range、formula、raw、row、column、style、history、file 帮助输出。 |
uv run mbs ... real endpoint flow | PASS | 创建一次性工作簿并执行 29 个真实 play-be 请求,全部通过。 |
真实请求明细
| 用例 | 结果 | Endpoint | CLI 命令 | 备注 |
|---|---|---|---|---|
workbook.create |
PASS | /api/v1/excel/write_new_sheet |
mbs workbook create --title Phase2 Verify 20260701-131626 --sheet-name Sheet1 |
创建一次性验证工作簿。 |
range.write seed |
PASS | /api/v1/excel/update_range |
mbs range write --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --range A1:E4 --values /var/folders/_2/mz1mjyr1731b3j13_htf0txr0000gn/T/mbs-phase2-live-1kj_qcda/values.json --verify |
写入基础数据并执行 read-back verify。 |
formula.set seed |
PASS | /api/v1/excel/formula/set |
mbs formula set --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --cell E5 --formula =SUM(B2:D2) |
为后续 formula.calculate 和 lineage 准备公式单元格。 |
worksheet.create temp |
PASS | /api/v1/excel/write_new_worksheet |
mbs worksheet create --doc-id 6a44a2abef4212b56a15f5d0 --name Phase2Temp |
真实 play-be 请求返回成功。 |
worksheet.rename |
PASS | /api/v1/excel/rename_worksheet |
mbs worksheet rename --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Phase2Temp --new-name Phase2Renamed |
真实 play-be 请求返回成功。 |
worksheet.copy |
PASS | /api/v1/excel/copy_worksheet |
mbs worksheet copy --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Phase2Renamed --new-name Phase2Copy |
真实 play-be 请求返回成功。 |
worksheet.move |
PASS | /api/v1/excel/move_worksheet |
mbs worksheet move --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Phase2Copy --index 1 |
真实 play-be 请求返回成功。 |
worksheet.delete |
PASS | /api/v1/excel/delete_worksheet |
mbs worksheet delete --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Phase2Copy --yes |
真实 play-be 请求返回成功。 |
row.insert |
PASS | /api/v1/excel/insert_rows |
mbs row insert --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --row 5 --count 1 |
真实 play-be 请求返回成功。 |
row.move |
PASS | /api/v1/excel/move_rows |
mbs row move --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --row 5 --count 1 --destination-row 6 |
真实 play-be 请求返回成功。 |
row.delete |
PASS | /api/v1/excel/delete_rows |
mbs row delete --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --row 6 --count 1 --yes |
真实 play-be 请求返回成功。 |
column.insert |
PASS | /api/v1/excel/insert_columns |
mbs column insert --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --column F --count 1 |
真实 play-be 请求返回成功。 |
column.move |
PASS | /api/v1/excel/move_columns |
mbs column move --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --column F --count 1 --destination-column G |
真实 play-be 请求返回成功。 |
column.delete |
PASS | /api/v1/excel/delete_columns |
mbs column delete --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --column G --count 1 --yes |
真实 play-be 请求返回成功。 |
column.width |
PASS | /api/v1/excel/set_columns_width |
mbs column width --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --start-column A --end-column E --width 96 |
真实 play-be 请求返回成功。 |
range.search |
PASS | /api/v1/excel/search_sheet |
mbs range search --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --query revenue --max-results 10 |
真实 play-be 请求返回成功。 |
style.freeze-panes |
PASS | /api/v1/excel/freeze_panes |
mbs style freeze-panes --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --cell B2 |
真实 play-be 请求返回成功。 |
style.auto-filter.set |
PASS | /api/v1/excel/set_auto_filter |
mbs style auto-filter set --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --range A1:E4 |
真实 play-be 请求返回成功。 |
style.auto-filter.remove |
PASS | /api/v1/excel/remove_auto_filter |
mbs style auto-filter remove --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 |
真实 play-be 请求返回成功。 |
style.columns-width |
PASS | /api/v1/excel/set_columns_width |
mbs style columns-width --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --start-column A --end-column E --width 110 |
真实 play-be 请求返回成功。 |
style.rows-height |
PASS | /api/v1/excel/set_rows_height |
mbs style rows-height --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --start-row 1 --end-row 4 --height 24 |
真实 play-be 请求返回成功。 |
formula.calculate |
PASS | /api/v1/excel/calc-formula |
mbs formula calculate --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --cell E5 --formula =SUM(B2:D2) |
真实 play-be 请求返回成功。 |
formula.lineage |
PASS | /api/v1/excel/lineage/trace |
mbs formula lineage --doc-id 6a44a2abef4212b56a15f5d0 --worksheet-name Sheet1 --cell E5 --format tree |
真实 play-be 请求返回成功。 |
history.list |
PASS | /api/v1/excel/list_versions |
mbs history list --doc-id 6a44a2abef4212b56a15f5d0 --limit 5 |
真实 play-be 请求返回成功。 |
history.read |
PASS | /api/v1/excel/read_version |
mbs history read --doc-id 6a44a2abef4212b56a15f5d0 --version 20 --worksheet-name Sheet1 --range A1:E5 |
使用 history.list 返回的版本 id 读取历史版本。 |
file.export |
PASS | /api/v1/excel/export/6a44a2abef4212b56a15f5d0 |
mbs file export --doc-id 6a44a2abef4212b56a15f5d0 --out /var/folders/_2/mz1mjyr1731b3j13_htf0txr0000gn/T/mbs-phase2-live-1kj_qcda/phase2-export.xlsx |
导出 XLSX 到本地临时文件;export_exists=true. |
file.list |
PASS | /api/v1/excel/list_files |
mbs file list --limit 5 |
真实 play-be 请求返回成功。 |
file.search |
PASS | /api/v1/excel/search_files |
mbs file search --query Phase2 --limit 5 |
真实 play-be 请求返回成功。 |
workbook.manifest final |
PASS | /api/v1/excel/workbook_profile |
mbs workbook manifest --doc-id 6a44a2abef4212b56a15f5d0 |
真实 play-be 请求返回成功。 |
覆盖率
| 区域 | 已覆盖 | 总数 | 百分比 | 备注 |
|---|---|---|---|---|
| Endpoint registry | 43 | 43 | 100.0% | 已覆盖 Phase 1、已验证 Phase 2、missing/deferred metadata |
| Worksheet lifecycle | 4 | 4 | 100.0% | rename/delete/copy/move |
| Row/column structure | 7 | 7 | 100.0% | row insert/delete/move; column insert/delete/move/width |
| Range discovery | 1 | 4 | 25.0% | search covered; used-range/last-row/last-column deferred as missing route |
| Style layout | 5 | 5 | 100.0% | freeze-panes, auto-filter set/remove, columns-width, rows-height |
| Formula Phase 2 | 2 | 3 | 66.7% | calculate/lineage covered; compile deferred as missing route |
| History/file | 5 | 5 | 100.0% | history list/read; file export/list/search |
关键发现
- 真实 API 修正了源代码审阅阶段的旧假设:row/column move 使用
from_*、to_*、count;row/column insert/delete 使用start_*与*_count。 formula calculate真实路由要求cellAddress和formula,CLI 暴露为--cell与--formula。formula lineage的format只能是tree或node。file searchCLI 仍使用用户友好的--query,发送给 play-be 的 payload 字段为keyword。
需要人工核验
请打开验证工作簿,确认 Sheet1 存在且可访问:https://www.maybe.ai/docs/spreadsheets/d/6a44a2abef4212b56a15f5d0?gid=0。自动化已证明 API 请求成功、导出文件存在;视觉格式如冻结窗格、筛选器和宽高变化仍建议人工快速看一眼。