Skip to content

Commit 3e95dbd

Browse files
authored
Merge pull request #65 from harumiWeb/feat/design-edit-mcp
Feat/design edit mcp
2 parents b8ed4ab + a135516 commit 3e95dbd

65 files changed

Lines changed: 12294 additions & 1413 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/pull_request_template.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
## Summary
2+
3+
- [ ] Describe the scope and motivation.
4+
- [ ] Link related issue/spec (if any).
5+
6+
## Acceptance Criteria (MCP UX Hardening)
7+
8+
- [ ] AC-01: 入力互換(`name`, `col/row`, `width/height`
9+
- [ ] AC-02: HEX自由指定(6/8桁, `#`有無)
10+
- [ ] AC-03: 色概念分離(`color``fill_color`
11+
- [ ] AC-04: `draw_grid_border` shorthand(`range`
12+
- [ ] AC-05: path UX(root基準解決と診断)
13+
- [ ] AC-06: 後方互換(既存成功ケース維持)
14+
15+
## Validation
16+
17+
- [ ] `uv run task precommit-run`
18+
- [ ] Added/updated tests for changed behavior.
19+
- [ ] Updated docs (`docs/mcp.md`, `docs/README.ja.md`, release notes).

.github/workflows/pytest.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,14 @@ jobs:
3131
- name: Run tests (non-COM suite)
3232
if: runner.os != 'Windows'
3333
run: |
34-
pytest -m "not com and not render" --maxfail=1 --disable-warnings -q --cov=exstruct --cov-report=xml
34+
pytest -m "not com and not render" --maxfail=1 --disable-warnings -q --cov=exstruct --cov-report=xml --cov-fail-under=80
3535
- name: Run tests (full suite with skips)
3636
if: runner.os == 'Windows'
3737
env:
3838
SKIP_COM_TESTS: "1"
3939
RUN_RENDER_SMOKE: "0" # enable with 1 when Excel+pypdfium2 are available
4040
run: |
41-
pytest -m "not com and not render" --maxfail=1 --disable-warnings -q --cov=exstruct --cov-report=xml
41+
pytest -m "not com and not render" --maxfail=1 --disable-warnings -q --cov=exstruct --cov-report=xml --cov-fail-under=80
4242
- name: Upload coverage to Codecov
4343
if: runner.os == 'Linux' && matrix.python-version == '3.12'
4444
uses: codecov/codecov-action@125fc84a9a348dbcf27191600683ec096ec9021c # v4.x.x

.gitignore

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,8 @@ mypy_report.txt
2626
coverage.xml
2727
errors.txt
2828
htmlcov/
29-
.tmp_mcp_test/
29+
.tmp_mcp_test/
30+
sample.md
31+
review.md
32+
33+
.cocoindex_code/

CHANGELOG.md

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,26 @@ All notable changes to this project are documented in this file. This changelog
66

77
### Added
88

9-
- _No unreleased changes yet._
9+
- No notable changes yet.
10+
11+
## [0.5.0] - 2026-02-24
12+
13+
### Added
14+
15+
- Added MCP `exstruct_make` for one-call workbook creation plus `ops` apply (`out_path` required, `ops` optional), including `.xlsx`/`.xlsm`/`.xls` support and `.xls` COM constraints.
16+
- Expanded MCP `exstruct_patch` with design editing operations: `draw_grid_border`, `set_bold`, `set_font_size`, `set_font_color`, `set_fill_color`, `set_dimensions`, `auto_fit_columns`, `merge_cells`, `unmerge_cells`, `set_alignment`, `set_style`, `apply_table_style`, and inverse restore op `restore_design_snapshot`.
17+
- Added MCP operation schema discovery tools: `exstruct_list_ops` and `exstruct_describe_op`.
18+
- Added MCP runtime diagnostics tool: `exstruct_get_runtime_info`.
19+
- Added top-level `sheet` fallback for `exstruct_patch`/`exstruct_make` (non-`add_sheet` ops), with `op.sheet` precedence when both are provided.
20+
- Added artifact mirroring support via `mirror_artifact` and server `--artifact-bridge-dir`.
21+
22+
### Changed
23+
24+
- Updated patch backend controls for MCP `exstruct_patch`/`exstruct_make`: `backend` input (`auto`/`com`/`openpyxl`) and `engine` output (`com`/`openpyxl`).
25+
- Updated patch backend policy: `auto` now prefers COM when available, with controlled fallback to openpyxl for `.xlsx`/`.xlsm` when COM execution fails.
26+
- Updated `apply_table_style` behavior: when `backend="com"` is requested, execution falls back to openpyxl with a warning.
27+
- Refactored MCP patch internals into layered modules (`patch.service` / `patch.engine.*` / `patch.ops.*` / `patch.runtime`) while keeping tool interfaces stable.
28+
- Updated MCP docs/README pages to include `exstruct_make` behavior and constraints.
1029

1130
## [0.4.4] - 2026-02-16
1231

README.ja.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# ExStruct — Excel 構造化抽出エンジン
22

3-
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct)
3+
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct) ![GitHub Repo stars](https://img.shields.io/github/stars/harumiWeb/exstruct)
4+
45

56
![ExStruct Image](docs/assets/icon.webp)
67

@@ -89,13 +90,24 @@ exstruct-mcp --root C:\data --log-file C:\logs\exstruct-mcp.log --on-conflict re
8990
利用可能なツール:
9091

9192
- `exstruct_extract`
93+
- `exstruct_make`
94+
- `exstruct_patch`
9295
- `exstruct_read_json_chunk`
9396
- `exstruct_validate_input`
9497

9598
注意点:
9699

97100
- 標準入出力の応答を汚染しないよう、ログは標準エラー出力(およびオプションで`--log-file`で指定したファイル)に出力されます。
98101
- WindowsのExcel環境では、標準/詳細モードでCOMを利用して、よりリッチな抽出が可能です。Windows以外ではCOMは利用できず、抽出はopenpyxlベースのフォールバック機能を使用します。
102+
- `exstruct_patch``backend` 指定をサポートします。
103+
- `auto`(既定): COM が使える場合は COM を優先し、不可なら openpyxl
104+
- `com`: COM を強制(`dry_run` / `return_inverse_ops` / `preflight_formula_check` は指定不可)
105+
- `openpyxl`: openpyxl を強制(`.xls` は非対応)
106+
- `exstruct_patch` の応答には実際に使われたバックエンドを示す `engine``com` / `openpyxl`)が含まれます。`restore_design_snapshot` は引き続き openpyxl 専用です。
107+
- `exstruct_make` は新規ブック作成と `ops` 適用を1回で実行します(`out_path` 必須、`ops` は任意)。
108+
- 対応拡張子: `.xlsx` / `.xlsm` / `.xls`
109+
- 初期シート名は `Sheet1` に正規化されます
110+
- `.xls` は COM 必須で、`backend=openpyxl` は指定できません
99111

100112
各AIエージェントでのMCP設定ガイド:
101113

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# ExStruct — Excel Structured Extraction Engine
22

3-
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct)
3+
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct) ![GitHub Repo stars](https://img.shields.io/github/stars/harumiWeb/exstruct)
4+
45

56
![ExStruct Image](docs/assets/icon.webp)
67

@@ -92,15 +93,28 @@ exstruct-mcp --root C:\data --log-file C:\logs\exstruct-mcp.log --on-conflict re
9293
Available tools:
9394

9495
- `exstruct_extract`
96+
- `exstruct_make`
9597
- `exstruct_patch`
9698
- `exstruct_read_json_chunk`
99+
- `exstruct_read_range`
100+
- `exstruct_read_cells`
101+
- `exstruct_read_formulas`
97102
- `exstruct_validate_input`
98103

99104
Notes:
100105

101106
- In MCP, `exstruct_extract` defaults to `options.alpha_col=true` (column keys: `A`, `B`, ...). Set `options.alpha_col=false` for legacy 0-based numeric string keys.
102107
- Logs go to stderr (and optionally `--log-file`) to avoid contaminating stdio responses.
103108
- On Windows with Excel, standard/verbose can use COM for richer extraction. On non-Windows, COM is unavailable and extraction uses openpyxl-based fallbacks.
109+
- `exstruct_patch` supports `backend` selection:
110+
- `auto` (default): prefer COM when available, otherwise openpyxl
111+
- `com`: force COM (rejects `dry_run` / `return_inverse_ops` / `preflight_formula_check`)
112+
- `openpyxl`: force openpyxl (`.xls` is not supported)
113+
- `exstruct_patch` response includes `engine` (`com` or `openpyxl`) to show the actual backend used. `restore_design_snapshot` remains openpyxl-only.
114+
- `exstruct_make` creates a new workbook and applies `ops` in one call (`out_path` required, `ops` optional).
115+
- Supports `.xlsx` / `.xlsm` / `.xls`
116+
- Initial sheet is normalized to `Sheet1`
117+
- `.xls` requires COM and rejects `backend=openpyxl`
104118

105119
MCP Setup Guide for Each AI Agent:
106120

codecov.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ coverage:
22
status:
33
project:
44
default:
5-
target: auto
5+
target: 80%
66
threshold: 1%
77
patch:
88
default:
9-
target: auto
9+
target: 80%
1010
threshold: 1%
1111
ignore:
1212
- "benchmark/**"

docs/README.en.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# ExStruct — Excel Structured Extraction Engine
22

3-
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct)
3+
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct) ![GitHub Repo stars](https://img.shields.io/github/stars/harumiWeb/exstruct)
4+
45

56
![ExStruct Image](assets/icon.webp)
67

@@ -92,15 +93,23 @@ exstruct-mcp --root C:\data --log-file C:\logs\exstruct-mcp.log --on-conflict re
9293
Available tools:
9394

9495
- `exstruct_extract`
96+
- `exstruct_make`
9597
- `exstruct_patch`
9698
- `exstruct_read_json_chunk`
99+
- `exstruct_read_range`
100+
- `exstruct_read_cells`
101+
- `exstruct_read_formulas`
97102
- `exstruct_validate_input`
98103

99104
Notes:
100105

101106
- In MCP, `exstruct_extract` defaults to `options.alpha_col=true` (column keys: `A`, `B`, ...). Set `options.alpha_col=false` for legacy 0-based numeric string keys.
102107
- Logs go to stderr (and optionally `--log-file`) to avoid contaminating stdio responses.
103108
- On Windows with Excel, standard/verbose can use COM for richer extraction. On non-Windows, COM is unavailable and extraction uses openpyxl-based fallbacks.
109+
- `exstruct_make` creates a new workbook and applies `ops` in one call (`out_path` required, `ops` optional).
110+
- Supports `.xlsx` / `.xlsm` / `.xls`
111+
- Initial sheet is normalized to `Sheet1`
112+
- `.xls` requires COM and rejects `backend=openpyxl`
104113

105114
MCP Setup Guide for Each AI Agent:
106115

docs/README.ja.md

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# ExStruct — Excel 構造化抽出エンジン
22

3-
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct)
3+
[![PyPI version](https://badge.fury.io/py/exstruct.svg)](https://pypi.org/project/exstruct/) [![PyPI Downloads](https://static.pepy.tech/personalized-badge/exstruct?period=total&units=INTERNATIONAL_SYSTEM&left_color=BLACK&right_color=GREEN&left_text=downloads)](https://pepy.tech/projects/exstruct) ![Licence: BSD-3-Clause](https://img.shields.io/badge/license-BSD--3--Clause-blue?style=flat-square) [![pytest](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml/badge.svg)](https://github.com/harumiWeb/exstruct/actions/workflows/pytest.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/e081cb4f634e4175b259eb7c34f54f60)](https://app.codacy.com/gh/harumiWeb/exstruct/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade) [![codecov](https://codecov.io/gh/harumiWeb/exstruct/graph/badge.svg?token=2XI1O8TTA9)](https://codecov.io/gh/harumiWeb/exstruct) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/harumiWeb/exstruct) ![GitHub Repo stars](https://img.shields.io/github/stars/harumiWeb/exstruct)
44

5-
![ExStruct Image](/assets/icon.webp)
5+
6+
![ExStruct Image](assets/icon.webp)
67

78
ExStruct は Excel ワークブックを読み取り、構造化データ(セル・テーブル候補・図形・チャート・SmartArt・印刷範囲ビュー)をデフォルトで JSON に出力します。必要に応じて YAML/TOON も選択でき、COM/Excel 環境ではリッチ抽出、非 COM 環境ではセル+テーブル候補+印刷範囲へのフォールバックで安全に動作します。LLM/RAG 向けに検出ヒューリスティックや出力モードを調整可能です。
89

@@ -73,6 +74,7 @@ exstruct-mcp --root C:\data --log-file C:\logs\exstruct-mcp.log --on-conflict re
7374
利用可能なツール:
7475

7576
- `exstruct_extract`
77+
- `exstruct_make`
7678
- `exstruct_patch`
7779
- `exstruct_read_json_chunk`
7880
- `exstruct_read_range`
@@ -82,6 +84,10 @@ exstruct-mcp --root C:\data --log-file C:\logs\exstruct-mcp.log --on-conflict re
8284

8385
- `exstruct_read_range` / `exstruct_read_cells` / `exstruct_read_formulas` は v0.4.4 で追加され、MCPサーバー実装とテストに登録済みです。
8486
- MCPでは `exstruct_extract``options.alpha_col=true` が既定です(列キーは `A`, `B`, ...)。従来の0始まり数値キーが必要な場合は `options.alpha_col=false` を指定してください。
87+
- `exstruct_make` は新規ブック作成と `ops` 適用を1回で実行します(`out_path` 必須、`ops` は任意)。
88+
- 対応拡張子: `.xlsx` / `.xlsm` / `.xls`
89+
- 初期シート名は `Sheet1` に正規化されます
90+
- `.xls` は COM 必須で、`backend=openpyxl` は指定できません
8591

8692
注意点:
8793

@@ -651,3 +657,9 @@ BSD-3-Clause. See `LICENSE` for details.
651657

652658
- API リファレンス (GitHub Pages): https://harumiweb.github.io/exstruct/
653659
- JSON Schema は `schemas/` にモデルごとに配置しています。モデル変更後は `python scripts/gen_json_schema.py` で再生成してください。
660+
661+
## MCP追加メモ(UX Hardening)
662+
663+
- `exstruct_get_runtime_info` を追加しました。`root` / `cwd` / `platform` / `path_examples` を1回で確認できます。
664+
- `exstruct_make` の相対 `out_path` は MCP の `--root` 基準で解決されます。
665+
- 色指定は `color`(文字色)と `fill_color`(背景色)を分離し、`RRGGBB` / `AARRGGBB``#` あり・なし)を受け付けます。

docs/agents/ARCHITECTURE.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,21 @@ PDF/PNG 出力(RAG 用途)
7171

7272
CLI エントリポイント
7373

74+
### mcp/patch(Patch 実装)
75+
76+
Patch 系は `src/exstruct/mcp/patch/` に責務分離して実装する。
77+
78+
- `patch_runner.py` → 互換性維持用ファサード(既存 import 経路を維持)
79+
- `patch/internal.py` → patch 実装の内部互換レイヤ(非公開)
80+
- `patch/service.py``run_patch` / `run_make` のオーケストレーション
81+
- `patch/runtime.py` → path/backend 選択など実行時ユーティリティ集約
82+
- `patch/engine/openpyxl_engine.py` → openpyxl 実行境界
83+
- `patch/engine/xlwings_engine.py` → xlwings(COM) 実行境界
84+
- `patch/ops/openpyxl_ops.py` → openpyxl 向け op 適用入口
85+
- `patch/ops/xlwings_ops.py` → xlwings 向け op 適用入口
86+
- `patch/normalize.py` / `patch/specs.py` → op 正規化と仕様メタデータ
87+
- `shared/a1.py` / `shared/output_path.py` → A1 と出力 path の共通処理
88+
7489
---
7590

7691
## AI エージェント向けガイド

0 commit comments

Comments
 (0)