maybeai-sheet-cli 0.4.1__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/PKG-INFO +38 -153
  2. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/README.md +37 -152
  3. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/import_engine_local_report.html +74 -0
  4. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/llm_cost_import_auto.json +479 -0
  5. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/llm_cost_import_mixed_forced.json +0 -0
  6. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/llm_cost_list_worksheets.json +355 -0
  7. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/llm_cost_read_detail_A1_T5.json +549 -0
  8. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/summary.json +79 -0
  9. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/yunling_import_auto.json +602 -0
  10. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/yunling_list_worksheets.json +598 -0
  11. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-local-20260702-150800/yunling_read_T00_A1_F5.json +343 -0
  12. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-merged-20260702-153018/import_auto.json +587 -0
  13. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-merged-20260702-153018/list_worksheets.json +112 -0
  14. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-merged-20260702-153018/merged_two_tables_report.html +12 -0
  15. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-merged-20260702-153018/read_merged_1_A1_T5.json +373 -0
  16. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-merged-20260702-153018/read_merged_2_A1_T5.json +373 -0
  17. maybeai_sheet_cli-0.6.0/docs/superpowers/reports/import-engine-merged-20260702-153018/summary.json +145 -0
  18. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/pyproject.toml +1 -1
  19. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/__init__.py +1 -1
  20. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/cli.py +1 -2
  21. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/db_table.py +156 -5
  22. maybeai_sheet_cli-0.6.0/src/maybeai_sheet/commands/excel_worksheet.py +333 -0
  23. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/workbook.py +56 -7
  24. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/endpoints.py +4 -0
  25. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/tests/test_cli.py +82 -6
  26. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/tests/test_endpoints.py +4 -0
  27. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/tests/test_phase2_cli.py +5 -5
  28. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/tests/test_two_engine_cli.py +206 -4
  29. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/uv.lock +1 -1
  30. maybeai_sheet_cli-0.4.1/src/maybeai_sheet/commands/excel_worksheet.py +0 -111
  31. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/.claude/settings.local.json +0 -0
  32. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/.gitignore +0 -0
  33. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/CLAUDE.md +0 -0
  34. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/cli-packaging-plan.md +0 -0
  35. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/cli-plan.md +0 -0
  36. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/agent-friendly-command-tree.md +0 -0
  37. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/operation-plan-cli-no-dsl-plan.md +0 -0
  38. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/plans/2026-07-01-mbs-agent-friendly-command-tree.md +0 -0
  39. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/plans/2026-07-01-mbs-agent-friendly-phase-2-routes.md +0 -0
  40. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/plans/2026-07-01-mbs-agent-friendly-phase-2.md +0 -0
  41. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/plans/2026-07-01-mbs-be-new-backend-contracts-plan.md +0 -0
  42. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/plans/2026-07-01-mbs-deferred-table-routing-plan.md +0 -0
  43. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/plans/2026-07-01-mbs-excel-worksheet-multi-table-plan.md +0 -0
  44. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/plans/2026-07-01-mbs-two-engine-command-refactor.md +0 -0
  45. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/2026-07-01-mbs-deferred-routing-e2e-report.html +0 -0
  46. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/2026-07-01-phase1-test-review.html +0 -0
  47. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/2026-07-01-phase2-test-review.html +0 -0
  48. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/20260701-130317-excel-table-empty-range-e2e.html +0 -0
  49. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/20260701-130447-excel-table-empty-range-e2e.html +0 -0
  50. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/20260701-130556-excel-table-empty-range-e2e.html +0 -0
  51. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/20260701-230803-local-cli-endpoint-verification.html +0 -0
  52. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/20260701-232511-local7011-cli-table-metadata-verification.html +0 -0
  53. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/e2e-artifacts/e2e-payloads-20260701-130317.json +0 -0
  54. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/e2e-artifacts/e2e-payloads-20260701-130447.json +0 -0
  55. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/e2e-artifacts/e2e-payloads-20260701-130556.json +0 -0
  56. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/e2e-artifacts/multi-table-empty-range-20260701-130317.xlsx +0 -0
  57. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/superpowers/reports/e2e-artifacts/openpyxl-multi-table-empty-range-20260701-130447.xlsx +0 -0
  58. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/docs/verification-matrix-fallback.md +0 -0
  59. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/client.py +0 -0
  60. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/__init__.py +0 -0
  61. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/_phase2.py +0 -0
  62. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/cell.py +0 -0
  63. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/column.py +0 -0
  64. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/excel_table.py +0 -0
  65. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/file.py +0 -0
  66. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/formula.py +0 -0
  67. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/history.py +0 -0
  68. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/range.py +0 -0
  69. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/raw.py +0 -0
  70. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/row.py +0 -0
  71. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/share.py +0 -0
  72. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/sheet.py +0 -0
  73. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/style.py +0 -0
  74. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/table.py +0 -0
  75. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/commands/worksheet.py +0 -0
  76. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/config.py +0 -0
  77. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/errors.py +0 -0
  78. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/formatters.py +0 -0
  79. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/models/__init__.py +0 -0
  80. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/models/share.py +0 -0
  81. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/models/sheet.py +0 -0
  82. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/models/workbook.py +0 -0
  83. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/options.py +0 -0
  84. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/protocol.py +0 -0
  85. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/resolver.py +0 -0
  86. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/table_resolver.py +0 -0
  87. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/src/maybeai_sheet/update.py +0 -0
  88. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/tests/test_formatters.py +0 -0
  89. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/tests/test_resolver.py +0 -0
  90. {maybeai_sheet_cli-0.4.1 → maybeai_sheet_cli-0.6.0}/tests/test_update.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: maybeai-sheet-cli
