@amrhas82/agentic-kit 1.1.0 → 1.2.1

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 (1381) hide show
  1. package/CHANGELOG.md +378 -0
  2. package/README.md +166 -33
  3. package/docs/.gitkeep +1 -0
  4. package/docs/CONTRIBUTING.md +739 -0
  5. package/docs/DUAL_PUBLISH_SUMMARY.md +177 -0
  6. package/docs/ERROR_HANDLING_IMPLEMENTATION.md +327 -0
  7. package/docs/GITHUB_PACKAGES.md +181 -0
  8. package/docs/GITHUB_SETUP.md +158 -0
  9. package/docs/INSTALLATION_DEMO.md +691 -0
  10. package/docs/INSTALLER_GUIDE.md +1586 -0
  11. package/docs/INTEGRATION_ISSUES_9.1.md +341 -0
  12. package/docs/KNOWLEDGE_BASE.md +727 -0
  13. package/docs/MIGRATION.md +384 -0
  14. package/docs/PACKAGE_BASELINE.md +557 -0
  15. package/docs/PACKAGE_VALIDATION_REPORT.md +427 -0
  16. package/docs/PASS_INTEGRATION.md +307 -0
  17. package/docs/PASS_QUICK_START.md +150 -0
  18. package/docs/PRIVACY.md +203 -0
  19. package/docs/PUBLISHING.md +494 -0
  20. package/docs/SECURITY.md +317 -0
  21. package/docs/SILENT_MODE_GUIDE.md +526 -0
  22. package/docs/SKILLS_CONVERSION.md +154 -0
  23. package/docs/TESTING.md +582 -0
  24. package/docs/TEST_COVERAGE.md +347 -0
  25. package/docs/UPDATED_VARIANT_CONFIGURATION.md +274 -0
  26. package/docs/VARIANT_CONFIGURATION.md +440 -0
  27. package/installer/cli.js +2229 -0
  28. package/installer/installation-engine.js +1502 -0
  29. package/installer/package-manager.js +597 -0
  30. package/installer/path-manager.js +427 -0
  31. package/installer/report-template.js +298 -0
  32. package/installer/state-manager.js +426 -0
  33. package/installer/telemetry.js +241 -0
  34. package/installer/verification-system.js +274 -0
  35. package/package.json +25 -12
  36. package/packages/ampcode/AGENTS.md +109 -0
  37. package/packages/ampcode/README.md +17 -0
  38. package/packages/ampcode/agents/orchestrator.md +103 -0
  39. package/packages/ampcode/hooks/register-agents.js +128 -0
  40. package/packages/ampcode/hooks/session-start.js +168 -0
  41. package/packages/ampcode/resources/data.md +1372 -0
  42. package/packages/ampcode/settings.json +13 -0
  43. package/packages/ampcode/skills/README.md +76 -0
  44. package/packages/ampcode/subagents-and-skills.md +79 -0
  45. package/packages/ampcode/variants.json +67 -0
  46. package/packages/claude/AGENTS.md +243 -0
  47. package/packages/claude/README.md +23 -0
  48. package/packages/claude/agents/1-create-prd.md +56 -0
  49. package/packages/claude/agents/2-generate-tasks.md +73 -0
  50. package/packages/claude/agents/3-process-task-list.md +101 -0
  51. package/packages/claude/agents/business-analyst.md +76 -0
  52. package/packages/claude/agents/full-stack-dev.md +80 -0
  53. package/packages/claude/agents/holistic-architect.md +91 -0
  54. package/packages/claude/agents/master.md +55 -0
  55. package/packages/claude/agents/product-manager.md +82 -0
  56. package/packages/claude/agents/product-owner.md +97 -0
  57. package/packages/claude/agents/qa-test-architect.md +72 -0
  58. package/packages/claude/agents/scrum-master.md +64 -0
  59. package/packages/claude/agents/ux-expert.md +74 -0
  60. package/packages/claude/resources/agent-teams.yaml +50 -0
  61. package/packages/claude/resources/checklists.md +1724 -0
  62. package/packages/claude/resources/task-briefs.md +4428 -0
  63. package/packages/claude/resources/templates.yaml +5810 -0
  64. package/packages/claude/resources/workflows.yaml +1513 -0
  65. package/packages/claude/skills/README.md +76 -0
  66. package/packages/claude/skills/algorithmic-art/LICENSE.txt +202 -0
  67. package/packages/claude/skills/algorithmic-art/SKILL.md +405 -0
  68. package/packages/claude/skills/algorithmic-art/templates/generator_template.js +223 -0
  69. package/packages/claude/skills/algorithmic-art/templates/viewer.html +599 -0
  70. package/packages/claude/skills/artifacts-builder/LICENSE.txt +202 -0
  71. package/packages/claude/skills/artifacts-builder/SKILL.md +74 -0
  72. package/packages/claude/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  73. package/packages/claude/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  74. package/packages/claude/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  75. package/packages/claude/skills/brainstorming/SKILL.md +54 -0
  76. package/packages/claude/skills/brand-guidelines/LICENSE.txt +202 -0
  77. package/packages/claude/skills/brand-guidelines/SKILL.md +73 -0
  78. package/packages/claude/skills/canvas-design/LICENSE.txt +202 -0
  79. package/packages/claude/skills/canvas-design/SKILL.md +130 -0
  80. package/packages/claude/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  81. package/packages/claude/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  82. package/packages/claude/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  83. package/packages/claude/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  84. package/packages/claude/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  85. package/packages/claude/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  86. package/packages/claude/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  87. package/packages/claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  88. package/packages/claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  89. package/packages/claude/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  90. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  91. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  92. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  93. package/packages/claude/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  94. package/packages/claude/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  95. package/packages/claude/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  96. package/packages/claude/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  97. package/packages/claude/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  98. package/packages/claude/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  99. package/packages/claude/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  100. package/packages/claude/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  101. package/packages/claude/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  102. package/packages/claude/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  103. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  104. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  105. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  106. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  107. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  108. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  109. package/packages/claude/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  110. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  111. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  112. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  113. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  114. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  115. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  116. package/packages/claude/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  117. package/packages/claude/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  118. package/packages/claude/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  119. package/packages/claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  120. package/packages/claude/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  121. package/packages/claude/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  122. package/packages/claude/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  123. package/packages/claude/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  124. package/packages/claude/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  125. package/packages/claude/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  126. package/packages/claude/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  127. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  128. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  129. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  130. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  131. package/packages/claude/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  132. package/packages/claude/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  133. package/packages/claude/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  134. package/packages/claude/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  135. package/packages/claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  136. package/packages/claude/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  137. package/packages/claude/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  138. package/packages/claude/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  139. package/packages/claude/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  140. package/packages/claude/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  141. package/packages/claude/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  142. package/packages/claude/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  143. package/packages/claude/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  144. package/packages/claude/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  145. package/packages/claude/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  146. package/packages/claude/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  147. package/packages/claude/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  148. package/packages/claude/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  149. package/packages/claude/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  150. package/packages/claude/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  151. package/packages/claude/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  152. package/packages/claude/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  153. package/packages/claude/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  154. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  155. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  156. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  157. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  158. package/packages/claude/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  159. package/packages/claude/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  160. package/packages/claude/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  161. package/packages/claude/skills/code-review/SKILL.md +105 -0
  162. package/packages/claude/skills/code-review/code-reviewer.md +146 -0
  163. package/packages/claude/skills/condition-based-waiting/SKILL.md +120 -0
  164. package/packages/claude/skills/condition-based-waiting/example.ts +158 -0
  165. package/packages/claude/skills/docx/LICENSE.txt +30 -0
  166. package/packages/claude/skills/docx/SKILL.md +197 -0
  167. package/packages/claude/skills/docx/docx-js.md +350 -0
  168. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  169. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  170. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  171. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  172. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  173. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  174. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  175. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  176. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  177. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  178. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  179. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  180. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  181. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  182. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  183. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  184. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  185. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  186. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  187. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  188. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  189. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  190. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  191. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  192. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  193. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  194. package/packages/claude/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  195. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  196. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  197. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  198. package/packages/claude/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  199. package/packages/claude/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  200. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  201. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  202. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  203. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  204. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  205. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  206. package/packages/claude/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  207. package/packages/claude/skills/docx/ooxml/scripts/pack.py +159 -0
  208. package/packages/claude/skills/docx/ooxml/scripts/unpack.py +29 -0
  209. package/packages/claude/skills/docx/ooxml/scripts/validate.py +69 -0
  210. package/packages/claude/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  211. package/packages/claude/skills/docx/ooxml/scripts/validation/base.py +951 -0
  212. package/packages/claude/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  213. package/packages/claude/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  214. package/packages/claude/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  215. package/packages/claude/skills/docx/ooxml.md +610 -0
  216. package/packages/claude/skills/docx/scripts/__init__.py +1 -0
  217. package/packages/claude/skills/docx/scripts/document.py +1276 -0
  218. package/packages/claude/skills/docx/scripts/templates/comments.xml +3 -0
  219. package/packages/claude/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  220. package/packages/claude/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  221. package/packages/claude/skills/docx/scripts/templates/commentsIds.xml +3 -0
  222. package/packages/claude/skills/docx/scripts/templates/people.xml +3 -0
  223. package/packages/claude/skills/docx/scripts/utilities.py +374 -0
  224. package/packages/claude/skills/internal-comms/LICENSE.txt +202 -0
  225. package/packages/claude/skills/internal-comms/SKILL.md +32 -0
  226. package/packages/claude/skills/internal-comms/examples/3p-updates.md +47 -0
  227. package/packages/claude/skills/internal-comms/examples/company-newsletter.md +65 -0
  228. package/packages/claude/skills/internal-comms/examples/faq-answers.md +30 -0
  229. package/packages/claude/skills/internal-comms/examples/general-comms.md +16 -0
  230. package/packages/claude/skills/mcp-builder/LICENSE.txt +202 -0
  231. package/packages/claude/skills/mcp-builder/SKILL.md +328 -0
  232. package/packages/claude/skills/mcp-builder/reference/evaluation.md +602 -0
  233. package/packages/claude/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  234. package/packages/claude/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  235. package/packages/claude/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  236. package/packages/claude/skills/mcp-builder/scripts/connections.py +151 -0
  237. package/packages/claude/skills/mcp-builder/scripts/evaluation.py +373 -0
  238. package/packages/claude/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  239. package/packages/claude/skills/mcp-builder/scripts/requirements.txt +2 -0
  240. package/packages/claude/skills/pdf/LICENSE.txt +30 -0
  241. package/packages/claude/skills/pdf/SKILL.md +294 -0
  242. package/packages/claude/skills/pdf/forms.md +205 -0
  243. package/packages/claude/skills/pdf/reference.md +612 -0
  244. package/packages/claude/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  245. package/packages/claude/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  246. package/packages/claude/skills/pdf/scripts/check_fillable_fields.py +12 -0
  247. package/packages/claude/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  248. package/packages/claude/skills/pdf/scripts/create_validation_image.py +41 -0
  249. package/packages/claude/skills/pdf/scripts/extract_form_field_info.py +152 -0
  250. package/packages/claude/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  251. package/packages/claude/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  252. package/packages/claude/skills/pptx/LICENSE.txt +30 -0
  253. package/packages/claude/skills/pptx/SKILL.md +484 -0
  254. package/packages/claude/skills/pptx/html2pptx.md +625 -0
  255. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  256. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  257. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  258. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  259. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  260. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  261. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  262. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  263. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  264. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  265. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  266. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  267. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  268. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  269. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  270. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  271. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  272. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  273. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  274. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  275. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  276. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  277. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  278. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  279. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  280. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  281. package/packages/claude/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  282. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  283. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  284. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  285. package/packages/claude/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  286. package/packages/claude/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  287. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  288. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  289. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  290. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  291. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  292. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  293. package/packages/claude/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  294. package/packages/claude/skills/pptx/ooxml/scripts/pack.py +159 -0
  295. package/packages/claude/skills/pptx/ooxml/scripts/unpack.py +29 -0
  296. package/packages/claude/skills/pptx/ooxml/scripts/validate.py +69 -0
  297. package/packages/claude/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  298. package/packages/claude/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  299. package/packages/claude/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  300. package/packages/claude/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  301. package/packages/claude/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  302. package/packages/claude/skills/pptx/ooxml.md +427 -0
  303. package/packages/claude/skills/pptx/scripts/html2pptx.js +979 -0
  304. package/packages/claude/skills/pptx/scripts/inventory.py +1020 -0
  305. package/packages/claude/skills/pptx/scripts/rearrange.py +231 -0
  306. package/packages/claude/skills/pptx/scripts/replace.py +385 -0
  307. package/packages/claude/skills/pptx/scripts/thumbnail.py +450 -0
  308. package/packages/claude/skills/root-cause-tracing/SKILL.md +174 -0
  309. package/packages/claude/skills/root-cause-tracing/find-polluter.sh +63 -0
  310. package/packages/claude/skills/skill-creator/LICENSE.txt +202 -0
  311. package/packages/claude/skills/skill-creator/SKILL.md +209 -0
  312. package/packages/claude/skills/skill-creator/scripts/init_skill.py +303 -0
  313. package/packages/claude/skills/skill-creator/scripts/package_skill.py +110 -0
  314. package/packages/claude/skills/skill-creator/scripts/quick_validate.py +65 -0
  315. package/packages/claude/skills/slack-gif-creator/LICENSE.txt +202 -0
  316. package/packages/claude/skills/slack-gif-creator/SKILL.md +646 -0
  317. package/packages/claude/skills/slack-gif-creator/core/color_palettes.py +302 -0
  318. package/packages/claude/skills/slack-gif-creator/core/easing.py +230 -0
  319. package/packages/claude/skills/slack-gif-creator/core/frame_composer.py +469 -0
  320. package/packages/claude/skills/slack-gif-creator/core/gif_builder.py +246 -0
  321. package/packages/claude/skills/slack-gif-creator/core/typography.py +357 -0
  322. package/packages/claude/skills/slack-gif-creator/core/validators.py +264 -0
  323. package/packages/claude/skills/slack-gif-creator/core/visual_effects.py +494 -0
  324. package/packages/claude/skills/slack-gif-creator/requirements.txt +4 -0
  325. package/packages/claude/skills/slack-gif-creator/templates/bounce.py +106 -0
  326. package/packages/claude/skills/slack-gif-creator/templates/explode.py +331 -0
  327. package/packages/claude/skills/slack-gif-creator/templates/fade.py +329 -0
  328. package/packages/claude/skills/slack-gif-creator/templates/flip.py +291 -0
  329. package/packages/claude/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  330. package/packages/claude/skills/slack-gif-creator/templates/morph.py +329 -0
  331. package/packages/claude/skills/slack-gif-creator/templates/move.py +293 -0
  332. package/packages/claude/skills/slack-gif-creator/templates/pulse.py +268 -0
  333. package/packages/claude/skills/slack-gif-creator/templates/shake.py +127 -0
  334. package/packages/claude/skills/slack-gif-creator/templates/slide.py +291 -0
  335. package/packages/claude/skills/slack-gif-creator/templates/spin.py +269 -0
  336. package/packages/claude/skills/slack-gif-creator/templates/wiggle.py +300 -0
  337. package/packages/claude/skills/slack-gif-creator/templates/zoom.py +312 -0
  338. package/packages/claude/skills/systematic-debugging/CREATION-LOG.md +119 -0
  339. package/packages/claude/skills/systematic-debugging/SKILL.md +295 -0
  340. package/packages/claude/skills/systematic-debugging/test-academic.md +14 -0
  341. package/packages/claude/skills/systematic-debugging/test-pressure-1.md +58 -0
  342. package/packages/claude/skills/systematic-debugging/test-pressure-2.md +68 -0
  343. package/packages/claude/skills/systematic-debugging/test-pressure-3.md +69 -0
  344. package/packages/claude/skills/test-driven-development/SKILL.md +364 -0
  345. package/packages/claude/skills/testing-anti-patterns/SKILL.md +302 -0
  346. package/packages/claude/skills/theme-factory/LICENSE.txt +202 -0
  347. package/packages/claude/skills/theme-factory/SKILL.md +59 -0
  348. package/packages/claude/skills/theme-factory/theme-showcase.pdf +0 -0
  349. package/packages/claude/skills/theme-factory/themes/arctic-frost.md +19 -0
  350. package/packages/claude/skills/theme-factory/themes/botanical-garden.md +19 -0
  351. package/packages/claude/skills/theme-factory/themes/desert-rose.md +19 -0
  352. package/packages/claude/skills/theme-factory/themes/forest-canopy.md +19 -0
  353. package/packages/claude/skills/theme-factory/themes/golden-hour.md +19 -0
  354. package/packages/claude/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  355. package/packages/claude/skills/theme-factory/themes/modern-minimalist.md +19 -0
  356. package/packages/claude/skills/theme-factory/themes/ocean-depths.md +19 -0
  357. package/packages/claude/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  358. package/packages/claude/skills/theme-factory/themes/tech-innovation.md +19 -0
  359. package/packages/claude/skills/verification-before-completion/SKILL.md +139 -0
  360. package/packages/claude/skills/webapp-testing/LICENSE.txt +202 -0
  361. package/packages/claude/skills/webapp-testing/SKILL.md +96 -0
  362. package/packages/claude/skills/webapp-testing/examples/console_logging.py +35 -0
  363. package/packages/claude/skills/webapp-testing/examples/element_discovery.py +40 -0
  364. package/packages/claude/skills/webapp-testing/examples/static_html_automation.py +33 -0
  365. package/packages/claude/skills/webapp-testing/scripts/with_server.py +106 -0
  366. package/packages/claude/skills/xlsx/LICENSE.txt +30 -0
  367. package/packages/claude/skills/xlsx/SKILL.md +289 -0
  368. package/packages/claude/skills/xlsx/recalc.py +178 -0
  369. package/packages/claude/subagents-and-skills.md +79 -0
  370. package/packages/claude/variants.json +67 -0
  371. package/packages/droid/README.md +17 -0
  372. package/packages/droid/agents/1-create-prd.md +56 -0
  373. package/packages/droid/agents/2-generate-tasks.md +73 -0
  374. package/packages/droid/agents/3-process-task-list.md +101 -0
  375. package/packages/droid/agents/business-analyst.md +76 -0
  376. package/packages/droid/agents/full-stack-dev.md +80 -0
  377. package/packages/droid/agents/holistic-architect.md +91 -0
  378. package/packages/droid/agents/master.md +55 -0
  379. package/packages/droid/agents/orchestrator.md +103 -0
  380. package/packages/droid/agents/product-manager.md +82 -0
  381. package/packages/droid/agents/product-owner.md +97 -0
  382. package/packages/droid/agents/qa-test-architect.md +72 -0
  383. package/packages/droid/agents/scrum-master.md +64 -0
  384. package/packages/droid/agents/ux-expert.md +74 -0
  385. package/packages/droid/hooks/register-agents.js +128 -0
  386. package/packages/droid/hooks/session-start.js +168 -0
  387. package/packages/droid/resources/agent-teams.yaml +50 -0
  388. package/packages/droid/resources/checklists.md +1724 -0
  389. package/packages/droid/resources/data.md +1372 -0
  390. package/packages/droid/resources/task-briefs.md +4428 -0
  391. package/packages/droid/resources/templates.yaml +5810 -0
  392. package/packages/droid/resources/workflows.yaml +1513 -0
  393. package/packages/droid/skills/README.md +76 -0
  394. package/packages/droid/skills/algorithmic-art/LICENSE.txt +202 -0
  395. package/packages/droid/skills/algorithmic-art/SKILL.md +405 -0
  396. package/packages/droid/skills/algorithmic-art/templates/generator_template.js +223 -0
  397. package/packages/droid/skills/algorithmic-art/templates/viewer.html +599 -0
  398. package/packages/droid/skills/artifacts-builder/LICENSE.txt +202 -0
  399. package/packages/droid/skills/artifacts-builder/SKILL.md +74 -0
  400. package/packages/droid/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  401. package/packages/droid/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  402. package/packages/droid/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  403. package/packages/droid/skills/brainstorming/SKILL.md +54 -0
  404. package/packages/droid/skills/brand-guidelines/LICENSE.txt +202 -0
  405. package/packages/droid/skills/brand-guidelines/SKILL.md +73 -0
  406. package/packages/droid/skills/canvas-design/LICENSE.txt +202 -0
  407. package/packages/droid/skills/canvas-design/SKILL.md +130 -0
  408. package/packages/droid/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  409. package/packages/droid/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  410. package/packages/droid/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  411. package/packages/droid/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  412. package/packages/droid/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  413. package/packages/droid/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  414. package/packages/droid/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  415. package/packages/droid/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  416. package/packages/droid/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  417. package/packages/droid/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  418. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  419. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  420. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  421. package/packages/droid/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  422. package/packages/droid/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  423. package/packages/droid/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  424. package/packages/droid/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  425. package/packages/droid/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  426. package/packages/droid/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  427. package/packages/droid/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  428. package/packages/droid/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  429. package/packages/droid/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  430. package/packages/droid/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  431. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  432. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  433. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  434. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  435. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  436. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  437. package/packages/droid/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  438. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  439. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  440. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  441. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  442. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  443. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  444. package/packages/droid/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  445. package/packages/droid/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  446. package/packages/droid/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  447. package/packages/droid/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  448. package/packages/droid/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  449. package/packages/droid/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  450. package/packages/droid/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  451. package/packages/droid/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  452. package/packages/droid/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  453. package/packages/droid/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  454. package/packages/droid/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  455. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  456. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  457. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  458. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  459. package/packages/droid/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  460. package/packages/droid/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  461. package/packages/droid/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  462. package/packages/droid/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  463. package/packages/droid/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  464. package/packages/droid/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  465. package/packages/droid/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  466. package/packages/droid/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  467. package/packages/droid/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  468. package/packages/droid/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  469. package/packages/droid/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  470. package/packages/droid/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  471. package/packages/droid/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  472. package/packages/droid/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  473. package/packages/droid/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  474. package/packages/droid/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  475. package/packages/droid/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  476. package/packages/droid/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  477. package/packages/droid/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  478. package/packages/droid/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  479. package/packages/droid/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  480. package/packages/droid/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  481. package/packages/droid/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  482. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  483. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  484. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  485. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  486. package/packages/droid/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  487. package/packages/droid/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  488. package/packages/droid/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  489. package/packages/droid/skills/code-review/SKILL.md +105 -0
  490. package/packages/droid/skills/code-review/code-reviewer.md +146 -0
  491. package/packages/droid/skills/condition-based-waiting/SKILL.md +120 -0
  492. package/packages/droid/skills/condition-based-waiting/example.ts +158 -0
  493. package/packages/droid/skills/docx/LICENSE.txt +30 -0
  494. package/packages/droid/skills/docx/SKILL.md +197 -0
  495. package/packages/droid/skills/docx/docx-js.md +350 -0
  496. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  497. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  498. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  499. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  500. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  501. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  502. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  503. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  504. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  505. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  506. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  507. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  508. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  509. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  510. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  511. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  512. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  513. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  514. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  515. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  516. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  517. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  518. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  519. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  520. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  521. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  522. package/packages/droid/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  523. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  524. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  525. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  526. package/packages/droid/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  527. package/packages/droid/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  528. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  529. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  530. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  531. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  532. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  533. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  534. package/packages/droid/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  535. package/packages/droid/skills/docx/ooxml/scripts/pack.py +159 -0
  536. package/packages/droid/skills/docx/ooxml/scripts/unpack.py +29 -0
  537. package/packages/droid/skills/docx/ooxml/scripts/validate.py +69 -0
  538. package/packages/droid/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  539. package/packages/droid/skills/docx/ooxml/scripts/validation/base.py +951 -0
  540. package/packages/droid/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  541. package/packages/droid/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  542. package/packages/droid/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  543. package/packages/droid/skills/docx/ooxml.md +610 -0
  544. package/packages/droid/skills/docx/scripts/__init__.py +1 -0
  545. package/packages/droid/skills/docx/scripts/document.py +1276 -0
  546. package/packages/droid/skills/docx/scripts/templates/comments.xml +3 -0
  547. package/packages/droid/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  548. package/packages/droid/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  549. package/packages/droid/skills/docx/scripts/templates/commentsIds.xml +3 -0
  550. package/packages/droid/skills/docx/scripts/templates/people.xml +3 -0
  551. package/packages/droid/skills/docx/scripts/utilities.py +374 -0
  552. package/packages/droid/skills/internal-comms/LICENSE.txt +202 -0
  553. package/packages/droid/skills/internal-comms/SKILL.md +32 -0
  554. package/packages/droid/skills/internal-comms/examples/3p-updates.md +47 -0
  555. package/packages/droid/skills/internal-comms/examples/company-newsletter.md +65 -0
  556. package/packages/droid/skills/internal-comms/examples/faq-answers.md +30 -0
  557. package/packages/droid/skills/internal-comms/examples/general-comms.md +16 -0
  558. package/packages/droid/skills/mcp-builder/LICENSE.txt +202 -0
  559. package/packages/droid/skills/mcp-builder/SKILL.md +328 -0
  560. package/packages/droid/skills/mcp-builder/reference/evaluation.md +602 -0
  561. package/packages/droid/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  562. package/packages/droid/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  563. package/packages/droid/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  564. package/packages/droid/skills/mcp-builder/scripts/connections.py +151 -0
  565. package/packages/droid/skills/mcp-builder/scripts/evaluation.py +373 -0
  566. package/packages/droid/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  567. package/packages/droid/skills/mcp-builder/scripts/requirements.txt +2 -0
  568. package/packages/droid/skills/pdf/LICENSE.txt +30 -0
  569. package/packages/droid/skills/pdf/SKILL.md +294 -0
  570. package/packages/droid/skills/pdf/forms.md +205 -0
  571. package/packages/droid/skills/pdf/reference.md +612 -0
  572. package/packages/droid/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  573. package/packages/droid/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  574. package/packages/droid/skills/pdf/scripts/check_fillable_fields.py +12 -0
  575. package/packages/droid/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  576. package/packages/droid/skills/pdf/scripts/create_validation_image.py +41 -0
  577. package/packages/droid/skills/pdf/scripts/extract_form_field_info.py +152 -0
  578. package/packages/droid/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  579. package/packages/droid/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  580. package/packages/droid/skills/pptx/LICENSE.txt +30 -0
  581. package/packages/droid/skills/pptx/SKILL.md +484 -0
  582. package/packages/droid/skills/pptx/html2pptx.md +625 -0
  583. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  584. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  585. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  586. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  587. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  588. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  589. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  590. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  591. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  592. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  593. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  594. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  595. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  596. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  597. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  598. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  599. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  600. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  601. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  602. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  603. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  604. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  605. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  606. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  607. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  608. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  609. package/packages/droid/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  610. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  611. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  612. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  613. package/packages/droid/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  614. package/packages/droid/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  615. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  616. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  617. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  618. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  619. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  620. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  621. package/packages/droid/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  622. package/packages/droid/skills/pptx/ooxml/scripts/pack.py +159 -0
  623. package/packages/droid/skills/pptx/ooxml/scripts/unpack.py +29 -0
  624. package/packages/droid/skills/pptx/ooxml/scripts/validate.py +69 -0
  625. package/packages/droid/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  626. package/packages/droid/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  627. package/packages/droid/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  628. package/packages/droid/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  629. package/packages/droid/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  630. package/packages/droid/skills/pptx/ooxml.md +427 -0
  631. package/packages/droid/skills/pptx/scripts/html2pptx.js +979 -0
  632. package/packages/droid/skills/pptx/scripts/inventory.py +1020 -0
  633. package/packages/droid/skills/pptx/scripts/rearrange.py +231 -0
  634. package/packages/droid/skills/pptx/scripts/replace.py +385 -0
  635. package/packages/droid/skills/pptx/scripts/thumbnail.py +450 -0
  636. package/packages/droid/skills/root-cause-tracing/SKILL.md +174 -0
  637. package/packages/droid/skills/root-cause-tracing/find-polluter.sh +63 -0
  638. package/packages/droid/skills/skill-creator/LICENSE.txt +202 -0
  639. package/packages/droid/skills/skill-creator/SKILL.md +209 -0
  640. package/packages/droid/skills/skill-creator/scripts/init_skill.py +303 -0
  641. package/packages/droid/skills/skill-creator/scripts/package_skill.py +110 -0
  642. package/packages/droid/skills/skill-creator/scripts/quick_validate.py +65 -0
  643. package/packages/droid/skills/slack-gif-creator/LICENSE.txt +202 -0
  644. package/packages/droid/skills/slack-gif-creator/SKILL.md +646 -0
  645. package/packages/droid/skills/slack-gif-creator/core/color_palettes.py +302 -0
  646. package/packages/droid/skills/slack-gif-creator/core/easing.py +230 -0
  647. package/packages/droid/skills/slack-gif-creator/core/frame_composer.py +469 -0
  648. package/packages/droid/skills/slack-gif-creator/core/gif_builder.py +246 -0
  649. package/packages/droid/skills/slack-gif-creator/core/typography.py +357 -0
  650. package/packages/droid/skills/slack-gif-creator/core/validators.py +264 -0
  651. package/packages/droid/skills/slack-gif-creator/core/visual_effects.py +494 -0
  652. package/packages/droid/skills/slack-gif-creator/requirements.txt +4 -0
  653. package/packages/droid/skills/slack-gif-creator/templates/bounce.py +106 -0
  654. package/packages/droid/skills/slack-gif-creator/templates/explode.py +331 -0
  655. package/packages/droid/skills/slack-gif-creator/templates/fade.py +329 -0
  656. package/packages/droid/skills/slack-gif-creator/templates/flip.py +291 -0
  657. package/packages/droid/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  658. package/packages/droid/skills/slack-gif-creator/templates/morph.py +329 -0
  659. package/packages/droid/skills/slack-gif-creator/templates/move.py +293 -0
  660. package/packages/droid/skills/slack-gif-creator/templates/pulse.py +268 -0
  661. package/packages/droid/skills/slack-gif-creator/templates/shake.py +127 -0
  662. package/packages/droid/skills/slack-gif-creator/templates/slide.py +291 -0
  663. package/packages/droid/skills/slack-gif-creator/templates/spin.py +269 -0
  664. package/packages/droid/skills/slack-gif-creator/templates/wiggle.py +300 -0
  665. package/packages/droid/skills/slack-gif-creator/templates/zoom.py +312 -0
  666. package/packages/droid/skills/systematic-debugging/CREATION-LOG.md +119 -0
  667. package/packages/droid/skills/systematic-debugging/SKILL.md +295 -0
  668. package/packages/droid/skills/systematic-debugging/test-academic.md +14 -0
  669. package/packages/droid/skills/systematic-debugging/test-pressure-1.md +58 -0
  670. package/packages/droid/skills/systematic-debugging/test-pressure-2.md +68 -0
  671. package/packages/droid/skills/systematic-debugging/test-pressure-3.md +69 -0
  672. package/packages/droid/skills/test-driven-development/SKILL.md +364 -0
  673. package/packages/droid/skills/testing-anti-patterns/SKILL.md +302 -0
  674. package/packages/droid/skills/theme-factory/LICENSE.txt +202 -0
  675. package/packages/droid/skills/theme-factory/SKILL.md +59 -0
  676. package/packages/droid/skills/theme-factory/theme-showcase.pdf +0 -0
  677. package/packages/droid/skills/theme-factory/themes/arctic-frost.md +19 -0
  678. package/packages/droid/skills/theme-factory/themes/botanical-garden.md +19 -0
  679. package/packages/droid/skills/theme-factory/themes/desert-rose.md +19 -0
  680. package/packages/droid/skills/theme-factory/themes/forest-canopy.md +19 -0
  681. package/packages/droid/skills/theme-factory/themes/golden-hour.md +19 -0
  682. package/packages/droid/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  683. package/packages/droid/skills/theme-factory/themes/modern-minimalist.md +19 -0
  684. package/packages/droid/skills/theme-factory/themes/ocean-depths.md +19 -0
  685. package/packages/droid/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  686. package/packages/droid/skills/theme-factory/themes/tech-innovation.md +19 -0
  687. package/packages/droid/skills/verification-before-completion/SKILL.md +139 -0
  688. package/packages/droid/skills/webapp-testing/LICENSE.txt +202 -0
  689. package/packages/droid/skills/webapp-testing/SKILL.md +96 -0
  690. package/packages/droid/skills/webapp-testing/examples/console_logging.py +35 -0
  691. package/packages/droid/skills/webapp-testing/examples/element_discovery.py +40 -0
  692. package/packages/droid/skills/webapp-testing/examples/static_html_automation.py +33 -0
  693. package/packages/droid/skills/webapp-testing/scripts/with_server.py +106 -0
  694. package/packages/droid/skills/xlsx/LICENSE.txt +30 -0
  695. package/packages/droid/skills/xlsx/SKILL.md +289 -0
  696. package/packages/droid/skills/xlsx/recalc.py +178 -0
  697. package/packages/droid/subagents-and-skills.md +79 -0
  698. package/packages/droid/variants.json +67 -0
  699. package/packages/opencode/AGENTS.md +379 -0
  700. package/packages/opencode/README.md +17 -0
  701. package/packages/opencode/agents/1-create-prd.md +56 -0
  702. package/packages/opencode/agents/2-generate-tasks.md +73 -0
  703. package/packages/opencode/agents/3-process-task-list.md +101 -0
  704. package/packages/opencode/agents/business-analyst.md +76 -0
  705. package/packages/opencode/agents/full-stack-dev.md +73 -0
  706. package/packages/opencode/agents/holistic-architect.md +91 -0
  707. package/packages/opencode/agents/master.md +55 -0
  708. package/packages/opencode/agents/orchestrator.md +103 -0
  709. package/packages/opencode/agents/product-manager.md +82 -0
  710. package/packages/opencode/agents/product-owner.md +97 -0
  711. package/packages/opencode/agents/qa-test-architect.md +72 -0
  712. package/packages/opencode/agents/scrum-master.md +64 -0
  713. package/packages/opencode/agents/ux-expert.md +74 -0
  714. package/packages/opencode/hooks/register-agents.js +128 -0
  715. package/packages/opencode/hooks/session-start.js +168 -0
  716. package/packages/opencode/opencode.jsonc +225 -0
  717. package/packages/opencode/resources/agent-teams.yaml +50 -0
  718. package/packages/opencode/resources/checklists.md +1724 -0
  719. package/packages/opencode/resources/data.md +1372 -0
  720. package/packages/opencode/resources/task-briefs.md +4428 -0
  721. package/packages/opencode/resources/templates.yaml +5810 -0
  722. package/packages/opencode/resources/workflows.yaml +1513 -0
  723. package/packages/opencode/skills/README.md +76 -0
  724. package/packages/opencode/skills/algorithmic-art/LICENSE.txt +202 -0
  725. package/packages/opencode/skills/algorithmic-art/SKILL.md +405 -0
  726. package/packages/opencode/skills/algorithmic-art/templates/generator_template.js +223 -0
  727. package/packages/opencode/skills/algorithmic-art/templates/viewer.html +599 -0
  728. package/packages/opencode/skills/artifacts-builder/LICENSE.txt +202 -0
  729. package/packages/opencode/skills/artifacts-builder/SKILL.md +74 -0
  730. package/packages/opencode/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  731. package/packages/opencode/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  732. package/packages/opencode/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  733. package/packages/opencode/skills/brainstorming/SKILL.md +54 -0
  734. package/packages/opencode/skills/brand-guidelines/LICENSE.txt +202 -0
  735. package/packages/opencode/skills/brand-guidelines/SKILL.md +73 -0
  736. package/packages/opencode/skills/canvas-design/LICENSE.txt +202 -0
  737. package/packages/opencode/skills/canvas-design/SKILL.md +130 -0
  738. package/packages/opencode/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  739. package/packages/opencode/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  740. package/packages/opencode/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  741. package/packages/opencode/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  742. package/packages/opencode/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  743. package/packages/opencode/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  744. package/packages/opencode/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  745. package/packages/opencode/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  746. package/packages/opencode/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  747. package/packages/opencode/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  748. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  749. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  750. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  751. package/packages/opencode/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  752. package/packages/opencode/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  753. package/packages/opencode/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  754. package/packages/opencode/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  755. package/packages/opencode/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  756. package/packages/opencode/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  757. package/packages/opencode/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  758. package/packages/opencode/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  759. package/packages/opencode/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  760. package/packages/opencode/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  761. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  762. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  763. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  764. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  765. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  766. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  767. package/packages/opencode/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  768. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  769. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  770. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  771. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  772. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  773. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  774. package/packages/opencode/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  775. package/packages/opencode/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  776. package/packages/opencode/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  777. package/packages/opencode/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  778. package/packages/opencode/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  779. package/packages/opencode/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  780. package/packages/opencode/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  781. package/packages/opencode/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  782. package/packages/opencode/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  783. package/packages/opencode/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  784. package/packages/opencode/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  785. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  786. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  787. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  788. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  789. package/packages/opencode/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  790. package/packages/opencode/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  791. package/packages/opencode/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  792. package/packages/opencode/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  793. package/packages/opencode/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  794. package/packages/opencode/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  795. package/packages/opencode/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  796. package/packages/opencode/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  797. package/packages/opencode/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  798. package/packages/opencode/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  799. package/packages/opencode/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  800. package/packages/opencode/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  801. package/packages/opencode/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  802. package/packages/opencode/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  803. package/packages/opencode/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  804. package/packages/opencode/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  805. package/packages/opencode/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  806. package/packages/opencode/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  807. package/packages/opencode/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  808. package/packages/opencode/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  809. package/packages/opencode/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  810. package/packages/opencode/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  811. package/packages/opencode/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  812. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  813. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  814. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  815. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  816. package/packages/opencode/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  817. package/packages/opencode/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  818. package/packages/opencode/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  819. package/packages/opencode/skills/code-review/SKILL.md +105 -0
  820. package/packages/opencode/skills/code-review/code-reviewer.md +146 -0
  821. package/packages/opencode/skills/condition-based-waiting/SKILL.md +120 -0
  822. package/packages/opencode/skills/condition-based-waiting/example.ts +158 -0
  823. package/packages/opencode/skills/docx/LICENSE.txt +30 -0
  824. package/packages/opencode/skills/docx/SKILL.md +197 -0
  825. package/packages/opencode/skills/docx/docx-js.md +350 -0
  826. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  827. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  828. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  829. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  830. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  831. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  832. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  833. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  834. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  835. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  836. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  837. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  838. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  839. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  840. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  841. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  842. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  843. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  844. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  845. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  846. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  847. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  848. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  849. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  850. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  851. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  852. package/packages/opencode/skills/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  853. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  854. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  855. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  856. package/packages/opencode/skills/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  857. package/packages/opencode/skills/docx/ooxml/schemas/mce/mc.xsd +75 -0
  858. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  859. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  860. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  861. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  862. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  863. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  864. package/packages/opencode/skills/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  865. package/packages/opencode/skills/docx/ooxml/scripts/pack.py +159 -0
  866. package/packages/opencode/skills/docx/ooxml/scripts/unpack.py +29 -0
  867. package/packages/opencode/skills/docx/ooxml/scripts/validate.py +69 -0
  868. package/packages/opencode/skills/docx/ooxml/scripts/validation/__init__.py +15 -0
  869. package/packages/opencode/skills/docx/ooxml/scripts/validation/base.py +951 -0
  870. package/packages/opencode/skills/docx/ooxml/scripts/validation/docx.py +274 -0
  871. package/packages/opencode/skills/docx/ooxml/scripts/validation/pptx.py +315 -0
  872. package/packages/opencode/skills/docx/ooxml/scripts/validation/redlining.py +279 -0
  873. package/packages/opencode/skills/docx/ooxml.md +610 -0
  874. package/packages/opencode/skills/docx/scripts/__init__.py +1 -0
  875. package/packages/opencode/skills/docx/scripts/document.py +1276 -0
  876. package/packages/opencode/skills/docx/scripts/templates/comments.xml +3 -0
  877. package/packages/opencode/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  878. package/packages/opencode/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  879. package/packages/opencode/skills/docx/scripts/templates/commentsIds.xml +3 -0
  880. package/packages/opencode/skills/docx/scripts/templates/people.xml +3 -0
  881. package/packages/opencode/skills/docx/scripts/utilities.py +374 -0
  882. package/packages/opencode/skills/internal-comms/LICENSE.txt +202 -0
  883. package/packages/opencode/skills/internal-comms/SKILL.md +32 -0
  884. package/packages/opencode/skills/internal-comms/examples/3p-updates.md +47 -0
  885. package/packages/opencode/skills/internal-comms/examples/company-newsletter.md +65 -0
  886. package/packages/opencode/skills/internal-comms/examples/faq-answers.md +30 -0
  887. package/packages/opencode/skills/internal-comms/examples/general-comms.md +16 -0
  888. package/packages/opencode/skills/mcp-builder/LICENSE.txt +202 -0
  889. package/packages/opencode/skills/mcp-builder/SKILL.md +328 -0
  890. package/packages/opencode/skills/mcp-builder/reference/evaluation.md +602 -0
  891. package/packages/opencode/skills/mcp-builder/reference/mcp_best_practices.md +915 -0
  892. package/packages/opencode/skills/mcp-builder/reference/node_mcp_server.md +916 -0
  893. package/packages/opencode/skills/mcp-builder/reference/python_mcp_server.md +752 -0
  894. package/packages/opencode/skills/mcp-builder/scripts/connections.py +151 -0
  895. package/packages/opencode/skills/mcp-builder/scripts/evaluation.py +373 -0
  896. package/packages/opencode/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  897. package/packages/opencode/skills/mcp-builder/scripts/requirements.txt +2 -0
  898. package/packages/opencode/skills/pdf/LICENSE.txt +30 -0
  899. package/packages/opencode/skills/pdf/SKILL.md +294 -0
  900. package/packages/opencode/skills/pdf/forms.md +205 -0
  901. package/packages/opencode/skills/pdf/reference.md +612 -0
  902. package/packages/opencode/skills/pdf/scripts/check_bounding_boxes.py +70 -0
  903. package/packages/opencode/skills/pdf/scripts/check_bounding_boxes_test.py +226 -0
  904. package/packages/opencode/skills/pdf/scripts/check_fillable_fields.py +12 -0
  905. package/packages/opencode/skills/pdf/scripts/convert_pdf_to_images.py +35 -0
  906. package/packages/opencode/skills/pdf/scripts/create_validation_image.py +41 -0
  907. package/packages/opencode/skills/pdf/scripts/extract_form_field_info.py +152 -0
  908. package/packages/opencode/skills/pdf/scripts/fill_fillable_fields.py +114 -0
  909. package/packages/opencode/skills/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  910. package/packages/opencode/skills/pptx/LICENSE.txt +30 -0
  911. package/packages/opencode/skills/pptx/SKILL.md +484 -0
  912. package/packages/opencode/skills/pptx/html2pptx.md +625 -0
  913. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  914. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  915. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  916. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  917. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  918. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  919. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  920. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  921. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  922. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  923. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  924. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  925. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  926. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  927. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  928. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  929. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  930. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  931. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  932. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  933. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  934. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  935. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  936. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  937. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  938. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  939. package/packages/opencode/skills/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  940. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  941. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  942. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  943. package/packages/opencode/skills/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  944. package/packages/opencode/skills/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  945. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  946. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  947. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  948. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  949. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  950. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  951. package/packages/opencode/skills/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  952. package/packages/opencode/skills/pptx/ooxml/scripts/pack.py +159 -0
  953. package/packages/opencode/skills/pptx/ooxml/scripts/unpack.py +29 -0
  954. package/packages/opencode/skills/pptx/ooxml/scripts/validate.py +69 -0
  955. package/packages/opencode/skills/pptx/ooxml/scripts/validation/__init__.py +15 -0
  956. package/packages/opencode/skills/pptx/ooxml/scripts/validation/base.py +951 -0
  957. package/packages/opencode/skills/pptx/ooxml/scripts/validation/docx.py +274 -0
  958. package/packages/opencode/skills/pptx/ooxml/scripts/validation/pptx.py +315 -0
  959. package/packages/opencode/skills/pptx/ooxml/scripts/validation/redlining.py +279 -0
  960. package/packages/opencode/skills/pptx/ooxml.md +427 -0
  961. package/packages/opencode/skills/pptx/scripts/html2pptx.js +979 -0
  962. package/packages/opencode/skills/pptx/scripts/inventory.py +1020 -0
  963. package/packages/opencode/skills/pptx/scripts/rearrange.py +231 -0
  964. package/packages/opencode/skills/pptx/scripts/replace.py +385 -0
  965. package/packages/opencode/skills/pptx/scripts/thumbnail.py +450 -0
  966. package/packages/opencode/skills/root-cause-tracing/SKILL.md +174 -0
  967. package/packages/opencode/skills/root-cause-tracing/find-polluter.sh +63 -0
  968. package/packages/opencode/skills/skill-creator/LICENSE.txt +202 -0
  969. package/packages/opencode/skills/skill-creator/SKILL.md +209 -0
  970. package/packages/opencode/skills/skill-creator/scripts/init_skill.py +303 -0
  971. package/packages/opencode/skills/skill-creator/scripts/package_skill.py +110 -0
  972. package/packages/opencode/skills/skill-creator/scripts/quick_validate.py +65 -0
  973. package/packages/opencode/skills/slack-gif-creator/LICENSE.txt +202 -0
  974. package/packages/opencode/skills/slack-gif-creator/SKILL.md +646 -0
  975. package/packages/opencode/skills/slack-gif-creator/core/color_palettes.py +302 -0
  976. package/packages/opencode/skills/slack-gif-creator/core/easing.py +230 -0
  977. package/packages/opencode/skills/slack-gif-creator/core/frame_composer.py +469 -0
  978. package/packages/opencode/skills/slack-gif-creator/core/gif_builder.py +246 -0
  979. package/packages/opencode/skills/slack-gif-creator/core/typography.py +357 -0
  980. package/packages/opencode/skills/slack-gif-creator/core/validators.py +264 -0
  981. package/packages/opencode/skills/slack-gif-creator/core/visual_effects.py +494 -0
  982. package/packages/opencode/skills/slack-gif-creator/requirements.txt +4 -0
  983. package/packages/opencode/skills/slack-gif-creator/templates/bounce.py +106 -0
  984. package/packages/opencode/skills/slack-gif-creator/templates/explode.py +331 -0
  985. package/packages/opencode/skills/slack-gif-creator/templates/fade.py +329 -0
  986. package/packages/opencode/skills/slack-gif-creator/templates/flip.py +291 -0
  987. package/packages/opencode/skills/slack-gif-creator/templates/kaleidoscope.py +211 -0
  988. package/packages/opencode/skills/slack-gif-creator/templates/morph.py +329 -0
  989. package/packages/opencode/skills/slack-gif-creator/templates/move.py +293 -0
  990. package/packages/opencode/skills/slack-gif-creator/templates/pulse.py +268 -0
  991. package/packages/opencode/skills/slack-gif-creator/templates/shake.py +127 -0
  992. package/packages/opencode/skills/slack-gif-creator/templates/slide.py +291 -0
  993. package/packages/opencode/skills/slack-gif-creator/templates/spin.py +269 -0
  994. package/packages/opencode/skills/slack-gif-creator/templates/wiggle.py +300 -0
  995. package/packages/opencode/skills/slack-gif-creator/templates/zoom.py +312 -0
  996. package/packages/opencode/skills/systematic-debugging/CREATION-LOG.md +119 -0
  997. package/packages/opencode/skills/systematic-debugging/SKILL.md +295 -0
  998. package/packages/opencode/skills/systematic-debugging/test-academic.md +14 -0
  999. package/packages/opencode/skills/systematic-debugging/test-pressure-1.md +58 -0
  1000. package/packages/opencode/skills/systematic-debugging/test-pressure-2.md +68 -0
  1001. package/packages/opencode/skills/systematic-debugging/test-pressure-3.md +69 -0
  1002. package/packages/opencode/skills/test-driven-development/SKILL.md +364 -0
  1003. package/packages/opencode/skills/testing-anti-patterns/SKILL.md +302 -0
  1004. package/packages/opencode/skills/theme-factory/LICENSE.txt +202 -0
  1005. package/packages/opencode/skills/theme-factory/SKILL.md +59 -0
  1006. package/packages/opencode/skills/theme-factory/theme-showcase.pdf +0 -0
  1007. package/packages/opencode/skills/theme-factory/themes/arctic-frost.md +19 -0
  1008. package/packages/opencode/skills/theme-factory/themes/botanical-garden.md +19 -0
  1009. package/packages/opencode/skills/theme-factory/themes/desert-rose.md +19 -0
  1010. package/packages/opencode/skills/theme-factory/themes/forest-canopy.md +19 -0
  1011. package/packages/opencode/skills/theme-factory/themes/golden-hour.md +19 -0
  1012. package/packages/opencode/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  1013. package/packages/opencode/skills/theme-factory/themes/modern-minimalist.md +19 -0
  1014. package/packages/opencode/skills/theme-factory/themes/ocean-depths.md +19 -0
  1015. package/packages/opencode/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  1016. package/packages/opencode/skills/theme-factory/themes/tech-innovation.md +19 -0
  1017. package/packages/opencode/skills/verification-before-completion/SKILL.md +139 -0
  1018. package/packages/opencode/skills/webapp-testing/LICENSE.txt +202 -0
  1019. package/packages/opencode/skills/webapp-testing/SKILL.md +96 -0
  1020. package/packages/opencode/skills/webapp-testing/examples/console_logging.py +35 -0
  1021. package/packages/opencode/skills/webapp-testing/examples/element_discovery.py +40 -0
  1022. package/packages/opencode/skills/webapp-testing/examples/static_html_automation.py +33 -0
  1023. package/packages/opencode/skills/webapp-testing/scripts/with_server.py +106 -0
  1024. package/packages/opencode/skills/xlsx/LICENSE.txt +30 -0
  1025. package/packages/opencode/skills/xlsx/SKILL.md +289 -0
  1026. package/packages/opencode/skills/xlsx/recalc.py +178 -0
  1027. package/packages/opencode/skills-backup/README.md +76 -0
  1028. package/packages/opencode/skills-backup/algorithmic-art.md +159 -0
  1029. package/packages/opencode/skills-backup/artifacts-builder.md +285 -0
  1030. package/packages/opencode/skills-backup/brainstorming.md +49 -0
  1031. package/packages/opencode/skills-backup/brand-guidelines.md +123 -0
  1032. package/packages/opencode/skills-backup/canvas-design.md +155 -0
  1033. package/packages/opencode/skills-backup/code-review.md +92 -0
  1034. package/packages/opencode/skills-backup/condition-based-waiting.md +133 -0
  1035. package/packages/opencode/skills-backup/docx.md +255 -0
  1036. package/packages/opencode/skills-backup/internal-comms.md +142 -0
  1037. package/packages/opencode/skills-backup/mcp-builder.md +282 -0
  1038. package/packages/opencode/skills-backup/pdf.md +194 -0
  1039. package/packages/opencode/skills-backup/pptx.md +272 -0
  1040. package/packages/opencode/skills-backup/root-cause-tracing.md +211 -0
  1041. package/packages/opencode/skills-backup/skill-creator.md +196 -0
  1042. package/packages/opencode/skills-backup/slack-gif-creator.md +340 -0
  1043. package/packages/opencode/skills-backup/systematic-debugging.md +215 -0
  1044. package/packages/opencode/skills-backup/test-driven-development.md +231 -0
  1045. package/packages/opencode/skills-backup/testing-anti-patterns.md +248 -0
  1046. package/packages/opencode/skills-backup/theme-factory.md +146 -0
  1047. package/packages/opencode/skills-backup/verification-before-completion.md +151 -0
  1048. package/packages/opencode/skills-backup/webapp-testing.md +275 -0
  1049. package/packages/opencode/skills-backup/xlsx.md +254 -0
  1050. package/packages/opencode/subagents-and-skills.md +79 -0
  1051. package/packages/opencode/variants.json +67 -0
  1052. package/validate-references.sh +0 -86
  1053. /package/{agents → packages/ampcode/agents}/1-create-prd.md +0 -0
  1054. /package/{agents → packages/ampcode/agents}/2-generate-tasks.md +0 -0
  1055. /package/{agents → packages/ampcode/agents}/3-process-task-list.md +0 -0
  1056. /package/{agents → packages/ampcode/agents}/business-analyst.md +0 -0
  1057. /package/{agents → packages/ampcode/agents}/full-stack-dev.md +0 -0
  1058. /package/{agents → packages/ampcode/agents}/holistic-architect.md +0 -0
  1059. /package/{agents → packages/ampcode/agents}/master.md +0 -0
  1060. /package/{agents → packages/ampcode/agents}/product-manager.md +0 -0
  1061. /package/{agents → packages/ampcode/agents}/product-owner.md +0 -0
  1062. /package/{agents → packages/ampcode/agents}/qa-test-architect.md +0 -0
  1063. /package/{agents → packages/ampcode/agents}/scrum-master.md +0 -0
  1064. /package/{agents → packages/ampcode/agents}/ux-expert.md +0 -0
  1065. /package/{resources → packages/ampcode/resources}/agent-teams.yaml +0 -0
  1066. /package/{resources → packages/ampcode/resources}/checklists.md +0 -0
  1067. /package/{resources → packages/ampcode/resources}/task-briefs.md +0 -0
  1068. /package/{resources → packages/ampcode/resources}/templates.yaml +0 -0
  1069. /package/{resources → packages/ampcode/resources}/workflows.yaml +0 -0
  1070. /package/{skills → packages/ampcode/skills}/algorithmic-art/LICENSE.txt +0 -0
  1071. /package/{skills → packages/ampcode/skills}/algorithmic-art/SKILL.md +0 -0
  1072. /package/{skills → packages/ampcode/skills}/algorithmic-art/templates/generator_template.js +0 -0
  1073. /package/{skills → packages/ampcode/skills}/algorithmic-art/templates/viewer.html +0 -0
  1074. /package/{skills → packages/ampcode/skills}/artifacts-builder/LICENSE.txt +0 -0
  1075. /package/{skills → packages/ampcode/skills}/artifacts-builder/SKILL.md +0 -0
  1076. /package/{skills → packages/ampcode/skills}/artifacts-builder/scripts/bundle-artifact.sh +0 -0
  1077. /package/{skills → packages/ampcode/skills}/artifacts-builder/scripts/init-artifact.sh +0 -0
  1078. /package/{skills → packages/ampcode/skills}/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  1079. /package/{skills → packages/ampcode/skills}/brainstorming/SKILL.md +0 -0
  1080. /package/{skills → packages/ampcode/skills}/brand-guidelines/LICENSE.txt +0 -0
  1081. /package/{skills → packages/ampcode/skills}/brand-guidelines/SKILL.md +0 -0
  1082. /package/{skills → packages/ampcode/skills}/canvas-design/LICENSE.txt +0 -0
  1083. /package/{skills → packages/ampcode/skills}/canvas-design/SKILL.md +0 -0
  1084. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  1085. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  1086. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  1087. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  1088. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  1089. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  1090. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  1091. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  1092. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  1093. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  1094. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  1095. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  1096. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  1097. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  1098. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  1099. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  1100. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  1101. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  1102. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  1103. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  1104. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  1105. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  1106. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  1107. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  1108. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  1109. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  1110. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  1111. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  1112. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  1113. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  1114. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  1115. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  1116. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  1117. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  1118. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  1119. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  1120. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  1121. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  1122. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  1123. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  1124. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  1125. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  1126. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  1127. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  1128. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  1129. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  1130. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  1131. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  1132. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  1133. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  1134. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  1135. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  1136. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  1137. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  1138. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  1139. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  1140. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  1141. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  1142. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  1143. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  1144. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  1145. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  1146. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  1147. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  1148. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  1149. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  1150. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  1151. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  1152. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  1153. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  1154. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  1155. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  1156. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  1157. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  1158. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  1159. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  1160. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  1161. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  1162. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  1163. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  1164. /package/{skills → packages/ampcode/skills}/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  1165. /package/{skills → packages/ampcode/skills}/code-review/SKILL.md +0 -0
  1166. /package/{skills → packages/ampcode/skills}/code-review/code-reviewer.md +0 -0
  1167. /package/{skills → packages/ampcode/skills}/condition-based-waiting/SKILL.md +0 -0
  1168. /package/{skills → packages/ampcode/skills}/condition-based-waiting/example.ts +0 -0
  1169. /package/{skills → packages/ampcode/skills}/docx/LICENSE.txt +0 -0
  1170. /package/{skills → packages/ampcode/skills}/docx/SKILL.md +0 -0
  1171. /package/{skills → packages/ampcode/skills}/docx/docx-js.md +0 -0
  1172. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  1173. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  1174. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  1175. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  1176. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  1177. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  1178. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  1179. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  1180. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  1181. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  1182. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  1183. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  1184. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  1185. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  1186. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  1187. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  1188. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  1189. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  1190. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  1191. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  1192. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  1193. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  1194. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  1195. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  1196. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  1197. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  1198. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  1199. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  1200. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  1201. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  1202. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  1203. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/mce/mc.xsd +0 -0
  1204. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  1205. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  1206. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  1207. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  1208. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  1209. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  1210. /package/{skills → packages/ampcode/skills}/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  1211. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/pack.py +0 -0
  1212. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/unpack.py +0 -0
  1213. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validate.py +0 -0
  1214. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/__init__.py +0 -0
  1215. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/base.py +0 -0
  1216. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/docx.py +0 -0
  1217. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/pptx.py +0 -0
  1218. /package/{skills → packages/ampcode/skills}/docx/ooxml/scripts/validation/redlining.py +0 -0
  1219. /package/{skills → packages/ampcode/skills}/docx/ooxml.md +0 -0
  1220. /package/{skills → packages/ampcode/skills}/docx/scripts/__init__.py +0 -0
  1221. /package/{skills → packages/ampcode/skills}/docx/scripts/document.py +0 -0
  1222. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/comments.xml +0 -0
  1223. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/commentsExtended.xml +0 -0
  1224. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/commentsExtensible.xml +0 -0
  1225. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/commentsIds.xml +0 -0
  1226. /package/{skills → packages/ampcode/skills}/docx/scripts/templates/people.xml +0 -0
  1227. /package/{skills → packages/ampcode/skills}/docx/scripts/utilities.py +0 -0
  1228. /package/{skills → packages/ampcode/skills}/internal-comms/LICENSE.txt +0 -0
  1229. /package/{skills → packages/ampcode/skills}/internal-comms/SKILL.md +0 -0
  1230. /package/{skills → packages/ampcode/skills}/internal-comms/examples/3p-updates.md +0 -0
  1231. /package/{skills → packages/ampcode/skills}/internal-comms/examples/company-newsletter.md +0 -0
  1232. /package/{skills → packages/ampcode/skills}/internal-comms/examples/faq-answers.md +0 -0
  1233. /package/{skills → packages/ampcode/skills}/internal-comms/examples/general-comms.md +0 -0
  1234. /package/{skills → packages/ampcode/skills}/mcp-builder/LICENSE.txt +0 -0
  1235. /package/{skills → packages/ampcode/skills}/mcp-builder/SKILL.md +0 -0
  1236. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/evaluation.md +0 -0
  1237. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/mcp_best_practices.md +0 -0
  1238. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/node_mcp_server.md +0 -0
  1239. /package/{skills → packages/ampcode/skills}/mcp-builder/reference/python_mcp_server.md +0 -0
  1240. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/connections.py +0 -0
  1241. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/evaluation.py +0 -0
  1242. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/example_evaluation.xml +0 -0
  1243. /package/{skills → packages/ampcode/skills}/mcp-builder/scripts/requirements.txt +0 -0
  1244. /package/{skills → packages/ampcode/skills}/pdf/LICENSE.txt +0 -0
  1245. /package/{skills → packages/ampcode/skills}/pdf/SKILL.md +0 -0
  1246. /package/{skills → packages/ampcode/skills}/pdf/forms.md +0 -0
  1247. /package/{skills → packages/ampcode/skills}/pdf/reference.md +0 -0
  1248. /package/{skills → packages/ampcode/skills}/pdf/scripts/check_bounding_boxes.py +0 -0
  1249. /package/{skills → packages/ampcode/skills}/pdf/scripts/check_bounding_boxes_test.py +0 -0
  1250. /package/{skills → packages/ampcode/skills}/pdf/scripts/check_fillable_fields.py +0 -0
  1251. /package/{skills → packages/ampcode/skills}/pdf/scripts/convert_pdf_to_images.py +0 -0
  1252. /package/{skills → packages/ampcode/skills}/pdf/scripts/create_validation_image.py +0 -0
  1253. /package/{skills → packages/ampcode/skills}/pdf/scripts/extract_form_field_info.py +0 -0
  1254. /package/{skills → packages/ampcode/skills}/pdf/scripts/fill_fillable_fields.py +0 -0
  1255. /package/{skills → packages/ampcode/skills}/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  1256. /package/{skills → packages/ampcode/skills}/pptx/LICENSE.txt +0 -0
  1257. /package/{skills → packages/ampcode/skills}/pptx/SKILL.md +0 -0
  1258. /package/{skills → packages/ampcode/skills}/pptx/html2pptx.md +0 -0
  1259. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  1260. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  1261. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  1262. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  1263. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  1264. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  1265. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  1266. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  1267. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  1268. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  1269. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  1270. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  1271. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  1272. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  1273. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  1274. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  1275. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  1276. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  1277. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  1278. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  1279. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  1280. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  1281. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  1282. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  1283. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  1284. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  1285. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  1286. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  1287. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  1288. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  1289. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  1290. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/mce/mc.xsd +0 -0
  1291. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  1292. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  1293. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  1294. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  1295. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  1296. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  1297. /package/{skills → packages/ampcode/skills}/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  1298. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/pack.py +0 -0
  1299. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/unpack.py +0 -0
  1300. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validate.py +0 -0
  1301. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/__init__.py +0 -0
  1302. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/base.py +0 -0
  1303. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/docx.py +0 -0
  1304. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/pptx.py +0 -0
  1305. /package/{skills → packages/ampcode/skills}/pptx/ooxml/scripts/validation/redlining.py +0 -0
  1306. /package/{skills → packages/ampcode/skills}/pptx/ooxml.md +0 -0
  1307. /package/{skills → packages/ampcode/skills}/pptx/scripts/html2pptx.js +0 -0
  1308. /package/{skills → packages/ampcode/skills}/pptx/scripts/inventory.py +0 -0
  1309. /package/{skills → packages/ampcode/skills}/pptx/scripts/rearrange.py +0 -0
  1310. /package/{skills → packages/ampcode/skills}/pptx/scripts/replace.py +0 -0
  1311. /package/{skills → packages/ampcode/skills}/pptx/scripts/thumbnail.py +0 -0
  1312. /package/{skills → packages/ampcode/skills}/root-cause-tracing/SKILL.md +0 -0
  1313. /package/{skills → packages/ampcode/skills}/root-cause-tracing/find-polluter.sh +0 -0
  1314. /package/{skills → packages/ampcode/skills}/skill-creator/LICENSE.txt +0 -0
  1315. /package/{skills → packages/ampcode/skills}/skill-creator/SKILL.md +0 -0
  1316. /package/{skills → packages/ampcode/skills}/skill-creator/scripts/init_skill.py +0 -0
  1317. /package/{skills → packages/ampcode/skills}/skill-creator/scripts/package_skill.py +0 -0
  1318. /package/{skills → packages/ampcode/skills}/skill-creator/scripts/quick_validate.py +0 -0
  1319. /package/{skills → packages/ampcode/skills}/slack-gif-creator/LICENSE.txt +0 -0
  1320. /package/{skills → packages/ampcode/skills}/slack-gif-creator/SKILL.md +0 -0
  1321. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/color_palettes.py +0 -0
  1322. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/easing.py +0 -0
  1323. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/frame_composer.py +0 -0
  1324. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/gif_builder.py +0 -0
  1325. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/typography.py +0 -0
  1326. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/validators.py +0 -0
  1327. /package/{skills → packages/ampcode/skills}/slack-gif-creator/core/visual_effects.py +0 -0
  1328. /package/{skills → packages/ampcode/skills}/slack-gif-creator/requirements.txt +0 -0
  1329. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/bounce.py +0 -0
  1330. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/explode.py +0 -0
  1331. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/fade.py +0 -0
  1332. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/flip.py +0 -0
  1333. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/kaleidoscope.py +0 -0
  1334. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/morph.py +0 -0
  1335. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/move.py +0 -0
  1336. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/pulse.py +0 -0
  1337. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/shake.py +0 -0
  1338. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/slide.py +0 -0
  1339. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/spin.py +0 -0
  1340. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/wiggle.py +0 -0
  1341. /package/{skills → packages/ampcode/skills}/slack-gif-creator/templates/zoom.py +0 -0
  1342. /package/{skills → packages/ampcode/skills}/systematic-debugging/CREATION-LOG.md +0 -0
  1343. /package/{skills → packages/ampcode/skills}/systematic-debugging/SKILL.md +0 -0
  1344. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-academic.md +0 -0
  1345. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-pressure-1.md +0 -0
  1346. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-pressure-2.md +0 -0
  1347. /package/{skills → packages/ampcode/skills}/systematic-debugging/test-pressure-3.md +0 -0
  1348. /package/{skills → packages/ampcode/skills}/test-driven-development/SKILL.md +0 -0
  1349. /package/{skills → packages/ampcode/skills}/testing-anti-patterns/SKILL.md +0 -0
  1350. /package/{skills → packages/ampcode/skills}/theme-factory/LICENSE.txt +0 -0
  1351. /package/{skills → packages/ampcode/skills}/theme-factory/SKILL.md +0 -0
  1352. /package/{skills → packages/ampcode/skills}/theme-factory/theme-showcase.pdf +0 -0
  1353. /package/{skills → packages/ampcode/skills}/theme-factory/themes/arctic-frost.md +0 -0
  1354. /package/{skills → packages/ampcode/skills}/theme-factory/themes/botanical-garden.md +0 -0
  1355. /package/{skills → packages/ampcode/skills}/theme-factory/themes/desert-rose.md +0 -0
  1356. /package/{skills → packages/ampcode/skills}/theme-factory/themes/forest-canopy.md +0 -0
  1357. /package/{skills → packages/ampcode/skills}/theme-factory/themes/golden-hour.md +0 -0
  1358. /package/{skills → packages/ampcode/skills}/theme-factory/themes/midnight-galaxy.md +0 -0
  1359. /package/{skills → packages/ampcode/skills}/theme-factory/themes/modern-minimalist.md +0 -0
  1360. /package/{skills → packages/ampcode/skills}/theme-factory/themes/ocean-depths.md +0 -0
  1361. /package/{skills → packages/ampcode/skills}/theme-factory/themes/sunset-boulevard.md +0 -0
  1362. /package/{skills → packages/ampcode/skills}/theme-factory/themes/tech-innovation.md +0 -0
  1363. /package/{skills → packages/ampcode/skills}/verification-before-completion/SKILL.md +0 -0
  1364. /package/{skills → packages/ampcode/skills}/webapp-testing/LICENSE.txt +0 -0
  1365. /package/{skills → packages/ampcode/skills}/webapp-testing/SKILL.md +0 -0
  1366. /package/{skills → packages/ampcode/skills}/webapp-testing/examples/console_logging.py +0 -0
  1367. /package/{skills → packages/ampcode/skills}/webapp-testing/examples/element_discovery.py +0 -0
  1368. /package/{skills → packages/ampcode/skills}/webapp-testing/examples/static_html_automation.py +0 -0
  1369. /package/{skills → packages/ampcode/skills}/webapp-testing/scripts/with_server.py +0 -0
  1370. /package/{skills → packages/ampcode/skills}/xlsx/LICENSE.txt +0 -0
  1371. /package/{skills → packages/ampcode/skills}/xlsx/SKILL.md +0 -0
  1372. /package/{skills → packages/ampcode/skills}/xlsx/recalc.py +0 -0
  1373. /package/{.claude-plugin → packages/claude/.claude-plugin}/marketplace.json +0 -0
  1374. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin-lite.json +0 -0
  1375. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin-pro.json +0 -0
  1376. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin-standard.json +0 -0
  1377. /package/{.claude-plugin → packages/claude/.claude-plugin}/plugin.json +0 -0
  1378. /package/{agents → packages/claude/agents}/orchestrator.md +0 -0
  1379. /package/{hooks → packages/claude/hooks}/register-agents.js +0 -0
  1380. /package/{hooks → packages/claude/hooks}/session-start.js +0 -0
  1381. /package/{resources → packages/claude/resources}/data.md +0 -0
