Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
405 commits
Select commit Hold shift + click to select a range
1a2fc76
fix(xlsx/pivot): trim whitespace when matching field names
goworm Apr 8, 2026
05dfecb
fix(xlsx/pivot): reject duplicate pivot names within workbook
goworm Apr 8, 2026
13a165c
fix(xlsx/pivot): set PivotField.DataField when field appears in both …
goworm Apr 8, 2026
06c7f16
fix(xlsx/pivot): reject source column beyond XFD (Excel max 16384)
goworm Apr 8, 2026
4a08c74
docs(xlsx/pivot): update help text to 'rows'/'cols' canonical keys
goworm Apr 8, 2026
f6125e0
fix(xlsx/query): dedupe row children when sheet has pivot rendered cells
goworm Apr 8, 2026
8f8b03a
fix(xlsx/pivot): Add applies showDataAs immediately (parity with Set)
goworm Apr 8, 2026
48a2b7d
fix(xlsx/pivot): reject out-of-bounds numeric field index in values
goworm Apr 8, 2026
ace3d5c
fix(xlsx/pivot): reject whitespace-only pivot name
goworm Apr 8, 2026
629c8e7
fix(xlsx/pivot): reject control characters in pivot name
goworm Apr 8, 2026
c07b0c7
fix(xlsx/pivot): trim whitespace in source ref components
goworm Apr 8, 2026
c86a060
fix(xlsx/pivot): clear error for external workbook source refs
goworm Apr 8, 2026
0d5d4f9
docs(xlsx/pivot): add pivottable to 'xlsx set --help' element table
goworm Apr 8, 2026
6a081e0
fix(xlsx/pivot): Set values accepts Get dataField format (round-trip)
goworm Apr 8, 2026
8b5150f
fix(xlsx/pivot): Set source refreshes cache headers before field vali…
goworm Apr 8, 2026
bd2c852
fix(xlsx/pivot): remove sheet also cleans orphan pivot cache parts
goworm Apr 8, 2026
eec3fc8
fix(xlsx/pivot): multi-value rows-only pivot doesn't duplicate -2 sen…
goworm Apr 8, 2026
d5d385a
fix(xlsx/pivot): reject pivot name longer than 255 characters
goworm Apr 8, 2026
7bf3993
fix(xlsx/pivot): Get readback exposes rowGrandTotals/colGrandTotals keys
goworm Apr 8, 2026
addbc99
fix(xlsx/pivot): parse values spec right-to-left to support colon in …
goworm Apr 8, 2026
09efb6a
fix(xlsx/pivot): accept row/col/filter/value singular aliases and leg…
goworm Apr 9, 2026
c75f5f9
fix(xlsx/pivot): warn on unknown properties including non-ASCII keys
goworm Apr 9, 2026
4809772
fix(xlsx/pivot): strip dollar signs from position ref (parity with so…
goworm Apr 9, 2026
3ddd7e0
fix(xlsx/pivot): Set source narrowing validates existing field indice…
goworm Apr 9, 2026
932f14d
fix(xlsx/pivot): Set filters dedupes from values axis too
goworm Apr 9, 2026
6d3c19c
fix(xlsx/pivot): Get readback exposes source key
goworm Apr 9, 2026
e7cfb48
fix(xlsx/pivot): Set accepts dataField{N}.showAs key (Get readback sy…
goworm Apr 9, 2026
e8307da
fix(xlsx/pivot): Set aggregate updates DataField display name
goworm Apr 9, 2026
2297ed7
fix(xlsx/query): Get sheet children includes pivottable entries
goworm Apr 9, 2026
b705036
fix(xlsx/pivot): Set name validates empty/whitespace/control chars li…
goworm Apr 9, 2026
c9f52bb
fix(xlsx/pivot): item builders omit grand entries when grandTotals off
goworm Apr 9, 2026
1a3ee1c
fix(xlsx/pivot): RenderMultiRowPivot gates grand cells on grandTotals…
goworm Apr 9, 2026
ccea87e
fix(xlsx/pivot): RenderMultiColPivot gates grand cells on grandTotals…
goworm Apr 9, 2026
6c6c443
fix(xlsx/pivot): RenderMatrixPivot gates grand cells on grandTotals t…
goworm Apr 9, 2026
fe60314
fix(xlsx/pivot): RenderGeneralPivot gates grand cells on grandTotals …
goworm Apr 9, 2026
2809caf
feat(xlsx/pivot): subtotals=on/off ThreadStatic scope + PivotField at…
goworm Apr 9, 2026
2409539
feat(xlsx/pivot): ComputePivotGeometry shrinks when subtotals=off
goworm Apr 9, 2026
04f0472
feat(xlsx/pivot): item builders skip subtotal entries when subtotals=off
goworm Apr 9, 2026
8dc8a7d
feat(xlsx/pivot): RenderMultiRowPivot skips subtotal rows when subtot…
goworm Apr 9, 2026
1dfdf3c
feat(xlsx/pivot): RenderMultiColPivot skips subtotal columns when sub…
goworm Apr 9, 2026
08926f3
fix(xlsx/pivot): error cells in source stored as ErrorItem in sharedI…
goworm Apr 9, 2026
41c4689
feat(xlsx/pivot): RenderMatrixPivot skips subtotal row+col when subto…
goworm Apr 9, 2026
57e85f2
feat(xlsx/pivot): RenderGeneralPivot filters subtotal positions when …
goworm Apr 9, 2026
fb53d18
fix(xlsx/pivot): drop refreshOnLoad so pre-rendered cells survive open
goworm Apr 9, 2026
58d628e
fix(xlsx/pivot): skip <item t="default"/> when subtotals=off to match…
goworm Apr 9, 2026
9b71c77
perf(resident): shorten no-resident connect timeout from 3.15s to ~100ms
goworm Apr 9, 2026
4933392
fix(xlsx/pivot): Get readback exposes subtotals key for round-trip
goworm Apr 9, 2026
6f46fd2
fix(xlsx/pivot): correct rowGrandTotals/colGrandTotals OOXML mapping
goworm Apr 9, 2026
d52c23b
fix(xlsx/pivot): ParseFieldList dedupes repeated field within same axis
goworm Apr 9, 2026
6da2eaa
docs(xlsx/pivot): add sort/showDataAs/grandTotals/subtotals to help text
goworm Apr 9, 2026
f8c5d94
fix(xlsx/pivot): dedupe <row> elements when multiple pivots share a s…
goworm Apr 9, 2026
da1590e
fix(xlsx/pivot): reject position that would exceed sheet bounds befor…
goworm Apr 9, 2026
8a772f5
fix(xlsx/pivot): surface showDataAs, sort, collapsed, dual-role axis …
goworm Apr 9, 2026
8a7a34d
fix(xlsx/pivot): canonical layout for (N row × 0 col × K data) pivots
goworm Apr 9, 2026
2660b19
fix(xlsx/pivot): apply cell-level indent to compact-mode row labels
goworm Apr 9, 2026
bb120e0
fix(xlsx/pivot): emit two-row header for multi-data no-col pivots
goworm Apr 9, 2026
f5c4e34
fix(xlsx/pivot): preserve user-set page filter label on round-trip
goworm Apr 9, 2026
bad2a8b
fix(xlsx/pivot): emit rowPageCount/colPageCount on location for page …
goworm Apr 9, 2026
ebe985f
chore: bump version to 1.0.39
goworm Apr 9, 2026
3a28784
docs: add missing v1.0.33-39 features to SKILL.md and README
goworm Apr 9, 2026
37219e2
refactor(xlsx/pivot): split PivotTableHelper into partial class files
goworm Apr 9, 2026
0a527bd
fix(xlsx/pivot): support 2×0×K pivot rendering (2 row fields, no col)
goworm Apr 9, 2026
bff7b2e
fix(xlsx/pivot): support 0×0, 0×1, 0×2 pivot rendering
goworm Apr 9, 2026
3aaea7f
refactor(xlsx/pivot): narrow 5 internal-only methods to private
goworm Apr 9, 2026
251fe29
docs(i18n): sync translated READMEs with English version
goworm Apr 9, 2026
f4262ed
fix(xlsx/html): add default gridlines and auto-fit columns without ex…
goworm Apr 9, 2026
2b06ca3
refactor(watch): extract SseScript JS into two embedded resource files
goworm Apr 9, 2026
3c6ae56
refactor: fix layering inversions, clean up namespace structure and a…
goworm Apr 9, 2026
579f214
fix(xlsx/pivot): fix Excel recovery errors on pivot table creation
goworm Apr 9, 2026
c6b0a74
feat(xlsx/pivot): support compact, outline, and tabular layout forms
goworm Apr 9, 2026
9bb9462
fix(xlsx/html): use FileShare.ReadWrite to avoid file lock conflict i…
goworm Apr 9, 2026
f09eabe
refactor: narrow Watch types to internal
goworm Apr 9, 2026
e414cd7
refactor(xlsx): extract static GetWorksheets overload
goworm Apr 9, 2026
ac746c7
fix(mcp): read server version from assembly instead of hardcoded string
goworm Apr 9, 2026
8326d2b
docs(mcp): update tool definitions and help text
goworm Apr 9, 2026
4c46c48
fix(install): skip binary copy when managed by Homebrew
goworm Apr 9, 2026
fe662f8
perf(watch): add row-level incremental diff for Excel watch
goworm Apr 9, 2026
b189a45
chore: bump version to 1.0.40
goworm Apr 9, 2026
41b338f
docs: add pivot layout (compact/outline/tabular) to SKILL.md and README
goworm Apr 9, 2026
f7b79ae
fix(watch): insert new Excel rows at sorted position instead of appen…
goworm Apr 9, 2026
9b0e541
fix(xlsx): auto-offset pivot position when page filters present
goworm Apr 9, 2026
57a856e
feat(xlsx): add repeatLabels property for pivot tables
goworm Apr 9, 2026
4f93dca
fix(xlsx): correct tabular pivot layout to match Excel behavior
goworm Apr 10, 2026
e15b684
feat(xlsx): add blankRows property for pivot tables
goworm Apr 10, 2026
6fa6460
docs: add blankRows to SKILL.md and README
goworm Apr 10, 2026
c2f606b
fix(xlsx): correct geometry for multi-value pivots with no col fields
goworm Apr 10, 2026
c3c2364
fix(xlsx): render values for multi-data-field pivots with no col fields
goworm Apr 10, 2026
1a72ca8
fix(xlsx): change pivot grand total caption from Chinese to English
goworm Apr 10, 2026
f5f638a
feat: add OLE object detection, image wrap/position reading, and ole …
Apr 8, 2026
7d9738e
feat: extract OLE preview images (EMF/WMF→PNG) for AI inspection
Apr 8, 2026
c1b7150
fix(word): auto aspect ratio, picture --index, and body-level find:
Apr 9, 2026
4667f57
fix: resolve image insertion positioning and line spacing bugs
Apr 9, 2026
29a8232
fix(xlsx): set rowPageCount to actual filter count instead of hardcod…
goworm Apr 10, 2026
62aae49
feat(xlsx): add grandTotalCaption property for pivot tables
goworm Apr 10, 2026
e2eaf20
fix(batch): send entire batch as single command to resident process
goworm Apr 10, 2026
194e328
docs(examples): add pivot table showcase to examples/excel
goworm Apr 10, 2026
4f5aacc
Revert "docs(examples): add pivot table showcase to examples/excel"
goworm Apr 10, 2026
cf707a7
docs(examples): add pivot table showcase (py + md + xlsx)
goworm Apr 10, 2026
aa633ee
refactor(examples): restructure to name-matched triples (script + md …
goworm Apr 10, 2026
3518e31
fix: Word watch pagination truncation when first element exceeds page…
Apr 10, 2026
48a3773
docs(examples): add basic charts showcase (py + md + xlsx)
goworm Apr 10, 2026
fc326c4
feat(word-preview): add OLE object preview and heading auto-numbering
Apr 10, 2026
58e0e35
chore: bump version to 1.0.41
goworm Apr 10, 2026
4ffe3e1
docs(skills): standardize officecli install guidance
IceyLiu Apr 10, 2026
3ed36c9
feat(preview): convert EMF/WMF to PNG for browser rendering
Apr 10, 2026
886384f
docs(skills): shorten install guidance wording
IceyLiu Apr 10, 2026
5682869
fix(preview): deduplicate heading numbers when text already contains …
Apr 10, 2026
f5c7e01
Merge pull request #51 from iOfficeAI/codex/simplify-officecli-instal…
IceyLiu Apr 10, 2026
3777b08
Merge pull request #50 from konbakuyomu/feat/word-ole-image-improvements
goworm Apr 10, 2026
b88cc3a
refactor(word): align PR #50 implementation to project conventions
goworm Apr 10, 2026
964ab09
docs: add CONTRIBUTING guide for AI and human contributors
goworm Apr 10, 2026
25fa0f2
fix(excel): align SUMIF/AVERAGEIF value range with criteria range
goworm Apr 10, 2026
abd99a8
feat(excel): support entire-column/row references and defined names
goworm Apr 10, 2026
dcbce53
fix(excel): chart series re-evaluates formulas instead of trusting ca…
goworm Apr 10, 2026
3e69f3a
fix(resident): close must release file before acking, no silent fallback
goworm Apr 10, 2026
8971072
fix(watch): escape backslashes in data-path CSS attribute selectors
goworm Apr 10, 2026
afde4f2
fix(resident): idle-exit must not release pipe before releasing file
goworm Apr 10, 2026
d90183d
fix(xlsx/pivot): outline+no-subtotals must carry ancestor labels on l…
goworm Apr 10, 2026
2d9a136
fix(xlsx/pivot): tabular+subtotals=on must use per-level ancestor diff
goworm Apr 10, 2026
8bebb6b
fix(xlsx/pivot): compact+N=2+subtotals=off must use general renderer
goworm Apr 10, 2026
537ffaf
fix(xlsx/pivot): blankrows=true must apply when subtotals=off
goworm Apr 10, 2026
3741f09
fix(xlsx/pivot): tabular subtotal rows must use 'Name Total' label
goworm Apr 10, 2026
0283cbc
fix(xlsx/pivot): K>1 col grand caption belongs on data-field-name row
goworm Apr 10, 2026
d55fb72
fix(watch): ordered shutdown, signal handling, socket cleanup
goworm Apr 10, 2026
a1aa21e
feat(watch): OFFICECLI_WATCH_IDLE_SECONDS env var for idle timeout
goworm Apr 10, 2026
d2025e7
chore: bump version to 1.0.42
goworm Apr 10, 2026
3df63c6
fix(update): redirect child stdio; enable MCP auto-upgrade
goworm Apr 10, 2026
88d5227
fix(xlsx/chart): warn on misscaled referenceLine and wrong label posi…
goworm Apr 10, 2026
f931de0
fix(xlsx/preview): render data labels on stacked bar/column in HTML SVG
goworm Apr 10, 2026
771a37d
feat(xlsx/chart): referenceLine accepts line width, unhardcode 1.5pt
goworm Apr 10, 2026
7de316a
fix(xlsx/preview): render bar/column charts with referenceLine correctly
goworm Apr 10, 2026
1db070d
feat(xlsx/slicer): add pivot-backed slicers via SlicerCachePart + Sli…
goworm Apr 10, 2026
035eccd
fix(xlsx/pivot): bump slicer-bound pivot updatedVersion to Excel 2010
goworm Apr 11, 2026
662143c
feat(resident): auto-start on create + open extends idle timeout via RPC
goworm Apr 11, 2026
e403a37
fix(xlsx/preview): clone doc in-memory for pivot cell refresh
goworm Apr 11, 2026
2047dba
fix(xlsx/slicer): strongly-type extLst and allocate unique Fallback ids
goworm Apr 11, 2026
5143350
fix(xlsx/chart): add ChartStyle/ChartColorStyle sidecars for extended…
goworm Apr 11, 2026
7c2001d
fix(xlsx/chart): histogram binning renders correctly in Excel
goworm Apr 11, 2026
37b3b75
ci: build Windows artifacts natively on windows-latest
goworm Apr 11, 2026
e6960d3
feat(chart/cx): add title/axis text styling and gridline color for ex…
goworm Apr 11, 2026
92d3fc6
feat(chart/cx): full Set vocabulary for extended chart types
goworm Apr 11, 2026
e069073
feat(ole): comprehensive OLE (Object Linking and Embedding) support a…
goworm Apr 11, 2026
a918ea9
feat(chart/cx): render extended chart types in HTML preview
goworm Apr 11, 2026
bc5f6e8
feat(chart): x/y/width/height Set for Excel and Word charts
goworm Apr 11, 2026
ce56019
feat(chart/cx): regular-cChart parity knobs for extended charts
goworm Apr 11, 2026
f17d0e2
docs(chart/cx): charts-histogram example covers parity knobs
goworm Apr 11, 2026
8542190
fix(chart/cx): remove grey fill from axisTitle in chart style sidecar
goworm Apr 11, 2026
074af80
feat(chart/cx): section-based chartStyle assembler
goworm Apr 11, 2026
649125b
fix(chart/cx): extract full styling vocabulary in ExtractCxChartInfo
goworm Apr 11, 2026
48a20f0
docs(chart/cx): grand showcase charts-histogram demo (6 sheets × 29 c…
goworm Apr 11, 2026
1b5785a
docs(chart/cx): drop stale plotareafill/chartareafill preview warning
goworm Apr 11, 2026
2d7d0a6
fix(install): atomic binary replace via staged .new + mv
goworm Apr 11, 2026
247a705
fix(xlsx/slicer): pivot-backed slicer survives Excel open
goworm Apr 11, 2026
4190041
chore: bump version to 1.0.43
goworm Apr 11, 2026
00b44fd
docs: add OLE objects to README/SKILL element listings
goworm Apr 11, 2026
3fd61b7
ci: disable MSYS path conversion for win-x64 smoke test
goworm Apr 11, 2026
3a7929c
refactor(core): group Chart/Formula/Watch files into subdirectories
goworm Apr 11, 2026
0a1b656
fix(xlsx/pivot): tolerate absent fillDownLabelsDefault on readback
goworm Apr 11, 2026
b5cd116
fix(xlsx/pivot): default grandTotalCaption to zh-CN '总计'
goworm Apr 11, 2026
a5050b9
Revert "fix(xlsx/pivot): default grandTotalCaption to zh-CN '总计'"
goworm Apr 12, 2026
8528176
docs(skill): trim verbose sections in SKILL.md
goworm Apr 12, 2026
7e409b6
fix(chart): reject secondaryaxis on 3D charts to prevent Excel crash
goworm Apr 12, 2026
39c6873
docs(examples): expand shell comment blocks in charts-histogram.py
goworm Apr 12, 2026
c5d9d51
fix(chart): reject errBars on chart types where OOXML forbids it
goworm Apr 13, 2026
c491892
fix(chart): deferred key gaps + element ordering in Add flow
goworm Apr 13, 2026
c4fcb2f
feat(chart): add missing line chart features from OOXML spec
goworm Apr 13, 2026
0ef4a48
docs(examples): add Sheet 7-Line Elements to charts-line showcase
goworm Apr 13, 2026
ebd1ae5
fix(chart): render smooth curves and dash patterns for line series SVG
goworm Apr 13, 2026
fdd5e19
fix(chart): read line width and line-element styles from OOXML instea…
goworm Apr 13, 2026
547677e
feat(chart): add Area3DChart support (area3d, area3dStacked, area3dPe…
goworm Apr 13, 2026
8131fb1
fix(chart): skip dLblPos on chart types that don't support it
goworm Apr 13, 2026
67eac7d
refactor(output): single-line grep-friendly format for get/query
goworm Apr 13, 2026
9ff4b8f
fix(excel): reject path-style selectors in query with helpful error
goworm Apr 13, 2026
5867e84
docs(examples): minor update to charts-line.xlsx
goworm Apr 13, 2026
adc4376
fix(chart): respect radarStyle in SVG rendering — only fill for 'fill…
goworm Apr 13, 2026
b3665eb
fix(examples): correct border format in waterfall script (colon not d…
goworm Apr 13, 2026
edb61c3
refactor(add): unify import params — deduplicate OLE helpers, normali…
goworm Apr 13, 2026
2e32853
feat(chart): add pseudo-3D SVG rendering for column3d, pie3d, area3d
goworm Apr 13, 2026
1854061
fix(examples): fix bubble advanced chart data and axis ranges
goworm Apr 13, 2026
ac5ef8a
fix(excel): render rows with empty cells in HTML preview
goworm Apr 13, 2026
d48115e
fix(excel): add crosshair highlight when clicking cells in watch preview
goworm Apr 13, 2026
3de47f7
fix(chart): stock chart renders as proper candlestick instead of line…
goworm Apr 13, 2026
b13de1d
fix(excel): normalize uppercase YYYY/DD in date format for HTML preview
goworm Apr 13, 2026
e402590
fix(chart): dataLabels accepts position values as implicit showVal=true
goworm Apr 13, 2026
664c8e2
fix(excel): normalize date/time format case outside quoted strings
goworm Apr 13, 2026
3c58cae
fix(examples): remove blank Sheet1 from inline-data chart demos
goworm Apr 13, 2026
cecf3f1
fix(excel): pure quoted format no longer appends raw numeric value
goworm Apr 13, 2026
7084533
fix(excel): date format with quoted literals no longer misrenders
goworm Apr 13, 2026
a0fcf75
fix(excel): handle A/P 12-hour format variant in date rendering
goworm Apr 13, 2026
51c8b86
fix(chart): scatter marker-only style and showMarker=false on scatter
goworm Apr 13, 2026
d8c6ebb
fix(excel): make AM/PM and A/P replacement quote-aware in date format
goworm Apr 13, 2026
504fc02
fix(excel): quote-aware AM/PM detection for 12h/24h hour conversion
goworm Apr 13, 2026
49d1674
feat(core): unify file source resolution for media, 3D model, and CSV
goworm Apr 13, 2026
f7b1489
Merge pull request #55 from ringringlin/ringringlin/feat/morph-ppt-3d…
goworm Apr 13, 2026
bfff022
fix(skills): use repo-relative path for built-in shiba.glb model
goworm Apr 13, 2026
0762cb2
fix(chart): waterfall SVG renders as proper floating bars with connec…
goworm Apr 13, 2026
00100e9
style(excel): use Excel-style green selection highlight in watch preview
goworm Apr 13, 2026
1ac4332
feat(chart): SVG rendering for trendlines, error bars, and equation/R…
goworm Apr 13, 2026
a01cb50
fix(excel): auto-detect formula when value starts with '='
goworm Apr 13, 2026
d64b661
feat(excel): Excel-native selection style in watch preview
goworm Apr 13, 2026
be96a68
fix(watch): render initial HTML via resident to avoid file lock
goworm Apr 13, 2026
9775585
fix(excel): flatten row/column in get-selected output for grep
goworm Apr 13, 2026
cde38d5
docs(examples): add chart type examples (area, bar, column, pie, scat…
goworm Apr 13, 2026
2dee084
chore: bump version to 1.0.44
goworm Apr 13, 2026
540ba13
docs: v1.0.44 — grep-friendly output, formula auto-detect, Excel sele…
goworm Apr 13, 2026
88a409d
fix(excel): accept path-style selectors in query (/Sheet1/cell → Shee…
goworm Apr 13, 2026
dcfd739
docs: update query help and wiki to show /Sheet1/cell path style support
goworm Apr 13, 2026
f4b7778
feat(excel): add Excel-style range selection in watch preview
goworm Apr 13, 2026
8483add
fix(excel): reject row 0 in _parseCellPath (Excel rows start at 1)
goworm Apr 13, 2026
47a575d
fix(excel): handle Ctrl+Click and Esc cancel in cell range selection
goworm Apr 13, 2026
1316a49
fix(excel): restore full pre-drag selection on Esc cancel
goworm Apr 13, 2026
52b93cb
fix(excel): suppress click after Esc cancels cell drag
goworm Apr 13, 2026
a91ed7c
feat(resident): auto-start resident on first command to avoid file-lo…
goworm Apr 13, 2026
2828e96
fix(excel): range selection visual and sheet tab behavior
goworm Apr 13, 2026
4453f08
fix(excel): prevent Cmd+Click double-processing in cell selection
goworm Apr 13, 2026
cb043b6
fix(excel): add immediate visual feedback on click and clear selection
goworm Apr 13, 2026
f376aa4
fix(excel): remove stale _suppressNextClick from inline click handler
goworm Apr 13, 2026
8a10abe
fix(excel): eliminate selection flicker on click by skipping redundan…
goworm Apr 13, 2026
c13be73
fix(excel): suppress click for Meta/Shift in inline mouseup handler
goworm Apr 13, 2026
97dc9c4
fix(excel): add timestamp guard to prevent Meta+Click double-processing
goworm Apr 13, 2026
b3cb514
fix(excel): use inset box-shadow for range borders to prevent layout …
goworm Apr 13, 2026
5831b25
feat(excel): add data-path to chart containers for watch selection
goworm Apr 13, 2026
cca8a49
fix(excel): render row/col headers for chart-only sheets
goworm Apr 13, 2026
c14b35d
feat(excel): double-click inline cell editing in watch preview
goworm Apr 13, 2026
5d178a3
feat(excel): show formula in inline editor when double-clicking formu…
goworm Apr 13, 2026
0444d5d
style(excel): auto-expand inline editor width to fit formula content
goworm Apr 13, 2026
d8d4fa0
feat(excel): drag to reposition charts in watch preview
goworm Apr 13, 2026
1051877
fix(excel): chart drag uses cell row/col index instead of pt coordinates
goworm Apr 13, 2026
7c67da8
style(excel): improve chart drag visual with placeholder and fixed po…
goworm Apr 13, 2026
cba1a06
refactor(excel): render charts as absolute-positioned overlays instea…
goworm Apr 13, 2026
c594a97
fix(excel): stronger row/col selection highlight with dedicated CSS c…
goworm Apr 13, 2026
6b99603
fix(excel): chart drag follows mouse and persists position across SSE…
goworm Apr 13, 2026
b036e38
fix(watch): chart drag no longer jumps to Sheet1 and overlay updates …
goworm Apr 13, 2026
4e7f4af
chore(examples): update charts-line.xlsx demo file
goworm Apr 13, 2026
f9c80c4
chore: bump version to 1.0.45
goworm Apr 13, 2026
6e2d962
docs: v1.0.45 — inline editing, chart drag, range select, auto-resident
goworm Apr 13, 2026
ea839e2
chore(examples): regenerate charts-line.xlsx demo file
goworm Apr 13, 2026
cb251e6
fix(excel): normalize cell font.bold/font.italic keys in Get to match…
goworm Apr 13, 2026
c0c03e1
fix(excel): prune empty cells and rows after Set to keep maxRow accurate
goworm Apr 13, 2026
b88d1b1
fix(resident): return exit code 2 for UNSUPPORTED and fix unsupported…
goworm Apr 13, 2026
e90da3f
fix(watch): define _cancelRubber alias to prevent ReferenceError on c…
goworm Apr 13, 2026
2bb6e7e
chore(skill): remove bundled shiba.glb from morph-ppt-3d, translate s…
goworm Apr 13, 2026
03be6f9
fix(install): use correct binary name and path on Windows
claude Apr 14, 2026
efeaf91
fix(windows): add .exe to fallback binary name in McpInstaller and Wa…
claude Apr 14, 2026
43295c8
ci: add install smoke test for Windows and Unix
claude Apr 14, 2026
eb0843e
fix(install): auto-add to user PATH on Windows via registry
claude Apr 14, 2026
49a6b7a
Merge: fix Windows install (.exe suffix, correct path, PATH registrat…
claude Apr 14, 2026
616e4d3
chore: bump version to 1.0.46
claude Apr 14, 2026
cb29ada
feat(morph-ppt-3d): add Phase 6 user iteration with stable ID addressing
ringringlin Apr 14, 2026
9f4b8d9
docs: re-register morph-ppt-3d in root SKILL skill registry
ringringlin Apr 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 35 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,16 @@ jobs:
os: ubuntu-latest
- rid: win-x64
name: officecli-win-x64.exe
os: ubuntu-latest
os: windows-latest
- rid: win-arm64
name: officecli-win-arm64.exe
os: ubuntu-latest
os: windows-latest
runs-on: ${{ matrix.os }}

defaults:
run:
shell: bash

steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -81,14 +85,41 @@ jobs:
if: >-
(matrix.rid == 'osx-arm64' && runner.arch == 'ARM64') ||
(matrix.rid == 'osx-x64' && runner.arch == 'X64') ||
(matrix.rid == 'linux-x64' && runner.os == 'Linux')
(matrix.rid == 'linux-x64' && runner.os == 'Linux') ||
(matrix.rid == 'win-x64' && runner.os == 'Windows')
env:
# Disable Git Bash (MSYS) POSIX-to-Windows path conversion on
# windows-latest, which otherwise mangles `/body` into
# `C:/Program Files/Git/body` before it reaches the CLI.
MSYS_NO_PATHCONV: '1'
MSYS2_ARG_CONV_EXCL: '*'
run: |
chmod +x publish/${{ matrix.name }}
publish/${{ matrix.name }} create test_smoke.docx
publish/${{ matrix.name }} add test_smoke.docx /body --type paragraph --prop text="Hello from CI"
publish/${{ matrix.name }} get test_smoke.docx /body/p[1]
publish/${{ matrix.name }} get test_smoke.docx '/body/p[1]'
publish/${{ matrix.name }} close test_smoke.docx
rm -f test_smoke.docx

- name: Smoke test - install
if: >-
(matrix.rid == 'osx-arm64' && runner.arch == 'ARM64') ||
(matrix.rid == 'osx-x64' && runner.arch == 'X64') ||
(matrix.rid == 'linux-x64' && runner.os == 'Linux') ||
(matrix.rid == 'win-x64' && runner.os == 'Windows')
env:
MSYS_NO_PATHCONV: '1'
MSYS2_ARG_CONV_EXCL: '*'
run: |
publish/${{ matrix.name }} install
if [ "$RUNNER_OS" == "Windows" ]; then
test -f "$LOCALAPPDATA/OfficeCli/officecli.exe" || { echo "FAIL: officecli.exe not found in %LOCALAPPDATA%\\OfficeCli"; exit 1; }
"$LOCALAPPDATA/OfficeCli/officecli.exe" --version
else
test -f "$HOME/.local/bin/officecli" || { echo "FAIL: officecli not found in ~/.local/bin"; exit 1; }
"$HOME/.local/bin/officecli" --version
fi

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
Expand Down
126 changes: 126 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Contributing to OfficeCLI

> 中文版 / Chinese version: [CONTRIBUTING.zh.md](./CONTRIBUTING.zh.md)

> You must follow the two rules below. Code style, dependencies, tests, and
> docs are handled by the maintainer in post-merge cleanup — do not worry
> about them.

## Rule 1: One PR = one atomic change

A PR must contain exactly one feature or one bug fix that cannot be further
decomposed. If your change can be split into multiple pieces that each have
standalone value, submit each piece as a separate PR.

### Self-check

Before opening the PR, ask your AI tool:

> "Analyze this diff. Can it be decomposed into multiple PRs where each
> could be merged or reverted independently? If yes, list them."

If the answer is "yes, N PRs", split into N PRs before submitting.

### Examples

**✅ Single-PR bugs** — one root cause, one fix
- `Picture added with only 'width' specified gets wrong default height`
- `Body-level find: anchor throws ArgumentException`
- `AddParagraph --index N is off-by-one when the body contains a table`

**✅ Single-PR features** — one coherent capability
- `query ole: list embedded OLE objects with ProgID and dimensions`
- `set wrap/hposition/vposition on floating pictures`

**❌ Must split** — multiple independent changes bundled together
- `Fix picture index bug + add OLE detection + add HTML heading numbering`
→ 3 PRs, zero shared code
- `Add OLE object detection + add EMF→PNG conversion`
→ 2 PRs, two independent layers
- `Add auto aspect ratio + fix index off-by-one + fix line spacing clipping`
→ 3 PRs, three unrelated root causes

**🤔 Judgment calls** — default to splitting
- `Add helper function + its first consumer`
→ 1 or 2 PRs; split if the helper has standalone reuse potential
- `Add read support + add write support for the same property`
→ 1 or 2 PRs; split if you want read to land before write is vetted

## Rule 2: Every PR must include a verifiable validation method

State in the PR description (or a linked issue) how a reviewer can confirm
your change actually works.

### For bug-fix PRs — pick one (in order of preference)

1. **officecli command sequence** showing broken output before and fixed
output after
2. **Shell or Python script** that reproduces the bug and runs clean after
the fix
3. **Authoritative reference** showing what the correct behavior should be
(OOXML spec, Microsoft / ECMA docs, etc.)
4. **Screenshot** — only when the bug is purely visual

### For feature PRs — include at minimum

- **A screenshot** of the feature in action (Word / Excel / PowerPoint
window, HTML preview, or terminal output)
- Optionally a command sequence showing how to trigger it

### Examples

**Bug fix — command sequence (ideal):**

```bash
# Before my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "10.2cm" ❌ WRONG (hardcoded 4-inch default)

# After my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "5.0cm" ✓ CORRECT (auto-computed from 2:1 pixel ratio)
```

**Feature — screenshot (ideal):**

> **Heading auto-numbering from style chain**
>
> Before: ![heading-before.png] (plain "Chapter One" with no number)
> After: ![heading-after.png] ("1. Chapter One" with auto-numbering span)
>
> How to trigger:
> ```bash
> officecli blank demo.docx
> officecli add demo.docx paragraph --prop "style=Heading1" --prop "text=Chapter One"
> officecli watch demo.docx
> ```

## If you don't follow these rules

The maintainer reserves two options.

### Option A — Reject and ask for resubmission (preferred)

The maintainer closes the PR with a link to this guide and asks you to
resubmit as properly decomposed PRs with validation methods.

**Your credit:** the PR is entirely yours, including the **"Merged"** badge
after resubmission.

### Option B — Cherry-pick the valuable parts (last resort)

If part of your PR is clearly valuable and worth saving, the maintainer runs
`git cherry-pick` on those commits into `main` directly and closes the
original PR.

**Your credit:**
- `git cherry-pick` preserves the original author, so `git log` and
`git blame` still show you as author of those lines.
- The maintainer's reconcile commit message carries a
`Co-authored-by: <you> <your-email>` trailer, which counts toward your
GitHub contribution graph.
- **However, the original PR shows as "Closed" instead of "Merged"**.
118 changes: 118 additions & 0 deletions CONTRIBUTING.zh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# 为 OfficeCLI 贡献代码

> English / 英文主文件: [CONTRIBUTING.md](./CONTRIBUTING.md)

> 你必须遵守下面两条规则。代码风格、依赖、测试、文档由维护者在 merge 之后通过
> follow-up commit 处理 —— 不用操心。

## Rule 1: 一个 PR 只做一件不可再拆的事

一个 PR 必须包含且仅包含一个 feature 或一个 bug 修复,而且这个单元不能再被拆分。
如果你的改动可以被拆成多个每个都有独立价值的部分,就拆成多个 PR 分别提交。

### 自检

提交前,先让你的 AI 做一次拆分分析:

> "分析下面这一坨 diff,它能不能拆成多个独立的 PR,每个都可以独立 merge 或独立
> revert?如果可以,列出来。"

如果回答是"可以,N 个 PR",就先拆再提。

### Examples

**✅ 可以作为一个 PR 的 bug** —— 单一根因,单一修复
- `图片只指定 width 时 height fallback 错了`
- `body 级 find: 锚点抛 ArgumentException`
- `AddParagraph --index N 在 body 含 table 时偏移`

**✅ 可以作为一个 PR 的 feature** —— 单一 coherent 能力
- `query ole: 列出所有嵌入的 OLE 对象及其 ProgID 和尺寸`
- `set wrap/hposition/vposition on floating pictures`

**❌ 必须拆** —— 多个独立改动被打包
- `修图片索引 bug + 加 OLE 检测 + 加 HTML heading 编号`
→ 3 个 PR,零共享代码
- `加 OLE 对象检测 + 加 EMF→PNG 转换`
→ 2 个 PR,两个独立 layer
- `加自动宽高比 + 修索引 off-by-one + 修行距裁剪`
→ 3 个 PR,三个不相关的根因

**🤔 可拆可不拆** —— 默认选拆
- `加一个 helper 函数 + 第一处调用者`
→ 1 或 2 个 PR;helper 有独立复用价值就拆
- `加 read 支持 + 加 write 支持(同一属性)`
→ 1 或 2 个 PR;希望 read 先被 vet 就拆

## Rule 2: 每个 PR 必须附带可验证的验证方法

在 PR description 或关联 issue 里写清楚:reviewer 怎么才能验证你的改动真的有效。

### Bug 修复 PR —— 至少给出一种(按优先顺序)

1. **officecli 命令序列**,展示改动前的错误输出和改动后的正确输出
2. **shell 或 python 脚本**,能复现 bug、在修复后干净退出
3. **权威文档引用**,说明正确行为应该是什么样(OOXML spec、Microsoft / ECMA
文档等)
4. **截图** —— 仅当 bug 纯粹是视觉问题时

### Feature PR —— 至少包含

- **一张截图**,展示 feature 实际效果(Word / Excel / PowerPoint 窗口、HTML
预览、或终端输出)
- 可选:一段 shell 命令序列说明如何触发这个 feature

### Examples

**Bug 修复 —— 命令序列格式(最理想):**

```bash
# Before my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "10.2cm" ❌ 错(硬编码 4 英寸 fallback)

# After my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "5.0cm" ✓ 对(根据 2:1 像素比例自动计算)
```

**Feature —— 截图格式(最理想):**

> **标题自动编号(从 style chain 解析)**
>
> Before: ![heading-before.png] (纯 "Chapter One",无编号)
> After: ![heading-after.png] ("1. Chapter One",带自动编号 span)
>
> 如何触发:
> ```bash
> officecli blank demo.docx
> officecli add demo.docx paragraph --prop "style=Heading1" --prop "text=Chapter One"
> officecli watch demo.docx
> ```

## 如果你不遵守这两条规则

维护者保留以下两种处理方式。

### Option A —— 拒绝并要求重新提交(首选)

维护者关闭 PR,留一条指向本 guide 的 comment,请你按规则拆分后重新提交。

**你的 credit:** PR 完全归你,重新提交成功后仍然拿 **"Merged"** badge。

### Option B —— Cherry-pick 有价值的部分(最后手段)

如果你的 PR 里有一部分明显有价值、值得保留,维护者会用 `git cherry-pick` 直接把
这些 commit 摘到 `main`,然后关闭原 PR。

**你的 credit:**
- `git cherry-pick` 保留原作者,所以 `git log` 和 `git blame` 里那些代码行仍然
显示你是作者。
- 维护者创建的 reconcile commit message 会附带
`Co-authored-by: <you> <your-email>` trailer,GitHub 贡献图会把它算进你的
contribution。
- **但原 PR 会显示为 "Closed" 而不是 "Merged"**。
Loading