3
- Version: 0.4.1
3
+ Version: 0.6.0
4
4
  Summary: CLI for common MaybeAI spreadsheet operations
5
5
  Project-URL: Homepage, https://github.com/OmniMCP-AI/maybeai-sheet-cli
6
6
  Project-URL: Repository, https://github.com/OmniMCP-AI/maybeai-sheet-cli
@@ -90,8 +90,7 @@ Optional global flags:
90
90
 
91
91
  ## Quick Start
92
92
 
93
- The examples below follow the target protocol names. The currently shipped
94
- compatibility aliases are listed in the Implemented Command Tree.
93
+ The examples below follow the target protocol names.
95
94
 
96
95
  List user-visible workbooks:
97
96
 
@@ -99,10 +98,11 @@ List user-visible workbooks:
99
98
  mbs workbook list-user-workbooks --limit 20
100
99
  ```
101
100
 
102
- Read a bounded range:
101
+ Read a worksheet:
103
102
 
104
103
  ```bash
105
- mbs excel-worksheet range read --doc-id abc123 --worksheet-name Sheet1 --range A1:D20
104
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Sheet1
105
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Sheet1 --range A1:H1
106
106
  ```
107
107
 
108
108
  List worksheets:
@@ -135,6 +135,13 @@ Import a large table-like `.xlsx` into SheetTable/PG:
135
135
  mbs workbook import ./large-table.xlsx --engine postgres
136
136
  ```
137
137
 
138
+ Import a mixed workbook and let the backend select engines per worksheet:
139
+
140
+ ```bash
141
+ mbs workbook import ./mixed-workbook.xlsx --engine auto
142
+ mbs workbook import ./mixed-workbook.xlsx --engine "postgres,excel,excel,postgres"
143
+ ```
144
+
138
145
  Append rows and verify:
139
146
 
