Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
26c0976
Add plugin document-skills
Hylouis233 Aug 14, 2026
2907c51
Fix document skill review feedback
Hylouis233 Aug 15, 2026
f803513
Fix review round 2 and add depth references
Hylouis233 Aug 15, 2026
2f09008
Fix round-3 review findings on f803513
Hylouis233 Aug 15, 2026
10ca4f5
Fix document skill round-3 review feedback
Hylouis233 Aug 16, 2026
64049eb
Harden document reference edge cases
Hylouis233 Aug 16, 2026
b671a22
fix(document-skills): address current review gaps
Hylouis233 Aug 16, 2026
12d9542
fix(document-skills): address latest review round
Hylouis233 Aug 16, 2026
f2afc97
fix(document-skills): address latest validation gaps
Hylouis233 Aug 16, 2026
746e663
fix(document-skills): close latest review gaps
Hylouis233 Aug 16, 2026
b6b0fdb
fix(document-skills): close latest review round
Hylouis233 Aug 16, 2026
98af2fc
fix(document-skills): close latest review round
Hylouis233 Aug 16, 2026
328f552
fix(document-skills): address current review gaps
Hylouis233 Aug 16, 2026
98ce01e
fix(document-skills): close delayed review findings
Hylouis233 Aug 16, 2026
fbef603
fix(document-skills): close latest review gaps
Hylouis233 Aug 16, 2026
53d3aac
fix(document-skills): preserve review edge cases
Hylouis233 Aug 16, 2026
f66fc82
fix(document-skills): address latest review edge cases
Hylouis233 Aug 16, 2026
c6ad369
fix(document-skills): cover inline and placeholder edge cases
Hylouis233 Aug 16, 2026
5b89545
fix(document-skills): address latest review findings
Hylouis233 Aug 16, 2026
88a3723
fix(document-skills): satisfy maintainer verification gate
Hylouis233 Aug 16, 2026
beade83
fix(document-skills): cover remaining review edge cases
Hylouis233 Aug 16, 2026
032a97a
fix(document-skills): address post-gate review findings
Hylouis233 Aug 16, 2026
6b799c5
fix(document-skills): close post-push review gaps
Hylouis233 Aug 16, 2026
5791d58
fix(document-skills): handle latest format edge cases
Hylouis233 Aug 16, 2026
4f50cec
fix(document-skills): harden final verification paths
Hylouis233 Aug 16, 2026
943c278
fix(document-skills): close latest review gaps
Hylouis233 Aug 16, 2026
e6a148b
fix(document-skills): harden review edge cases
Hylouis233 Aug 17, 2026
88a4895
fix(document-skills): close remaining review edge cases
Hylouis233 Aug 17, 2026
de32219
fix(document-skills): address latest review findings
Hylouis233 Aug 17, 2026
93d0ace
fix(document-skills): harden content inventory routes
Hylouis233 Aug 17, 2026
0191149
fix(document-skills): verify rendered PDF content
Hylouis233 Aug 17, 2026
27b3edc
fix(document-skills): preserve escaped Type3 glyph names
Hylouis233 Aug 17, 2026
a5cd131
docs(document-skills): bound untrusted package loading
Hylouis233 Aug 17, 2026
ece7467
docs(document-skills): verify rendered package content
Hylouis233 Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,12 @@ jobs:
with:
node-version: 22
cache: npm
- uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6.0.0
with:
python-version: '3.13'
cache: pip
cache-dependency-path: plugins/Hylouis233/document-skills/tests/requirements-fixtures.txt
- run: sudo apt-get update && sudo apt-get install -y --no-install-recommends libreoffice-writer
- run: python -m pip install -r plugins/Hylouis233/document-skills/tests/requirements-fixtures.txt
- run: npm ci
- run: npm run check
192 changes: 192 additions & 0 deletions plugins/Hylouis233/document-skills/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/

TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

1. Definitions.

"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.

"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.

"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.

"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.

"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.

"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.

"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).

"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.

"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."

"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.

2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.

3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.

4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:

