wormclaude 1.0.119 → 1.0.121

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.
Files changed (232) hide show
  1. package/dist/theme.js +1 -1
  2. package/dist/tui.js +6 -1
  3. package/package.json +1 -1
  4. package/skills/build-mcp-app/SKILL.md +0 -393
  5. package/skills/build-mcp-app/references/abuse-protection.md +0 -60
  6. package/skills/build-mcp-app/references/apps-sdk-messages.md +0 -227
  7. package/skills/build-mcp-app/references/directory-checklist.md +0 -18
  8. package/skills/build-mcp-app/references/iframe-sandbox.md +0 -164
  9. package/skills/build-mcp-app/references/payload-budgeting.md +0 -54
  10. package/skills/build-mcp-app/references/widget-templates.md +0 -249
  11. package/skills/build-mcp-server/SKILL.md +0 -222
  12. package/skills/build-mcp-server/references/auth.md +0 -108
  13. package/skills/build-mcp-server/references/deploy-cloudflare-workers.md +0 -106
  14. package/skills/build-mcp-server/references/elicitation.md +0 -129
  15. package/skills/build-mcp-server/references/remote-http-scaffold.md +0 -211
  16. package/skills/build-mcp-server/references/resources-and-prompts.md +0 -122
  17. package/skills/build-mcp-server/references/server-capabilities.md +0 -164
  18. package/skills/build-mcp-server/references/tool-design.md +0 -189
  19. package/skills/build-mcp-server/references/versions.md +0 -25
  20. package/skills/build-mcpb/SKILL.md +0 -200
  21. package/skills/build-mcpb/references/local-security.md +0 -149
  22. package/skills/build-mcpb/references/manifest-schema.md +0 -156
  23. package/skills/docx/script/__init__.py +0 -1
  24. package/skills/docx/script/accept_chages.py +0 -135
  25. package/skills/docx/script/comment.py +0 -318
  26. package/skills/docx/script/office/helpers/__init__.py +0 -0
  27. package/skills/docx/script/office/helpers/merge_runs.py +0 -199
  28. package/skills/docx/script/office/helpers/simplify_redlines.py +0 -197
  29. package/skills/docx/script/office/pack.py +0 -159
  30. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  31. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  32. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  33. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  34. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  35. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  36. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  37. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  38. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  39. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  40. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  41. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  42. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  43. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  44. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  45. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  46. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  47. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  48. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  49. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  50. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  51. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  52. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  53. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  54. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  55. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  56. package/skills/docx/script/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  57. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  58. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  59. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  60. package/skills/docx/script/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  61. package/skills/docx/script/office/schemas/mce/mc.xsd +0 -75
  62. package/skills/docx/script/office/schemas/microsoft/wml-2010.xsd +0 -560
  63. package/skills/docx/script/office/schemas/microsoft/wml-2012.xsd +0 -67
  64. package/skills/docx/script/office/schemas/microsoft/wml-2018.xsd +0 -14
  65. package/skills/docx/script/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  66. package/skills/docx/script/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  67. package/skills/docx/script/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  68. package/skills/docx/script/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  69. package/skills/docx/script/office/soffice.py +0 -183
  70. package/skills/docx/script/office/unpack.py +0 -132
  71. package/skills/docx/script/office/validate.py +0 -117
  72. package/skills/docx/script/office/validators/__init__.py +0 -15
  73. package/skills/docx/script/office/validators/base.py +0 -851
  74. package/skills/docx/script/office/validators/docx.py +0 -446
  75. package/skills/docx/script/office/validators/pptx.py +0 -275
  76. package/skills/docx/script/office/validators/redlining.py +0 -247
  77. package/skills/docx/script/templates/comments.xml +0 -3
  78. package/skills/docx/script/templates/commentsExtended.xml +0 -3
  79. package/skills/docx/script/templates/commentsExtensible.xml +0 -3
  80. package/skills/docx/script/templates/commentsIds.xml +0 -3
  81. package/skills/docx/script/templates/people.xml +0 -3
  82. package/skills/docx/skill.md +0 -593
  83. package/skills/explain.md +0 -14
  84. package/skills/frontend-design/SKILL.md +0 -42
  85. package/skills/pdf/FORMS.md +0 -294
  86. package/skills/pdf/REFERENCE.md +0 -612
  87. package/skills/pdf/SKILL.md +0 -314
  88. package/skills/pdf/scripts/check_bounding_boxes.py +0 -65
  89. package/skills/pdf/scripts/check_fillable_fields.py +0 -11
  90. package/skills/pdf/scripts/convert_pdf_to_images.py +0 -33
  91. package/skills/pdf/scripts/create_validation_image.py +0 -37
  92. package/skills/pdf/scripts/extract_form_field_info.py +0 -122
  93. package/skills/pdf/scripts/extract_form_structure.py +0 -115
  94. package/skills/pdf/scripts/fill_fillable_fields.py +0 -98
  95. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +0 -107
  96. package/skills/playground/SKILL.md +0 -77
  97. package/skills/playground/templates/code-map.md +0 -158
  98. package/skills/playground/templates/concept-map.md +0 -73
  99. package/skills/playground/templates/data-explorer.md +0 -67
  100. package/skills/playground/templates/design-playground.md +0 -67
  101. package/skills/playground/templates/diff-review.md +0 -179
  102. package/skills/playground/templates/document-critique.md +0 -171
  103. package/skills/pptx/SKILL.md +0 -230
  104. package/skills/pptx/editing.md +0 -205
  105. package/skills/pptx/pptxgenjs.md +0 -437
  106. package/skills/pptx/scripts/__init__.py +0 -0
  107. package/skills/pptx/scripts/add_slide.py +0 -195
  108. package/skills/pptx/scripts/clean.py +0 -286
  109. package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  110. package/skills/pptx/scripts/office/helpers/merge_runs.py +0 -199
  111. package/skills/pptx/scripts/office/helpers/simplify_redlines.py +0 -197
  112. package/skills/pptx/scripts/office/pack.py +0 -159
  113. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  114. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  115. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  116. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  117. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  118. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  119. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  120. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  121. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  122. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  123. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  124. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  125. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  126. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  127. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  128. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  129. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  130. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  131. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  132. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  133. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  134. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  135. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  136. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  137. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  138. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  139. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  140. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  141. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  142. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  143. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  144. package/skills/pptx/scripts/office/schemas/mce/mc.xsd +0 -75
  145. package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  146. package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  147. package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  148. package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  149. package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  150. package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  151. package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  152. package/skills/pptx/scripts/office/soffice.py +0 -183
  153. package/skills/pptx/scripts/office/unpack.py +0 -132
  154. package/skills/pptx/scripts/office/validate.py +0 -117
  155. package/skills/pptx/scripts/office/validators/__init__.py +0 -15
  156. package/skills/pptx/scripts/office/validators/base.py +0 -851
  157. package/skills/pptx/scripts/office/validators/docx.py +0 -446
  158. package/skills/pptx/scripts/office/validators/pptx.py +0 -275
  159. package/skills/pptx/scripts/office/validators/redlining.py +0 -247
  160. package/skills/pptx/scripts/thumbnail.py +0 -289
  161. package/skills/recon.md +0 -16
  162. package/skills/security-audit/SKILL.md +0 -26
  163. package/skills/talent-creator/SKILL.md +0 -486
  164. package/skills/talent-creator/agents/analyzer.md +0 -274
  165. package/skills/talent-creator/agents/comparator.md +0 -202
  166. package/skills/talent-creator/agents/grader.md +0 -223
  167. package/skills/talent-creator/assets/eval_review.html +0 -146
  168. package/skills/talent-creator/eval-viewer/generate_review.py +0 -471
  169. package/skills/talent-creator/eval-viewer/viewer.html +0 -1325
  170. package/skills/talent-creator/references/schemas.md +0 -430
  171. package/skills/talent-creator/scripts/__init__.py +0 -0
  172. package/skills/talent-creator/scripts/aggregate_benchmark.py +0 -401
  173. package/skills/talent-creator/scripts/generate_report.py +0 -326
  174. package/skills/talent-creator/scripts/improve_description.py +0 -247
  175. package/skills/talent-creator/scripts/package_skill.py +0 -136
  176. package/skills/talent-creator/scripts/quick_validate.py +0 -146
  177. package/skills/talent-creator/scripts/run_eval.py +0 -310
  178. package/skills/talent-creator/scripts/run_loop.py +0 -328
  179. package/skills/talent-creator/scripts/utils.py +0 -47
  180. package/skills/xlsx/SKILL.md +0 -300
  181. package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  182. package/skills/xlsx/scripts/office/helpers/merge_runs.py +0 -199
  183. package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +0 -197
  184. package/skills/xlsx/scripts/office/pack.py +0 -159
  185. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -1499
  186. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -146
  187. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -1085
  188. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -11
  189. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -3081
  190. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -23
  191. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -185
  192. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -287
  193. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -1676
  194. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -28
  195. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -144
  196. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -174
  197. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -25
  198. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -18
  199. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -59
  200. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -56
  201. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -195
  202. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -582
  203. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -25
  204. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -4439
  205. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -570
  206. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -509
  207. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -12
  208. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -108
  209. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -96
  210. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -3646
  211. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -116
  212. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -42
  213. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -50
  214. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -49
  215. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -33
  216. package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +0 -75
  217. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +0 -560
  218. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +0 -67
  219. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +0 -14
  220. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -20
  221. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -13
  222. package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -4
  223. package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -8
  224. package/skills/xlsx/scripts/office/soffice.py +0 -183
  225. package/skills/xlsx/scripts/office/unpack.py +0 -132
  226. package/skills/xlsx/scripts/office/validate.py +0 -117
  227. package/skills/xlsx/scripts/office/validators/__init__.py +0 -15
  228. package/skills/xlsx/scripts/office/validators/base.py +0 -851
  229. package/skills/xlsx/scripts/office/validators/docx.py +0 -446
  230. package/skills/xlsx/scripts/office/validators/pptx.py +0 -275
  231. package/skills/xlsx/scripts/office/validators/redlining.py +0 -247
  232. package/skills/xlsx/scripts/recalc.py +0 -184