140
147
  ```bash
@@ -176,131 +183,13 @@ CLI command names normalize these relationship labels to hyphenated groups:
176
183
  `excel_worksheet` becomes `excel-worksheet`, `excel_table` becomes
177
184
  `excel-table`, and `db_worksheet(db_table)` becomes `db-table`.
178
185
 
179
- ## Implemented Command Tree
180
-
181
- This is the current shipped command surface. The full roadmap tree below is
182
- separate and includes planned or deferred commands.
183
-
184
- ```text
185
- mbs
186
- ├── update
187
- │ └── Update maybeai-sheet-cli from PyPI.
188
-
189
- ├── workbook
190
- │ ├── create Create a new workbook.
191
- │ ├── create-from-file Import an .xlsx file.
192
- │ ├── import Preferred alias for create-from-file.
193
- │ ├── metadata Inspect workbook profile and routing metadata.
194
- │ ├── list-user-workbooks
195
- │ │ Preferred alias for bounded user workbook listing.
196
- │ ├── list-worksheets List worksheets in a workbook.
197
- │ ├── list List user workbooks with bounded output.
198
- │ ├── search Search user workbooks with bounded output.
199
- │ ├── manifest Compatibility alias for metadata.
200
- │ └── capabilities Inspect workbook capability/profile metadata.
201
-
202
- ├── excel-worksheet
203
- │ ├── metadata Inspect worksheet metadata through workbook profile.
204
- │ └── list-table List worksheet/table metadata for a workbook.
205
-
206
- ├── excel-table
207
- │ ├── metadata Resolve a worksheet-backed table from workbook metadata.
208
- │ ├── schema Infer schema from a resolved worksheet-backed table range.
209
- │ ├── sample Return bounded table sample rows.
210
- │ ├── read Read a resolved worksheet-backed table range.
211
- │ └── insert Insert row objects into a worksheet-backed table.
212
-
213
- ├── db-table
214
- │ ├── metadata Resolve PG/SheetTable-backed worksheet metadata.
215
- │ ├── schema Infer schema from a bounded PG read.
216
- │ ├── sample Return bounded PG table sample rows.
217
- │ ├── read Read PG-backed table rows through routed APIs.
218
- │ └── insert Insert rows into a PG-backed table.
219
-
220
- ├── worksheet
221
- │ ├── list List worksheets in a workbook.
222
- │ ├── create Create a worksheet, optionally with starter values.
223
- │ ├── rename Rename a worksheet.
224
- │ ├── delete Delete a worksheet; requires --yes unless --dry-run.
225
- │ ├── copy Copy a worksheet.
226
- │ └── move Move a worksheet to a zero-based index.
227
-
228
- ├── range
229
- │ ├── read Read a bounded A1 range.
230
- │ ├── write Write a JSON matrix into an A1 range.
231
- │ ├── clear Clear an A1 range.
232
- │ └── search Search a worksheet with bounded results.
233
-
234
- ├── row
235
- │ ├── insert Insert rows.
236
- │ ├── delete Delete rows; requires --yes unless --dry-run.
237
- │ └── move Move rows.
238
-
239
- ├── column
240
- │ ├── insert Insert columns.
241
- │ ├── delete Delete columns; requires --yes unless --dry-run.
242
- │ ├── move Move columns.
243
- │ └── width Set column width.
244
-
245
- ├── formula
246
- │ ├── read Read formulas with FORMULA render mode.
247
- │ ├── set Set one formula cell.
248
- │ ├── batch-set Set formula ranges from a JSON operations file.
249
- │ ├── recalculate Recalculate formulas for a worksheet/workbook.
250
- │ ├── calculate Calculate one formula cell.
251
- │ └── lineage Trace formula lineage for one cell.
252
-
253
- ├── style
254
- │ ├── freeze-panes Freeze rows/columns using an A1 cell boundary.
255
- │ ├── auto-filter set Set worksheet auto-filter range.
256
- │ ├── auto-filter remove Remove worksheet auto-filter.
257
- │ ├── columns-width Set column widths.
258
- │ └── rows-height Set row heights.
259
-
260
- ├── history
261
- │ ├── list List workbook versions with bounded output.
262
- │ └── read Read a workbook version.
263
-
264
- ├── file
265
- │ ├── export Export workbook bytes to --out.
266
- │ ├── list List files with bounded output.
267
- │ └── search Search files with bounded output.
268
-
269
- ├── share
270
- │ ├── visibility Set workbook visibility.
271
- │ ├── grant Grant a user permission.
272
- │ ├── permission Read current permission.
273
- │ ├── remove Remove a user's access.
274
- │ └── list List sharing entries.
275
-
276
- ├── raw
277
- │ └── post Low-level POST escape hatch for routed API paths.
278
-
279
- └── sheet Legacy compatibility aliases.
280
- ├── read
281
- ├── read-range
282
- ├── read-many
283
- ├── named-range
284
- ├── headers
285
- ├── worksheets
286
- ├── formulas
287
- ├── write-range
288
- ├── clear-range
289
- ├── append
290
- ├── upsert
291
- ├── formula-set
292
- ├── formula-batch-set
293
- ├── recalculate
294
- └── create-worksheet
295
- ```
296
186
 
297
187
  ## Full Command Tree
298
188
 
299
189
  The reviewed tree below is the source of truth for the protocol shape. Product
300
190
  model labels in this block use underscores; CLI names in examples and future
301
191
  router code should normalize them to hyphenated command groups such as
302
- `excel-worksheet`, `excel-table`, and `db-table`. The older `sheet ...`
303
- commands remain available as compatibility aliases. This tree includes
192
+ `excel-worksheet`, `excel-table`, and `db-table`. This tree includes
304
193
  implemented, planned, deferred, and not-recommended command surfaces.
305
194
 
306
195
  Status legend for the full tree:
@@ -336,6 +225,7 @@ mbs
336
225
  │ └── rename API Rename a stored file.
337
226
 
338
227
  ├── excel_worksheet
228
+ │ ├── read API Read the full range of the worksheet.
339
229
  │ ├── list-table API List worksheets in a workbook.
340
230
  │ ├── create API Create a worksheet, optionally with starter values.
341
231
  │ ├── update API Update worksheet metadata.
@@ -369,9 +259,9 @@ mbs
369
259
  | |- lineage API Trace cell/range lineage.
370
260
 
371
261
  ├── db_worksheet(AKA db_table)
372
- │ ├── create PG Create a PG-backed table.
373
- │ ├── update PG Update PG-backed table metadata.
374
- │ ├── delete PG Delete a PG-backed table; requires --yes unless --dry-run.
262
+ │ ├── create PLAN Create a PG-backed table from JSON row data.
263
+ │ ├── update PLAN Update PG-backed rows from JSON row data.
264
+ │ ├── delete PLAN Delete PG-backed rows/table; requires --yes unless --dry-run.
375
265
  │ ├── schema API Infer table schema from a bounded PG read.
376
266
  │ ├── sample API Return bounded table sample rows.
377
267
  │ ├── read API Read PG-backed table rows.
@@ -434,24 +324,6 @@ mbs
434
324
  │ ├── create API Create or grant sharing access.
435
325
  │ ├── remove API Remove a user's access.
436
326
  │ ├── modify API Modify sharing access.
437
-
438
-
439
- └── sheet Legacy compatibility aliases.
440
- ├── read
441
- ├── read-range
442
- ├── read-many
443
- ├── named-range
444
- ├── headers
445
- ├── worksheets
446
- ├── formulas
447
- ├── write-range
448
- ├── clear-range
449
- ├── append
450
- ├── upsert
451
- ├── formula-set
452
- ├── formula-batch-set
453
- ├── recalculate
454
- └── create-worksheet
455
327
  ```
456
328
 
457
329
  Full tree examples:
@@ -474,13 +346,15 @@ mbs workbook copy --doc-id abc123 --name "Budget Copy" # API
474
346
  mbs workbook delete --doc-id abc123 --dry-run # API
475
347
 
476
348
  # excel-worksheet
349
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Actuals # API
350
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Actuals --range A1:D20 # API
477
351
  mbs excel-worksheet create --doc-id abc123 --name Actuals # API
478
352
  mbs excel-worksheet update --doc-id abc123 --worksheet-name Actuals --title "Actuals FY26" # API
479
353
  mbs excel-worksheet metadata --doc-id abc123 --worksheet-name Actuals # API
480
354
  mbs excel-worksheet sample --doc-id abc123 --worksheet-name Actuals --range A1:Z5000 --limit 50 # PLAN
481
355
 
482
356
  # excel-worksheet range
483
- mbs excel-worksheet range read --doc-id abc123 --worksheet-name Actuals --range A1:D20 # API
357
+ mbs excel-worksheet range read --doc-id abc123 --worksheet-name Actuals --range A1:D20 # API, advanced structured alias
484
358
  mbs excel-worksheet range used-range --doc-id abc123 --worksheet-name Actuals # PLAN
