claude-code-templates 1.21.13 → 1.21.14

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 (415) hide show
  1. package/.claude/settings.local.json +8 -2
  2. package/.claude-plugin/marketplace.json +251 -0
  3. package/.github/workflows/component-security-validation.yml +129 -0
  4. package/README.md +13 -6
  5. package/cli-tool/README.md +56 -0
  6. package/cli-tool/bin/create-claude-config.js +2 -0
  7. package/cli-tool/components/.claude-plugin/marketplace.json +92 -0
  8. package/cli-tool/components/agents/development-tools/flutter-go-reviewer.md +163 -0
  9. package/cli-tool/components/agents/development-tools/unused-code-cleaner.md +194 -0
  10. package/cli-tool/components/commands/git-workflow/gemini-review.md +293 -0
  11. package/cli-tool/components/commands/testing/add-mutation-testing.md +2 -2
  12. package/cli-tool/components/commands/testing/add-property-based-testing.md +2 -2
  13. package/cli-tool/components/commands/testing/e2e-setup.md +2 -2
  14. package/cli-tool/components/commands/testing/generate-test-cases.md +2 -2
  15. package/cli-tool/components/commands/testing/generate-tests.md +8 -3
  16. package/cli-tool/components/commands/testing/setup-comprehensive-testing.md +2 -2
  17. package/cli-tool/components/commands/testing/setup-load-testing.md +2 -2
  18. package/cli-tool/components/commands/testing/setup-visual-testing.md +2 -2
  19. package/cli-tool/components/commands/testing/test-automation-orchestrator.md +2 -2
  20. package/cli-tool/components/commands/testing/test-changelog-automation.md +2 -2
  21. package/cli-tool/components/commands/testing/test-coverage.md +2 -2
  22. package/cli-tool/components/commands/testing/test-quality-analyzer.md +2 -2
  23. package/cli-tool/components/commands/testing/testing_plan_integration.md +2 -2
  24. package/cli-tool/components/commands/testing/write-tests.md +2 -2
  25. package/cli-tool/components/commands/utilities/ultra-think.md +10 -5
  26. package/cli-tool/components/hooks/git/validate-branch-name.json +1 -1
  27. package/cli-tool/components/mcps/devtools/chrome-devtools.json +9 -0
  28. package/cli-tool/components/mcps/devtools/grafana.json +15 -0
  29. package/cli-tool/components/mcps/devtools/pulumi.json +9 -0
  30. package/cli-tool/components/mcps/devtools/terraform.json +1 -1
  31. package/cli-tool/components/settings/statusline/context-monitor.py +1 -1
  32. package/cli-tool/components/skills/ANTHROPIC_ATTRIBUTION.md +81 -0
  33. package/cli-tool/components/skills/creative-design/algorithmic-art/LICENSE.txt +202 -0
  34. package/cli-tool/components/skills/creative-design/algorithmic-art/SKILL.md +405 -0
  35. package/cli-tool/components/skills/creative-design/algorithmic-art/templates/generator_template.js +223 -0
  36. package/cli-tool/components/skills/creative-design/algorithmic-art/templates/viewer.html +599 -0
  37. package/cli-tool/components/skills/creative-design/canvas-design/LICENSE.txt +202 -0
  38. package/cli-tool/components/skills/creative-design/canvas-design/SKILL.md +130 -0
  39. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  40. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  41. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  42. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  43. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  44. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  45. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  46. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  47. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  48. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  49. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  50. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  51. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  52. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  53. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  54. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  55. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  56. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  57. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  58. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  59. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  60. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  61. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  62. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  63. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  64. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  65. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  66. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  67. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  68. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  69. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  70. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  71. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  72. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  73. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  74. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  75. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  76. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  77. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  78. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  79. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  80. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  81. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  82. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  83. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  84. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  85. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  86. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  87. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  88. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  89. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  90. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  91. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  92. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  93. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  94. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  95. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  96. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  97. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  98. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  99. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  100. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  101. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  102. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  103. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  104. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  105. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  106. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  107. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  108. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  109. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  110. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  111. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  112. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  113. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  114. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  115. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  116. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  117. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  118. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  119. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  120. package/cli-tool/components/skills/creative-design/slack-gif-creator/LICENSE.txt +202 -0
  121. package/cli-tool/components/skills/creative-design/slack-gif-creator/SKILL.md +646 -0
  122. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/color_palettes.py +302 -0
  123. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/easing.py +230 -0
  124. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/frame_composer.py +469 -0
  125. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/gif_builder.py +246 -0
  126. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/typography.py +357 -0
  127. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/validators.py +264 -0
  128. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/visual_effects.py +494 -0
  129. package/cli-tool/components/skills/creative-design/slack-gif-creator/requirements.txt +4 -0
  130. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/bounce.py +106 -0
  131. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/explode.py +331 -0
  132. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/fade.py +329 -0
  133. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/flip.py +291 -0
  134. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/kaleidoscope.py +211 -0
  135. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/morph.py +329 -0
  136. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/move.py +293 -0
  137. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/pulse.py +268 -0
  138. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/shake.py +127 -0
  139. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/slide.py +291 -0
  140. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/spin.py +269 -0
  141. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/wiggle.py +300 -0
  142. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/zoom.py +312 -0
  143. package/cli-tool/components/skills/creative-design/theme-factory/LICENSE.txt +202 -0
  144. package/cli-tool/components/skills/creative-design/theme-factory/SKILL.md +59 -0
  145. package/cli-tool/components/skills/creative-design/theme-factory/theme-showcase.pdf +0 -0
  146. package/cli-tool/components/skills/creative-design/theme-factory/themes/arctic-frost.md +19 -0
  147. package/cli-tool/components/skills/creative-design/theme-factory/themes/botanical-garden.md +19 -0
  148. package/cli-tool/components/skills/creative-design/theme-factory/themes/desert-rose.md +19 -0
  149. package/cli-tool/components/skills/creative-design/theme-factory/themes/forest-canopy.md +19 -0
  150. package/cli-tool/components/skills/creative-design/theme-factory/themes/golden-hour.md +19 -0
  151. package/cli-tool/components/skills/creative-design/theme-factory/themes/midnight-galaxy.md +19 -0
  152. package/cli-tool/components/skills/creative-design/theme-factory/themes/modern-minimalist.md +19 -0
  153. package/cli-tool/components/skills/creative-design/theme-factory/themes/ocean-depths.md +19 -0
  154. package/cli-tool/components/skills/creative-design/theme-factory/themes/sunset-boulevard.md +19 -0
  155. package/cli-tool/components/skills/creative-design/theme-factory/themes/tech-innovation.md +19 -0
  156. package/cli-tool/components/skills/development/artifacts-builder/LICENSE.txt +202 -0
  157. package/cli-tool/components/skills/development/artifacts-builder/SKILL.md +74 -0
  158. package/cli-tool/components/skills/development/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  159. package/cli-tool/components/skills/development/artifacts-builder/scripts/init-artifact.sh +322 -0
  160. package/cli-tool/components/skills/development/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  161. package/cli-tool/components/skills/development/git-commit-helper/SKILL.md +203 -0
  162. package/cli-tool/components/skills/development/mcp-builder/LICENSE.txt +202 -0
  163. package/cli-tool/components/skills/development/mcp-builder/SKILL.md +328 -0
  164. package/cli-tool/components/skills/development/mcp-builder/reference/evaluation.md +602 -0
  165. package/cli-tool/components/skills/development/mcp-builder/reference/mcp_best_practices.md +915 -0
  166. package/cli-tool/components/skills/development/mcp-builder/reference/node_mcp_server.md +916 -0
  167. package/cli-tool/components/skills/development/mcp-builder/reference/python_mcp_server.md +752 -0
  168. package/cli-tool/components/skills/development/mcp-builder/scripts/connections.py +151 -0
  169. package/cli-tool/components/skills/development/mcp-builder/scripts/evaluation.py +373 -0
  170. package/cli-tool/components/skills/development/mcp-builder/scripts/example_evaluation.xml +22 -0
  171. package/cli-tool/components/skills/development/mcp-builder/scripts/requirements.txt +2 -0
  172. package/cli-tool/components/skills/development/skill-creator/LICENSE.txt +202 -0
  173. package/cli-tool/components/skills/development/skill-creator/SKILL.md +209 -0
  174. package/cli-tool/components/skills/development/skill-creator/scripts/init_skill.py +303 -0
  175. package/cli-tool/components/skills/development/skill-creator/scripts/package_skill.py +110 -0
  176. package/cli-tool/components/skills/development/skill-creator/scripts/quick_validate.py +65 -0
  177. package/cli-tool/components/skills/development/webapp-testing/LICENSE.txt +202 -0
  178. package/cli-tool/components/skills/development/webapp-testing/SKILL.md +96 -0
  179. package/cli-tool/components/skills/development/webapp-testing/examples/console_logging.py +35 -0
  180. package/cli-tool/components/skills/development/webapp-testing/examples/element_discovery.py +40 -0
  181. package/cli-tool/components/skills/development/webapp-testing/examples/static_html_automation.py +33 -0
  182. package/cli-tool/components/skills/development/webapp-testing/scripts/with_server.py +106 -0
  183. package/cli-tool/components/skills/document-processing/docx/LICENSE.txt +30 -0
  184. package/cli-tool/components/skills/document-processing/docx/SKILL.md +197 -0
  185. package/cli-tool/components/skills/document-processing/docx/docx-js.md +350 -0
  186. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  187. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  188. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  189. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  190. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  191. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  192. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  193. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  194. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  195. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  196. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  197. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  198. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  199. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  200. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  201. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  202. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  203. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  204. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  205. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  206. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  207. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  208. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  209. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  210. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  211. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  212. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  213. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  214. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  215. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  216. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  217. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/mce/mc.xsd +75 -0
  218. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  219. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  220. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  221. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  222. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  223. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  224. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  225. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/pack.py +159 -0
  226. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/unpack.py +29 -0
  227. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validate.py +69 -0
  228. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/__init__.py +15 -0
  229. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/base.py +951 -0
  230. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/docx.py +274 -0
  231. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/pptx.py +315 -0
  232. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/redlining.py +279 -0
  233. package/cli-tool/components/skills/document-processing/docx/ooxml.md +610 -0
  234. package/cli-tool/components/skills/document-processing/docx/scripts/__init__.py +1 -0
  235. package/cli-tool/components/skills/document-processing/docx/scripts/document.py +1276 -0
  236. package/cli-tool/components/skills/document-processing/docx/scripts/templates/comments.xml +3 -0
  237. package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsExtended.xml +3 -0
  238. package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsExtensible.xml +3 -0
  239. package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsIds.xml +3 -0
  240. package/cli-tool/components/skills/document-processing/docx/scripts/templates/people.xml +3 -0
  241. package/cli-tool/components/skills/document-processing/docx/scripts/utilities.py +374 -0
  242. package/cli-tool/components/skills/document-processing/pdf-anthropic/LICENSE.txt +30 -0
  243. package/cli-tool/components/skills/document-processing/pdf-anthropic/SKILL.md +294 -0
  244. package/cli-tool/components/skills/document-processing/pdf-anthropic/forms.md +205 -0
  245. package/cli-tool/components/skills/document-processing/pdf-anthropic/reference.md +612 -0
  246. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_bounding_boxes.py +70 -0
  247. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_bounding_boxes_test.py +226 -0
  248. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_fillable_fields.py +12 -0
  249. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/convert_pdf_to_images.py +35 -0
  250. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/create_validation_image.py +41 -0
  251. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/extract_form_field_info.py +152 -0
  252. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/fill_fillable_fields.py +114 -0
  253. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/fill_pdf_form_with_annotations.py +108 -0
  254. package/cli-tool/components/skills/document-processing/pdf-processing/FORMS.md +143 -0
  255. package/cli-tool/components/skills/document-processing/pdf-processing/SKILL.md +149 -0
  256. package/cli-tool/components/skills/document-processing/pdf-processing-pro/FORMS.md +610 -0
  257. package/cli-tool/components/skills/document-processing/pdf-processing-pro/OCR.md +137 -0
  258. package/cli-tool/components/skills/document-processing/pdf-processing-pro/SKILL.md +296 -0
  259. package/cli-tool/components/skills/document-processing/pdf-processing-pro/TABLES.md +626 -0
  260. package/cli-tool/components/skills/document-processing/pdf-processing-pro/scripts/analyze_form.py +307 -0
  261. package/cli-tool/components/skills/document-processing/pptx/LICENSE.txt +30 -0
  262. package/cli-tool/components/skills/document-processing/pptx/SKILL.md +484 -0
  263. package/cli-tool/components/skills/document-processing/pptx/html2pptx.md +625 -0
  264. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  265. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  266. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  267. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  268. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  269. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  270. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  271. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  272. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  273. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  274. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  275. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  276. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  277. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  278. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  279. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  280. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  281. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  282. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  283. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  284. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  285. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  286. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  287. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  288. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  289. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  290. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  291. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  292. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  293. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  294. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  295. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  296. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  297. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  298. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  299. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  300. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  301. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  302. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  303. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/pack.py +159 -0
  304. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/unpack.py +29 -0
  305. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validate.py +69 -0
  306. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/__init__.py +15 -0
  307. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/base.py +951 -0
  308. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/docx.py +274 -0
  309. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/pptx.py +315 -0
  310. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/redlining.py +279 -0
  311. package/cli-tool/components/skills/document-processing/pptx/ooxml.md +427 -0
  312. package/cli-tool/components/skills/document-processing/pptx/scripts/html2pptx.js +979 -0
  313. package/cli-tool/components/skills/document-processing/pptx/scripts/inventory.py +1020 -0
  314. package/cli-tool/components/skills/document-processing/pptx/scripts/rearrange.py +231 -0
  315. package/cli-tool/components/skills/document-processing/pptx/scripts/replace.py +385 -0
  316. package/cli-tool/components/skills/document-processing/pptx/scripts/thumbnail.py +450 -0
  317. package/cli-tool/components/skills/document-processing/xlsx/LICENSE.txt +30 -0
  318. package/cli-tool/components/skills/document-processing/xlsx/SKILL.md +289 -0
  319. package/cli-tool/components/skills/document-processing/xlsx/recalc.py +178 -0
  320. package/cli-tool/components/skills/enterprise-communication/brand-guidelines/LICENSE.txt +202 -0
  321. package/cli-tool/components/skills/enterprise-communication/brand-guidelines/SKILL.md +73 -0
  322. package/cli-tool/components/skills/enterprise-communication/email-composer/SKILL.md +317 -0
  323. package/cli-tool/components/skills/enterprise-communication/excel-analysis/SKILL.md +247 -0
  324. package/cli-tool/components/skills/enterprise-communication/internal-comms/LICENSE.txt +202 -0
  325. package/cli-tool/components/skills/enterprise-communication/internal-comms/SKILL.md +32 -0
  326. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/3p-updates.md +47 -0
  327. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/company-newsletter.md +65 -0
  328. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/faq-answers.md +30 -0
  329. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/general-comms.md +16 -0
  330. package/cli-tool/package-lock.json +39 -16
  331. package/cli-tool/package.json +7 -2
  332. package/cli-tool/security-report.json +62361 -0
  333. package/cli-tool/src/analytics-web/chats_mobile.html +17 -16
  334. package/cli-tool/src/console-bridge.js +3 -3
  335. package/cli-tool/src/index.js +157 -10
  336. package/cli-tool/src/plugin-dashboard-web/app.js +806 -0
  337. package/cli-tool/src/plugin-dashboard-web/index.html +292 -0
  338. package/cli-tool/src/plugin-dashboard-web/styles.css +1781 -0
  339. package/cli-tool/src/plugin-dashboard.js +689 -0
  340. package/cli-tool/src/security-audit.js +164 -0
  341. package/cli-tool/src/validation/ARCHITECTURE.md +309 -0
  342. package/cli-tool/src/validation/BaseValidator.js +152 -0
  343. package/cli-tool/src/validation/README.md +543 -0
  344. package/cli-tool/src/validation/ValidationOrchestrator.js +305 -0
  345. package/cli-tool/src/validation/validators/IntegrityValidator.js +338 -0
  346. package/cli-tool/src/validation/validators/ProvenanceValidator.js +399 -0
  347. package/cli-tool/src/validation/validators/ReferenceValidator.js +373 -0
  348. package/cli-tool/src/validation/validators/SemanticValidator.js +449 -0
  349. package/cli-tool/src/validation/validators/StructuralValidator.js +376 -0
  350. package/docs/CLAUDE.md +363 -0
  351. package/docs/api/README.md +297 -0
  352. package/docs/api/package.json +7 -0
  353. package/docs/api/track-download-supabase.js +150 -0
  354. package/docs/blog/README.md +199 -0
  355. package/docs/blog/blog-articles.json +133 -0
  356. package/docs/blog/css/blog-controls.css +254 -0
  357. package/docs/blog/e2b-claude-code-sandbox/index.html +8 -0
  358. package/docs/blog/index.html +81 -124
  359. package/docs/blog/js/blog-loader.js +602 -0
  360. package/docs/blog/nextjs-vercel-claude-code-integration/index.html +8 -0
  361. package/docs/blog/supabase-claude-code-integration/index.html +8 -0
  362. package/docs/component.html +226 -48
  363. package/docs/components.json +61610 -604
  364. package/docs/css/blog.css +292 -0
  365. package/docs/css/component-page.css +840 -3
  366. package/docs/css/plugin-page.css +648 -0
  367. package/docs/css/styles.css +504 -1
  368. package/docs/css/trending.css +110 -6
  369. package/docs/download-stats.html +8 -0
  370. package/docs/index.html +48 -22
  371. package/docs/jobs.html +8 -0
  372. package/docs/js/cart-manager.js +21 -8
  373. package/docs/js/component-page.js +1013 -12
  374. package/docs/js/data-loader.js +11 -8
  375. package/docs/js/index-events.js +305 -53
  376. package/docs/js/plugin-page.js +390 -0
  377. package/docs/js/script.js +50 -3
  378. package/docs/js/search-functionality.js +19 -16
  379. package/docs/js/trending.js +55 -20
  380. package/docs/plugin.html +262 -0
  381. package/docs/sandbox-interface.html +8 -0
  382. package/docs/static/favicon/about.txt +6 -0
  383. package/docs/static/favicon/android-chrome-192x192.png +0 -0
  384. package/docs/static/favicon/android-chrome-512x512.png +0 -0
  385. package/docs/static/favicon/apple-touch-icon.png +0 -0
  386. package/docs/static/favicon/favicon-16x16.png +0 -0
  387. package/docs/static/favicon/favicon-32x32.png +0 -0
  388. package/docs/static/favicon/favicon.ico +0 -0
  389. package/docs/static/favicon/site.webmanifest +1 -0
  390. package/docs/trending-data.json +616 -579
  391. package/docs/trending.html +24 -3
  392. package/docs/vercel.json +12 -0
  393. package/docs/workflows.html +8 -0
  394. package/generate_components_json.py +386 -11
  395. package/package.json +1 -1
  396. package/sync-api.sh +50 -0
  397. package/vercel.json +10 -75
  398. package/ROADMAP.md +0 -278
  399. package/test_serpapi.py +0 -36
  400. /package/cli-tool/components/commands/svelte/{svelte:a11y.md → svelte-a11y.md} +0 -0
  401. /package/cli-tool/components/commands/svelte/{svelte:component.md → svelte-component.md} +0 -0
  402. /package/cli-tool/components/commands/svelte/{svelte:debug.md → svelte-debug.md} +0 -0
  403. /package/cli-tool/components/commands/svelte/{svelte:migrate.md → svelte-migrate.md} +0 -0
  404. /package/cli-tool/components/commands/svelte/{svelte:optimize.md → svelte-optimize.md} +0 -0
  405. /package/cli-tool/components/commands/svelte/{svelte:scaffold.md → svelte-scaffold.md} +0 -0
  406. /package/cli-tool/components/commands/svelte/{svelte:storybook-migrate.md → svelte-storybook-migrate.md} +0 -0
  407. /package/cli-tool/components/commands/svelte/{svelte:storybook-mock.md → svelte-storybook-mock.md} +0 -0
  408. /package/cli-tool/components/commands/svelte/{svelte:storybook-setup.md → svelte-storybook-setup.md} +0 -0
  409. /package/cli-tool/components/commands/svelte/{svelte:storybook-story.md → svelte-storybook-story.md} +0 -0
  410. /package/cli-tool/components/commands/svelte/{svelte:storybook-troubleshoot.md → svelte-storybook-troubleshoot.md} +0 -0
  411. /package/cli-tool/components/commands/svelte/{svelte:storybook.md → svelte-storybook.md} +0 -0
  412. /package/cli-tool/components/commands/svelte/{svelte:test-coverage.md → svelte-test-coverage.md} +0 -0
  413. /package/cli-tool/components/commands/svelte/{svelte:test-fix.md → svelte-test-fix.md} +0 -0
  414. /package/cli-tool/components/commands/svelte/{svelte:test-setup.md → svelte-test-setup.md} +0 -0
  415. /package/cli-tool/components/commands/svelte/{svelte:test.md → svelte-test.md} +0 -0