@@ -1,20 +0,0 @@
1
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:s="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" elementFormDefault="qualified" attributeFormDefault="qualified" blockDefault="#all" xmlns="http://schemas.microsoft.com/office/word/2018/wordml/cex" targetNamespace="http://schemas.microsoft.com/office/word/2018/wordml/cex">
2
- <xsd:import id="w16" namespace="http://schemas.microsoft.com/office/word/2018/wordml" schemaLocation="wml-2018.xsd"/>
3
- <xsd:import id="w" namespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main" schemaLocation="../ISO-IEC29500-4_2016/wml.xsd"/>
4
- <xsd:import id="s" namespace="http://schemas.openxmlformats.org/officeDocument/2006/sharedTypes" schemaLocation="../ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd"/>
5
- <xsd:complexType name="CT_CommentsExtensible">
6
- <xsd:sequence>
7
- <xsd:element name="commentExtensible" type="CT_CommentExtensible" minOccurs="0" maxOccurs="unbounded"/>
8
- <xsd:element name="extLst" type="w16:CT_ExtensionList" minOccurs="0" maxOccurs="1"/>
9
- </xsd:sequence>
10
- </xsd:complexType>
11
- <xsd:complexType name="CT_CommentExtensible">
12
- <xsd:sequence>
13
- <xsd:element name="extLst" type="w16:CT_ExtensionList" minOccurs="0" maxOccurs="1"/>
14
- </xsd:sequence>
15
- <xsd:attribute name="durableId" type="w:ST_LongHexNumber" use="required"/>
16
- <xsd:attribute name="dateUtc" type="w:ST_DateTime" use="optional"/>
17
- <xsd:attribute name="intelligentPlaceholder" type="s:ST_OnOff" use="optional"/>
18
- </xsd:complexType>
19
- <xsd:element name="commentsExtensible" type="CT_CommentsExtensible"/>
20
- </xsd:schema>
@@ -1,13 +0,0 @@
1
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:w12="http://schemas.openxmlformats.org/wordprocessingml/2006/main" elementFormDefault="qualified" attributeFormDefault="qualified" blockDefault="#all" xmlns="http://schemas.microsoft.com/office/word/2016/wordml/cid" targetNamespace="http://schemas.microsoft.com/office/word/2016/wordml/cid">
2
- <xsd:import id="w12" namespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main" schemaLocation="../ISO-IEC29500-4_2016/wml.xsd"/>
3
- <xsd:complexType name="CT_CommentsIds">
4
- <xsd:sequence>
5
- <xsd:element name="commentId" type="CT_CommentId" minOccurs="0" maxOccurs="unbounded"/>
6
- </xsd:sequence>
7
- </xsd:complexType>
8
- <xsd:complexType name="CT_CommentId">
9
- <xsd:attribute name="paraId" type="w12:ST_LongHexNumber" use="required"/>
10
- <xsd:attribute name="durableId" type="w12:ST_LongHexNumber" use="required"/>
11
- </xsd:complexType>
12
- <xsd:element name="commentsIds" type="CT_CommentsIds"/>
13
- </xsd:schema>
@@ -1,4 +0,0 @@
1
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:w12="http://schemas.openxmlformats.org/wordprocessingml/2006/main" elementFormDefault="qualified" attributeFormDefault="qualified" blockDefault="#all" xmlns="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" targetNamespace="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash">
2
- <xsd:import id="w12" namespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main" schemaLocation="../ISO-IEC29500-4_2016/wml.xsd"/>
3
- <xsd:attribute name="storeItemChecksum" type="w12:ST_String"/>
4
- </xsd:schema>
@@ -1,8 +0,0 @@
1
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:w12="http://schemas.openxmlformats.org/wordprocessingml/2006/main" elementFormDefault="qualified" attributeFormDefault="qualified" blockDefault="#all" xmlns="http://schemas.microsoft.com/office/word/2015/wordml/symex" targetNamespace="http://schemas.microsoft.com/office/word/2015/wordml/symex">
2
- <xsd:import id="w12" namespace="http://schemas.openxmlformats.org/wordprocessingml/2006/main" schemaLocation="../ISO-IEC29500-4_2016/wml.xsd"/>
3
- <xsd:complexType name="CT_SymEx">
4
- <xsd:attribute name="font" type="w12:ST_String"/>
5
- <xsd:attribute name="char" type="w12:ST_LongHexNumber"/>
6
- </xsd:complexType>
7
- <xsd:element name="symEx" type="CT_SymEx"/>
8
- </xsd:schema>
@@ -1,183 +0,0 @@
1
- """
2
- Helper for running LibreOffice (soffice) in environments where AF_UNIX
3
- sockets may be blocked (e.g., sandboxed VMs). Detects the restriction
4
- at runtime and applies an LD_PRELOAD shim if needed.
5
-
6
- Usage:
7
- from office.soffice import run_soffice, get_soffice_env
8
-
9
- # Option 1 – run soffice directly
10
- result = run_soffice(["--headless", "--convert-to", "pdf", "input.docx"])
11
-
12
- # Option 2 – get env dict for your own subprocess calls
13
- env = get_soffice_env()
14
- subprocess.run(["soffice", ...], env=env)
15
- """
16
-
17
- import os
18
- import socket
19
- import subprocess
20
- import tempfile
21
- from pathlib import Path
22
-
23
-
24
- def get_soffice_env() -> dict:
25
- env = os.environ.copy()
26
- env["SAL_USE_VCLPLUGIN"] = "svp"
27
-
28
- if _needs_shim():
29
- shim = _ensure_shim()
30
- env["LD_PRELOAD"] = str(shim)
31
-
32
- return env
33
-
34
-
35
- def run_soffice(args: list[str], **kwargs) -> subprocess.CompletedProcess:
36
- env = get_soffice_env()
37
- return subprocess.run(["soffice"] + args, env=env, **kwargs)
38
-
39
-
40
-
41
- _SHIM_SO = Path(tempfile.gettempdir()) / "lo_socket_shim.so"
42
-
43
-
44
- def _needs_shim() -> bool:
45
- try:
46
- s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
47
- s.close()
48
- return False
49
- except OSError:
50
- return True
51
-
52
-
53
- def _ensure_shim() -> Path:
54
- if _SHIM_SO.exists():
55
- return _SHIM_SO
56
-
57
- src = Path(tempfile.gettempdir()) / "lo_socket_shim.c"
58
- src.write_text(_SHIM_SOURCE)
59
- subprocess.run(
60
- ["gcc", "-shared", "-fPIC", "-o", str(_SHIM_SO), str(src), "-ldl"],
61
- check=True,
62
- capture_output=True,
63
- )
64
- src.unlink()
65
- return _SHIM_SO
66
-
67
-
68
-
69
- _SHIM_SOURCE = r"""
70
- #define _GNU_SOURCE
71
- #include <dlfcn.h>
72
- #include <errno.h>
73
- #include <signal.h>
74
- #include <stdio.h>
75
- #include <stdlib.h>
76
- #include <sys/socket.h>
77
- #include <unistd.h>
78
-
79
- static int (*real_socket)(int, int, int);
80
- static int (*real_socketpair)(int, int, int, int[2]);
81
- static int (*real_listen)(int, int);
82
- static int (*real_accept)(int, struct sockaddr *, socklen_t *);
83
- static int (*real_close)(int);
84
- static int (*real_read)(int, void *, size_t);
85
-
86
- /* Per-FD bookkeeping (FDs >= 1024 are passed through unshimmed). */
87
- static int is_shimmed[1024];
88
- static int peer_of[1024];
89
- static int wake_r[1024]; /* accept() blocks reading this */
90
- static int wake_w[1024]; /* close() writes to this */
91
- static int listener_fd = -1; /* FD that received listen() */
92
-
93
- __attribute__((constructor))
94
- static void init(void) {
95
- real_socket = dlsym(RTLD_NEXT, "socket");
96
- real_socketpair = dlsym(RTLD_NEXT, "socketpair");
97
- real_listen = dlsym(RTLD_NEXT, "listen");
98
- real_accept = dlsym(RTLD_NEXT, "accept");
99
- real_close = dlsym(RTLD_NEXT, "close");
100
- real_read = dlsym(RTLD_NEXT, "read");
101
- for (int i = 0; i < 1024; i++) {
102
- peer_of[i] = -1;
103
- wake_r[i] = -1;
104
- wake_w[i] = -1;
105
- }
106
- }
107
-
108
- /* ---- socket ---------------------------------------------------------- */
109
- int socket(int domain, int type, int protocol) {
110
- if (domain == AF_UNIX) {
111
- int fd = real_socket(domain, type, protocol);
112
- if (fd >= 0) return fd;
113
- /* socket(AF_UNIX) blocked – fall back to socketpair(). */
114
- int sv[2];
115
- if (real_socketpair(domain, type, protocol, sv) == 0) {
116
- if (sv[0] >= 0 && sv[0] < 1024) {
117
- is_shimmed[sv[0]] = 1;
118
- peer_of[sv[0]] = sv[1];
119
- int wp[2];
120
- if (pipe(wp) == 0) {
121
- wake_r[sv[0]] = wp[0];
122
- wake_w[sv[0]] = wp[1];
123
- }
124
- }
125
- return sv[0];
126
- }
127
- errno = EPERM;
128
- return -1;
129
- }
130
- return real_socket(domain, type, protocol);
131
- }
132
-
133
- /* ---- listen ---------------------------------------------------------- */
134
- int listen(int sockfd, int backlog) {
135
- if (sockfd >= 0 && sockfd < 1024 && is_shimmed[sockfd]) {
136
- listener_fd = sockfd;
137
- return 0;
138
- }
139
- return real_listen(sockfd, backlog);
140
- }
141
-
142
- /* ---- accept ---------------------------------------------------------- */
143
- int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) {
144
- if (sockfd >= 0 && sockfd < 1024 && is_shimmed[sockfd]) {
145
- /* Block until close() writes to the wake pipe. */
146
- if (wake_r[sockfd] >= 0) {
147
- char buf;
148
- real_read(wake_r[sockfd], &buf, 1);
149
- }
150
- errno = ECONNABORTED;
151
- return -1;
152
- }
153
- return real_accept(sockfd, addr, addrlen);
154
- }
155
-
156
- /* ---- close ----------------------------------------------------------- */
157
- int close(int fd) {
158
- if (fd >= 0 && fd < 1024 && is_shimmed[fd]) {
159
- int was_listener = (fd == listener_fd);
160
- is_shimmed[fd] = 0;
161
-
162
- if (wake_w[fd] >= 0) { /* unblock accept() */
163
- char c = 0;
164
- write(wake_w[fd], &c, 1);
165
- real_close(wake_w[fd]);
166
- wake_w[fd] = -1;
167
- }
168
- if (wake_r[fd] >= 0) { real_close(wake_r[fd]); wake_r[fd] = -1; }
169
- if (peer_of[fd] >= 0) { real_close(peer_of[fd]); peer_of[fd] = -1; }
170
-
171
- if (was_listener)
172
- _exit(0); /* conversion done – exit */
173
- }
174
- return real_close(fd);
175
- }
176
- """
177
-
178
-
179
-
180
- if __name__ == "__main__":
181
- import sys
182
- result = run_soffice(sys.argv[1:])
183
- sys.exit(result.returncode)
@@ -1,132 +0,0 @@
1
- """Unpack Office files (DOCX, PPTX, XLSX) for editing.
2
-
3
- Extracts the ZIP archive, pretty-prints XML files, and optionally:
4
- - Merges adjacent runs with identical formatting (DOCX only)
5
- - Simplifies adjacent tracked changes from same author (DOCX only)
6
-
7
- Usage:
8
- python unpack.py <office_file> <output_dir> [options]
9
-
10
- Examples:
11
- python unpack.py document.docx unpacked/
12
- python unpack.py presentation.pptx unpacked/
13
- python unpack.py document.docx unpacked/ --merge-runs false
14
- """
15
-
16
- import argparse
17
- import sys
18
- import zipfile
19
- from pathlib import Path
20
-
21
- import defusedxml.minidom
22
-
23
- from helpers.merge_runs import merge_runs as do_merge_runs
24
- from helpers.simplify_redlines import simplify_redlines as do_simplify_redlines
25
-
26
- SMART_QUOTE_REPLACEMENTS = {
27
- "\u201c": "&#x201C;",
28
- "\u201d": "&#x201D;",
29
- "\u2018": "&#x2018;",
30
- "\u2019": "&#x2019;",
31
- }
32
-
33
-
34
- def unpack(
35
- input_file: str,
36
- output_directory: str,
37
- merge_runs: bool = True,
38
- simplify_redlines: bool = True,
39
- ) -> tuple[None, str]:
40
- input_path = Path(input_file)
41
- output_path = Path(output_directory)
42
- suffix = input_path.suffix.lower()
43
-
44
- if not input_path.exists():
45
- return None, f"Error: {input_file} does not exist"
46
-
47
- if suffix not in {".docx", ".pptx", ".xlsx"}:
48
- return None, f"Error: {input_file} must be a .docx, .pptx, or .xlsx file"
49
-
50
- try:
51
- output_path.mkdir(parents=True, exist_ok=True)
52
-
53
- with zipfile.ZipFile(input_path, "r") as zf:
54
- zf.extractall(output_path)
55
-
56
- xml_files = list(output_path.rglob("*.xml")) + list(output_path.rglob("*.rels"))
57
- for xml_file in xml_files:
58
- _pretty_print_xml(xml_file)
59
-
60
- message = f"Unpacked {input_file} ({len(xml_files)} XML files)"
61
-
62
- if suffix == ".docx":
63
- if simplify_redlines:
64
- simplify_count, _ = do_simplify_redlines(str(output_path))
65
- message += f", simplified {simplify_count} tracked changes"
66
-
67
- if merge_runs:
68
- merge_count, _ = do_merge_runs(str(output_path))
69
- message += f", merged {merge_count} runs"
70
-
71
- for xml_file in xml_files:
72
- _escape_smart_quotes(xml_file)
73
-
74
- return None, message
75
-
76
- except zipfile.BadZipFile:
77
- return None, f"Error: {input_file} is not a valid Office file"
78
- except Exception as e:
79
- return None, f"Error unpacking: {e}"
80
-
81
-
82
- def _pretty_print_xml(xml_file: Path) -> None:
83
- try:
84
- content = xml_file.read_text(encoding="utf-8")
85
- dom = defusedxml.minidom.parseString(content)
86
- xml_file.write_bytes(dom.toprettyxml(indent=" ", encoding="utf-8"))
87
- except Exception:
88
- pass
89
-
90
-
91
- def _escape_smart_quotes(xml_file: Path) -> None:
92
- try:
93
- content = xml_file.read_text(encoding="utf-8")
94
- for char, entity in SMART_QUOTE_REPLACEMENTS.items():
95
- content = content.replace(char, entity)
96
- xml_file.write_text(content, encoding="utf-8")
97
- except Exception:
98
- pass
99
-
100
-
101
- if __name__ == "__main__":
102
- parser = argparse.ArgumentParser(
103
- description="Unpack an Office file (DOCX, PPTX, XLSX) for editing"
104
- )
105
- parser.add_argument("input_file", help="Office file to unpack")
106
- parser.add_argument("output_directory", help="Output directory")
107
- parser.add_argument(
108
- "--merge-runs",
109
- type=lambda x: x.lower() == "true",
110
- default=True,
111
- metavar="true|false",
112
- help="Merge adjacent runs with identical formatting (DOCX only, default: true)",
113
- )
114
- parser.add_argument(
115
- "--simplify-redlines",
116
- type=lambda x: x.lower() == "true",
117
- default=True,
118
- metavar="true|false",
119
- help="Merge adjacent tracked changes from same author (DOCX only, default: true)",
120
- )
121
- args = parser.parse_args()
122
-
123
- _, message = unpack(
124
- args.input_file,
125
- args.output_directory,
126
- merge_runs=args.merge_runs,
127
- simplify_redlines=args.simplify_redlines,
128
- )
129
- print(message)
130
-
131
- if "Error" in message:
132
- sys.exit(1)
@@ -1,117 +0,0 @@
1
- """
2
- Command line tool to validate Office document XML files against XSD schemas and tracked changes.
3
-
4
- Usage:
5
- python validate.py <path> [--original <original_file>] [--auto-repair] [--author NAME]
6
-
7
- The first argument can be either:
8
- - An unpacked directory containing the Office document XML files
9
- - A packed Office file (.docx/.pptx/.xlsx) which will be unpacked to a temp directory
10
-
11
- Auto-repair fixes:
12
- - paraId/durableId values that exceed OOXML limits
13
- - Missing xml:space="preserve" on w:t elements with whitespace
14
- """
15
-
16
- import argparse
17
- import sys
18
- import tempfile
19
- import zipfile
20
- from pathlib import Path
21
-
22
- from validators import DOCXSchemaValidator, PPTXSchemaValidator, RedliningValidator
23
-
24
-
25
- def main():
26
- parser = argparse.ArgumentParser(description="Validate Office document XML files")
27
- parser.add_argument(
28
- "path",
29
- help="Path to unpacked directory or packed Office file (.docx/.pptx/.xlsx)",
30
- )
31
- parser.add_argument(
32
- "--original",
33
- required=False,
34
- default=None,
35
- help="Path to original file (.docx/.pptx/.xlsx). If omitted, all XSD errors are reported and redlining validation is skipped.",
36
- )
37
- parser.add_argument(
38
- "-v",
39
- "--verbose",
40
- action="store_true",
41
- help="Enable verbose output",
42
- )
43
- parser.add_argument(
44
- "--auto-repair",
45
- action="store_true",
46
- help="Automatically repair common issues (hex IDs, whitespace preservation)",
47
- )
48
- parser.add_argument(
49
- "--author",
50
- default="WormClaude",
51
- help="Author name for redlining validation (default: WormClaude)",
52
- )
53
- args = parser.parse_args()
54
-
55
- path = Path(args.path)
56
- assert path.exists(), f"Error: {path} does not exist"
57
-
58
- original_file = None
59
- if args.original:
60
- original_file = Path(args.original)
61
- assert original_file.is_file(), f"Error: {original_file} is not a file"
62
- assert original_file.suffix.lower() in [".docx", ".pptx", ".xlsx"], (
63
- f"Error: {original_file} must be a .docx, .pptx, or .xlsx file"
64
- )
65
-
66
- file_extension = (original_file or path).suffix.lower()
67
- assert file_extension in [".docx", ".pptx", ".xlsx"], (
68
- f"Error: Cannot determine file type from {path}. Use --original or provide a .docx/.pptx/.xlsx file."
69
- )
70
-
71
- if path.is_file() and path.suffix.lower() in [".docx", ".pptx", ".xlsx"]:
72
- temp_dir = tempfile.mkdtemp()
73
- with zipfile.ZipFile(path, "r") as zf:
74
- zf.extractall(temp_dir)
75
- unpacked_dir = Path(temp_dir)
76
- else:
77
- assert path.is_dir(), f"Error: {path} is not a directory or Office file"
78
- unpacked_dir = path
79
-
80
- match file_extension:
81
- case ".docx":
82
- validators = [
83
- DOCXSchemaValidator(unpacked_dir, original_file, verbose=args.verbose),
84
- ]
85
- if original_file:
86
- validators.append(
87
- RedliningValidator(unpacked_dir, original_file, verbose=args.verbose, author=args.author)
88
- )
89
- case ".pptx":
90
- validators = [
91
- PPTXSchemaValidator(unpacked_dir, original_file, verbose=args.verbose),
92
- ]
93
- case ".xlsx":
94
- print(
95
- "No XSD schema validation is performed for .xlsx files. "
96
- "For formula-error checking, use scripts/recalc.py instead."
97
- )
98
- sys.exit(0)
99
- case _:
100
- print(f"Error: Validation not supported for file type {file_extension}")
101
- sys.exit(1)
102
-
103
- if args.auto_repair:
104
- total_repairs = sum(v.repair() for v in validators)
105
- if total_repairs:
106
- print(f"Auto-repaired {total_repairs} issue(s)")
107
-
108
- success = all(v.validate() for v in validators)
109
-
110
- if success:
111
- print("All validations PASSED!")
112
-
113
- sys.exit(0 if success else 1)
114
-
115
-
116
- if __name__ == "__main__":
117
- main()
@@ -1,15 +0,0 @@
1
- """
2
- Validation modules for Word document processing.
3
- """
4
-
5
- from .base import BaseSchemaValidator
6
- from .docx import DOCXSchemaValidator
7
- from .pptx import PPTXSchemaValidator
8
- from .redlining import RedliningValidator
9
-
10
- __all__ = [
11
- "BaseSchemaValidator",
12
- "DOCXSchemaValidator",
13
- "PPTXSchemaValidator",
14
- "RedliningValidator",
15
- ]