485
359
  mbs excel-worksheet range lineage --doc-id abc123 --worksheet-name Model --cell E2 --format tree # API
486
360
 
@@ -496,8 +370,17 @@ mbs excel-table style columns-width --doc-id abc123 --worksheet-name Orders --ta
496
370
  mbs db-table metadata --doc-id abc123 --name orders-large # API
497
371
  mbs db-table schema --doc-id abc123 --name orders-large # API
498
372
  mbs db-table sample --doc-id abc123 --name orders-large --limit 50 # API
499
- mbs db-table read --doc-id abc123 --name orders-large --limit 50 # API
373
+ mbs db-table read --doc-id abc123 --name orders-large --limit 100 --offset 200 # API
500
374
  mbs db-table insert --doc-id abc123 --name orders-large --rows rows.json # API
375
+ mbs db-table create --doc-id abc123 --name Orders --rows orders.json # PLAN
376
+ mbs db-table update --doc-id abc123 --name Orders --key order_id --rows orders_patch.json # PLAN
377
+ mbs db-table update --doc-id abc123 --name Orders --row-index 42 --rows row_patch.json # PLAN
378
+ mbs db-table update --doc-id abc123 --name Orders --where '{"status":"open"}' --rows status_patch.json # PLAN
379
+ mbs db-table update --doc-id abc123 --name Orders --column-index 3 --column-name status # PLAN
380
+ mbs db-table delete --doc-id abc123 --name Orders --where '{"order_id":"A1"}' --yes # PLAN
381
+ mbs db-table delete --doc-id abc123 --name Orders --row-index 42 --count 10 --yes # PLAN
382
+ mbs db-table delete --doc-id abc123 --name Orders --column-index 3 --yes # PLAN
383
+ mbs db-table delete --doc-id abc123 --name Orders --column-name status --yes # PLAN
501
384
 
502
385
  # row
503
386
  mbs excel-worksheet row insert --doc-id abc123 --worksheet-name Actuals --row 10 --count 2 # API
@@ -535,11 +418,13 @@ mbs version restore --doc-id abc123 --version-id v42 --dry-run # PLAN
535
418
 
536
419
  # share
537
420
  mbs share create --doc-id abc123 --email teammate@example.com --role viewer # API
538
-
539
- # sheet
540
- mbs sheet read --doc-id abc123 --worksheet-name Sheet1 --range A1:D20
541
421
  ```
542
422
 
423
+ `db-table read`, `schema`, and `sample` keep reads bounded. The default read
424
+ limit is 100 rows, and `--limit` / `--offset` are capped at 10,000 to avoid
425
+ accidental large PG scans. Use a keyset-style backend contract for deeper
426
+ pagination when it becomes available.
427
+
543
428
  Refactor planning is tracked separately from this README:
544
429
  `docs/superpowers/plans/2026-07-01-mbs-two-engine-command-refactor.md`.
545
430
 
@@ -561,8 +446,8 @@ dependency graph beyond cell lineage PLAN
561
446
  Relationship guide:
562
447
 
563
448
  - Use `workbook` for file-level creation, upload/import, and manifest checks.
564
- - Use `excel-worksheet` for Excel tab lifecycle operations and worksheet/range
565
- inspection.
449
+ - Use `excel-worksheet read` for full worksheet used-range inspection.
450
+ - Use `excel-worksheet` for Excel tab lifecycle operations.
566
451
  - Use `excel-worksheet range` for coordinate-based reads, writes, formulas, and
567
452
  cell lineage.
568
453
  - Use `excel-table` for worksheet-backed table views. One Excel worksheet can
@@ -597,7 +482,7 @@ Targeting notes:
597
482
  from workbook metadata, for example `--table-id 1`, and maps internally to
598
483
  table metadata such as `worksheet_name` and `range`.
599
484
  - Use `--name` or backend ids when operating on a `db-table`.
600
- - Use `--gid` only for legacy gid-specific compatibility aliases.
485
+ - Use `--gid` only when a route specifically requires gid targeting.
601
486
 
602
487
  ## Input Rules
603
488
 
@@ -66,8 +66,7 @@ Optional global flags:
66
66
 
67
67
  ## Quick Start
68
68
 
69
- The examples below follow the target protocol names. The currently shipped
70
- compatibility aliases are listed in the Implemented Command Tree.
69
+ The examples below follow the target protocol names.
71
70
 
72
71
  List user-visible workbooks:
73
72
 
@@ -75,10 +74,11 @@ List user-visible workbooks:
75
74
  mbs workbook list-user-workbooks --limit 20
76
75
  ```
77
76
 
78
- Read a bounded range:
77
+ Read a worksheet:
79
78
 
80
79
  ```bash
81
- mbs excel-worksheet range read --doc-id abc123 --worksheet-name Sheet1 --range A1:D20
80
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Sheet1
81
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Sheet1 --range A1:H1
82
82
  ```
83
83
 
84
84
  List worksheets:
@@ -111,6 +111,13 @@ Import a large table-like `.xlsx` into SheetTable/PG:
111
111
  mbs workbook import ./large-table.xlsx --engine postgres
112
112
  ```
113
113
 
114
+ Import a mixed workbook and let the backend select engines per worksheet:
115
+
116
+ ```bash
117
+ mbs workbook import ./mixed-workbook.xlsx --engine auto
118
+ mbs workbook import ./mixed-workbook.xlsx --engine "postgres,excel,excel,postgres"
119
+ ```
120
+
114
121
  Append rows and verify:
115
122
 
116
123
  ```bash