@@ -0,0 +1,1276 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Library for working with Word documents: comments, tracked changes, and editing.
4
+
5
+ Usage:
6
+ from skills.docx.scripts.document import Document
7
+
8
+ # Initialize
9
+ doc = Document('workspace/unpacked')
10
+ doc = Document('workspace/unpacked', author="John Doe", initials="JD")
11
+
12
+ # Find nodes
13
+ node = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "1"})
14
+ node = doc["word/document.xml"].get_node(tag="w:p", line_number=10)
15
+
16
+ # Add comments
17
+ doc.add_comment(start=node, end=node, text="Comment text")
18
+ doc.reply_to_comment(parent_comment_id=0, text="Reply text")
19
+
20
+ # Suggest tracked changes
21
+ doc["word/document.xml"].suggest_deletion(node) # Delete content
22
+ doc["word/document.xml"].revert_insertion(ins_node) # Reject insertion
23
+ doc["word/document.xml"].revert_deletion(del_node) # Reject deletion
24
+
25
+ # Save
26
+ doc.save()
27
+ """
28
+
29
+ import html
30
+ import random
31
+ import shutil
32
+ import tempfile
33
+ from datetime import datetime, timezone
34
+ from pathlib import Path
35
+
36
+ from defusedxml import minidom
37
+ from ooxml.scripts.pack import pack_document
38
+ from ooxml.scripts.validation.docx import DOCXSchemaValidator
39
+ from ooxml.scripts.validation.redlining import RedliningValidator
40
+
41
+ from .utilities import XMLEditor
42
+
43
+ # Path to template files
44
+ TEMPLATE_DIR = Path(__file__).parent / "templates"
45
+
46
+
47
+ class DocxXMLEditor(XMLEditor):
48
+ """XMLEditor that automatically applies RSID, author, and date to new elements.
49
+
50
+ Automatically adds attributes to elements that support them when inserting new content:
51
+ - w:rsidR, w:rsidRDefault, w:rsidP (for w:p and w:r elements)
52
+ - w:author and w:date (for w:ins, w:del, w:comment elements)
53
+ - w:id (for w:ins and w:del elements)
54
+
55
+ Attributes:
56
+ dom (defusedxml.minidom.Document): The DOM document for direct manipulation
57
+ """
58
+
59
+ def __init__(
60
+ self, xml_path, rsid: str, author: str = "Claude", initials: str = "C"
61
+ ):
62
+ """Initialize with required RSID and optional author.
63
+
64
+ Args:
65
+ xml_path: Path to XML file to edit
66
+ rsid: RSID to automatically apply to new elements
67
+ author: Author name for tracked changes and comments (default: "Claude")
68
+ initials: Author initials (default: "C")
69
+ """
70
+ super().__init__(xml_path)
71
+ self.rsid = rsid
72
+ self.author = author
73
+ self.initials = initials
74
+
75
+ def _get_next_change_id(self):
76
+ """Get the next available change ID by checking all tracked change elements."""
77
+ max_id = -1
78
+ for tag in ("w:ins", "w:del"):
79
+ elements = self.dom.getElementsByTagName(tag)
80
+ for elem in elements:
81
+ change_id = elem.getAttribute("w:id")
82
+ if change_id:
83
+ try:
84
+ max_id = max(max_id, int(change_id))
85
+ except ValueError:
86
+ pass
87
+ return max_id + 1
88
+
89
+ def _ensure_w16du_namespace(self):
90
+ """Ensure w16du namespace is declared on the root element."""
91
+ root = self.dom.documentElement
92
+ if not root.hasAttribute("xmlns:w16du"): # type: ignore
93
+ root.setAttribute( # type: ignore
94
+ "xmlns:w16du",
95
+ "http://schemas.microsoft.com/office/word/2023/wordml/word16du",
96
+ )
97
+
98
+ def _ensure_w16cex_namespace(self):
99
+ """Ensure w16cex namespace is declared on the root element."""
100
+ root = self.dom.documentElement
101
+ if not root.hasAttribute("xmlns:w16cex"): # type: ignore
102
+ root.setAttribute( # type: ignore
103
+ "xmlns:w16cex",
104
+ "http://schemas.microsoft.com/office/word/2018/wordml/cex",
105
+ )
106
+
107
+ def _ensure_w14_namespace(self):
108
+ """Ensure w14 namespace is declared on the root element."""
109
+ root = self.dom.documentElement
110
+ if not root.hasAttribute("xmlns:w14"): # type: ignore
111
+ root.setAttribute( # type: ignore
112
+ "xmlns:w14",
113
+ "http://schemas.microsoft.com/office/word/2010/wordml",
114
+ )
115
+
116
+ def _inject_attributes_to_nodes(self, nodes):
117
+ """Inject RSID, author, and date attributes into DOM nodes where applicable.
118
+
119
+ Adds attributes to elements that support them:
120
+ - w:r: gets w:rsidR (or w:rsidDel if inside w:del)
121
+ - w:p: gets w:rsidR, w:rsidRDefault, w:rsidP, w14:paraId, w14:textId
122
+ - w:t: gets xml:space="preserve" if text has leading/trailing whitespace
123
+ - w:ins, w:del: get w:id, w:author, w:date, w16du:dateUtc
124
+ - w:comment: gets w:author, w:date, w:initials
125
+ - w16cex:commentExtensible: gets w16cex:dateUtc
126
+
127
+ Args:
128
+ nodes: List of DOM nodes to process
129
+ """
130
+ from datetime import datetime, timezone
131
+
132
+ timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
133
+
134
+ def is_inside_deletion(elem):
135
+ """Check if element is inside a w:del element."""
136
+ parent = elem.parentNode
137
+ while parent:
138
+ if parent.nodeType == parent.ELEMENT_NODE and parent.tagName == "w:del":
139
+ return True
140
+ parent = parent.parentNode
141
+ return False
142
+
143
+ def add_rsid_to_p(elem):
144
+ if not elem.hasAttribute("w:rsidR"):
145
+ elem.setAttribute("w:rsidR", self.rsid)
146
+ if not elem.hasAttribute("w:rsidRDefault"):
147
+ elem.setAttribute("w:rsidRDefault", self.rsid)
148
+ if not elem.hasAttribute("w:rsidP"):
149
+ elem.setAttribute("w:rsidP", self.rsid)
150
+ # Add w14:paraId and w14:textId if not present
151
+ if not elem.hasAttribute("w14:paraId"):
152
+ self._ensure_w14_namespace()
153
+ elem.setAttribute("w14:paraId", _generate_hex_id())
154
+ if not elem.hasAttribute("w14:textId"):
155
+ self._ensure_w14_namespace()
156
+ elem.setAttribute("w14:textId", _generate_hex_id())
157
+
158
+ def add_rsid_to_r(elem):
159
+ # Use w:rsidDel for <w:r> inside <w:del>, otherwise w:rsidR
160
+ if is_inside_deletion(elem):
161
+ if not elem.hasAttribute("w:rsidDel"):
162
+ elem.setAttribute("w:rsidDel", self.rsid)
163
+ else:
164
+ if not elem.hasAttribute("w:rsidR"):
165
+ elem.setAttribute("w:rsidR", self.rsid)
166
+
167
+ def add_tracked_change_attrs(elem):
168
+ # Auto-assign w:id if not present
169
+ if not elem.hasAttribute("w:id"):
170
+ elem.setAttribute("w:id", str(self._get_next_change_id()))
171
+ if not elem.hasAttribute("w:author"):
172
+ elem.setAttribute("w:author", self.author)
173
+ if not elem.hasAttribute("w:date"):
174
+ elem.setAttribute("w:date", timestamp)
175
+ # Add w16du:dateUtc for tracked changes (same as w:date since we generate UTC timestamps)
176
+ if elem.tagName in ("w:ins", "w:del") and not elem.hasAttribute(
177
+ "w16du:dateUtc"
178
+ ):
179
+ self._ensure_w16du_namespace()
180
+ elem.setAttribute("w16du:dateUtc", timestamp)
181
+
182
+ def add_comment_attrs(elem):
183
+ if not elem.hasAttribute("w:author"):
184
+ elem.setAttribute("w:author", self.author)
185
+ if not elem.hasAttribute("w:date"):
186
+ elem.setAttribute("w:date", timestamp)
187
+ if not elem.hasAttribute("w:initials"):
188
+ elem.setAttribute("w:initials", self.initials)
189
+
190
+ def add_comment_extensible_date(elem):
191
+ # Add w16cex:dateUtc for comment extensible elements
192
+ if not elem.hasAttribute("w16cex:dateUtc"):
193
+ self._ensure_w16cex_namespace()
194
+ elem.setAttribute("w16cex:dateUtc", timestamp)
195
+
196
+ def add_xml_space_to_t(elem):
197
+ # Add xml:space="preserve" to w:t if text has leading/trailing whitespace
198
+ if (
199
+ elem.firstChild
200
+ and elem.firstChild.nodeType == elem.firstChild.TEXT_NODE
201
+ ):
202
+ text = elem.firstChild.data
203
+ if text and (text[0].isspace() or text[-1].isspace()):
204
+ if not elem.hasAttribute("xml:space"):
205
+ elem.setAttribute("xml:space", "preserve")
206
+
207
+ for node in nodes:
208
+ if node.nodeType != node.ELEMENT_NODE:
209
+ continue
210
+
211
+ # Handle the node itself
212
+ if node.tagName == "w:p":
213
+ add_rsid_to_p(node)
214
+ elif node.tagName == "w:r":
215
+ add_rsid_to_r(node)
216
+ elif node.tagName == "w:t":
217
+ add_xml_space_to_t(node)
218
+ elif node.tagName in ("w:ins", "w:del"):
219
+ add_tracked_change_attrs(node)
220
+ elif node.tagName == "w:comment":
221
+ add_comment_attrs(node)
222
+ elif node.tagName == "w16cex:commentExtensible":
223
+ add_comment_extensible_date(node)
224
+
225
+ # Process descendants (getElementsByTagName doesn't return the element itself)
226
+ for elem in node.getElementsByTagName("w:p"):
227
+ add_rsid_to_p(elem)
228
+ for elem in node.getElementsByTagName("w:r"):
229
+ add_rsid_to_r(elem)
230
+ for elem in node.getElementsByTagName("w:t"):
231
+ add_xml_space_to_t(elem)
232
+ for tag in ("w:ins", "w:del"):
233
+ for elem in node.getElementsByTagName(tag):
234
+ add_tracked_change_attrs(elem)
235
+ for elem in node.getElementsByTagName("w:comment"):
236
+ add_comment_attrs(elem)
237
+ for elem in node.getElementsByTagName("w16cex:commentExtensible"):
238
+ add_comment_extensible_date(elem)
239
+
240
+ def replace_node(self, elem, new_content):
241
+ """Replace node with automatic attribute injection."""
242
+ nodes = super().replace_node(elem, new_content)
243
+ self._inject_attributes_to_nodes(nodes)
244
+ return nodes
245
+
246
+ def insert_after(self, elem, xml_content):
247
+ """Insert after with automatic attribute injection."""
248
+ nodes = super().insert_after(elem, xml_content)
249
+ self._inject_attributes_to_nodes(nodes)
250
+ return nodes
251
+
252
+ def insert_before(self, elem, xml_content):
253
+ """Insert before with automatic attribute injection."""
254
+ nodes = super().insert_before(elem, xml_content)
255
+ self._inject_attributes_to_nodes(nodes)
256
+ return nodes
257
+
258
+ def append_to(self, elem, xml_content):
259
+ """Append to with automatic attribute injection."""
260
+ nodes = super().append_to(elem, xml_content)
261
+ self._inject_attributes_to_nodes(nodes)
262
+ return nodes
263
+
264
+ def revert_insertion(self, elem):
265
+ """Reject an insertion by wrapping its content in a deletion.
266
+
267
+ Wraps all runs inside w:ins in w:del, converting w:t to w:delText.
268
+ Can process a single w:ins element or a container element with multiple w:ins.
269
+
270
+ Args:
271
+ elem: Element to process (w:ins, w:p, w:body, etc.)
272
+
273
+ Returns:
274
+ list: List containing the processed element(s)
275
+
276
+ Raises:
277
+ ValueError: If the element contains no w:ins elements
278
+
279
+ Example:
280
+ # Reject a single insertion
281
+ ins = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "5"})
282
+ doc["word/document.xml"].revert_insertion(ins)
283
+
284
+ # Reject all insertions in a paragraph
285
+ para = doc["word/document.xml"].get_node(tag="w:p", line_number=42)
286
+ doc["word/document.xml"].revert_insertion(para)
287
+ """
288
+ # Collect insertions
289
+ ins_elements = []
290
+ if elem.tagName == "w:ins":
291
+ ins_elements.append(elem)
292
+ else:
293
+ ins_elements.extend(elem.getElementsByTagName("w:ins"))
294
+
295
+ # Validate that there are insertions to reject
296
+ if not ins_elements:
297
+ raise ValueError(
298
+ f"revert_insertion requires w:ins elements. "
299
+ f"The provided element <{elem.tagName}> contains no insertions. "
300
+ )
301
+
302
+ # Process all insertions - wrap all children in w:del
303
+ for ins_elem in ins_elements:
304
+ runs = list(ins_elem.getElementsByTagName("w:r"))
305
+ if not runs:
306
+ continue
307
+
308
+ # Create deletion wrapper
309
+ del_wrapper = self.dom.createElement("w:del")
310
+
311
+ # Process each run
312
+ for run in runs:
313
+ # Convert w:t → w:delText and w:rsidR → w:rsidDel
314
+ if run.hasAttribute("w:rsidR"):
315
+ run.setAttribute("w:rsidDel", run.getAttribute("w:rsidR"))
316
+ run.removeAttribute("w:rsidR")
317
+ elif not run.hasAttribute("w:rsidDel"):
318
+ run.setAttribute("w:rsidDel", self.rsid)
319
+
320
+ for t_elem in list(run.getElementsByTagName("w:t")):
321
+ del_text = self.dom.createElement("w:delText")
322
+ # Copy ALL child nodes (not just firstChild) to handle entities
323
+ while t_elem.firstChild:
324
+ del_text.appendChild(t_elem.firstChild)
325
+ for i in range(t_elem.attributes.length):
326
+ attr = t_elem.attributes.item(i)
327
+ del_text.setAttribute(attr.name, attr.value)
328
+ t_elem.parentNode.replaceChild(del_text, t_elem)
329
+
330
+ # Move all children from ins to del wrapper
331
+ while ins_elem.firstChild:
332
+ del_wrapper.appendChild(ins_elem.firstChild)
333
+
334
+ # Add del wrapper back to ins
335
+ ins_elem.appendChild(del_wrapper)
336
+
337
+ # Inject attributes to the deletion wrapper
338
+ self._inject_attributes_to_nodes([del_wrapper])
339
+
340
+ return [elem]
341
+
342
+ def revert_deletion(self, elem):
343
+ """Reject a deletion by re-inserting the deleted content.
344
+
345
+ Creates w:ins elements after each w:del, copying deleted content and
346
+ converting w:delText back to w:t.
347
+ Can process a single w:del element or a container element with multiple w:del.
348
+
349
+ Args:
350
+ elem: Element to process (w:del, w:p, w:body, etc.)
351
+
352
+ Returns:
353
+ list: If elem is w:del, returns [elem, new_ins]. Otherwise returns [elem].
354
+
355
+ Raises:
356
+ ValueError: If the element contains no w:del elements
357
+
358
+ Example:
359
+ # Reject a single deletion - returns [w:del, w:ins]
360
+ del_elem = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "3"})
361
+ nodes = doc["word/document.xml"].revert_deletion(del_elem)
362
+
363
+ # Reject all deletions in a paragraph - returns [para]
364
+ para = doc["word/document.xml"].get_node(tag="w:p", line_number=42)
365
+ nodes = doc["word/document.xml"].revert_deletion(para)
366
+ """
367
+ # Collect deletions FIRST - before we modify the DOM
368
+ del_elements = []
369
+ is_single_del = elem.tagName == "w:del"
370
+
371
+ if is_single_del:
372
+ del_elements.append(elem)
373
+ else:
374
+ del_elements.extend(elem.getElementsByTagName("w:del"))
375
+
376
+ # Validate that there are deletions to reject
377
+ if not del_elements:
378
+ raise ValueError(
379
+ f"revert_deletion requires w:del elements. "
380
+ f"The provided element <{elem.tagName}> contains no deletions. "
381
+ )
382
+
383
+ # Track created insertion (only relevant if elem is a single w:del)
384
+ created_insertion = None
385
+
386
+ # Process all deletions - create insertions that copy the deleted content
387
+ for del_elem in del_elements:
388
+ # Clone the deleted runs and convert them to insertions
389
+ runs = list(del_elem.getElementsByTagName("w:r"))
390
+ if not runs:
391
+ continue
392
+
393
+ # Create insertion wrapper
394
+ ins_elem = self.dom.createElement("w:ins")
395
+
396
+ for run in runs:
397
+ # Clone the run
398
+ new_run = run.cloneNode(True)
399
+
400
+ # Convert w:delText → w:t
401
+ for del_text in list(new_run.getElementsByTagName("w:delText")):
402
+ t_elem = self.dom.createElement("w:t")
403
+ # Copy ALL child nodes (not just firstChild) to handle entities
404
+ while del_text.firstChild:
405
+ t_elem.appendChild(del_text.firstChild)
406
+ for i in range(del_text.attributes.length):
407
+ attr = del_text.attributes.item(i)
408
+ t_elem.setAttribute(attr.name, attr.value)
409
+ del_text.parentNode.replaceChild(t_elem, del_text)
410
+
411
+ # Update run attributes: w:rsidDel → w:rsidR
412
+ if new_run.hasAttribute("w:rsidDel"):
413
+ new_run.setAttribute("w:rsidR", new_run.getAttribute("w:rsidDel"))
414
+ new_run.removeAttribute("w:rsidDel")
415
+ elif not new_run.hasAttribute("w:rsidR"):
416
+ new_run.setAttribute("w:rsidR", self.rsid)
417
+
418
+ ins_elem.appendChild(new_run)
419
+
420
+ # Insert the new insertion after the deletion
421
+ nodes = self.insert_after(del_elem, ins_elem.toxml())
422
+
423
+ # If processing a single w:del, track the created insertion
424
+ if is_single_del and nodes:
425
+ created_insertion = nodes[0]
426
+
427
+ # Return based on input type
428
+ if is_single_del and created_insertion:
429
+ return [elem, created_insertion]
430
+ else:
431
+ return [elem]
432
+
433
+ @staticmethod
434
+ def suggest_paragraph(xml_content: str) -> str:
435
+ """Transform paragraph XML to add tracked change wrapping for insertion.
436
+
437
+ Wraps runs in <w:ins> and adds <w:ins/> to w:rPr in w:pPr for numbered lists.
438
+
439
+ Args:
440
+ xml_content: XML string containing a <w:p> element
441
+
442
+ Returns:
443
+ str: Transformed XML with tracked change wrapping
444
+ """
445
+ wrapper = f'<root xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">{xml_content}</root>'
446
+ doc = minidom.parseString(wrapper)
447
+ para = doc.getElementsByTagName("w:p")[0]
448
+
449
+ # Ensure w:pPr exists
450
+ pPr_list = para.getElementsByTagName("w:pPr")
451
+ if not pPr_list:
452
+ pPr = doc.createElement("w:pPr")
453
+ para.insertBefore(
454
+ pPr, para.firstChild
455
+ ) if para.firstChild else para.appendChild(pPr)
456
+ else:
457
+ pPr = pPr_list[0]
458
+
459
+ # Ensure w:rPr exists in w:pPr
460
+ rPr_list = pPr.getElementsByTagName("w:rPr")
461
+ if not rPr_list:
462
+ rPr = doc.createElement("w:rPr")
463
+ pPr.appendChild(rPr)
464
+ else:
465
+ rPr = rPr_list[0]
466
+
467
+ # Add <w:ins/> to w:rPr
468
+ ins_marker = doc.createElement("w:ins")
469
+ rPr.insertBefore(
470
+ ins_marker, rPr.firstChild
471
+ ) if rPr.firstChild else rPr.appendChild(ins_marker)
472
+
473
+ # Wrap all non-pPr children in <w:ins>
474
+ ins_wrapper = doc.createElement("w:ins")
475
+ for child in [c for c in para.childNodes if c.nodeName != "w:pPr"]:
476
+ para.removeChild(child)
477
+ ins_wrapper.appendChild(child)
478
+ para.appendChild(ins_wrapper)
479
+
480
+ return para.toxml()
481
+
482
+ def suggest_deletion(self, elem):
483
+ """Mark a w:r or w:p element as deleted with tracked changes (in-place DOM manipulation).
484
+
485
+ For w:r: wraps in <w:del>, converts <w:t> to <w:delText>, preserves w:rPr
486
+ For w:p (regular): wraps content in <w:del>, converts <w:t> to <w:delText>
487
+ For w:p (numbered list): adds <w:del/> to w:rPr in w:pPr, wraps content in <w:del>
488
+
489
+ Args:
490
+ elem: A w:r or w:p DOM element without existing tracked changes
491
+
492
+ Returns:
493
+ Element: The modified element
494
+
495
+ Raises:
496
+ ValueError: If element has existing tracked changes or invalid structure
497
+ """
498
+ if elem.nodeName == "w:r":
499
+ # Check for existing w:delText
500
+ if elem.getElementsByTagName("w:delText"):
501
+ raise ValueError("w:r element already contains w:delText")
502
+
503
+ # Convert w:t → w:delText
504
+ for t_elem in list(elem.getElementsByTagName("w:t")):
505
+ del_text = self.dom.createElement("w:delText")
506
+ # Copy ALL child nodes (not just firstChild) to handle entities
507
+ while t_elem.firstChild:
508
+ del_text.appendChild(t_elem.firstChild)
509
+ # Preserve attributes like xml:space
510
+ for i in range(t_elem.attributes.length):
511
+ attr = t_elem.attributes.item(i)
512
+ del_text.setAttribute(attr.name, attr.value)
513
+ t_elem.parentNode.replaceChild(del_text, t_elem)
514
+
515
+ # Update run attributes: w:rsidR → w:rsidDel
516
+ if elem.hasAttribute("w:rsidR"):
517
+ elem.setAttribute("w:rsidDel", elem.getAttribute("w:rsidR"))
518
+ elem.removeAttribute("w:rsidR")
519
+ elif not elem.hasAttribute("w:rsidDel"):
520
+ elem.setAttribute("w:rsidDel", self.rsid)
521
+
522
+ # Wrap in w:del
523
+ del_wrapper = self.dom.createElement("w:del")
524
+ parent = elem.parentNode
525
+ parent.insertBefore(del_wrapper, elem)
526
+ parent.removeChild(elem)
527
+ del_wrapper.appendChild(elem)
528
+
529
+ # Inject attributes to the deletion wrapper
530
+ self._inject_attributes_to_nodes([del_wrapper])
531
+
532
+ return del_wrapper
533
+
534
+ elif elem.nodeName == "w:p":
535
+ # Check for existing tracked changes
536
+ if elem.getElementsByTagName("w:ins") or elem.getElementsByTagName("w:del"):
537
+ raise ValueError("w:p element already contains tracked changes")
538
+
539
+ # Check if it's a numbered list item
540
+ pPr_list = elem.getElementsByTagName("w:pPr")
541
+ is_numbered = pPr_list and pPr_list[0].getElementsByTagName("w:numPr")
542
+
543
+ if is_numbered:
544
+ # Add <w:del/> to w:rPr in w:pPr
545
+ pPr = pPr_list[0]
546
+ rPr_list = pPr.getElementsByTagName("w:rPr")
547
+
548
+ if not rPr_list:
549
+ rPr = self.dom.createElement("w:rPr")
550
+ pPr.appendChild(rPr)
551
+ else:
552
+ rPr = rPr_list[0]
553
+
554
+ # Add <w:del/> marker
555
+ del_marker = self.dom.createElement("w:del")
556
+ rPr.insertBefore(
557
+ del_marker, rPr.firstChild
558
+ ) if rPr.firstChild else rPr.appendChild(del_marker)
559
+
560
+ # Convert w:t → w:delText in all runs
561
+ for t_elem in list(elem.getElementsByTagName("w:t")):
562
+ del_text = self.dom.createElement("w:delText")
563
+ # Copy ALL child nodes (not just firstChild) to handle entities
564
+ while t_elem.firstChild:
565
+ del_text.appendChild(t_elem.firstChild)
566
+ # Preserve attributes like xml:space
567
+ for i in range(t_elem.attributes.length):
568
+ attr = t_elem.attributes.item(i)
569
+ del_text.setAttribute(attr.name, attr.value)
570
+ t_elem.parentNode.replaceChild(del_text, t_elem)
571
+
572
+ # Update run attributes: w:rsidR → w:rsidDel
573
+ for run in elem.getElementsByTagName("w:r"):
574
+ if run.hasAttribute("w:rsidR"):
575
+ run.setAttribute("w:rsidDel", run.getAttribute("w:rsidR"))
576
+ run.removeAttribute("w:rsidR")
577
+ elif not run.hasAttribute("w:rsidDel"):
578
+ run.setAttribute("w:rsidDel", self.rsid)
579
+
580
+ # Wrap all non-pPr children in <w:del>
581
+ del_wrapper = self.dom.createElement("w:del")
582
+ for child in [c for c in elem.childNodes if c.nodeName != "w:pPr"]:
583
+ elem.removeChild(child)
584
+ del_wrapper.appendChild(child)
585
+ elem.appendChild(del_wrapper)
586
+
587
+ # Inject attributes to the deletion wrapper
588
+ self._inject_attributes_to_nodes([del_wrapper])
589
+
590
+ return elem
591
+
592
+ else:
593
+ raise ValueError(f"Element must be w:r or w:p, got {elem.nodeName}")
594
+
595
+
596
+ def _generate_hex_id() -> str:
597
+ """Generate random 8-character hex ID for para/durable IDs.
598
+
599
+ Values are constrained to be less than 0x7FFFFFFF per OOXML spec:
600
+ - paraId must be < 0x80000000
601
+ - durableId must be < 0x7FFFFFFF
602
+ We use the stricter constraint (0x7FFFFFFF) for both.
603
+ """
604
+ return f"{random.randint(1, 0x7FFFFFFE):08X}"
605
+
606
+
607
+ def _generate_rsid() -> str:
608
+ """Generate random 8-character hex RSID."""
609
+ return "".join(random.choices("0123456789ABCDEF", k=8))
610
+
611
+
612
+ class Document:
613
+ """Manages comments in unpacked Word documents."""
614
+
615
+ def __init__(
616
+ self,
617
+ unpacked_dir,
618
+ rsid=None,
619
+ track_revisions=False,
620
+ author="Claude",
621
+ initials="C",
622
+ ):
623
+ """
624
+ Initialize with path to unpacked Word document directory.
625
+ Automatically sets up comment infrastructure (people.xml, RSIDs).
626
+
627
+ Args:
628
+ unpacked_dir: Path to unpacked DOCX directory (must contain word/ subdirectory)
629
+ rsid: Optional RSID to use for all comment elements. If not provided, one will be generated.
630
+ track_revisions: If True, enables track revisions in settings.xml (default: False)
631
+ author: Default author name for comments (default: "Claude")
632
+ initials: Default author initials for comments (default: "C")
633
+ """
634
+ self.original_path = Path(unpacked_dir)
635
+
636
+ if not self.original_path.exists() or not self.original_path.is_dir():
637
+ raise ValueError(f"Directory not found: {unpacked_dir}")
638
+
639
+ # Create temporary directory with subdirectories for unpacked content and baseline
640
+ self.temp_dir = tempfile.mkdtemp(prefix="docx_")
641
+ self.unpacked_path = Path(self.temp_dir) / "unpacked"
642
+ shutil.copytree(self.original_path, self.unpacked_path)
643
+
644
+ # Pack original directory into temporary .docx for validation baseline (outside unpacked dir)
645
+ self.original_docx = Path(self.temp_dir) / "original.docx"
646
+ pack_document(self.original_path, self.original_docx, validate=False)
647
+
648
+ self.word_path = self.unpacked_path / "word"
649
+
650
+ # Generate RSID if not provided
651
+ self.rsid = rsid if rsid else _generate_rsid()
652
+ print(f"Using RSID: {self.rsid}")
653
+
654
+ # Set default author and initials
655
+ self.author = author
656
+ self.initials = initials
657
+
658
+ # Cache for lazy-loaded editors
659
+ self._editors = {}
660
+
661
+ # Comment file paths
662
+ self.comments_path = self.word_path / "comments.xml"
663
+ self.comments_extended_path = self.word_path / "commentsExtended.xml"
664
+ self.comments_ids_path = self.word_path / "commentsIds.xml"
665
+ self.comments_extensible_path = self.word_path / "commentsExtensible.xml"
666
+
667
+ # Load existing comments and determine next ID (before setup modifies files)
668
+ self.existing_comments = self._load_existing_comments()
669
+ self.next_comment_id = self._get_next_comment_id()
670
+
671
+ # Convenient access to document.xml editor (semi-private)
672
+ self._document = self["word/document.xml"]
673
+
674
+ # Setup tracked changes infrastructure
675
+ self._setup_tracking(track_revisions=track_revisions)
676
+
677
+ # Add author to people.xml
678
+ self._add_author_to_people(author)
679
+
680
+ def __getitem__(self, xml_path: str) -> DocxXMLEditor:
681
+ """
682
+ Get or create a DocxXMLEditor for the specified XML file.
683
+
684
+ Enables lazy-loaded editors with bracket notation:
685
+ node = doc["word/document.xml"].get_node(tag="w:p", line_number=42)
686
+
687
+ Args:
688
+ xml_path: Relative path to XML file (e.g., "word/document.xml", "word/comments.xml")
689
+
690
+ Returns:
691
+ DocxXMLEditor instance for the specified file
692
+
693
+ Raises:
694
+ ValueError: If the file does not exist
695
+
696
+ Example:
697
+ # Get node from document.xml
698
+ node = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "1"})
699
+
700
+ # Get node from comments.xml
701
+ comment = doc["word/comments.xml"].get_node(tag="w:comment", attrs={"w:id": "0"})
702
+ """
703
+ if xml_path not in self._editors:
704
+ file_path = self.unpacked_path / xml_path
705
+ if not file_path.exists():
706
+ raise ValueError(f"XML file not found: {xml_path}")
707
+ # Use DocxXMLEditor with RSID, author, and initials for all editors
708
+ self._editors[xml_path] = DocxXMLEditor(
709
+ file_path, rsid=self.rsid, author=self.author, initials=self.initials
710
+ )
711
+ return self._editors[xml_path]
712
+
713
+ def add_comment(self, start, end, text: str) -> int:
714
+ """
715
+ Add a comment spanning from one element to another.
716
+
717
+ Args:
718
+ start: DOM element for the starting point
719
+ end: DOM element for the ending point
720
+ text: Comment content
721
+
722
+ Returns:
723
+ The comment ID that was created
724
+
725
+ Example:
726
+ start_node = cm.get_document_node(tag="w:del", id="1")
727
+ end_node = cm.get_document_node(tag="w:ins", id="2")
728
+ cm.add_comment(start=start_node, end=end_node, text="Explanation")
729
+ """
730
+ comment_id = self.next_comment_id
731
+ para_id = _generate_hex_id()
732
+ durable_id = _generate_hex_id()
733
+ timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
734
+
735
+ # Add comment ranges to document.xml immediately
736
+ self._document.insert_before(start, self._comment_range_start_xml(comment_id))
737
+
738
+ # If end node is a paragraph, append comment markup inside it
739
+ # Otherwise insert after it (for run-level anchors)
740
+ if end.tagName == "w:p":
741
+ self._document.append_to(end, self._comment_range_end_xml(comment_id))
742
+ else:
743
+ self._document.insert_after(end, self._comment_range_end_xml(comment_id))
744
+
745
+ # Add to comments.xml immediately
746
+ self._add_to_comments_xml(
747
+ comment_id, para_id, text, self.author, self.initials, timestamp
748
+ )
749
+
750
+ # Add to commentsExtended.xml immediately
751
+ self._add_to_comments_extended_xml(para_id, parent_para_id=None)
752
+
753
+ # Add to commentsIds.xml immediately
754
+ self._add_to_comments_ids_xml(para_id, durable_id)
755
+
756
+ # Add to commentsExtensible.xml immediately
757
+ self._add_to_comments_extensible_xml(durable_id)
758
+
759
+ # Update existing_comments so replies work
760
+ self.existing_comments[comment_id] = {"para_id": para_id}
761
+
762
+ self.next_comment_id += 1
763
+ return comment_id
764
+
765
+ def reply_to_comment(
766
+ self,
767
+ parent_comment_id: int,
768
+ text: str,
769
+ ) -> int:
770
+ """
771
+ Add a reply to an existing comment.
772
+
773
+ Args:
774
+ parent_comment_id: The w:id of the parent comment to reply to
775
+ text: Reply text
776
+
777
+ Returns:
778
+ The comment ID that was created for the reply
779
+
780
+ Example:
781
+ cm.reply_to_comment(parent_comment_id=0, text="I agree with this change")
782
+ """
783
+ if parent_comment_id not in self.existing_comments:
784
+ raise ValueError(f"Parent comment with id={parent_comment_id} not found")
785
+
786
+ parent_info = self.existing_comments[parent_comment_id]
787
+ comment_id = self.next_comment_id
788
+ para_id = _generate_hex_id()
789
+ durable_id = _generate_hex_id()
790
+ timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
791
+
792
+ # Add comment ranges to document.xml immediately
793
+ parent_start_elem = self._document.get_node(
794
+ tag="w:commentRangeStart", attrs={"w:id": str(parent_comment_id)}
795
+ )
796
+ parent_ref_elem = self._document.get_node(
797
+ tag="w:commentReference", attrs={"w:id": str(parent_comment_id)}
798
+ )
799
+
800
+ self._document.insert_after(
801
+ parent_start_elem, self._comment_range_start_xml(comment_id)
802
+ )
803
+ parent_ref_run = parent_ref_elem.parentNode
804
+ self._document.insert_after(
805
+ parent_ref_run, f'<w:commentRangeEnd w:id="{comment_id}"/>'
806
+ )
807
+ self._document.insert_after(
808
+ parent_ref_run, self._comment_ref_run_xml(comment_id)
809
+ )
810
+
811
+ # Add to comments.xml immediately
812
+ self._add_to_comments_xml(
813
+ comment_id, para_id, text, self.author, self.initials, timestamp
814
+ )
815
+
816
+ # Add to commentsExtended.xml immediately (with parent)
817
+ self._add_to_comments_extended_xml(
818
+ para_id, parent_para_id=parent_info["para_id"]
819
+ )
820
+
821
+ # Add to commentsIds.xml immediately
822
+ self._add_to_comments_ids_xml(para_id, durable_id)
823
+
824
+ # Add to commentsExtensible.xml immediately
825
+ self._add_to_comments_extensible_xml(durable_id)
826
+
827
+ # Update existing_comments so replies work
828
+ self.existing_comments[comment_id] = {"para_id": para_id}
829
+
830
+ self.next_comment_id += 1
831
+ return comment_id
832
+
833
+ def __del__(self):
834
+ """Clean up temporary directory on deletion."""
835
+ if hasattr(self, "temp_dir") and Path(self.temp_dir).exists():
836
+ shutil.rmtree(self.temp_dir)
837
+
838
+ def validate(self) -> None:
839
+ """
840
+ Validate the document against XSD schema and redlining rules.
841
+
842
+ Raises:
843
+ ValueError: If validation fails.
844
+ """
845
+ # Create validators with current state
846
+ schema_validator = DOCXSchemaValidator(
847
+ self.unpacked_path, self.original_docx, verbose=False
848
+ )
849
+ redlining_validator = RedliningValidator(
850
+ self.unpacked_path, self.original_docx, verbose=False
851
+ )
852
+
853
+ # Run validations
854
+ if not schema_validator.validate():
855
+ raise ValueError("Schema validation failed")
856
+ if not redlining_validator.validate():
857
+ raise ValueError("Redlining validation failed")
858
+
859
+ def save(self, destination=None, validate=True) -> None:
860
+ """
861
+ Save all modified XML files to disk and copy to destination directory.
862
+
863
+ This persists all changes made via add_comment() and reply_to_comment().
864
+
865
+ Args:
866
+ destination: Optional path to save to. If None, saves back to original directory.
867
+ validate: If True, validates document before saving (default: True).
868
+ """
869
+ # Only ensure comment relationships and content types if comment files exist
870
+ if self.comments_path.exists():
871
+ self._ensure_comment_relationships()
872
+ self._ensure_comment_content_types()
873
+
874
+ # Save all modified XML files in temp directory
875
+ for editor in self._editors.values():
876
+ editor.save()
877
+
878
+ # Validate by default
879
+ if validate:
880
+ self.validate()
881
+
882
+ # Copy contents from temp directory to destination (or original directory)
883
+ target_path = Path(destination) if destination else self.original_path
884
+ shutil.copytree(self.unpacked_path, target_path, dirs_exist_ok=True)
885
+
886
+ # ==================== Private: Initialization ====================
887
+
888
+ def _get_next_comment_id(self):
889
+ """Get the next available comment ID."""
890
+ if not self.comments_path.exists():
891
+ return 0
892
+
893
+ editor = self["word/comments.xml"]
894
+ max_id = -1
895
+ for comment_elem in editor.dom.getElementsByTagName("w:comment"):
896
+ comment_id = comment_elem.getAttribute("w:id")
897
+ if comment_id:
898
+ try:
899
+ max_id = max(max_id, int(comment_id))
900
+ except ValueError:
901
+ pass
902
+ return max_id + 1
903
+
904
+ def _load_existing_comments(self):
905
+ """Load existing comments from files to enable replies."""
906
+ if not self.comments_path.exists():
907
+ return {}
908
+
909
+ editor = self["word/comments.xml"]
910
+ existing = {}
911
+
912
+ for comment_elem in editor.dom.getElementsByTagName("w:comment"):
913
+ comment_id = comment_elem.getAttribute("w:id")
914
+ if not comment_id:
915
+ continue
916
+
917
+ # Find para_id from the w:p element within the comment
918
+ para_id = None
919
+ for p_elem in comment_elem.getElementsByTagName("w:p"):
920
+ para_id = p_elem.getAttribute("w14:paraId")
921
+ if para_id:
922
+ break
923
+
924
+ if not para_id:
925
+ continue
926
+
927
+ existing[int(comment_id)] = {"para_id": para_id}
928
+
929
+ return existing
930
+
931
+ # ==================== Private: Setup Methods ====================
932
+
933
+ def _setup_tracking(self, track_revisions=False):
934
+ """Set up comment infrastructure in unpacked directory.
935
+
936
+ Args:
937
+ track_revisions: If True, enables track revisions in settings.xml
938
+ """
939
+ # Create or update word/people.xml
940
+ people_file = self.word_path / "people.xml"
941
+ self._update_people_xml(people_file)
942
+
943
+ # Update XML files
944
+ self._add_content_type_for_people(self.unpacked_path / "[Content_Types].xml")
945
+ self._add_relationship_for_people(
946
+ self.word_path / "_rels" / "document.xml.rels"
947
+ )
948
+
949
+ # Always add RSID to settings.xml, optionally enable trackRevisions
950
+ self._update_settings(
951
+ self.word_path / "settings.xml", track_revisions=track_revisions
952
+ )
953
+
954
+ def _update_people_xml(self, path):
955
+ """Create people.xml if it doesn't exist."""
956
+ if not path.exists():
957
+ # Copy from template
958
+ shutil.copy(TEMPLATE_DIR / "people.xml", path)
959
+
960
+ def _add_content_type_for_people(self, path):
961
+ """Add people.xml content type to [Content_Types].xml if not already present."""
962
+ editor = self["[Content_Types].xml"]
963
+
964
+ if self._has_override(editor, "/word/people.xml"):
965
+ return
966
+
967
+ # Add Override element
968
+ root = editor.dom.documentElement
969
+ override_xml = '<Override PartName="/word/people.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.people+xml"/>'
970
+ editor.append_to(root, override_xml)
971
+
972
+ def _add_relationship_for_people(self, path):
973
+ """Add people.xml relationship to document.xml.rels if not already present."""
974
+ editor = self["word/_rels/document.xml.rels"]
975
+
976
+ if self._has_relationship(editor, "people.xml"):
977
+ return
978
+
979
+ root = editor.dom.documentElement
980
+ root_tag = root.tagName # type: ignore
981
+ prefix = root_tag.split(":")[0] + ":" if ":" in root_tag else ""
982
+ next_rid = editor.get_next_rid()
983
+
984
+ # Create the relationship entry
985
+ rel_xml = f'<{prefix}Relationship Id="{next_rid}" Type="http://schemas.microsoft.com/office/2011/relationships/people" Target="people.xml"/>'
986
+ editor.append_to(root, rel_xml)
987
+
988
+ def _update_settings(self, path, track_revisions=False):
989
+ """Add RSID and optionally enable track revisions in settings.xml.
990
+
991
+ Args:
992
+ path: Path to settings.xml
993
+ track_revisions: If True, adds trackRevisions element
994
+
995
+ Places elements per OOXML schema order:
996
+ - trackRevisions: early (before defaultTabStop)
997
+ - rsids: late (after compat)
998
+ """
999
+ editor = self["word/settings.xml"]
1000
+ root = editor.get_node(tag="w:settings")
1001
+ prefix = root.tagName.split(":")[0] if ":" in root.tagName else "w"
1002
+
1003
+ # Conditionally add trackRevisions if requested
1004
+ if track_revisions:
1005
+ track_revisions_exists = any(
1006
+ elem.tagName == f"{prefix}:trackRevisions"
1007
+ for elem in editor.dom.getElementsByTagName(f"{prefix}:trackRevisions")
1008
+ )
1009
+
1010
+ if not track_revisions_exists:
1011
+ track_rev_xml = f"<{prefix}:trackRevisions/>"
1012
+ # Try to insert before documentProtection, defaultTabStop, or at start
1013
+ inserted = False
1014
+ for tag in [f"{prefix}:documentProtection", f"{prefix}:defaultTabStop"]:
1015
+ elements = editor.dom.getElementsByTagName(tag)
1016
+ if elements:
1017
+ editor.insert_before(elements[0], track_rev_xml)
1018
+ inserted = True
1019
+ break
1020
+ if not inserted:
1021
+ # Insert as first child of settings
1022
+ if root.firstChild:
1023
+ editor.insert_before(root.firstChild, track_rev_xml)
1024
+ else:
1025
+ editor.append_to(root, track_rev_xml)
1026
+
1027
+ # Always check if rsids section exists
1028
+ rsids_elements = editor.dom.getElementsByTagName(f"{prefix}:rsids")
1029
+
1030
+ if not rsids_elements:
1031
+ # Add new rsids section
1032
+ rsids_xml = f'''<{prefix}:rsids>
1033
+ <{prefix}:rsidRoot {prefix}:val="{self.rsid}"/>
1034
+ <{prefix}:rsid {prefix}:val="{self.rsid}"/>
1035
+ </{prefix}:rsids>'''
1036
+
1037
+ # Try to insert after compat, before clrSchemeMapping, or before closing tag
1038
+ inserted = False
1039
+ compat_elements = editor.dom.getElementsByTagName(f"{prefix}:compat")
1040
+ if compat_elements:
1041
+ editor.insert_after(compat_elements[0], rsids_xml)
1042
+ inserted = True
1043
+
1044
+ if not inserted:
1045
+ clr_elements = editor.dom.getElementsByTagName(
1046
+ f"{prefix}:clrSchemeMapping"
1047
+ )
1048
+ if clr_elements:
1049
+ editor.insert_before(clr_elements[0], rsids_xml)
1050
+ inserted = True
1051
+
1052
+ if not inserted:
1053
+ editor.append_to(root, rsids_xml)
1054
+ else:
1055
+ # Check if this rsid already exists
1056
+ rsids_elem = rsids_elements[0]
1057
+ rsid_exists = any(
1058
+ elem.getAttribute(f"{prefix}:val") == self.rsid
1059
+ for elem in rsids_elem.getElementsByTagName(f"{prefix}:rsid")
1060
+ )
1061
+
1062
+ if not rsid_exists:
1063
+ rsid_xml = f'<{prefix}:rsid {prefix}:val="{self.rsid}"/>'
1064
+ editor.append_to(rsids_elem, rsid_xml)
1065
+
1066
+ # ==================== Private: XML File Creation ====================
1067
+
1068
+ def _add_to_comments_xml(
1069
+ self, comment_id, para_id, text, author, initials, timestamp
1070
+ ):
1071
+ """Add a single comment to comments.xml."""
1072
+ if not self.comments_path.exists():
1073
+ shutil.copy(TEMPLATE_DIR / "comments.xml", self.comments_path)
1074
+
1075
+ editor = self["word/comments.xml"]
1076
+ root = editor.get_node(tag="w:comments")
1077
+
1078
+ escaped_text = (
1079
+ text.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
1080
+ )
1081
+ # Note: w:rsidR, w:rsidRDefault, w:rsidP on w:p, w:rsidR on w:r,
1082
+ # and w:author, w:date, w:initials on w:comment are automatically added by DocxXMLEditor
1083
+ comment_xml = f'''<w:comment w:id="{comment_id}">
1084
+ <w:p w14:paraId="{para_id}" w14:textId="77777777">
1085
+ <w:r><w:rPr><w:rStyle w:val="CommentReference"/></w:rPr><w:annotationRef/></w:r>
1086
+ <w:r><w:rPr><w:color w:val="000000"/><w:sz w:val="20"/><w:szCs w:val="20"/></w:rPr><w:t>{escaped_text}</w:t></w:r>
1087
+ </w:p>
1088
+ </w:comment>'''
1089
+ editor.append_to(root, comment_xml)
1090
+
1091
+ def _add_to_comments_extended_xml(self, para_id, parent_para_id):
1092
+ """Add a single comment to commentsExtended.xml."""
1093
+ if not self.comments_extended_path.exists():
1094
+ shutil.copy(
1095
+ TEMPLATE_DIR / "commentsExtended.xml", self.comments_extended_path
1096
+ )
1097
+
1098
+ editor = self["word/commentsExtended.xml"]
1099
+ root = editor.get_node(tag="w15:commentsEx")
1100
+
1101
+ if parent_para_id:
1102
+ xml = f'<w15:commentEx w15:paraId="{para_id}" w15:paraIdParent="{parent_para_id}" w15:done="0"/>'
1103
+ else:
1104
+ xml = f'<w15:commentEx w15:paraId="{para_id}" w15:done="0"/>'
1105
+ editor.append_to(root, xml)
1106
+
1107
+ def _add_to_comments_ids_xml(self, para_id, durable_id):
1108
+ """Add a single comment to commentsIds.xml."""
1109
+ if not self.comments_ids_path.exists():
1110
+ shutil.copy(TEMPLATE_DIR / "commentsIds.xml", self.comments_ids_path)
1111
+
1112
+ editor = self["word/commentsIds.xml"]
1113
+ root = editor.get_node(tag="w16cid:commentsIds")
1114
+
1115
+ xml = f'<w16cid:commentId w16cid:paraId="{para_id}" w16cid:durableId="{durable_id}"/>'
1116
+ editor.append_to(root, xml)
1117
+
1118
+ def _add_to_comments_extensible_xml(self, durable_id):
1119
+ """Add a single comment to commentsExtensible.xml."""
1120
+ if not self.comments_extensible_path.exists():
1121
+ shutil.copy(
1122
+ TEMPLATE_DIR / "commentsExtensible.xml", self.comments_extensible_path
1123
+ )
1124
+
1125
+ editor = self["word/commentsExtensible.xml"]
1126
+ root = editor.get_node(tag="w16cex:commentsExtensible")
1127
+
1128
+ xml = f'<w16cex:commentExtensible w16cex:durableId="{durable_id}"/>'
1129
+ editor.append_to(root, xml)
1130
+
1131
+ # ==================== Private: XML Fragments ====================
1132
+
1133
+ def _comment_range_start_xml(self, comment_id):
1134
+ """Generate XML for comment range start."""
1135
+ return f'<w:commentRangeStart w:id="{comment_id}"/>'
1136
+
1137
+ def _comment_range_end_xml(self, comment_id):
1138
+ """Generate XML for comment range end with reference run.
1139
+
1140
+ Note: w:rsidR is automatically added by DocxXMLEditor.
1141
+ """
1142
+ return f'''<w:commentRangeEnd w:id="{comment_id}"/>
1143
+ <w:r>
1144
+ <w:rPr><w:rStyle w:val="CommentReference"/></w:rPr>
1145
+ <w:commentReference w:id="{comment_id}"/>
1146
+ </w:r>'''
1147
+
1148
+ def _comment_ref_run_xml(self, comment_id):
1149
+ """Generate XML for comment reference run.
1150
+
1151
+ Note: w:rsidR is automatically added by DocxXMLEditor.
1152
+ """
1153
+ return f'''<w:r>
1154
+ <w:rPr><w:rStyle w:val="CommentReference"/></w:rPr>
1155
+ <w:commentReference w:id="{comment_id}"/>
1156
+ </w:r>'''
1157
+
1158
+ # ==================== Private: Metadata Updates ====================
1159
+
1160
+ def _has_relationship(self, editor, target):
1161
+ """Check if a relationship with given target exists."""
1162
+ for rel_elem in editor.dom.getElementsByTagName("Relationship"):
1163
+ if rel_elem.getAttribute("Target") == target:
1164
+ return True
1165
+ return False
1166
+
1167
+ def _has_override(self, editor, part_name):
1168
+ """Check if an override with given part name exists."""
1169
+ for override_elem in editor.dom.getElementsByTagName("Override"):
1170
+ if override_elem.getAttribute("PartName") == part_name:
1171
+ return True
1172
+ return False
1173
+
1174
+ def _has_author(self, editor, author):
1175
+ """Check if an author already exists in people.xml."""
1176
+ for person_elem in editor.dom.getElementsByTagName("w15:person"):
1177
+ if person_elem.getAttribute("w15:author") == author:
1178
+ return True
1179
+ return False
1180
+
1181
+ def _add_author_to_people(self, author):
1182
+ """Add author to people.xml (called during initialization)."""
1183
+ people_path = self.word_path / "people.xml"
1184
+
1185
+ # people.xml should already exist from _setup_tracking
1186
+ if not people_path.exists():
1187
+ raise ValueError("people.xml should exist after _setup_tracking")
1188
+
1189
+ editor = self["word/people.xml"]
1190
+ root = editor.get_node(tag="w15:people")
1191
+
1192
+ # Check if author already exists
1193
+ if self._has_author(editor, author):
1194
+ return
1195
+
1196
+ # Add author with proper XML escaping to prevent injection
1197
+ escaped_author = html.escape(author, quote=True)
1198
+ person_xml = f'''<w15:person w15:author="{escaped_author}">
1199
+ <w15:presenceInfo w15:providerId="None" w15:userId="{escaped_author}"/>
1200
+ </w15:person>'''
1201
+ editor.append_to(root, person_xml)
1202
+
1203
+ def _ensure_comment_relationships(self):
1204
+ """Ensure word/_rels/document.xml.rels has comment relationships."""
1205
+ editor = self["word/_rels/document.xml.rels"]
1206
+
1207
+ if self._has_relationship(editor, "comments.xml"):
1208
+ return
1209
+
1210
+ root = editor.dom.documentElement
1211
+ root_tag = root.tagName # type: ignore
1212
+ prefix = root_tag.split(":")[0] + ":" if ":" in root_tag else ""
1213
+ next_rid_num = int(editor.get_next_rid()[3:])
1214
+
1215
+ # Add relationship elements
1216
+ rels = [
1217
+ (
1218
+ next_rid_num,
1219
+ "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",
1220
+ "comments.xml",
1221
+ ),
1222
+ (
1223
+ next_rid_num + 1,
1224
+ "http://schemas.microsoft.com/office/2011/relationships/commentsExtended",
1225
+ "commentsExtended.xml",
1226
+ ),
1227
+ (
1228
+ next_rid_num + 2,
1229
+ "http://schemas.microsoft.com/office/2016/09/relationships/commentsIds",
1230
+ "commentsIds.xml",
1231
+ ),
1232
+ (
1233
+ next_rid_num + 3,
1234
+ "http://schemas.microsoft.com/office/2018/08/relationships/commentsExtensible",
1235
+ "commentsExtensible.xml",
1236
+ ),
1237
+ ]
1238
+
1239
+ for rel_id, rel_type, target in rels:
1240
+ rel_xml = f'<{prefix}Relationship Id="rId{rel_id}" Type="{rel_type}" Target="{target}"/>'
1241
+ editor.append_to(root, rel_xml)
1242
+
1243
+ def _ensure_comment_content_types(self):
1244
+ """Ensure [Content_Types].xml has comment content types."""
1245
+ editor = self["[Content_Types].xml"]
1246
+
1247
+ if self._has_override(editor, "/word/comments.xml"):
1248
+ return
1249
+
1250
+ root = editor.dom.documentElement
1251
+
1252
+ # Add Override elements
1253
+ overrides = [
1254
+ (
1255
+ "/word/comments.xml",
1256
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml",
1257
+ ),
1258
+ (
1259
+ "/word/commentsExtended.xml",
1260
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtended+xml",
1261
+ ),
1262
+ (
1263
+ "/word/commentsIds.xml",
1264
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsIds+xml",
1265
+ ),
1266
+ (
1267
+ "/word/commentsExtensible.xml",
1268
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.commentsExtensible+xml",
1269
+ ),
1270
+ ]
1271
+
1272
+ for part_name, content_type in overrides:
1273
+ override_xml = (
1274
+ f'<Override PartName="{part_name}" ContentType="{content_type}"/>'
1275
+ )
1276
+ editor.append_to(root, override_xml)