sophhub 0.2.1 → 0.2.2
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.
- package/package.json +1 -1
- package/skills/compact-context/skill.json +20 -0
- package/skills/compact-context/src/SKILL.md +133 -0
- package/skills/compact-context/src/scripts/check.sh +381 -0
- package/skills/compact-context/src/scripts/set-keep-recent.mjs +1337 -0
- package/skills/compact-context/src/scripts/setup.sh +96 -0
- package/skills/feishu-notes-assistant-universal/skill.json +20 -0
- package/skills/feishu-notes-assistant-universal/src/README.md +55 -0
- package/skills/feishu-notes-assistant-universal/src/SKILL.md +159 -0
- package/skills/feishu-notes-assistant-universal/src/bin/linux-amd64/lark-cli-openclaw +0 -0
- package/skills/feishu-notes-assistant-universal/src/bin/linux-arm64/lark-cli-openclaw +0 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/_resolve_lark_cli.py +58 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/openclaw_meeting_minutes.py +462 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/openclaw_notes_crud.py +547 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/openclaw_notes_crud_test.py +181 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/run_meeting_minutes.py +80 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/run_meeting_minutes.sh +5 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/run_note_crud.py +32 -0
- package/skills/feishu-notes-assistant-universal/src/scripts/run_note_crud.sh +5 -0
- package/skills/image-classify/skill.json +5 -5
- package/skills/image-classify/src/SKILL.md +60 -67
- package/skills/image-classify/src/scripts/face_search.py +400 -15
- package/skills/image-classify/src/scripts/send_dm_message.py +332 -0
- package/skills/md2pdf-converter/skill.json +20 -0
- package/skills/md2pdf-converter/src/SKILL.md +244 -0
- package/skills/md2pdf-converter/src/_meta.json +6 -0
- package/skills/md2pdf-converter/src/scripts/generate_emoji_mapping.py +74 -0
- package/skills/md2pdf-converter/src/scripts/md2pdf-local.sh +291 -0
- package/skills/sophnet-bot-client/skill.json +20 -0
- package/skills/sophnet-bot-client/src/SKILL.md +255 -0
- package/skills/sophnet-bot-client/src/pyproject.toml +13 -0
- package/skills/sophnet-bot-client/src/scripts/__init__.py +0 -0
- package/skills/sophnet-bot-client/src/scripts/bot_client_proxy.py +165 -0
- package/skills/sophnet-bot-client/src/scripts/bot_client_safe.sh +29 -0
- package/skills/sophnet-bot-client/src/scripts/bot_client_setup.py +502 -0
- package/skills/sophnet-bot-client/src/tests/__init__.py +0 -0
- package/skills/sophnet-bot-client/src/tests/test_bot_client_proxy.py +255 -0
- package/skills/sophnet-bot-client/src/tests/test_bot_client_setup.py +679 -0
- package/skills/sophnet-bot-client/src/uv.lock +8 -0
- package/skills/sophnet-docx/skill.json +20 -0
- package/skills/sophnet-docx/src/SKILL.md +463 -0
- package/skills/sophnet-docx/src/package-lock.json +208 -0
- package/skills/sophnet-docx/src/package.json +16 -0
- package/skills/sophnet-docx/src/pyproject.toml +11 -0
- package/skills/sophnet-docx/src/scripts/__init__.py +1 -0
- package/skills/sophnet-docx/src/scripts/accept_changes.py +135 -0
- package/skills/sophnet-docx/src/scripts/comment.py +318 -0
- package/skills/sophnet-docx/src/scripts/ensure_uv_env.sh +68 -0
- package/skills/sophnet-docx/src/scripts/office/helpers/__init__.py +0 -0
- package/skills/sophnet-docx/src/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/sophnet-docx/src/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/sophnet-docx/src/scripts/office/pack.py +159 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/sophnet-docx/src/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/sophnet-docx/src/scripts/office/soffice.py +183 -0
- package/skills/sophnet-docx/src/scripts/office/unpack.py +132 -0
- package/skills/sophnet-docx/src/scripts/office/validate.py +111 -0
- package/skills/sophnet-docx/src/scripts/office/validators/__init__.py +15 -0
- package/skills/sophnet-docx/src/scripts/office/validators/base.py +847 -0
- package/skills/sophnet-docx/src/scripts/office/validators/docx.py +446 -0
- package/skills/sophnet-docx/src/scripts/office/validators/pptx.py +275 -0
- package/skills/sophnet-docx/src/scripts/office/validators/redlining.py +247 -0
- package/skills/sophnet-docx/src/scripts/templates/comments.xml +3 -0
- package/skills/sophnet-docx/src/scripts/templates/commentsExtended.xml +3 -0
- package/skills/sophnet-docx/src/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/sophnet-docx/src/scripts/templates/commentsIds.xml +3 -0
- package/skills/sophnet-docx/src/scripts/templates/people.xml +3 -0
- package/skills/sophnet-docx/src/scripts/upload_file.sh +96 -0
- package/skills/sophnet-docx/src/uv.lock +320 -0
- package/skills/sophnet-pdf/skill.json +20 -0
- package/skills/sophnet-pdf/src/SKILL.md +413 -0
- package/skills/sophnet-pdf/src/forms.md +297 -0
- package/skills/sophnet-pdf/src/pyproject.toml +14 -0
- package/skills/sophnet-pdf/src/reference.md +612 -0
- package/skills/sophnet-pdf/src/scripts/check_bounding_boxes.py +65 -0
- package/skills/sophnet-pdf/src/scripts/check_fillable_fields.py +11 -0
- package/skills/sophnet-pdf/src/scripts/convert_pdf_to_images.py +33 -0
- package/skills/sophnet-pdf/src/scripts/create_validation_image.py +37 -0
- package/skills/sophnet-pdf/src/scripts/enhance_tutorial.py +558 -0
- package/skills/sophnet-pdf/src/scripts/ensure_uv_env.sh +68 -0
- package/skills/sophnet-pdf/src/scripts/extract_form_field_info.py +122 -0
- package/skills/sophnet-pdf/src/scripts/extract_form_structure.py +115 -0
- package/skills/sophnet-pdf/src/scripts/extract_pdf_content.py +35 -0
- package/skills/sophnet-pdf/src/scripts/fill_fillable_fields.py +98 -0
- package/skills/sophnet-pdf/src/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/skills/sophnet-pdf/src/scripts/upload_file.sh +88 -0
- package/skills/sophnet-pdf/src/uv.lock +537 -0
- package/skills/sophnet-xlsx/skill.json +20 -0
- package/skills/sophnet-xlsx/src/SKILL.md +399 -0
- package/skills/sophnet-xlsx/src/pyproject.toml +11 -0
- package/skills/sophnet-xlsx/src/scripts/ensure_uv_env.sh +68 -0
- package/skills/sophnet-xlsx/src/scripts/office/helpers/__init__.py +0 -0
- package/skills/sophnet-xlsx/src/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/sophnet-xlsx/src/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/sophnet-xlsx/src/scripts/office/pack.py +159 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/sophnet-xlsx/src/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/sophnet-xlsx/src/scripts/office/soffice.py +183 -0
- package/skills/sophnet-xlsx/src/scripts/office/unpack.py +132 -0
- package/skills/sophnet-xlsx/src/scripts/office/validate.py +111 -0
- package/skills/sophnet-xlsx/src/scripts/office/validators/__init__.py +15 -0
- package/skills/sophnet-xlsx/src/scripts/office/validators/base.py +847 -0
- package/skills/sophnet-xlsx/src/scripts/office/validators/docx.py +446 -0
- package/skills/sophnet-xlsx/src/scripts/office/validators/pptx.py +275 -0
- package/skills/sophnet-xlsx/src/scripts/office/validators/redlining.py +247 -0
- package/skills/sophnet-xlsx/src/scripts/recalc.py +184 -0
- package/skills/sophnet-xlsx/src/scripts/upload_file.sh +96 -0
- package/skills/sophnet-xlsx/src/uv.lock +319 -0
- package/skills/wechat-article-publisher/skill.json +20 -0
- package/skills/wechat-article-publisher/src/SKILL.md +60 -0
- package/skills/wechat-article-publisher/src/config.json +7 -0
- package/skills/wechat-article-publisher/src/pyproject.toml +12 -0
- package/skills/wechat-article-publisher/src/scripts/publish_wechat.py +825 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sophnet-docx",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"types": [
|
|
5
|
+
"builtin"
|
|
6
|
+
],
|
|
7
|
+
"displayName": "",
|
|
8
|
+
"description": "",
|
|
9
|
+
"changelog": [
|
|
10
|
+
{
|
|
11
|
+
"version": "1.0.0",
|
|
12
|
+
"date": "2026-04-14",
|
|
13
|
+
"changes": [
|
|
14
|
+
"初次提交"
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"createdAt": "2026-04-14",
|
|
19
|
+
"updatedAt": "2026-04-14"
|
|
20
|
+
}
|
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sophnet-docx
|
|
3
|
+
description: Create, read, edit, and manipulate Word documents (.docx files). Use when the user wants to work with Word documents, including creating reports, memos, letters, templates, or performing operations like find-and-replace, tracked changes, comments, or content extraction.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# DOCX creation, editing, and analysis
|
|
7
|
+
|
|
8
|
+
## MANDATORY: Working Directory
|
|
9
|
+
|
|
10
|
+
**EVERY command in this skill MUST be executed from THIS skill's directory.** Before running ANY command — Python, Node.js, or bash script — you MUST `cd` into this skill's directory first. Determine the absolute path of this `SKILL.md` file and use its parent directory.
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
SKILL_DIR="<absolute-path-to-this-skills-sophnet-docx-directory>"
|
|
14
|
+
cd "$SKILL_DIR"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**NEVER run commands from the repository root or any other directory.** If you do, `uv run` won't find `pyproject.toml`, and `python` won't have access to required packages.
|
|
18
|
+
|
|
19
|
+
## MANDATORY: Cleanup — Zero Residual Files
|
|
20
|
+
|
|
21
|
+
**CRITICAL: After every task, `$SKILL_DIR` must contain ONLY these permanent files:** `SKILL.md`, `pyproject.toml`, `uv.lock`, `package.json`, `package-lock.json`, `node_modules/`, `scripts/`, `.venv/`. **NOTHING else.** No `.js` scripts, no `unpacked*/` directories, no `.py` scripts, no generated `.docx` files.
|
|
22
|
+
|
|
23
|
+
Three enforced rules (non-negotiable):
|
|
24
|
+
|
|
25
|
+
1. **JS scripts MUST self-delete.** Every `.js` file you create MUST include `try { fs.unlinkSync(__filename); } catch(e) {}` as the last line inside the final `.then()` or at script end. Additionally, run with: `cd "$SKILL_DIR" && node _tmp_docx.js; rm -f _tmp_docx.js`
|
|
26
|
+
2. **Unpack to `/tmp/` only.** NEVER unpack into `$SKILL_DIR`. Use `/tmp/_tmp_docx_unpacked/` and `rm -rf` it after packing.
|
|
27
|
+
3. **Python scripts go to `/tmp/`.** Write them to `/tmp/_tmp_*.py` and delete after execution.
|
|
28
|
+
|
|
29
|
+
## Overview
|
|
30
|
+
|
|
31
|
+
A .docx file is a ZIP archive containing XML files.
|
|
32
|
+
|
|
33
|
+
## Python Runtime (uv)
|
|
34
|
+
|
|
35
|
+
**CRITICAL: All Python execution in this skill MUST use `uv run --project .` from the skill directory. NEVER use bare `python3`, `python`, or `pip install` directly — the required packages (python-docx, lxml, etc.) are ONLY available inside the uv virtual environment defined by this skill's `pyproject.toml`. Direct `python3` will fail with ModuleNotFoundError.**
|
|
36
|
+
|
|
37
|
+
First, ensure the environment is set up (run once per session):
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
cd "$SKILL_DIR"
|
|
41
|
+
bash scripts/ensure_uv_env.sh
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Then ALL Python commands must use this prefix:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
cd "$SKILL_DIR" && uv run --project . python <script-or-module>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This applies to both the provided scripts AND any inline Python code you write. For inline code, use:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
cd "$SKILL_DIR" && uv run --project . python -c "import docx; ..."
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## MANDATORY: Upload After Every Create/Edit
|
|
57
|
+
|
|
58
|
+
**CRITICAL: After creating or modifying a DOCX file, you MUST run `scripts/upload_file.sh --url-only` and include the URL in the final reply.** This is NOT optional. Do NOT return local file paths. You may include brief summary text, but the reply must contain the download URL.
|
|
59
|
+
|
|
60
|
+
## Delivery
|
|
61
|
+
|
|
62
|
+
Local DOCX creation/editing does not require any SophNet API key.
|
|
63
|
+
|
|
64
|
+
**IMPORTANT: After creating or modifying a DOCX, ALWAYS upload it and return the download URL.** This is the default behavior — do not skip the upload step.
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
cd "$SKILL_DIR" && bash scripts/upload_file.sh --file <absolute-path-to-docx> --url-only
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**Note:** The `cd "$SKILL_DIR"` prefix is MANDATORY — `scripts/upload_file.sh` is relative to the skill directory. Without it, the command fails with `No such file or directory`.
|
|
71
|
+
|
|
72
|
+
Upload command output contract:
|
|
73
|
+
|
|
74
|
+
- `FILE_PATH=<absolute-path>`
|
|
75
|
+
- `UPLOAD_STATUS=uploaded|skipped`
|
|
76
|
+
- `DOWNLOAD_URL=<https://...>` (present only when uploaded)
|
|
77
|
+
- With `--url-only` and successful upload: output is exactly one line, the raw `https://...` URL
|
|
78
|
+
|
|
79
|
+
Delivery rules:
|
|
80
|
+
|
|
81
|
+
- **ALWAYS `cd "$SKILL_DIR"` first, then call `bash scripts/upload_file.sh --url-only` after producing a DOCX file.**
|
|
82
|
+
- Final response for create/edit MUST include:
|
|
83
|
+
- success: a valid `https://...` URL
|
|
84
|
+
- missing API key fallback: `FILE_PATH=<absolute-path>`
|
|
85
|
+
- Do not include local file paths in create/edit responses.
|
|
86
|
+
- Keep URL output logic independent inside `sophnet-docx/scripts`. Do not call other skills' upload scripts.
|
|
87
|
+
|
|
88
|
+
## Quick Reference
|
|
89
|
+
|
|
90
|
+
| Task | Approach |
|
|
91
|
+
| -------------------------- | ----------------------------------------------------------------- |
|
|
92
|
+
| Prepare Python environment | `bash scripts/ensure_uv_env.sh` |
|
|
93
|
+
| Read/analyze content | `pandoc` or unpack for raw XML |
|
|
94
|
+
| Create new document | Use `docx-js` - see Creating New Documents below |
|
|
95
|
+
| Edit existing document | Unpack → edit XML → repack - see Editing Existing Documents below |
|
|
96
|
+
| Upload and print URL only | `cd $SKILL_DIR && bash scripts/upload_file.sh --file /abs/path/output.docx --url-only` |
|
|
97
|
+
|
|
98
|
+
### Converting .doc to .docx (requires LibreOffice)
|
|
99
|
+
|
|
100
|
+
Legacy `.doc` files must be converted before editing. **Requires `soffice`; if not installed, ask the user to convert manually.**
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
cd "$SKILL_DIR" && uv run --project . python scripts/office/soffice.py --headless --convert-to docx document.doc
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Reading Content
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
# Text extraction with tracked changes
|
|
110
|
+
pandoc --track-changes=all document.docx -o output.md
|
|
111
|
+
|
|
112
|
+
# Raw XML access (always unpack to /tmp/, never to $SKILL_DIR)
|
|
113
|
+
uv run --project . python scripts/office/unpack.py document.docx /tmp/_tmp_docx_unpacked/
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Converting to Images (optional — requires LibreOffice)
|
|
117
|
+
|
|
118
|
+
**If `soffice` is not available, skip this step.** Check first: `which soffice && echo "available" || echo "NOT available — skip"`
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
cd "$SKILL_DIR" && uv run --project . python scripts/office/soffice.py --headless --convert-to pdf document.docx
|
|
122
|
+
pdftoppm -jpeg -r 150 document.pdf page
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Accepting Tracked Changes
|
|
126
|
+
|
|
127
|
+
To produce a clean document with all tracked changes accepted (requires LibreOffice):
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
uv run --project . python scripts/accept_changes.py input.docx output.docx
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Creating New Documents
|
|
136
|
+
|
|
137
|
+
Generate .docx files with JavaScript, then validate.
|
|
138
|
+
|
|
139
|
+
**CRITICAL: Run all `node` commands from `$SKILL_DIR`.** The `docx` package must be installed in the skill's local `node_modules/`. If missing, run: `cd "$SKILL_DIR" && npm install docx`
|
|
140
|
+
|
|
141
|
+
**CRITICAL: The JS script file MUST be named `_tmp_docx.js` (always this exact name) and MUST be deleted immediately after execution:**
|
|
142
|
+
```bash
|
|
143
|
+
cd "$SKILL_DIR" && node _tmp_docx.js; rm -f _tmp_docx.js
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Setup
|
|
147
|
+
|
|
148
|
+
**CRITICAL: Every `.js` script you write MUST include the self-cleanup line at the end** (`fs.unlinkSync(__filename)`). This ensures the temp script is always deleted, even if the shell-level `rm` is forgotten.
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
const fs = require("fs");
|
|
152
|
+
const {
|
|
153
|
+
Document,
|
|
154
|
+
Packer,
|
|
155
|
+
Paragraph,
|
|
156
|
+
TextRun,
|
|
157
|
+
Table,
|
|
158
|
+
TableRow,
|
|
159
|
+
TableCell,
|
|
160
|
+
ImageRun,
|
|
161
|
+
Header,
|
|
162
|
+
Footer,
|
|
163
|
+
AlignmentType,
|
|
164
|
+
PageOrientation,
|
|
165
|
+
LevelFormat,
|
|
166
|
+
ExternalHyperlink,
|
|
167
|
+
TableOfContents,
|
|
168
|
+
HeadingLevel,
|
|
169
|
+
BorderStyle,
|
|
170
|
+
WidthType,
|
|
171
|
+
ShadingType,
|
|
172
|
+
VerticalAlign,
|
|
173
|
+
PageNumber,
|
|
174
|
+
PageBreak,
|
|
175
|
+
} = require("docx");
|
|
176
|
+
|
|
177
|
+
const doc = new Document({
|
|
178
|
+
sections: [
|
|
179
|
+
{
|
|
180
|
+
children: [
|
|
181
|
+
/* content */
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
],
|
|
185
|
+
});
|
|
186
|
+
Packer.toBuffer(doc).then((buffer) => {
|
|
187
|
+
fs.writeFileSync("/tmp/output.docx", buffer);
|
|
188
|
+
// MANDATORY: self-cleanup — delete this script file
|
|
189
|
+
try { fs.unlinkSync(__filename); } catch(e) {}
|
|
190
|
+
});
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Validation
|
|
194
|
+
|
|
195
|
+
After creating the file, validate it. If validation fails, unpack, fix the XML, and repack.
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
uv run --project . python scripts/office/validate.py doc.docx
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Page Size
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
// CRITICAL: docx-js defaults to A4, not US Letter
|
|
205
|
+
// Always set page size explicitly for consistent results
|
|
206
|
+
sections: [
|
|
207
|
+
{
|
|
208
|
+
properties: {
|
|
209
|
+
page: {
|
|
210
|
+
size: {
|
|
211
|
+
width: 12240, // 8.5 inches in DXA
|
|
212
|
+
height: 15840, // 11 inches in DXA
|
|
213
|
+
},
|
|
214
|
+
margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 }, // 1 inch margins
|
|
215
|
+
},
|
|
216
|
+
},
|
|
217
|
+
children: [
|
|
218
|
+
/* content */
|
|
219
|
+
],
|
|
220
|
+
},
|
|
221
|
+
];
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Common page sizes (DXA units, 1440 DXA = 1 inch):**
|
|
225
|
+
|
|
226
|
+
| Paper | Width | Height | Content Width (1" margins) |
|
|
227
|
+
| ------------ | ------ | ------ | -------------------------- |
|
|
228
|
+
| US Letter | 12,240 | 15,840 | 9,360 |
|
|
229
|
+
| A4 (default) | 11,906 | 16,838 | 9,026 |
|
|
230
|
+
|
|
231
|
+
**Landscape orientation:** docx-js swaps width/height internally, so pass portrait dimensions and let it handle the swap:
|
|
232
|
+
|
|
233
|
+
```javascript
|
|
234
|
+
size: {
|
|
235
|
+
width: 12240, // Pass SHORT edge as width
|
|
236
|
+
height: 15840, // Pass LONG edge as height
|
|
237
|
+
orientation: PageOrientation.LANDSCAPE // docx-js swaps them in the XML
|
|
238
|
+
},
|
|
239
|
+
// Content width = 15840 - left margin - right margin (uses the long edge)
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### Styles (Override Built-in Headings)
|
|
243
|
+
|
|
244
|
+
Use Arial as the default font (universally supported). Keep titles black for readability.
|
|
245
|
+
|
|
246
|
+
```javascript
|
|
247
|
+
const doc = new Document({
|
|
248
|
+
styles: {
|
|
249
|
+
default: { document: { run: { font: "Arial", size: 24 } } }, // 12pt default
|
|
250
|
+
paragraphStyles: [
|
|
251
|
+
// IMPORTANT: Use exact IDs to override built-in styles
|
|
252
|
+
{
|
|
253
|
+
id: "Heading1",
|
|
254
|
+
name: "Heading 1",
|
|
255
|
+
basedOn: "Normal",
|
|
256
|
+
next: "Normal",
|
|
257
|
+
quickFormat: true,
|
|
258
|
+
run: { size: 32, bold: true, font: "Arial" },
|
|
259
|
+
paragraph: { spacing: { before: 240, after: 240 }, outlineLevel: 0 },
|
|
260
|
+
}, // outlineLevel required for TOC
|
|
261
|
+
{
|
|
262
|
+
id: "Heading2",
|
|
263
|
+
name: "Heading 2",
|
|
264
|
+
basedOn: "Normal",
|
|
265
|
+
next: "Normal",
|
|
266
|
+
quickFormat: true,
|
|
267
|
+
run: { size: 28, bold: true, font: "Arial" },
|
|
268
|
+
paragraph: { spacing: { before: 180, after: 180 }, outlineLevel: 1 },
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
},
|
|
272
|
+
sections: [
|
|
273
|
+
{
|
|
274
|
+
children: [
|
|
275
|
+
new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("Title")] }),
|
|
276
|
+
],
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
});
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Lists (NEVER use unicode bullets)
|
|
283
|
+
|
|
284
|
+
```javascript
|
|
285
|
+
// ❌ WRONG - never manually insert bullet characters
|
|
286
|
+
new Paragraph({ children: [new TextRun("• Item")] }); // BAD
|
|
287
|
+
new Paragraph({ children: [new TextRun("\u2022 Item")] }); // BAD
|
|
288
|
+
|
|
289
|
+
// ✅ CORRECT - use numbering config with LevelFormat.BULLET
|
|
290
|
+
const doc = new Document({
|
|
291
|
+
numbering: {
|
|
292
|
+
config: [
|
|
293
|
+
{
|
|
294
|
+
reference: "bullets",
|
|
295
|
+
levels: [
|
|
296
|
+
{
|
|
297
|
+
level: 0,
|
|
298
|
+
format: LevelFormat.BULLET,
|
|
299
|
+
text: "•",
|
|
300
|
+
alignment: AlignmentType.LEFT,
|
|
301
|
+
style: { paragraph: { indent: { left: 720, hanging: 360 } } },
|
|
302
|
+
},
|
|
303
|
+
],
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
reference: "numbers",
|
|
307
|
+
levels: [
|
|
308
|
+
{
|
|
309
|
+
level: 0,
|
|
310
|
+
format: LevelFormat.DECIMAL,
|
|
311
|
+
text: "%1.",
|
|
312
|
+
alignment: AlignmentType.LEFT,
|
|
313
|
+
style: { paragraph: { indent: { left: 720, hanging: 360 } } },
|
|
314
|
+
},
|
|
315
|
+
],
|
|
316
|
+
},
|
|
317
|
+
],
|
|
318
|
+
},
|
|
319
|
+
sections: [
|
|
320
|
+
{
|
|
321
|
+
children: [
|
|
322
|
+
new Paragraph({
|
|
323
|
+
numbering: { reference: "bullets", level: 0 },
|
|
324
|
+
children: [new TextRun("Bullet item")],
|
|
325
|
+
}),
|
|
326
|
+
new Paragraph({
|
|
327
|
+
numbering: { reference: "numbers", level: 0 },
|
|
328
|
+
children: [new TextRun("Numbered item")],
|
|
329
|
+
}),
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
],
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
// ⚠️ Each reference creates INDEPENDENT numbering
|
|
336
|
+
// Same reference = continues (1,2,3 then 4,5,6)
|
|
337
|
+
// Different reference = restarts (1,2,3 then 1,2,3)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Tables
|
|
341
|
+
|
|
342
|
+
**CRITICAL: Tables need dual widths** - set both `columnWidths` on the table AND `width` on each cell. Without both, tables render incorrectly on some platforms.
|
|
343
|
+
|
|
344
|
+
```javascript
|
|
345
|
+
// CRITICAL: Always set table width for consistent rendering
|
|
346
|
+
// CRITICAL: Use ShadingType.CLEAR (not SOLID) to prevent black backgrounds
|
|
347
|
+
const border = { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" };
|
|
348
|
+
const borders = { top: border, bottom: border, left: border, right: border };
|
|
349
|
+
|
|
350
|
+
new Table({
|
|
351
|
+
width: { size: 9360, type: WidthType.DXA }, // Always use DXA (percentages break in Google Docs)
|
|
352
|
+
columnWidths: [4680, 4680], // Must sum to table width (DXA: 1440 = 1 inch)
|
|
353
|
+
rows: [
|
|
354
|
+
new TableRow({
|
|
355
|
+
children: [
|
|
356
|
+
new TableCell({
|
|
357
|
+
borders,
|
|
358
|
+
width: { size: 4680, type: WidthType.DXA }, // Also set on each cell
|
|
359
|
+
shading: { fill: "D5E8F0", type: ShadingType.CLEAR }, // CLEAR not SOLID
|
|
360
|
+
margins: { top: 80, bottom: 80, left: 120, right: 120 }, // Cell padding (internal, not added to width)
|
|
361
|
+
children: [new Paragraph({ children: [new TextRun("Cell")] })],
|
|
362
|
+
}),
|
|
363
|
+
],
|
|
364
|
+
}),
|
|
365
|
+
],
|
|
366
|
+
});
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**Table width calculation:**
|
|
370
|
+
|
|
371
|
+
Always use `WidthType.DXA` — `WidthType.PERCENTAGE` breaks in Google Docs.
|
|
372
|
+
|
|
373
|
+
```javascript
|
|
374
|
+
// Table width = sum of columnWidths = content width
|
|
375
|
+
// US Letter with 1" margins: 12240 - 2880 = 9360 DXA
|
|
376
|
+
width: { size: 9360, type: WidthType.DXA },
|
|
377
|
+
columnWidths: [7000, 2360] // Must sum to table width
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
**Width rules:**
|
|
381
|
+
|
|
382
|
+
- **Always use `WidthType.DXA`** — never `WidthType.PERCENTAGE` (incompatible with Google Docs)
|
|
383
|
+
- Table width must equal the sum of `columnWidths`
|
|
384
|
+
- Cell `width` must match corresponding `columnWidth`
|
|
385
|
+
- Cell `margins` are internal padding - they reduce content area, not add to cell width
|
|
386
|
+
- For full-width tables: use content width (page width minus left and right margins)
|
|
387
|
+
|
|
388
|
+
### Images
|
|
389
|
+
|
|
390
|
+
```javascript
|
|
391
|
+
// CRITICAL: type parameter is REQUIRED
|
|
392
|
+
new Paragraph({
|
|
393
|
+
children: [
|
|
394
|
+
new ImageRun({
|
|
395
|
+
type: "png", // Required: png, jpg, jpeg, gif, bmp, svg
|
|
396
|
+
data: fs.readFileSync("image.png"),
|
|
397
|
+
transformation: { width: 200, height: 150 },
|
|
398
|
+
altText: { title: "Title", description: "Desc", name: "Name" }, // All three required
|
|
399
|
+
}),
|
|
400
|
+
],
|
|
401
|
+
});
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
### Page Breaks
|
|
405
|
+
|
|
406
|
+
```javascript
|
|
407
|
+
// CRITICAL: PageBreak must be inside a Paragraph
|
|
408
|
+
new Paragraph({ children: [new PageBreak()] });
|
|
409
|
+
|
|
410
|
+
// Or use pageBreakBefore
|
|
411
|
+
new Paragraph({ pageBreakBefore: true, children: [new TextRun("New page")] });
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
### Table of Contents
|
|
415
|
+
|
|
416
|
+
```javascript
|
|
417
|
+
// CRITICAL: TableOfContents must be a DIRECT child of section's children array
|
|
418
|
+
// NEVER wrap it in a Paragraph — it is a block-level element like Paragraph and Table
|
|
419
|
+
sections: [
|
|
420
|
+
{
|
|
421
|
+
children: [
|
|
422
|
+
// ✅ CORRECT - TableOfContents directly in children array
|
|
423
|
+
new TableOfContents("Table of Contents", { hyperlink: true, headingStyleRange: "1-3" }),
|
|
424
|
+
new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("Chapter 1")] }),
|
|
425
|
+
],
|
|
426
|
+
},
|
|
427
|
+
];
|
|
428
|
+
|
|
429
|
+
// ❌ WRONG - wrapping in Paragraph creates nested <w:p> (invalid XML)
|
|
430
|
+
new Paragraph({ children: [new TableOfContents("TOC", { ... })] }); // BAD - causes XSD validation error
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Headers/Footers
|
|
434
|
+
|
|
435
|
+
```javascript
|
|
436
|
+
sections: [
|
|
437
|
+
{
|
|
438
|
+
properties: {
|
|
439
|
+
page: { margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } }, // 1440 = 1 inch
|
|
440
|
+
},
|
|
441
|
+
headers: {
|
|
442
|
+
default: new Header({ children: [new Paragraph({ children: [new TextRun("Header")] })] }),
|
|
443
|
+
},
|
|
444
|
+
footers: {
|
|
445
|
+
default: new Footer({
|
|
446
|
+
children: [
|
|
447
|
+
new Paragraph({
|
|
448
|
+
children: [new TextRun("Page "), new TextRun({ children: [PageNumber.CURRENT] })],
|
|
449
|
+
}),
|
|
450
|
+
],
|
|
451
|
+
}),
|
|
452
|
+
},
|
|
453
|
+
children: [
|
|
454
|
+
/* content */
|
|
455
|
+
],
|
|
456
|
+
},
|
|
457
|
+
];
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### Critical Rules for docx-js
|
|
461
|
+
|
|
462
|
+
- **Set page size explicitly** - docx-js defaults to A4; use US Letter (12240 x 15840 DXA) for US documents
|
|
463
|
+
- **Landscape: pass portrait dimensions** - docx-js swaps width/height internally; pass short
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sophnet-docx",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"lockfileVersion": 3,
|
|
5
|
+
"requires": true,
|
|
6
|
+
"packages": {
|
|
7
|
+
"": {
|
|
8
|
+
"name": "sophnet-docx",
|
|
9
|
+
"version": "1.0.0",
|
|
10
|
+
"license": "ISC",
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"docx": "^9.5.1"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"node_modules/@types/node": {
|
|
16
|
+
"version": "24.10.12",
|
|
17
|
+
"resolved": "https://registry.npmmirror.com/@types/node/-/node-24.10.12.tgz",
|
|
18
|
+
"integrity": "sha512-68e+T28EbdmLSTkPgs3+UacC6rzmqrcWFPQs1C8mwJhI/r5Uxr0yEuQotczNRROd1gq30NGxee+fo0rSIxpyAw==",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"undici-types": "~7.16.0"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"node_modules/core-util-is": {
|
|
25
|
+
"version": "1.0.3",
|
|
26
|
+
"resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz",
|
|
27
|
+
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
|
|
28
|
+
"license": "MIT"
|
|
29
|
+
},
|
|
30
|
+
"node_modules/docx": {
|
|
31
|
+
"version": "9.5.1",
|
|
32
|
+
"resolved": "https://registry.npmmirror.com/docx/-/docx-9.5.1.tgz",
|
|
33
|
+
"integrity": "sha512-ABDI7JEirFD2+bHhOBlsGZxaG1UgZb2M/QMKhLSDGgVNhxDesTCDcP+qoDnDGjZ4EOXTRfUjUgwHVuZ6VSTfWQ==",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@types/node": "^24.0.1",
|
|
37
|
+
"hash.js": "^1.1.7",
|
|
38
|
+
"jszip": "^3.10.1",
|
|
39
|
+
"nanoid": "^5.1.3",
|
|
40
|
+
"xml": "^1.0.1",
|
|
41
|
+
"xml-js": "^1.6.8"
|
|
42
|
+
},
|
|
43
|
+
"engines": {
|
|
44
|
+
"node": ">=10"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"node_modules/hash.js": {
|
|
48
|
+
"version": "1.1.7",
|
|
49
|
+
"resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz",
|
|
50
|
+
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
|
|
51
|
+
"license": "MIT",
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"inherits": "^2.0.3",
|
|
54
|
+
"minimalistic-assert": "^1.0.1"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"node_modules/immediate": {
|
|
58
|
+
"version": "3.0.6",
|
|
59
|
+
"resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz",
|
|
60
|
+
"integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
|
|
61
|
+
"license": "MIT"
|
|
62
|
+
},
|
|
63
|
+
"node_modules/inherits": {
|
|
64
|
+
"version": "2.0.4",
|
|
65
|
+
"resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz",
|
|
66
|
+
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
|
67
|
+
"license": "ISC"
|
|
68
|
+
},
|
|
69
|
+
"node_modules/isarray": {
|
|
70
|
+
"version": "1.0.0",
|
|
71
|
+
"resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz",
|
|
72
|
+
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
|
|
73
|
+
"license": "MIT"
|
|
74
|
+
},
|
|
75
|
+
"node_modules/jszip": {
|
|
76
|
+
"version": "3.10.1",
|
|
77
|
+
"resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz",
|
|
78
|
+
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
|
|
79
|
+
"license": "(MIT OR GPL-3.0-or-later)",
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"lie": "~3.3.0",
|
|
82
|
+
"pako": "~1.0.2",
|
|
83
|
+
"readable-stream": "~2.3.6",
|
|
84
|
+
"setimmediate": "^1.0.5"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"node_modules/lie": {
|
|
88
|
+
"version": "3.3.0",
|
|
89
|
+
"resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz",
|
|
90
|
+
"integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
|
|
91
|
+
"license": "MIT",
|
|
92
|
+
"dependencies": {
|
|
93
|
+
"immediate": "~3.0.5"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"node_modules/minimalistic-assert": {
|
|
97
|
+
"version": "1.0.1",
|
|
98
|
+
"resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
|
|
99
|
+
"integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
|
|
100
|
+
"license": "ISC"
|
|
101
|
+
},
|
|
102
|
+
"node_modules/nanoid": {
|
|
103
|
+
"version": "5.1.6",
|
|
104
|
+
"resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-5.1.6.tgz",
|
|
105
|
+
"integrity": "sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==",
|
|
106
|
+
"funding": [
|
|
107
|
+
{
|
|
108
|
+
"type": "github",
|
|
109
|
+
"url": "https://github.com/sponsors/ai"
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"license": "MIT",
|
|
113
|
+
"bin": {
|
|
114
|
+
"nanoid": "bin/nanoid.js"
|
|
115
|
+
},
|
|
116
|
+
"engines": {
|
|
117
|
+
"node": "^18 || >=20"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"node_modules/pako": {
|
|
121
|
+
"version": "1.0.11",
|
|
122
|
+
"resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz",
|
|
123
|
+
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
|
|
124
|
+
"license": "(MIT AND Zlib)"
|
|
125
|
+
},
|
|
126
|
+
"node_modules/process-nextick-args": {
|
|
127
|
+
"version": "2.0.1",
|
|
128
|
+
"resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
|
129
|
+
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
|
|
130
|
+
"license": "MIT"
|
|
131
|
+
},
|
|
132
|
+
"node_modules/readable-stream": {
|
|
133
|
+
"version": "2.3.8",
|
|
134
|
+
"resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
|
|
135
|
+
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
|
136
|
+
"license": "MIT",
|
|
137
|
+
"dependencies": {
|
|
138
|
+
"core-util-is": "~1.0.0",
|
|
139
|
+
"inherits": "~2.0.3",
|
|
140
|
+
"isarray": "~1.0.0",
|
|
141
|
+
"process-nextick-args": "~2.0.0",
|
|
142
|
+
"safe-buffer": "~5.1.1",
|
|
143
|
+
"string_decoder": "~1.1.1",
|
|
144
|
+
"util-deprecate": "~1.0.1"
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
"node_modules/safe-buffer": {
|
|
148
|
+
"version": "5.1.2",
|
|
149
|
+
"resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
150
|
+
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
|
151
|
+
"license": "MIT"
|
|
152
|
+
},
|
|
153
|
+
"node_modules/sax": {
|
|
154
|
+
"version": "1.4.4",
|
|
155
|
+
"resolved": "https://registry.npmmirror.com/sax/-/sax-1.4.4.tgz",
|
|
156
|
+
"integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==",
|
|
157
|
+
"license": "BlueOak-1.0.0",
|
|
158
|
+
"engines": {
|
|
159
|
+
"node": ">=11.0.0"
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
"node_modules/setimmediate": {
|
|
163
|
+
"version": "1.0.5",
|
|
164
|
+
"resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz",
|
|
165
|
+
"integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
|
|
166
|
+
"license": "MIT"
|
|
167
|
+
},
|
|
168
|
+
"node_modules/string_decoder": {
|
|
169
|
+
"version": "1.1.1",
|
|
170
|
+
"resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz",
|
|
171
|
+
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
|
172
|
+
"license": "MIT",
|
|
173
|
+
"dependencies": {
|
|
174
|
+
"safe-buffer": "~5.1.0"
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
"node_modules/undici-types": {
|
|
178
|
+
"version": "7.16.0",
|
|
179
|
+
"resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz",
|
|
180
|
+
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
|
|
181
|
+
"license": "MIT"
|
|
182
|
+
},
|
|
183
|
+
"node_modules/util-deprecate": {
|
|
184
|
+
"version": "1.0.2",
|
|
185
|
+
"resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
|
186
|
+
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
|
187
|
+
"license": "MIT"
|
|
188
|
+
},
|
|
189
|
+
"node_modules/xml": {
|
|
190
|
+
"version": "1.0.1",
|
|
191
|
+
"resolved": "https://registry.npmmirror.com/xml/-/xml-1.0.1.tgz",
|
|
192
|
+
"integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==",
|
|
193
|
+
"license": "MIT"
|
|
194
|
+
},
|
|
195
|
+
"node_modules/xml-js": {
|
|
196
|
+
"version": "1.6.11",
|
|
197
|
+
"resolved": "https://registry.npmmirror.com/xml-js/-/xml-js-1.6.11.tgz",
|
|
198
|
+
"integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==",
|
|
199
|
+
"license": "MIT",
|
|
200
|
+
"dependencies": {
|
|
201
|
+
"sax": "^1.2.4"
|
|
202
|
+
},
|
|
203
|
+
"bin": {
|
|
204
|
+
"xml-js": "bin/cli.js"
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|