@@ -152,131 +159,13 @@ CLI command names normalize these relationship labels to hyphenated groups:
152
159
  `excel_worksheet` becomes `excel-worksheet`, `excel_table` becomes
153
160
  `excel-table`, and `db_worksheet(db_table)` becomes `db-table`.
154
161
 
155
- ## Implemented Command Tree
156
-
157
- This is the current shipped command surface. The full roadmap tree below is
158
- separate and includes planned or deferred commands.
159
-
160
- ```text
161
- mbs
162
- ├── update
163
- │ └── Update maybeai-sheet-cli from PyPI.
164
-
165
- ├── workbook
166
- │ ├── create Create a new workbook.
167
- │ ├── create-from-file Import an .xlsx file.
168
- │ ├── import Preferred alias for create-from-file.
169
- │ ├── metadata Inspect workbook profile and routing metadata.
170
- │ ├── list-user-workbooks
171
- │ │ Preferred alias for bounded user workbook listing.
172
- │ ├── list-worksheets List worksheets in a workbook.
173
- │ ├── list List user workbooks with bounded output.
174
- │ ├── search Search user workbooks with bounded output.
175
- │ ├── manifest Compatibility alias for metadata.
176
- │ └── capabilities Inspect workbook capability/profile metadata.
177
-
178
- ├── excel-worksheet
179
- │ ├── metadata Inspect worksheet metadata through workbook profile.
180
- │ └── list-table List worksheet/table metadata for a workbook.
181
-
182
- ├── excel-table
183
- │ ├── metadata Resolve a worksheet-backed table from workbook metadata.
184
- │ ├── schema Infer schema from a resolved worksheet-backed table range.
185
- │ ├── sample Return bounded table sample rows.
186
- │ ├── read Read a resolved worksheet-backed table range.
187
- │ └── insert Insert row objects into a worksheet-backed table.
188
-
189
- ├── db-table
190
- │ ├── metadata Resolve PG/SheetTable-backed worksheet metadata.
191
- │ ├── schema Infer schema from a bounded PG read.
192
- │ ├── sample Return bounded PG table sample rows.
193
- │ ├── read Read PG-backed table rows through routed APIs.
194
- │ └── insert Insert rows into a PG-backed table.
195
-
196
- ├── worksheet
197
- │ ├── list List worksheets in a workbook.
198
- │ ├── create Create a worksheet, optionally with starter values.
199
- │ ├── rename Rename a worksheet.
200
- │ ├── delete Delete a worksheet; requires --yes unless --dry-run.
201
- │ ├── copy Copy a worksheet.
202
- │ └── move Move a worksheet to a zero-based index.
203
-
204
- ├── range
205
- │ ├── read Read a bounded A1 range.
206
- │ ├── write Write a JSON matrix into an A1 range.
207
- │ ├── clear Clear an A1 range.
208
- │ └── search Search a worksheet with bounded results.
209
-
210
- ├── row
211
- │ ├── insert Insert rows.
212
- │ ├── delete Delete rows; requires --yes unless --dry-run.
213
- │ └── move Move rows.
214
-
215
- ├── column
216
- │ ├── insert Insert columns.
217
- │ ├── delete Delete columns; requires --yes unless --dry-run.
218
- │ ├── move Move columns.
219
- │ └── width Set column width.
220
-
221
- ├── formula
222
- │ ├── read Read formulas with FORMULA render mode.
223
- │ ├── set Set one formula cell.
224
- │ ├── batch-set Set formula ranges from a JSON operations file.
225
- │ ├── recalculate Recalculate formulas for a worksheet/workbook.
226
- │ ├── calculate Calculate one formula cell.
227
- │ └── lineage Trace formula lineage for one cell.
228
-
229
- ├── style
230
- │ ├── freeze-panes Freeze rows/columns using an A1 cell boundary.
231
- │ ├── auto-filter set Set worksheet auto-filter range.
232
- │ ├── auto-filter remove Remove worksheet auto-filter.
233
- │ ├── columns-width Set column widths.
234
- │ └── rows-height Set row heights.
235
-
236
- ├── history
237
- │ ├── list List workbook versions with bounded output.
238
- │ └── read Read a workbook version.
239
-
240
- ├── file
241
- │ ├── export Export workbook bytes to --out.
242
- │ ├── list List files with bounded output.
243
- │ └── search Search files with bounded output.
244
-
245
- ├── share
246
- │ ├── visibility Set workbook visibility.
247
- │ ├── grant Grant a user permission.
248
- │ ├── permission Read current permission.
249
- │ ├── remove Remove a user's access.
250
- │ └── list List sharing entries.
251
-
252
- ├── raw
253
- │ └── post Low-level POST escape hatch for routed API paths.
254
-
255
- └── sheet Legacy compatibility aliases.
256
- ├── read
257
- ├── read-range
258
- ├── read-many
259
- ├── named-range
260
- ├── headers
261
- ├── worksheets
262
- ├── formulas
263
- ├── write-range
264
- ├── clear-range
265
- ├── append
266
- ├── upsert
267
- ├── formula-set
268
- ├── formula-batch-set
269
- ├── recalculate
270
- └── create-worksheet
271
- ```
272
162
 
273
163
  ## Full Command Tree
274
164
 
275
165
  The reviewed tree below is the source of truth for the protocol shape. Product
276
166
  model labels in this block use underscores; CLI names in examples and future
277
167
  router code should normalize them to hyphenated command groups such as