@@ -0,0 +1,610 @@
1
+ # Office Open XML Technical Reference
2
+
3
+ **Important: Read this entire document before starting.** This document covers:
4
+ - [Technical Guidelines](#technical-guidelines) - Schema compliance rules and validation requirements
5
+ - [Document Content Patterns](#document-content-patterns) - XML patterns for headings, lists, tables, formatting, etc.
6
+ - [Document Library (Python)](#document-library-python) - Recommended approach for OOXML manipulation with automatic infrastructure setup
7
+ - [Tracked Changes (Redlining)](#tracked-changes-redlining) - XML patterns for implementing tracked changes
8
+
9
+ ## Technical Guidelines
10
+
11
+ ### Schema Compliance
12
+ - **Element ordering in `<w:pPr>`**: `<w:pStyle>`, `<w:numPr>`, `<w:spacing>`, `<w:ind>`, `<w:jc>`
13
+ - **Whitespace**: Add `xml:space='preserve'` to `<w:t>` elements with leading/trailing spaces
14
+ - **Unicode**: Escape characters in ASCII content: `"` becomes `&#8220;`
15
+ - **Character encoding reference**: Curly quotes `""` become `&#8220;&#8221;`, apostrophe `'` becomes `&#8217;`, em-dash `—` becomes `&#8212;`
16
+ - **Tracked changes**: Use `<w:del>` and `<w:ins>` tags with `w:author="Claude"` outside `<w:r>` elements
17
+ - **Critical**: `<w:ins>` closes with `</w:ins>`, `<w:del>` closes with `</w:del>` - never mix
18
+ - **RSIDs must be 8-digit hex**: Use values like `00AB1234` (only 0-9, A-F characters)
19
+ - **trackRevisions placement**: Add `<w:trackRevisions/>` after `<w:proofState>` in settings.xml
20
+ - **Images**: Add to `word/media/`, reference in `document.xml`, set dimensions to prevent overflow
21
+
22
+ ## Document Content Patterns
23
+
24
+ ### Basic Structure
25
+ ```xml
26
+ <w:p>
27
+ <w:r><w:t>Text content</w:t></w:r>
28
+ </w:p>
29
+ ```
30
+
31
+ ### Headings and Styles
32
+ ```xml
33
+ <w:p>
34
+ <w:pPr>
35
+ <w:pStyle w:val="Title"/>
36
+ <w:jc w:val="center"/>
37
+ </w:pPr>
38
+ <w:r><w:t>Document Title</w:t></w:r>
39
+ </w:p>
40
+
41
+ <w:p>
42
+ <w:pPr><w:pStyle w:val="Heading2"/></w:pPr>
43
+ <w:r><w:t>Section Heading</w:t></w:r>
44
+ </w:p>
45
+ ```
46
+
47
+ ### Text Formatting
48
+ ```xml
49
+ <!-- Bold -->
50
+ <w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>Bold</w:t></w:r>
51
+ <!-- Italic -->
52
+ <w:r><w:rPr><w:i/><w:iCs/></w:rPr><w:t>Italic</w:t></w:r>
53
+ <!-- Underline -->
54
+ <w:r><w:rPr><w:u w:val="single"/></w:rPr><w:t>Underlined</w:t></w:r>
55
+ <!-- Highlight -->
56
+ <w:r><w:rPr><w:highlight w:val="yellow"/></w:rPr><w:t>Highlighted</w:t></w:r>
57
+ ```
58
+
59
+ ### Lists
60
+ ```xml
61
+ <!-- Numbered list -->
62
+ <w:p>
63
+ <w:pPr>
64
+ <w:pStyle w:val="ListParagraph"/>
65
+ <w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr>
66
+ <w:spacing w:before="240"/>
67
+ </w:pPr>
68
+ <w:r><w:t>First item</w:t></w:r>
69
+ </w:p>
70
+
71
+ <!-- Restart numbered list at 1 - use different numId -->
72
+ <w:p>
73
+ <w:pPr>
74
+ <w:pStyle w:val="ListParagraph"/>
75
+ <w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr>
76
+ <w:spacing w:before="240"/>
77
+ </w:pPr>
78
+ <w:r><w:t>New list item 1</w:t></w:r>
79
+ </w:p>
80
+
81
+ <!-- Bullet list (level 2) -->
82
+ <w:p>
83
+ <w:pPr>
84
+ <w:pStyle w:val="ListParagraph"/>
85
+ <w:numPr><w:ilvl w:val="1"/><w:numId w:val="1"/></w:numPr>
86
+ <w:spacing w:before="240"/>
87
+ <w:ind w:left="900"/>
88
+ </w:pPr>
89
+ <w:r><w:t>Bullet item</w:t></w:r>
90
+ </w:p>
91
+ ```
92
+
93
+ ### Tables
94
+ ```xml
95
+ <w:tbl>
96
+ <w:tblPr>
97
+ <w:tblStyle w:val="TableGrid"/>
98
+ <w:tblW w:w="0" w:type="auto"/>
99
+ </w:tblPr>
100
+ <w:tblGrid>
101
+ <w:gridCol w:w="4675"/><w:gridCol w:w="4675"/>
102
+ </w:tblGrid>
103
+ <w:tr>
104
+ <w:tc>
105
+ <w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr>
106
+ <w:p><w:r><w:t>Cell 1</w:t></w:r></w:p>
107
+ </w:tc>
108
+ <w:tc>
109
+ <w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr>
110
+ <w:p><w:r><w:t>Cell 2</w:t></w:r></w:p>
111
+ </w:tc>
112
+ </w:tr>
113
+ </w:tbl>
114
+ ```
115
+
116
+ ### Layout
117
+ ```xml
118
+ <!-- Page break before new section (common pattern) -->
119
+ <w:p>
120
+ <w:r>
121
+ <w:br w:type="page"/>
122
+ </w:r>
123
+ </w:p>
124
+ <w:p>
125
+ <w:pPr>
126
+ <w:pStyle w:val="Heading1"/>
127
+ </w:pPr>
128
+ <w:r>
129
+ <w:t>New Section Title</w:t>
130
+ </w:r>
131
+ </w:p>
132
+
133
+ <!-- Centered paragraph -->
134
+ <w:p>
135
+ <w:pPr>
136
+ <w:spacing w:before="240" w:after="0"/>
137
+ <w:jc w:val="center"/>
138
+ </w:pPr>
139
+ <w:r><w:t>Centered text</w:t></w:r>
140
+ </w:p>
141
+
142
+ <!-- Font change - paragraph level (applies to all runs) -->
143
+ <w:p>
144
+ <w:pPr>
145
+ <w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New"/></w:rPr>
146
+ </w:pPr>
147
+ <w:r><w:t>Monospace text</w:t></w:r>
148
+ </w:p>
149
+
150
+ <!-- Font change - run level (specific to this text) -->
151
+ <w:p>
152
+ <w:r>
153
+ <w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New"/></w:rPr>
154
+ <w:t>This text is Courier New</w:t>
155
+ </w:r>
156
+ <w:r><w:t> and this text uses default font</w:t></w:r>
157
+ </w:p>
158
+ ```
159
+
160
+ ## File Updates
161
+
162
+ When adding content, update these files:
163
+
164
+ **`word/_rels/document.xml.rels`:**
165
+ ```xml
166
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering" Target="numbering.xml"/>
167
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png"/>
168
+ ```
169
+
170
+ **`[Content_Types].xml`:**
171
+ ```xml
172
+ <Default Extension="png" ContentType="image/png"/>
173
+ <Override PartName="/word/numbering.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"/>
174
+ ```
175
+
176
+ ### Images
177
+ **CRITICAL**: Calculate dimensions to prevent page overflow and maintain aspect ratio.
178
+
179
+ ```xml
180
+ <!-- Minimal required structure -->
181
+ <w:p>
182
+ <w:r>
183
+ <w:drawing>
184
+ <wp:inline>
185
+ <wp:extent cx="2743200" cy="1828800"/>
186
+ <wp:docPr id="1" name="Picture 1"/>
187
+ <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
188
+ <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
189
+ <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
190
+ <pic:nvPicPr>
191
+ <pic:cNvPr id="0" name="image1.png"/>
192
+ <pic:cNvPicPr/>
193
+ </pic:nvPicPr>
194
+ <pic:blipFill>
195
+ <a:blip r:embed="rId5"/>
196
+ <!-- Add for stretch fill with aspect ratio preservation -->
197
+ <a:stretch>
198
+ <a:fillRect/>
199
+ </a:stretch>
200
+ </pic:blipFill>
201
+ <pic:spPr>
202
+ <a:xfrm>
203
+ <a:ext cx="2743200" cy="1828800"/>
204
+ </a:xfrm>
205
+ <a:prstGeom prst="rect"/>
206
+ </pic:spPr>
207
+ </pic:pic>
208
+ </a:graphicData>
209
+ </a:graphic>
210
+ </wp:inline>
211
+ </w:drawing>
212
+ </w:r>
213
+ </w:p>
214
+ ```
215
+
216
+ ### Links (Hyperlinks)
217
+
218
+ **IMPORTANT**: All hyperlinks (both internal and external) require the Hyperlink style to be defined in styles.xml. Without this style, links will look like regular text instead of blue underlined clickable links.
219
+
220
+ **External Links:**
221
+ ```xml
222
+ <!-- In document.xml -->
223
+ <w:hyperlink r:id="rId5">
224
+ <w:r>
225
+ <w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr>
226
+ <w:t>Link Text</w:t>
227
+ </w:r>
228
+ </w:hyperlink>
229
+
230
+ <!-- In word/_rels/document.xml.rels -->
231
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
232
+ Target="https://www.example.com/" TargetMode="External"/>
233
+ ```
234
+
235
+ **Internal Links:**
236
+
237
+ ```xml
238
+ <!-- Link to bookmark -->
239
+ <w:hyperlink w:anchor="myBookmark">
240
+ <w:r>
241
+ <w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr>
242
+ <w:t>Link Text</w:t>
243
+ </w:r>
244
+ </w:hyperlink>
245
+
246
+ <!-- Bookmark target -->
247
+ <w:bookmarkStart w:id="0" w:name="myBookmark"/>
248
+ <w:r><w:t>Target content</w:t></w:r>
249
+ <w:bookmarkEnd w:id="0"/>
250
+ ```
251
+
252
+ **Hyperlink Style (required in styles.xml):**
253
+ ```xml
254
+ <w:style w:type="character" w:styleId="Hyperlink">
255
+ <w:name w:val="Hyperlink"/>
256
+ <w:basedOn w:val="DefaultParagraphFont"/>
257
+ <w:uiPriority w:val="99"/>
258
+ <w:unhideWhenUsed/>
259
+ <w:rPr>
260
+ <w:color w:val="467886" w:themeColor="hyperlink"/>
261
+ <w:u w:val="single"/>
262
+ </w:rPr>
263
+ </w:style>
264
+ ```
265
+
266
+ ## Document Library (Python)
267
+
268
+ Use the Document class from `scripts/document.py` for all tracked changes and comments. It automatically handles infrastructure setup (people.xml, RSIDs, settings.xml, comment files, relationships, content types). Only use direct XML manipulation for complex scenarios not supported by the library.
269
+
270
+ **Working with Unicode and Entities:**
271
+ - **Searching**: Both entity notation and Unicode characters work - `contains="&#8220;Company"` and `contains="\u201cCompany"` find the same text
272
+ - **Replacing**: Use either entities (`&#8220;`) or Unicode (`\u201c`) - both work and will be converted appropriately based on the file's encoding (ascii → entities, utf-8 → Unicode)
273
+
274
+ ### Initialization
275
+
276
+ **Find the docx skill root** (directory containing `scripts/` and `ooxml/`):
277
+ ```bash
278
+ # Search for document.py to locate the skill root
279
+ # Note: /mnt/skills is used here as an example; check your context for the actual location
280
+ find /mnt/skills -name "document.py" -path "*/docx/scripts/*" 2>/dev/null | head -1
281
+ # Example output: /mnt/skills/docx/scripts/document.py
282
+ # Skill root is: /mnt/skills/docx
283
+ ```
284
+
285
+ **Run your script with PYTHONPATH** set to the docx skill root:
286
+ ```bash
287
+ PYTHONPATH=/mnt/skills/docx python your_script.py
288
+ ```
289
+
290
+ **In your script**, import from the skill root:
291
+ ```python
292
+ from scripts.document import Document, DocxXMLEditor
293
+
294
+ # Basic initialization (automatically creates temp copy and sets up infrastructure)
295
+ doc = Document('unpacked')
296
+
297
+ # Customize author and initials
298
+ doc = Document('unpacked', author="John Doe", initials="JD")
299
+
300
+ # Enable track revisions mode
301
+ doc = Document('unpacked', track_revisions=True)
302
+
303
+ # Specify custom RSID (auto-generated if not provided)
304
+ doc = Document('unpacked', rsid="07DC5ECB")
305
+ ```
306
+
307
+ ### Creating Tracked Changes
308
+
309
+ **CRITICAL**: Only mark text that actually changes. Keep ALL unchanged text outside `<w:del>`/`<w:ins>` tags. Marking unchanged text makes edits unprofessional and harder to review.
310
+
311
+ **Attribute Handling**: The Document class auto-injects attributes (w:id, w:date, w:rsidR, w:rsidDel, w16du:dateUtc, xml:space) into new elements. When preserving unchanged text from the original document, copy the original `<w:r>` element with its existing attributes to maintain document integrity.
312
+
313
+ **Method Selection Guide**:
314
+ - **Adding your own changes to regular text**: Use `replace_node()` with `<w:del>`/`<w:ins>` tags, or `suggest_deletion()` for removing entire `<w:r>` or `<w:p>` elements
315
+ - **Partially modifying another author's tracked change**: Use `replace_node()` to nest your changes inside their `<w:ins>`/`<w:del>`
316
+ - **Completely rejecting another author's insertion**: Use `revert_insertion()` on the `<w:ins>` element (NOT `suggest_deletion()`)
317
+ - **Completely rejecting another author's deletion**: Use `revert_deletion()` on the `<w:del>` element to restore deleted content using tracked changes
318
+
319
+ ```python
320
+ # Minimal edit - change one word: "The report is monthly" → "The report is quarterly"
321
+ # Original: <w:r w:rsidR="00AB12CD"><w:rPr><w:rFonts w:ascii="Calibri"/></w:rPr><w:t>The report is monthly</w:t></w:r>
322
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="The report is monthly")
323
+ rpr = tags[0].toxml() if (tags := node.getElementsByTagName("w:rPr")) else ""
324
+ replacement = f'<w:r w:rsidR="00AB12CD">{rpr}<w:t>The report is </w:t></w:r><w:del><w:r>{rpr}<w:delText>monthly</w:delText></w:r></w:del><w:ins><w:r>{rpr}<w:t>quarterly</w:t></w:r></w:ins>'
325
+ doc["word/document.xml"].replace_node(node, replacement)
326
+
327
+ # Minimal edit - change number: "within 30 days" → "within 45 days"
328
+ # Original: <w:r w:rsidR="00XYZ789"><w:rPr><w:rFonts w:ascii="Calibri"/></w:rPr><w:t>within 30 days</w:t></w:r>
329
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="within 30 days")
330
+ rpr = tags[0].toxml() if (tags := node.getElementsByTagName("w:rPr")) else ""
331
+ replacement = f'<w:r w:rsidR="00XYZ789">{rpr}<w:t>within </w:t></w:r><w:del><w:r>{rpr}<w:delText>30</w:delText></w:r></w:del><w:ins><w:r>{rpr}<w:t>45</w:t></w:r></w:ins><w:r w:rsidR="00XYZ789">{rpr}<w:t> days</w:t></w:r>'
332
+ doc["word/document.xml"].replace_node(node, replacement)
333
+
334
+ # Complete replacement - preserve formatting even when replacing all text
335
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="apple")
336
+ rpr = tags[0].toxml() if (tags := node.getElementsByTagName("w:rPr")) else ""
337
+ replacement = f'<w:del><w:r>{rpr}<w:delText>apple</w:delText></w:r></w:del><w:ins><w:r>{rpr}<w:t>banana orange</w:t></w:r></w:ins>'
338
+ doc["word/document.xml"].replace_node(node, replacement)
339
+
340
+ # Insert new content (no attributes needed - auto-injected)
341
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="existing text")
342
+ doc["word/document.xml"].insert_after(node, '<w:ins><w:r><w:t>new text</w:t></w:r></w:ins>')
343
+
344
+ # Partially delete another author's insertion
345
+ # Original: <w:ins w:author="Jane Smith" w:date="..."><w:r><w:t>quarterly financial report</w:t></w:r></w:ins>
346
+ # Goal: Delete only "financial" to make it "quarterly report"
347
+ node = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "5"})
348
+ # IMPORTANT: Preserve w:author="Jane Smith" on the outer <w:ins> to maintain authorship
349
+ replacement = '''<w:ins w:author="Jane Smith" w:date="2025-01-15T10:00:00Z">
350
+ <w:r><w:t>quarterly </w:t></w:r>
351
+ <w:del><w:r><w:delText>financial </w:delText></w:r></w:del>
352
+ <w:r><w:t>report</w:t></w:r>
353
+ </w:ins>'''
354
+ doc["word/document.xml"].replace_node(node, replacement)
355
+
356
+ # Change part of another author's insertion
357
+ # Original: <w:ins w:author="Jane Smith"><w:r><w:t>in silence, safe and sound</w:t></w:r></w:ins>
358
+ # Goal: Change "safe and sound" to "soft and unbound"
359
+ node = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "8"})
360
+ replacement = f'''<w:ins w:author="Jane Smith" w:date="2025-01-15T10:00:00Z">
361
+ <w:r><w:t>in silence, </w:t></w:r>
362
+ </w:ins>
363
+ <w:ins>
364
+ <w:r><w:t>soft and unbound</w:t></w:r>
365
+ </w:ins>
366
+ <w:ins w:author="Jane Smith" w:date="2025-01-15T10:00:00Z">
367
+ <w:del><w:r><w:delText>safe and sound</w:delText></w:r></w:del>
368
+ </w:ins>'''
369
+ doc["word/document.xml"].replace_node(node, replacement)
370
+
371
+ # Delete entire run (use only when deleting all content; use replace_node for partial deletions)
372
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="text to delete")
373
+ doc["word/document.xml"].suggest_deletion(node)
374
+
375
+ # Delete entire paragraph (in-place, handles both regular and numbered list paragraphs)
376
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph to delete")
377
+ doc["word/document.xml"].suggest_deletion(para)
378
+
379
+ # Add new numbered list item
380
+ target_para = doc["word/document.xml"].get_node(tag="w:p", contains="existing list item")
381
+ pPr = tags[0].toxml() if (tags := target_para.getElementsByTagName("w:pPr")) else ""
382
+ new_item = f'<w:p>{pPr}<w:r><w:t>New item</w:t></w:r></w:p>'
383
+ tracked_para = DocxXMLEditor.suggest_paragraph(new_item)
384
+ doc["word/document.xml"].insert_after(target_para, tracked_para)
385
+ # Optional: add spacing paragraph before content for better visual separation
386
+ # spacing = DocxXMLEditor.suggest_paragraph('<w:p><w:pPr><w:pStyle w:val="ListParagraph"/></w:pPr></w:p>')
387
+ # doc["word/document.xml"].insert_after(target_para, spacing + tracked_para)
388
+ ```
389
+
390
+ ### Adding Comments
391
+
392
+ ```python
393
+ # Add comment spanning two existing tracked changes
394
+ # Note: w:id is auto-generated. Only search by w:id if you know it from XML inspection
395
+ start_node = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "1"})
396
+ end_node = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "2"})
397
+ doc.add_comment(start=start_node, end=end_node, text="Explanation of this change")
398
+
399
+ # Add comment on a paragraph
400
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph text")
401
+ doc.add_comment(start=para, end=para, text="Comment on this paragraph")
402
+
403
+ # Add comment on newly created tracked change
404
+ # First create the tracked change
405
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="old")
406
+ new_nodes = doc["word/document.xml"].replace_node(
407
+ node,
408
+ '<w:del><w:r><w:delText>old</w:delText></w:r></w:del><w:ins><w:r><w:t>new</w:t></w:r></w:ins>'
409
+ )
410
+ # Then add comment on the newly created elements
411
+ # new_nodes[0] is the <w:del>, new_nodes[1] is the <w:ins>
412
+ doc.add_comment(start=new_nodes[0], end=new_nodes[1], text="Changed old to new per requirements")
413
+
414
+ # Reply to existing comment
415
+ doc.reply_to_comment(parent_comment_id=0, text="I agree with this change")
416
+ ```
417
+
418
+ ### Rejecting Tracked Changes
419
+
420
+ **IMPORTANT**: Use `revert_insertion()` to reject insertions and `revert_deletion()` to restore deletions using tracked changes. Use `suggest_deletion()` only for regular unmarked content.
421
+
422
+ ```python
423
+ # Reject insertion (wraps it in deletion)
424
+ # Use this when another author inserted text that you want to delete
425
+ ins = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "5"})
426
+ nodes = doc["word/document.xml"].revert_insertion(ins) # Returns [ins]
427
+
428
+ # Reject deletion (creates insertion to restore deleted content)
429
+ # Use this when another author deleted text that you want to restore
430
+ del_elem = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "3"})
431
+ nodes = doc["word/document.xml"].revert_deletion(del_elem) # Returns [del_elem, new_ins]
432
+
433
+ # Reject all insertions in a paragraph
434
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph text")
435
+ nodes = doc["word/document.xml"].revert_insertion(para) # Returns [para]
436
+
437
+ # Reject all deletions in a paragraph
438
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph text")
439
+ nodes = doc["word/document.xml"].revert_deletion(para) # Returns [para]
440
+ ```
441
+
442
+ ### Inserting Images
443
+
444
+ **CRITICAL**: The Document class works with a temporary copy at `doc.unpacked_path`. Always copy images to this temp directory, not the original unpacked folder.
445
+
446
+ ```python
447
+ from PIL import Image
448
+ import shutil, os
449
+
450
+ # Initialize document first
451
+ doc = Document('unpacked')
452
+
453
+ # Copy image and calculate full-width dimensions with aspect ratio
454
+ media_dir = os.path.join(doc.unpacked_path, 'word/media')
455
+ os.makedirs(media_dir, exist_ok=True)
456
+ shutil.copy('image.png', os.path.join(media_dir, 'image1.png'))
457
+ img = Image.open(os.path.join(media_dir, 'image1.png'))
458
+ width_emus = int(6.5 * 914400) # 6.5" usable width, 914400 EMUs/inch
459
+ height_emus = int(width_emus * img.size[1] / img.size[0])
460
+
461
+ # Add relationship and content type
462
+ rels_editor = doc['word/_rels/document.xml.rels']
463
+ next_rid = rels_editor.get_next_rid()
464
+ rels_editor.append_to(rels_editor.dom.documentElement,
465
+ f'<Relationship Id="{next_rid}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png"/>')
466
+ doc['[Content_Types].xml'].append_to(doc['[Content_Types].xml'].dom.documentElement,
467
+ '<Default Extension="png" ContentType="image/png"/>')
468
+
469
+ # Insert image
470
+ node = doc["word/document.xml"].get_node(tag="w:p", line_number=100)
471
+ doc["word/document.xml"].insert_after(node, f'''<w:p>
472
+ <w:r>
473
+ <w:drawing>
474
+ <wp:inline distT="0" distB="0" distL="0" distR="0">
475
+ <wp:extent cx="{width_emus}" cy="{height_emus}"/>
476
+ <wp:docPr id="1" name="Picture 1"/>
477
+ <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
478
+ <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
479
+ <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
480
+ <pic:nvPicPr><pic:cNvPr id="1" name="image1.png"/><pic:cNvPicPr/></pic:nvPicPr>
481
+ <pic:blipFill><a:blip r:embed="{next_rid}"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill>
482
+ <pic:spPr><a:xfrm><a:ext cx="{width_emus}" cy="{height_emus}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr>
483
+ </pic:pic>
484
+ </a:graphicData>
485
+ </a:graphic>
486
+ </wp:inline>
487
+ </w:drawing>
488
+ </w:r>
489
+ </w:p>''')
490
+ ```
491
+
492
+ ### Getting Nodes
493
+
494
+ ```python
495
+ # By text content
496
+ node = doc["word/document.xml"].get_node(tag="w:p", contains="specific text")
497
+
498
+ # By line range
499
+ para = doc["word/document.xml"].get_node(tag="w:p", line_number=range(100, 150))
500
+
501
+ # By attributes
502
+ node = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "1"})
503
+
504
+ # By exact line number (must be line number where tag opens)
505
+ para = doc["word/document.xml"].get_node(tag="w:p", line_number=42)
506
+
507
+ # Combine filters
508
+ node = doc["word/document.xml"].get_node(tag="w:r", line_number=range(40, 60), contains="text")
509
+
510
+ # Disambiguate when text appears multiple times - add line_number range
511
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="Section", line_number=range(2400, 2500))
512
+ ```
513
+
514
+ ### Saving
515
+
516
+ ```python
517
+ # Save with automatic validation (copies back to original directory)
518
+ doc.save() # Validates by default, raises error if validation fails
519
+
520
+ # Save to different location
521
+ doc.save('modified-unpacked')
522
+
523
+ # Skip validation (debugging only - needing this in production indicates XML issues)
524
+ doc.save(validate=False)
525
+ ```
526
+
527
+ ### Direct DOM Manipulation
528
+
529
+ For complex scenarios not covered by the library:
530
+
531
+ ```python
532
+ # Access any XML file
533
+ editor = doc["word/document.xml"]
534
+ editor = doc["word/comments.xml"]
535
+
536
+ # Direct DOM access (defusedxml.minidom.Document)
537
+ node = doc["word/document.xml"].get_node(tag="w:p", line_number=5)
538
+ parent = node.parentNode
539
+ parent.removeChild(node)
540
+ parent.appendChild(node) # Move to end
541
+
542
+ # General document manipulation (without tracked changes)
543
+ old_node = doc["word/document.xml"].get_node(tag="w:p", contains="original text")
544
+ doc["word/document.xml"].replace_node(old_node, "<w:p><w:r><w:t>replacement text</w:t></w:r></w:p>")
545
+
546
+ # Multiple insertions - use return value to maintain order
547
+ node = doc["word/document.xml"].get_node(tag="w:r", line_number=100)
548
+ nodes = doc["word/document.xml"].insert_after(node, "<w:r><w:t>A</w:t></w:r>")
549
+ nodes = doc["word/document.xml"].insert_after(nodes[-1], "<w:r><w:t>B</w:t></w:r>")
550
+ nodes = doc["word/document.xml"].insert_after(nodes[-1], "<w:r><w:t>C</w:t></w:r>")
551
+ # Results in: original_node, A, B, C
552
+ ```
553
+
554
+ ## Tracked Changes (Redlining)
555
+
556
+ **Use the Document class above for all tracked changes.** The patterns below are for reference when constructing replacement XML strings.
557
+
558
+ ### Validation Rules
559
+ The validator checks that the document text matches the original after reverting Claude's changes. This means:
560
+ - **NEVER modify text inside another author's `<w:ins>` or `<w:del>` tags**
561
+ - **ALWAYS use nested deletions** to remove another author's insertions
562
+ - **Every edit must be properly tracked** with `<w:ins>` or `<w:del>` tags
563
+
564
+ ### Tracked Change Patterns
565
+
566
+ **CRITICAL RULES**:
567
+ 1. Never modify the content inside another author's tracked changes. Always use nested deletions.
568
+ 2. **XML Structure**: Always place `<w:del>` and `<w:ins>` at paragraph level containing complete `<w:r>` elements. Never nest inside `<w:r>` elements - this creates invalid XML that breaks document processing.
569
+
570
+ **Text Insertion:**
571
+ ```xml
572
+ <w:ins w:id="1" w:author="Claude" w:date="2025-07-30T23:05:00Z" w16du:dateUtc="2025-07-31T06:05:00Z">
573
+ <w:r w:rsidR="00792858">
574
+ <w:t>inserted text</w:t>
575
+ </w:r>
576
+ </w:ins>
577
+ ```
578
+
579
+ **Text Deletion:**
580
+ ```xml
581
+ <w:del w:id="2" w:author="Claude" w:date="2025-07-30T23:05:00Z" w16du:dateUtc="2025-07-31T06:05:00Z">
582
+ <w:r w:rsidDel="00792858">
583
+ <w:delText>deleted text</w:delText>
584
+ </w:r>
585
+ </w:del>
586
+ ```
587
+
588
+ **Deleting Another Author's Insertion (MUST use nested structure):**
589
+ ```xml
590
+ <!-- Nest deletion inside the original insertion -->
591
+ <w:ins w:author="Jane Smith" w:id="16">
592
+ <w:del w:author="Claude" w:id="40">
593
+ <w:r><w:delText>monthly</w:delText></w:r>
594
+ </w:del>
595
+ </w:ins>
596
+ <w:ins w:author="Claude" w:id="41">
597
+ <w:r><w:t>weekly</w:t></w:r>
598
+ </w:ins>
599
+ ```
600
+
601
+ **Restoring Another Author's Deletion:**
602
+ ```xml
603
+ <!-- Leave their deletion unchanged, add new insertion after it -->
604
+ <w:del w:author="Jane Smith" w:id="50">
605
+ <w:r><w:delText>within 30 days</w:delText></w:r>
606
+ </w:del>
607
+ <w:ins w:author="Claude" w:id="51">
608
+ <w:r><w:t>within 30 days</w:t></w:r>
609
+ </w:ins>
610
+ ```
@@ -0,0 +1 @@
1
+ # Make scripts directory a package for relative imports in tests