maybeai-sheet-cli 0.3.2__tar.gz → 0.4.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.
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/PKG-INFO +62 -6
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/README.md +61 -5
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/docs/agent-friendly-command-tree.md +153 -5
- maybeai_sheet_cli-0.4.0/docs/operation-plan-cli-no-dsl-plan.md +477 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/docs/superpowers/plans/2026-07-01-mbs-agent-friendly-phase-2-routes.md +20 -13
- maybeai_sheet_cli-0.4.0/docs/superpowers/reports/2026-07-01-phase2-test-review.html +309 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/pyproject.toml +1 -1
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/__init__.py +1 -1
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/cli.py +10 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/commands/_phase2.py +140 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/commands/column.py +221 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/commands/file.py +135 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/formula.py +99 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/commands/history.py +104 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/range.py +55 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/commands/row.py +170 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/commands/style.py +255 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/commands/worksheet.py +255 -0
- maybeai_sheet_cli-0.4.0/src/maybeai_sheet/endpoints.py +127 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/formatters.py +6 -0
- maybeai_sheet_cli-0.4.0/tests/test_endpoints.py +105 -0
- maybeai_sheet_cli-0.4.0/tests/test_phase2_cli.py +620 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/tests/test_update.py +2 -1
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/uv.lock +1 -1
- maybeai_sheet_cli-0.3.2/src/maybeai_sheet/commands/worksheet.py +0 -65
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/.claude/settings.local.json +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/.gitignore +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/CLAUDE.md +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/cli-packaging-plan.md +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/cli-plan.md +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/docs/superpowers/plans/2026-07-01-mbs-agent-friendly-command-tree.md +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/docs/superpowers/plans/2026-07-01-mbs-agent-friendly-phase-2.md +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/docs/superpowers/reports/2026-07-01-phase1-test-review.html +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/docs/verification-matrix-fallback.md +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/client.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/__init__.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/raw.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/share.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/sheet.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/table.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/commands/workbook.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/config.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/errors.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/models/__init__.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/models/share.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/models/sheet.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/models/workbook.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/options.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/resolver.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/src/maybeai_sheet/update.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/tests/test_cli.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/tests/test_formatters.py +0 -0
- {maybeai_sheet_cli-0.3.2 → maybeai_sheet_cli-0.4.0}/tests/test_resolver.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: maybeai-sheet-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.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
|
|
@@ -138,11 +138,29 @@ Make a workbook public for viewers:
|
|
|
138
138
|
mbs share visibility --doc-id abc123 --visibility public --public-permission viewer
|
|
139
139
|
```
|
|
140
140
|
|
|
141
|
+
Rename a worksheet and inspect a destructive row delete before sending it:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
mbs worksheet rename --doc-id abc123 --worksheet-name Old --new-name New
|
|
145
|
+
mbs row delete --doc-id abc123 --worksheet-name Sheet1 --row 10 --dry-run
|
|
146
|
+
mbs row delete --doc-id abc123 --worksheet-name Sheet1 --row 10 --yes
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Search, style, inspect history, and export:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
mbs range search --doc-id abc123 --worksheet-name Sheet1 --query revenue --max-results 20
|
|
153
|
+
mbs style freeze-panes --doc-id abc123 --worksheet-name Sheet1 --cell B2
|
|
154
|
+
mbs formula calculate --doc-id abc123 --worksheet-name Sheet1 --cell E2 --formula "=SUM(B2:D2)"
|
|
155
|
+
mbs history list --doc-id abc123 --limit 10
|
|
156
|
+
mbs file export --doc-id abc123 --out workbook.xlsx
|
|
157
|
+
```
|
|
158
|
+
|
|
141
159
|
## Commands
|
|
142
160
|
|
|
143
161
|
The preferred command groups are `workbook`, `worksheet`, `range`, `table`,
|
|
144
|
-
`
|
|
145
|
-
as compatibility aliases.
|
|
162
|
+
`row`, `column`, `formula`, `style`, `history`, `file`, `share`, and `raw`.
|
|
163
|
+
The older `sheet ...` commands remain available as compatibility aliases.
|
|
146
164
|
|
|
147
165
|
```text
|
|
148
166
|
mbs
|
|
@@ -158,23 +176,57 @@ mbs
|
|
|
158
176
|
│
|
|
159
177
|
├── worksheet
|
|
160
178
|
│ ├── list List worksheets in a workbook.
|
|
161
|
-
│
|
|
179
|
+
│ ├── create Create a worksheet, optionally with starter values.
|
|
180
|
+
│ ├── rename Rename a worksheet.
|
|
181
|
+
│ ├── delete Delete a worksheet; requires --yes unless --dry-run.
|
|
182
|
+
│ ├── copy Copy a worksheet.
|
|
183
|
+
│ └── move Move a worksheet to a zero-based index.
|
|
162
184
|
│
|
|
163
185
|
├── range
|
|
164
186
|
│ ├── read Read a bounded A1 range.
|
|
165
187
|
│ ├── write Write a JSON matrix into an A1 range.
|
|
166
|
-
│
|
|
188
|
+
│ ├── clear Clear an A1 range.
|
|
189
|
+
│ └── search Search a worksheet with bounded results.
|
|
167
190
|
│
|
|
168
191
|
├── table
|
|
169
192
|
│ ├── headers Read header row metadata.
|
|
170
193
|
│ ├── append-rows Append JSON row objects.
|
|
171
194
|
│ └── upsert-rows Upsert JSON row objects by key.
|
|
172
195
|
│
|
|
196
|
+
├── row
|
|
197
|
+
│ ├── insert Insert rows.
|
|
198
|
+
│ ├── delete Delete rows; requires --yes unless --dry-run.
|
|
199
|
+
│ └── move Move rows.
|
|
200
|
+
│
|
|
201
|
+
├── column
|
|
202
|
+
│ ├── insert Insert columns.
|
|
203
|
+
│ ├── delete Delete columns; requires --yes unless --dry-run.
|
|
204
|
+
│ ├── move Move columns.
|
|
205
|
+
│ └── width Set column width.
|
|
206
|
+
│
|
|
173
207
|
├── formula
|
|
174
208
|
│ ├── read Read formulas with FORMULA render mode.
|
|
175
209
|
│ ├── set Set one formula cell.
|
|
176
210
|
│ ├── batch-set Set formula ranges from a JSON operations file.
|
|
177
|
-
│
|
|
211
|
+
│ ├── recalculate Recalculate formulas for a worksheet/workbook.
|
|
212
|
+
│ ├── calculate Calculate one formula cell.
|
|
213
|
+
│ └── lineage Trace formula lineage for one cell.
|
|
214
|
+
│
|
|
215
|
+
├── style
|
|
216
|
+
│ ├── freeze-panes Freeze rows/columns using an A1 cell boundary.
|
|
217
|
+
│ ├── auto-filter set Set worksheet auto-filter range.
|
|
218
|
+
│ ├── auto-filter remove Remove worksheet auto-filter.
|
|
219
|
+
│ ├── columns-width Set column widths.
|
|
220
|
+
│ └── rows-height Set row heights.
|
|
221
|
+
│
|
|
222
|
+
├── history
|
|
223
|
+
│ ├── list List workbook versions with bounded output.
|
|
224
|
+
│ └── read Read a workbook version.
|
|
225
|
+
│
|
|
226
|
+
├── file
|
|
227
|
+
│ ├── export Export workbook bytes to --out.
|
|
228
|
+
│ ├── list List files with bounded output.
|
|
229
|
+
│ └── search Search files with bounded output.
|
|
178
230
|
│
|
|
179
231
|
├── share
|
|
180
232
|
│ ├── visibility Set workbook visibility.
|
|
@@ -210,7 +262,11 @@ Relationship guide:
|
|
|
210
262
|
- Use `worksheet` for tab lifecycle operations.
|
|
211
263
|
- Use `range` for coordinate-based reads and writes.
|
|
212
264
|
- Use `table` when data is row-object shaped and keyed by headers.
|
|
265
|
+
- Use `row` and `column` for structural row/column changes.
|
|
213
266
|
- Use `formula` when preserving or changing formulas matters.
|
|
267
|
+
- Use `style` for layout operations like freeze panes, filter ranges, widths, and heights.
|
|
268
|
+
- Use `history` for read-only version inspection.
|
|
269
|
+
- Use `file` for export/list/search file operations.
|
|
214
270
|
- Use `share` for visibility and collaborator access.
|
|
215
271
|
- Use `raw post` only when a first-class command does not exist yet.
|
|
216
272
|
|
|
@@ -114,11 +114,29 @@ Make a workbook public for viewers:
|
|
|
114
114
|
mbs share visibility --doc-id abc123 --visibility public --public-permission viewer
|
|
115
115
|
```
|
|
116
116
|
|
|
117
|
+
Rename a worksheet and inspect a destructive row delete before sending it:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
mbs worksheet rename --doc-id abc123 --worksheet-name Old --new-name New
|
|
121
|
+
mbs row delete --doc-id abc123 --worksheet-name Sheet1 --row 10 --dry-run
|
|
122
|
+
mbs row delete --doc-id abc123 --worksheet-name Sheet1 --row 10 --yes
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Search, style, inspect history, and export:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
mbs range search --doc-id abc123 --worksheet-name Sheet1 --query revenue --max-results 20
|
|
129
|
+
mbs style freeze-panes --doc-id abc123 --worksheet-name Sheet1 --cell B2
|
|
130
|
+
mbs formula calculate --doc-id abc123 --worksheet-name Sheet1 --cell E2 --formula "=SUM(B2:D2)"
|
|
131
|
+
mbs history list --doc-id abc123 --limit 10
|
|
132
|
+
mbs file export --doc-id abc123 --out workbook.xlsx
|
|
133
|
+
```
|
|
134
|
+
|
|
117
135
|
## Commands
|
|
118
136
|
|
|
119
137
|
The preferred command groups are `workbook`, `worksheet`, `range`, `table`,
|
|
120
|
-
`
|
|
121
|
-
as compatibility aliases.
|
|
138
|
+
`row`, `column`, `formula`, `style`, `history`, `file`, `share`, and `raw`.
|
|
139
|
+
The older `sheet ...` commands remain available as compatibility aliases.
|
|
122
140
|
|
|
123
141
|
```text
|
|
124
142
|
mbs
|
|
@@ -134,23 +152,57 @@ mbs
|
|
|
134
152
|
│
|
|
135
153
|
├── worksheet
|
|
136
154
|
│ ├── list List worksheets in a workbook.
|
|
137
|
-
│
|
|
155
|
+
│ ├── create Create a worksheet, optionally with starter values.
|
|
156
|
+
│ ├── rename Rename a worksheet.
|
|
157
|
+
│ ├── delete Delete a worksheet; requires --yes unless --dry-run.
|
|
158
|
+
│ ├── copy Copy a worksheet.
|
|
159
|
+
│ └── move Move a worksheet to a zero-based index.
|
|
138
160
|
│
|
|
139
161
|
├── range
|
|
140
162
|
│ ├── read Read a bounded A1 range.
|
|
141
163
|
│ ├── write Write a JSON matrix into an A1 range.
|
|
142
|
-
│
|
|
164
|
+
│ ├── clear Clear an A1 range.
|
|
165
|
+
│ └── search Search a worksheet with bounded results.
|
|
143
166
|
│
|
|
144
167
|
├── table
|
|
145
168
|
│ ├── headers Read header row metadata.
|
|
146
169
|
│ ├── append-rows Append JSON row objects.
|
|
147
170
|
│ └── upsert-rows Upsert JSON row objects by key.
|
|
148
171
|
│
|
|
172
|
+
├── row
|
|
173
|
+
│ ├── insert Insert rows.
|
|
174
|
+
│ ├── delete Delete rows; requires --yes unless --dry-run.
|
|
175
|
+
│ └── move Move rows.
|
|
176
|
+
│
|
|
177
|
+
├── column
|
|
178
|
+
│ ├── insert Insert columns.
|
|
179
|
+
│ ├── delete Delete columns; requires --yes unless --dry-run.
|
|
180
|
+
│ ├── move Move columns.
|
|
181
|
+
│ └── width Set column width.
|
|
182
|
+
│
|
|
149
183
|
├── formula
|
|
150
184
|
│ ├── read Read formulas with FORMULA render mode.
|
|
151
185
|
│ ├── set Set one formula cell.
|
|
152
186
|
│ ├── batch-set Set formula ranges from a JSON operations file.
|
|
153
|
-
│
|
|
187
|
+
│ ├── recalculate Recalculate formulas for a worksheet/workbook.
|
|
188
|
+
│ ├── calculate Calculate one formula cell.
|
|
189
|
+
│ └── lineage Trace formula lineage for one cell.
|
|
190
|
+
│
|
|
191
|
+
├── style
|
|
192
|
+
│ ├── freeze-panes Freeze rows/columns using an A1 cell boundary.
|
|
193
|
+
│ ├── auto-filter set Set worksheet auto-filter range.
|
|
194
|
+
│ ├── auto-filter remove Remove worksheet auto-filter.
|
|
195
|
+
│ ├── columns-width Set column widths.
|
|
196
|
+
│ └── rows-height Set row heights.
|
|
197
|
+
│
|
|
198
|
+
├── history
|
|
199
|
+
│ ├── list List workbook versions with bounded output.
|
|
200
|
+
│ └── read Read a workbook version.
|
|
201
|
+
│
|
|
202
|
+
├── file
|
|
203
|
+
│ ├── export Export workbook bytes to --out.
|
|
204
|
+
│ ├── list List files with bounded output.
|
|
205
|
+
│ └── search Search files with bounded output.
|
|
154
206
|
│
|
|
155
207
|
├── share
|
|
156
208
|
│ ├── visibility Set workbook visibility.
|
|
@@ -186,7 +238,11 @@ Relationship guide:
|
|
|
186
238
|
- Use `worksheet` for tab lifecycle operations.
|
|
187
239
|
- Use `range` for coordinate-based reads and writes.
|
|
188
240
|
- Use `table` when data is row-object shaped and keyed by headers.
|
|
241
|
+
- Use `row` and `column` for structural row/column changes.
|
|
189
242
|
- Use `formula` when preserving or changing formulas matters.
|
|
243
|
+
- Use `style` for layout operations like freeze panes, filter ranges, widths, and heights.
|
|
244
|
+
- Use `history` for read-only version inspection.
|
|
245
|
+
- Use `file` for export/list/search file operations.
|
|
190
246
|
- Use `share` for visibility and collaborator access.
|
|
191
247
|
- Use `raw post` only when a first-class command does not exist yet.
|
|
192
248
|
|
|
@@ -10,6 +10,10 @@ give agents a predictable object model:
|
|
|
10
10
|
workbook -> worksheet -> range/table/formula/style/chart/image/history
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
For source-oriented inspection, use a separate `source` surface. A source can be
|
|
14
|
+
an Excel worksheet range, a multidimensional worksheet view, or a native table;
|
|
15
|
+
that is broader than `table headers`.
|
|
16
|
+
|
|
13
17
|
The CLI should call the routed MaybeAI Sheet API through `fastestai-playground`
|
|
14
18
|
by default, not engine servers directly. `excelize-mcp` and `SheetTable` remain
|
|
15
19
|
execution engines behind the routing layer.
|
|
@@ -78,6 +82,12 @@ Why these first:
|
|
|
78
82
|
- They support a manifest-first workflow, which reduces wrong-sheet and wrong-gid
|
|
79
83
|
mistakes.
|
|
80
84
|
|
|
85
|
+
Recommended next API after the manifest/read/write path is stable:
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
mbs source schema -> POST /api/v1/excel/source_schema
|
|
89
|
+
```
|
|
90
|
+
|
|
81
91
|
## Typical Command Examples
|
|
82
92
|
|
|
83
93
|
These are representative examples only. The CLI does not need a bespoke example
|
|
@@ -91,6 +101,19 @@ mbs workbook manifest --doc-id "$DOC_ID"
|
|
|
91
101
|
mbs worksheet list --doc-id "$DOC_ID"
|
|
92
102
|
```
|
|
93
103
|
|
|
104
|
+
Inspect a source schema before reading or transforming it:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
mbs source schema \
|
|
108
|
+
--doc-id "$DOC_ID" \
|
|
109
|
+
--mode excel_worksheet \
|
|
110
|
+
--worksheet-name "Actuals" \
|
|
111
|
+
--range "A1:Z5000" \
|
|
112
|
+
--header-row 1 \
|
|
113
|
+
--sample-rows 50 \
|
|
114
|
+
--infer-types
|
|
115
|
+
```
|
|
116
|
+
|
|
94
117
|
Create workbook or worksheet:
|
|
95
118
|
|
|
96
119
|
```bash
|
|
@@ -177,6 +200,12 @@ mbs formula recalculate \
|
|
|
177
200
|
--doc-id "$DOC_ID" \
|
|
178
201
|
--worksheet-name "Model"
|
|
179
202
|
|
|
203
|
+
mbs formula calculate \
|
|
204
|
+
--doc-id "$DOC_ID" \
|
|
205
|
+
--worksheet-name "Model" \
|
|
206
|
+
--cell "E2" \
|
|
207
|
+
--formula "=SUM(B2:D2)"
|
|
208
|
+
|
|
180
209
|
mbs formula lineage \
|
|
181
210
|
--doc-id "$DOC_ID" \
|
|
182
211
|
--worksheet-name "Model" \
|
|
@@ -222,15 +251,15 @@ mbs worksheet copy \
|
|
|
222
251
|
mbs row insert \
|
|
223
252
|
--doc-id "$DOC_ID" \
|
|
224
253
|
--worksheet-name "Sheet1" \
|
|
225
|
-
--
|
|
254
|
+
--row 5 \
|
|
226
255
|
--count 3 \
|
|
227
256
|
--dry-run
|
|
228
257
|
|
|
229
258
|
mbs column width \
|
|
230
259
|
--doc-id "$DOC_ID" \
|
|
231
260
|
--worksheet-name "Sheet1" \
|
|
232
|
-
--start "A" \
|
|
233
|
-
--end "D" \
|
|
261
|
+
--start-column "A" \
|
|
262
|
+
--end-column "D" \
|
|
234
263
|
--width 18
|
|
235
264
|
|
|
236
265
|
# Search and worksheet bounds
|
|
@@ -387,6 +416,7 @@ power-pivot
|
|
|
387
416
|
```text
|
|
388
417
|
mbs
|
|
389
418
|
├── workbook
|
|
419
|
+
├── source
|
|
390
420
|
├── worksheet
|
|
391
421
|
├── range
|
|
392
422
|
├── table
|
|
@@ -436,11 +466,126 @@ workbook import
|
|
|
436
466
|
Notes:
|
|
437
467
|
|
|
438
468
|
- `manifest` should be the default first step for agents.
|
|
469
|
+
- Current CLI route: `POST /api/v1/excel/workbook_profile`.
|
|
470
|
+
- Request shape should include the resolved workbook identity:
|
|
471
|
+
|
|
472
|
+
```json
|
|
473
|
+
{
|
|
474
|
+
"document_id": "wb_rev",
|
|
475
|
+
"uri": "https://www.maybe.ai/docs/spreadsheets/d/wb_rev"
|
|
476
|
+
}
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
- `manifest` is for workbook-level structure: worksheets, gids, dimensions,
|
|
480
|
+
engine/profile metadata, and routeability hints.
|
|
439
481
|
- `capabilities` should eventually return routeable capabilities by engine:
|
|
440
482
|
read/write/style/sql/formula/export.
|
|
441
483
|
- Current local CLI maps both `manifest` and `capabilities` to
|
|
442
484
|
`/api/v1/excel/workbook_profile`; this should be normalized later.
|
|
443
485
|
|
|
486
|
+
## Source Commands
|
|
487
|
+
|
|
488
|
+
Source commands inspect a data source before an agent reads, maps, joins, or
|
|
489
|
+
transforms it. The source may be an Excel worksheet range, a multidimensional
|
|
490
|
+
worksheet, or a native table.
|
|
491
|
+
|
|
492
|
+
```text
|
|
493
|
+
mbs source schema PLAN
|
|
494
|
+
mbs source sample PLAN
|
|
495
|
+
mbs source profile PLAN
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
Suggested MVP:
|
|
499
|
+
|
|
500
|
+
```text
|
|
501
|
+
source schema
|
|
502
|
+
```
|
|
503
|
+
|
|
504
|
+
Recommended routed API:
|
|
505
|
+
|
|
506
|
+
```text
|
|
507
|
+
POST /api/v1/excel/source_schema
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
Recommended CLI:
|
|
511
|
+
|
|
512
|
+
```bash
|
|
513
|
+
mbs source schema \
|
|
514
|
+
--doc-id "$DOC_ID" \
|
|
515
|
+
--mode excel_worksheet \
|
|
516
|
+
--worksheet-name "Actuals" \
|
|
517
|
+
--range "A1:Z5000" \
|
|
518
|
+
--header-row 1 \
|
|
519
|
+
--sample-rows 50 \
|
|
520
|
+
--infer-types
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
Equivalent tool contract:
|
|
524
|
+
|
|
525
|
+
```json
|
|
526
|
+
{
|
|
527
|
+
"workbook_id": "wb_rev",
|
|
528
|
+
"source": {
|
|
529
|
+
"mode": "excel_worksheet",
|
|
530
|
+
"worksheet": {
|
|
531
|
+
"name": "Actuals",
|
|
532
|
+
"range": "A1:Z5000",
|
|
533
|
+
"header_row": 1
|
|
534
|
+
}
|
|
535
|
+
},
|
|
536
|
+
"infer_types": true,
|
|
537
|
+
"sample_rows": 50
|
|
538
|
+
}
|
|
539
|
+
```
|
|
540
|
+
|
|
541
|
+
Expected output:
|
|
542
|
+
|
|
543
|
+
```json
|
|
544
|
+
{
|
|
545
|
+
"source_id": "src_actuals",
|
|
546
|
+
"grain_hint": "one row per transaction",
|
|
547
|
+
"columns": [
|
|
548
|
+
{
|
|
549
|
+
"name": "date",
|
|
550
|
+
"type": "date",
|
|
551
|
+
"nullable": false,
|
|
552
|
+
"examples": ["2026-05-01"]
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"name": "amount",
|
|
556
|
+
"type": "currency",
|
|
557
|
+
"nullable": false,
|
|
558
|
+
"summary": {
|
|
559
|
+
"min": 0,
|
|
560
|
+
"max": 102320.5
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
],
|
|
564
|
+
"warnings": [
|
|
565
|
+
{
|
|
566
|
+
"code": "merged_header_detected",
|
|
567
|
+
"message": "Rows 1-2 look like multi-row headers"
|
|
568
|
+
}
|
|
569
|
+
]
|
|
570
|
+
}
|
|
571
|
+
```
|
|
572
|
+
|
|
573
|
+
API fit:
|
|
574
|
+
|
|
575
|
+
- `workbook manifest` / `POST /api/v1/excel/workbook_profile` is the right API
|
|
576
|
+
for workbook manifest discovery.
|
|
577
|
+
- `table headers`, `range read`, and `workbook manifest` can approximate source
|
|
578
|
+
schema for simple Excel worksheets, but they do not represent native tables or
|
|
579
|
+
multidimensional worksheet semantics as one contract.
|
|
580
|
+
- Add `POST /api/v1/excel/source_schema` in play-be when the backend can infer
|
|
581
|
+
types, examples, nullability, warnings, and grain hints consistently.
|
|
582
|
+
- The CLI should expose this as `mbs source schema`, not `mbs workbook manifest`
|
|
583
|
+
and not `mbs table headers`, because the source abstraction crosses workbook,
|
|
584
|
+
worksheet, and native table boundaries.
|
|
585
|
+
- Until the routed endpoint exists, keep this command in `PLAN` status or build
|
|
586
|
+
an Excel-worksheet-only fallback that calls `workbook_profile`, `read_headers`,
|
|
587
|
+
and a bounded `read_sheet` sample.
|
|
588
|
+
|
|
444
589
|
## Worksheet Commands
|
|
445
590
|
|
|
446
591
|
Worksheet commands manage sheet tabs and worksheet-level metadata.
|
|
@@ -625,7 +770,7 @@ mbs formula read NOW
|
|
|
625
770
|
mbs formula set NOW
|
|
626
771
|
mbs formula batch-set NOW
|
|
627
772
|
mbs formula recalculate NOW
|
|
628
|
-
mbs formula compile
|
|
773
|
+
mbs formula compile PLAN
|
|
629
774
|
mbs formula calculate API
|
|
630
775
|
mbs formula fill API
|
|
631
776
|
mbs formula lineage API
|
|
@@ -646,7 +791,6 @@ formula recalculate
|
|
|
646
791
|
Suggested phase 2:
|
|
647
792
|
|
|
648
793
|
```text
|
|
649
|
-
formula compile
|
|
650
794
|
formula calculate
|
|
651
795
|
formula lineage
|
|
652
796
|
```
|
|
@@ -664,6 +808,9 @@ Agent-friendly requirements:
|
|
|
664
808
|
value after write.
|
|
665
809
|
- `formula batch-set` should support a JSON operations file.
|
|
666
810
|
- `formula recalculate` should allow workbook or worksheet scope.
|
|
811
|
+
- `formula calculate` maps to `POST /api/v1/excel/calc-formula`; live play-be
|
|
812
|
+
verification requires both `cellAddress` and `formula`, exposed as CLI
|
|
813
|
+
`--cell` and `--formula`.
|
|
667
814
|
- `formula lineage` should be SheetTable-aware and return dependencies in a
|
|
668
815
|
stable JSON shape.
|
|
669
816
|
- `formula lineage` maps to confirmed routed Playground API
|
|
@@ -1128,6 +1275,7 @@ Implement only after confirming the command has a routed public API in
|
|
|
1128
1275
|
`fastestai-playground`:
|
|
1129
1276
|
|
|
1130
1277
|
```text
|
|
1278
|
+
source schema, if POST /api/v1/excel/source_schema is added
|
|
1131
1279
|
worksheet rename/delete/copy/move
|
|
1132
1280
|
row insert/delete/move
|
|
1133
1281
|
column insert/delete/move/width
|