278
- `excel-worksheet`, `excel-table`, and `db-table`. The older `sheet ...`
279
- commands remain available as compatibility aliases. This tree includes
168
+ `excel-worksheet`, `excel-table`, and `db-table`. This tree includes
280
169
  implemented, planned, deferred, and not-recommended command surfaces.
281
170
 
282
171
  Status legend for the full tree:
@@ -312,6 +201,7 @@ mbs
312
201
  │ └── rename API Rename a stored file.
313
202
 
314
203
  ├── excel_worksheet
204
+ │ ├── read API Read the full range of the worksheet.
315
205
  │ ├── list-table API List worksheets in a workbook.
316
206
  │ ├── create API Create a worksheet, optionally with starter values.
317
207
  │ ├── update API Update worksheet metadata.
@@ -345,9 +235,9 @@ mbs
345
235
  | |- lineage API Trace cell/range lineage.
346
236
 
347
237
  ├── db_worksheet(AKA db_table)
348
- │ ├── create PG Create a PG-backed table.
349
- │ ├── update PG Update PG-backed table metadata.
350
- │ ├── delete PG Delete a PG-backed table; requires --yes unless --dry-run.
238
+ │ ├── create PLAN Create a PG-backed table from JSON row data.
239
+ │ ├── update PLAN Update PG-backed rows from JSON row data.
240
+ │ ├── delete PLAN Delete PG-backed rows/table; requires --yes unless --dry-run.
351
241
  │ ├── schema API Infer table schema from a bounded PG read.
352
242
  │ ├── sample API Return bounded table sample rows.
353
243
  │ ├── read API Read PG-backed table rows.
@@ -410,24 +300,6 @@ mbs
410
300
  │ ├── create API Create or grant sharing access.
411
301
  │ ├── remove API Remove a user's access.
412
302
  │ ├── modify API Modify sharing access.
413
-
414
-
415
- └── sheet Legacy compatibility aliases.
416
- ├── read
417
- ├── read-range
418
- ├── read-many
419
- ├── named-range
420
- ├── headers
421
- ├── worksheets
422
- ├── formulas
423
- ├── write-range
424
- ├── clear-range
425
- ├── append
426
- ├── upsert
427
- ├── formula-set
428
- ├── formula-batch-set
429
- ├── recalculate
430
- └── create-worksheet
431
303
  ```
432
304
 
433
305
  Full tree examples:
@@ -450,13 +322,15 @@ mbs workbook copy --doc-id abc123 --name "Budget Copy" # API
450
322
  mbs workbook delete --doc-id abc123 --dry-run # API
451
323
 
452
324
  # excel-worksheet
325
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Actuals # API
326
+ mbs excel-worksheet read --doc-id abc123 --worksheet-name Actuals --range A1:D20 # API
453
327
  mbs excel-worksheet create --doc-id abc123 --name Actuals # API
454
328
  mbs excel-worksheet update --doc-id abc123 --worksheet-name Actuals --title "Actuals FY26" # API
455
329
  mbs excel-worksheet metadata --doc-id abc123 --worksheet-name Actuals # API
456
330
  mbs excel-worksheet sample --doc-id abc123 --worksheet-name Actuals --range A1:Z5000 --limit 50 # PLAN
457
331
 
458
332
  # excel-worksheet range
459
- mbs excel-worksheet range read --doc-id abc123 --worksheet-name Actuals --range A1:D20 # API
333
+ mbs excel-worksheet range read --doc-id abc123 --worksheet-name Actuals --range A1:D20 # API, advanced structured alias
460
334
  mbs excel-worksheet range used-range --doc-id abc123 --worksheet-name Actuals # PLAN
461
335
  mbs excel-worksheet range lineage --doc-id abc123 --worksheet-name Model --cell E2 --format tree # API
462
336
 
@@ -472,8 +346,17 @@ mbs excel-table style columns-width --doc-id abc123 --worksheet-name Orders --ta
472
346
  mbs db-table metadata --doc-id abc123 --name orders-large # API
473
347
  mbs db-table schema --doc-id abc123 --name orders-large # API
474
348
  mbs db-table sample --doc-id abc123 --name orders-large --limit 50 # API
475
- mbs db-table read --doc-id abc123 --name orders-large --limit 50 # API
349
+ mbs db-table read --doc-id abc123 --name orders-large --limit 100 --offset 200 # API
476
350
  mbs db-table insert --doc-id abc123 --name orders-large --rows rows.json # API
351
+ mbs db-table create --doc-id abc123 --name Orders --rows orders.json # PLAN
352
+ mbs db-table update --doc-id abc123 --name Orders --key order_id --rows orders_patch.json # PLAN
353
+ mbs db-table update --doc-id abc123 --name Orders --row-index 42 --rows row_patch.json # PLAN
354
+ mbs db-table update --doc-id abc123 --name Orders --where '{"status":"open"}' --rows status_patch.json # PLAN
355
+ mbs db-table update --doc-id abc123 --name Orders --column-index 3 --column-name status # PLAN
356
+ mbs db-table delete --doc-id abc123 --name Orders --where '{"order_id":"A1"}' --yes # PLAN
357
+ mbs db-table delete --doc-id abc123 --name Orders --row-index 42 --count 10 --yes # PLAN
358
+ mbs db-table delete --doc-id abc123 --name Orders --column-index 3 --yes # PLAN
359
+ mbs db-table delete --doc-id abc123 --name Orders --column-name status --yes # PLAN
477
360
 
478
361
  # row
479
362
  mbs excel-worksheet row insert --doc-id abc123 --worksheet-name Actuals --row 10 --count 2 # API
@@ -511,11 +394,13 @@ mbs version restore --doc-id abc123 --version-id v42 --dry-run # PLAN
511
394
 
512
395
  # share
513
396
  mbs share create --doc-id abc123 --email teammate@example.com --role viewer # API
514
-
515
- # sheet
516
- mbs sheet read --doc-id abc123 --worksheet-name Sheet1 --range A1:D20
517
397
  ```