(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and

(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and

(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and

(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.

You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.

5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.

6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.

7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.

8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.

9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.

END OF TERMS AND CONDITIONS

APPENDIX: How to apply the Apache License to your work.

Copyright 2026 MCode Plugins contributors

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
110 changes: 110 additions & 0 deletions plugins/Hylouis233/document-skills/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Document Skills

## The problem

Users keep asking coding agents for document deliverables — a Word report, a PDF handout, a slide
deck, a data workbook — and get unreliable results: ZIP files rewritten by hand and corrupted,
spreadsheets where formulas were typed as text, slide decks that no viewer opens, PDFs that are a
stack of screenshots instead of text. Office and PDF documents are container formats with strict
internal contracts, and an agent without format knowledge breaks them silently.

This Plugin installs four workbench Skills — `docx`, `pdf`, `pptx`, `xlsx` — that route each
task to the right standard tool (python-docx, python-pptx, openpyxl, pypdf, ReportLab, PyMuPDF),
enforce the container contracts (valid ZIP, correct content types, calculated dimensions), and
verify output before it is handed back.

## Try it

```text
Use the document-skills plugin: open sales-2024.xlsx, add a sheet "Summary" with per-region
totals computed by formula, a bar chart of the top 5 products, and currency formatting.
```

Expected result: the agent loads the workbook with openpyxl, inspects sheet names, headers, and
dtypes, writes `SUMIF`/`COUNTIF` formulas (not pasted values), adds a native `BarChart` anchored
to the new sheet, applies number formats, and reports the cell ranges it changed.

```text
Use the document-skills plugin: create a PDF one-pager "Q3 launch checklist" from this outline
with a title block and a two-column checklist that fits exactly one A4 page.
```

Expected result: the agent generates the page with ReportLab flowables on an A4 canvas, measures
the checklist blocks, and confirms with pypdf that the output is exactly 1 page with extractable
text — not a screenshot.

## What the Skills do

Shared spine (all four Skills follow it):

1. Classify the request as **create**, **read**, **edit**, or **review**.
2. Check tool availability first and report missing dependencies instead of improvising.
3. Follow format-specific rules (packages below).
4. Run the post-generation verification checklist; fix and re-verify until it passes.
5. Report the output path, the page/sheet/slide inventory, and any remaining caveats.

Per format:

- **docx** — create with python-docx from a heading outline; use python-docx first for routine
structural edits (paragraphs, tables, images, styles, and text runs), and reserve direct OOXML
surgery for fields, tracked changes, or package features python-docx cannot express; extract
text with python-docx or `pandoc -t markdown`; postcheck with python-docx re-open and
`soffice --headless --convert-to` PDF smoke test when LibreOffice is present. Depth
references: CJK typography (east-asian font slots, 字号 table, char-based indents, GB/T 9704
page geometry) and scene patterns (academic paper, resume, official document, contract).
- **xlsx** — openpyxl for reading, editing, styling, and native charts; formulas as formulas,
never as pasted results; `data_only=True` only for reading cached values; date/number formats
applied explicitly; recalculation contract documented (openpyxl writes formulas, the Skills
set `fullCalcOnLoad` so even manual-calc workbooks recalculate when a viewer opens them). Depth references: conditional formatting rules, structured tables, and honest
pivot-style aggregation (openpyxl cannot create pivot tables; the reference gives the
formula-sheet, frozen-values, and user-template routes).
- **pptx** — python-pptx to build decks (7 common slide patterns: title, agenda, bullet, two
image+text, table, chart, quote/closing); edit only named, existing shapes, never blind
rewriting of the whole XML; text measured against shape width with font-size reduction rules;
presentation-level verification via `python-pptx` re-open plus a rendered PDF smoke test when
LibreOffice is available.
- **pdf** — creation prefers ReportLab (real, selectable text with flowable structure) over
HTML-to-print paths; extraction (text, coordinates, tables, images) and rasterization use
PyMuPDF, while pypdf is reserved for page-level transforms such as split, merge, rotate,
watermark, encryption, and forms; an explicit one-tool-per-job table prevents accidental API
mixing. Note: ReportLab output is not tagged PDF/UA — when the user needs an accessible
(screen-reader-ready) PDF, the pdf Skill says to report that limitation honestly instead of
claiming accessibility.

## Verification-first output

Every Skill ends with the same rule: do not hand back a file you have not re-opened. The checklists
are specific (re-open the archive, confirm the sheet count and formula presence, confirm the slide
count, confirm page count and text extraction) and the Skills require reporting what was verified
versus what was assumed.

The [`tests/`](tests/) directory ships one runnable fixture script per format covering the
snippets with the worst silent-failure modes (PDF AcroForm clone-and-fill, watermark write,
encrypted extraction, CMYK conversion, soft masks; PPTX run-preserving edits, table-cell locating,
actual content extraction, grouped shapes, script-aware per-master themes; XLSX dialect sniffing,
array formulas, streamed extension checks, structural-reference audits; DOCX bounded package review,
content controls, per-run glyph checks, guarded replacement, and a LibreOffice-rendered numbering
restart). Each script is self-contained and exits non-zero on failure. `npm run check` executes
all four through `tests/fixtures.test.mjs`; install the pinned Python environment with
`python -m pip install -r tests/requirements-fixtures.txt` and make `soffice` available first.
The repository CI installs those dependencies and LibreOffice Writer before running the same gate.

## Requirements

- Python 3.9+ with `python-docx`, `python-pptx`, `openpyxl`, `pypdf`, `reportlab`,
`pymupdf` (`pip install python-docx python-pptx openpyxl pypdf reportlab pymupdf`).
- Optional: LibreOffice (`soffice`) for PDF smoke tests of DOCX/PPTX output; `pandoc` for
markdown extraction from DOCX.
- Works on Windows, macOS, and Linux. All commands are given in cross-platform form; the Skills
say how to resolve the skill directory path on each platform.

## Data and network

- No network access. All processing is local file conversion and generation.
- No credentials required.
- The Skills only read and write document files the user points at; temporary files go to the
system temp directory and are cleaned up.

## License

Apache-2.0. See [LICENSE](LICENSE).
22 changes: 22 additions & 0 deletions plugins/Hylouis233/document-skills/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "document-skills",
"version": "0.1.0",
"description": "Workbench Skills for creating, reading, editing, and checking DOCX, PDF, PPTX, and XLSX documents with standard open-source tooling.",
"author": {
"name": "Hylouis233",
"url": "https://github.com/Hylouis233"
},
"license": "Apache-2.0",
"keywords": [
"minimax-code",
"plugin",
"documents",
"docx",
"pdf",
"pptx",
"xlsx",
"office",
"ooxml"
]
}
Loading