518
398
 
399
+ `db-table read`, `schema`, and `sample` keep reads bounded. The default read
400
+ limit is 100 rows, and `--limit` / `--offset` are capped at 10,000 to avoid
401
+ accidental large PG scans. Use a keyset-style backend contract for deeper
402
+ pagination when it becomes available.
403
+
519
404
  Refactor planning is tracked separately from this README:
520
405
  `docs/superpowers/plans/2026-07-01-mbs-two-engine-command-refactor.md`.
521
406
 
@@ -537,8 +422,8 @@ dependency graph beyond cell lineage PLAN
537
422
  Relationship guide:
538
423
 
539
424
  - Use `workbook` for file-level creation, upload/import, and manifest checks.
540
- - Use `excel-worksheet` for Excel tab lifecycle operations and worksheet/range
541
- inspection.
425
+ - Use `excel-worksheet read` for full worksheet used-range inspection.
426
+ - Use `excel-worksheet` for Excel tab lifecycle operations.
542
427
  - Use `excel-worksheet range` for coordinate-based reads, writes, formulas, and
543
428
  cell lineage.
544
429
  - Use `excel-table` for worksheet-backed table views. One Excel worksheet can
@@ -573,7 +458,7 @@ Targeting notes:
573
458
  from workbook metadata, for example `--table-id 1`, and maps internally to
574
459
  table metadata such as `worksheet_name` and `range`.
575
460
  - Use `--name` or backend ids when operating on a `db-table`.
576
- - Use `--gid` only for legacy gid-specific compatibility aliases.
461
+ - Use `--gid` only when a route specifically requires gid targeting.
577
462
 
578
463
  ## Input Rules
579
464
 
@@ -0,0 +1,74 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>本地导入引擎验证报告</title>
6
+ <style>
7
+ body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;margin:24px;color:#111827;line-height:1.45}
8
+ h1{font-size:24px} h2{font-size:18px;margin-top:28px}
9
+ table{border-collapse:collapse;width:100%;font-size:13px}th,td{border:1px solid #d1d5db;padding:6px;text-align:left;vertical-align:top}th{background:#f3f4f6}
10
+ .status-pass{color:#166534;background:#dcfce7;font-weight:700}.status-fail{color:#991b1b;background:#fee2e2;font-weight:700}.status-warn,.status-skip{color:#92400e;background:#fef3c7;font-weight:700}
11
+ code,pre{background:#f3f4f6;padding:2px 4px;border-radius:4px}pre{padding:12px;overflow:auto}
12
+ .human-needed{border-left:4px solid #d97706;padding-left:12px;background:#fffbeb}
13
+ </style>
14
+ </head>
15
+ <body>
16
+ <h1>本地导入引擎验证报告</h1>
17
+ <p>运行时间:2026-07-02T15:20:29</p>
18
+ <p>API base:<code>http://localhost:7011</code></p>
19
+ <p>提交版本:maybeai-sheet-cli <code>a988277</code>,play-be <code>76ec7f4</code>,SheetTable <code>2cafe2c</code></p>
20
+ <p>结果汇总:PASS=2,FAIL=0,WARN=1,SKIP=0</p>
21
+ <h2>MaybeSheet URL</h2>
22
+ <ul><li><a href="http://localhost:3003/docs/spreadsheets/d/6a460e52e6feec692aa2b7ee">http://localhost:3003/docs/spreadsheets/d/6a460e52e6feec692aa2b7ee</a></li><li><a href="http://localhost:3003/docs/spreadsheets/d/6a460e59e6feec692aa2b7f2">http://localhost:3003/docs/spreadsheets/d/6a460e59e6feec692aa2b7f2</a></li></ul>
23
+ <h2>流程</h2>
24
+ <div class="mermaid">flowchart LR
25
+ CLI[mbs CLI] --&gt; Play[play-be /api/v1/excel/import]
26
+ Play --&gt; Auto{engine=auto}
27
+ Auto --&gt;|layout/report| Excelize[excelize-mcp]
28
+ Auto --&gt;|forced pg worksheets| SheetTable[SheetTable]
29
+ SheetTable --&gt; PG[(PostgreSQL typed tables)]
30
+ Play --&gt; Response[JSON response]
31
+ Response --&gt; Report[本地 HTML 报告]
32
+ classDef excelize fill:#dbeafe,stroke:#2563eb,color:#111827;
33
+ classDef pg fill:#dcfce7,stroke:#16a34a,color:#111827;
34
+ classDef warn fill:#fef3c7,stroke:#d97706,color:#111827;
35
+ class Excelize excelize;
36
+ class SheetTable,PG pg;
37
+ class Auto warn;
38
+ </div>
39
+ <pre>flowchart LR
40
+ CLI[mbs CLI] --&gt; Play[play-be /api/v1/excel/import]
41
+ Play --&gt; Auto{engine=auto}
42
+ Auto --&gt;|layout/report| Excelize[excelize-mcp]
43
+ Auto --&gt;|forced pg worksheets| SheetTable[SheetTable]
44
+ SheetTable --&gt; PG[(PostgreSQL typed tables)]
45
+ Play --&gt; Response[JSON response]
46
+ Response --&gt; Report[本地 HTML 报告]
47
+ classDef excelize fill:#dbeafe,stroke:#2563eb,color:#111827;
48
+ classDef pg fill:#dcfce7,stroke:#16a34a,color:#111827;
49
+ classDef warn fill:#fef3c7,stroke:#d97706,color:#111827;
50
+ class Excelize excelize;
51
+ class SheetTable,PG pg;
52
+ class Auto warn;
53
+ </pre>
54
+ <h2>对比结果</h2>
55
+ <table><thead><tr><th>类别</th><th>用例</th><th>来源文件</th><th>document_id</th><th>MaybeSheet URL</th><th>期望引擎</th><th>实际引擎</th><th>worksheet_engines</th><th>top-level selected_engine</th><th>preprocess</th><th>list 数量</th><th>read 检查</th><th>结果</th><th>备注</th></tr></thead><tbody><tr><td>auto import</td><td>yunling auto import</td><td>~/Downloads/yunling_v4_20sheet.xlsx</td><td>6a460e52e6feec692aa2b7ee</td><td>http://localhost:3003/docs/spreadsheets/d/6a460e52e6feec692aa2b7ee</td><td>excelize</td><td>excelize</td><td>excelize:21</td><td>absent</td><td>0</td><td>21</td><td>PASS</td><td class="status-pass">PASS</td><td>响应仅保留 top-level engine;每个 worksheet_engines 保留 requested_engine/selected_engine。</td></tr><tr><td>auto import</td><td>llm_cost auto import</td><td>~/Downloads/llm_cost_stats_2026_05_export.xlsx</td><td>6a460e59e6feec692aa2b7f2</td><td>http://localhost:3003/docs/spreadsheets/d/6a460e59e6feec692aa2b7f2</td><td>excelize</td><td>excelize</td><td>excelize:12</td><td>absent</td><td>0</td><td>12</td><td>PASS</td><td class="status-pass">PASS</td><td>响应仅保留 top-level engine;每个 worksheet_engines 保留 requested_engine/selected_engine。</td></tr><tr><td>forced mixed import</td><td>llm_cost forced excelize+postgres list</td><td>~/Downloads/llm_cost_stats_2026_05_export.xlsx</td><td>n/a</td><td>n/a</td><td>composite</td><td>timeout</td><td>SheetTable 日志显示 PG typed writes 已执行;CLI 600s 内未收到 play-be 响应,随后仍在 post-import sync。</td><td>unknown</td><td>observed in SheetTable typed writes</td><td>n/a</td><td>SKIP</td><td class="status-warn">WARN</td><td>命令 --engine &quot;excelize,postgres,...&quot; 触发 PG typed materialization,但 600s 内未返回响应;临时服务关闭时 play-be 记录 SheetTable import failed/server disconnected。需要进一步查 mixed response/registry completion 与 post-import sync 耗时。</td></tr></tbody></table>
56
+ <h2>响应结构检查</h2>
57
+ <ul>
58
+ <li><code>yunling_v4_20sheet.xlsx</code> auto 响应 top-level <code>selected_engine</code>:absent</li>
59
+ <li><code>llm_cost_stats_2026_05_export.xlsx</code> auto 响应 top-level <code>selected_engine</code>:absent</li>
60
+ <li>两个成功响应都保留 <code>engine</code> 和 per-worksheet <code>worksheet_engines[].requested_engine/selected_engine</code>。</li>
61
+ </ul>
62
+ <h2>覆盖率</h2>
63
+ <table><thead><tr><th>区域</th><th>已覆盖</th><th>总数</th><th>百分比</th><th>未覆盖/备注</th></tr></thead><tbody>
64
+ <tr><td>auto import</td><td>2</td><td>2</td><td>100%</td><td>layout/report 与 large workbook</td></tr>
65
+ <tr><td>list worksheets</td><td>2</td><td>2</td><td>100%</td><td>均通过 CLI routed API</td></tr>
66
+ <tr><td>range read</td><td>2</td><td>2</td><td>100%</td><td>均返回样例数据</td></tr>
67
+ <tr><td>forced mixed route</td><td>0</td><td>1</td><td>0%</td><td>SheetTable 完成 typed writes,但 play-be/CLI 响应超时</td></tr>
68
+ </tbody></table>
69
+ <section class="human-needed"><h2>需要人工核验</h2>
70
+ <p>打开上面的 localhost MaybeSheet URL,确认 UI 可以加载对应工作簿。自动化已经验证 import/list/read API;UI 渲染不在本次 CLI 自动检查范围内。</p>
71
+ </section>
72
+ <h2>原始证据文件</h2><p>目录:<code>docs/superpowers/reports/import-engine-local-20260702-150800</code></p><ul><li><code>llm_cost_import_auto.json</code></li><li><code>llm_cost_import_mixed_forced.json</code></li><li><code>llm_cost_list_worksheets.json</code></li><li><code>llm_cost_read_detail_A1_T5.json</code></li><li><code>yunling_import_auto.json</code></li><li><code>yunling_list_worksheets.json</code></li><li><code>yunling_read_T00_A1_F5.json</code></li></ul>
73
+ <script type="module">import mermaid from "https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs"; mermaid.initialize({startOnLoad:true, securityLevel:"strict"});</script>
74
+ </body></html>