@amrhas82/agentic-kit 1.2.1 → 1.5.0

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 (1031) hide show
  1. package/README.md +5 -5
  2. package/VARIANTS.md +16 -85
  3. package/package.json +1 -1
  4. package/packages/ampcode/AGENTS.md +289 -20
  5. package/packages/ampcode/agents/1-create-prd.md +1 -0
  6. package/packages/ampcode/agents/2-generate-tasks.md +1 -0
  7. package/packages/ampcode/agents/3-process-task-list.md +1 -5
  8. package/packages/ampcode/agents/context-initializer.md +472 -0
  9. package/packages/ampcode/agents/master.md +1 -5
  10. package/packages/ampcode/agents/orchestrator.md +1 -4
  11. package/packages/ampcode/{skills/brainstorming/SKILL.md → commands/brainstorming.md} +1 -1
  12. package/packages/{droid/skills/brand-guidelines/SKILL.md → ampcode/commands/brand-guidelines.md} +1 -1
  13. package/packages/{droid/skills/code-review/code-reviewer.md → ampcode/commands/code-review.md} +109 -1
  14. package/packages/{droid/skills/condition-based-waiting/SKILL.md → ampcode/commands/condition-based-waiting.md} +2 -2
  15. package/packages/ampcode/commands/docx.md +1163 -0
  16. package/packages/ampcode/{skills/internal-comms/SKILL.md → commands/internal-comms.md} +1 -1
  17. package/packages/{droid/skills/mcp-builder/SKILL.md → ampcode/commands/mcp-builder.md} +1 -1
  18. package/packages/{opencode/skills/pdf/reference.md → ampcode/commands/pdf.md} +505 -0
  19. package/packages/ampcode/commands/pptx.md +1542 -0
  20. package/packages/{droid/skills/root-cause-tracing/SKILL.md → ampcode/commands/root-cause-tracing.md} +2 -2
  21. package/packages/ampcode/{skills/skill-creator/SKILL.md → commands/skill-creator.md} +1 -1
  22. package/packages/{opencode/skills/slack-gif-creator/SKILL.md → ampcode/commands/slack-gif-creator.md} +1 -1
  23. package/packages/ampcode/commands/systematic-debugging.md +638 -0
  24. package/packages/{droid/skills/test-driven-development/SKILL.md → ampcode/commands/test-driven-development.md} +1 -1
  25. package/packages/{opencode/skills/testing-anti-patterns/SKILL.md → ampcode/commands/testing-anti-patterns.md} +1 -1
  26. package/packages/{droid/skills/theme-factory/SKILL.md → ampcode/commands/theme-factory.md} +1 -2
  27. package/packages/{opencode/skills/verification-before-completion/SKILL.md → ampcode/commands/verification-before-completion.md} +1 -1
  28. package/packages/{droid/skills/xlsx/SKILL.md → ampcode/commands/xlsx.md} +5 -5
  29. package/packages/ampcode/subagentic-manual.md +155 -0
  30. package/packages/ampcode/variants.json +13 -11
  31. package/packages/claude/.claude-plugin/plugin-lite.json +7 -6
  32. package/packages/claude/.claude-plugin/plugin-pro.json +7 -6
  33. package/packages/claude/.claude-plugin/plugin-standard.json +7 -6
  34. package/packages/claude/.claude-plugin/plugin.json +1 -6
  35. package/packages/claude/AGENTS.md +187 -41
  36. package/packages/claude/agents/1-create-prd.md +1 -0
  37. package/packages/claude/agents/2-generate-tasks.md +1 -0
  38. package/packages/claude/agents/3-process-task-list.md +0 -3
  39. package/packages/claude/agents/context-initializer.md +472 -0
  40. package/packages/claude/agents/master.md +1 -4
  41. package/packages/claude/agents/orchestrator.md +2 -6
  42. package/packages/claude/resources/data.md +3 -3
  43. package/packages/claude/subagentic-manual.md +155 -0
  44. package/packages/claude/variants.json +4 -2
  45. package/packages/droid/AGENTS.md +392 -0
  46. package/packages/droid/change_settings.json +61 -0
  47. package/packages/droid/{agents → droids}/1-create-prd.md +1 -0
  48. package/packages/droid/{agents → droids}/2-generate-tasks.md +1 -0
  49. package/packages/droid/{agents → droids}/3-process-task-list.md +0 -3
  50. package/packages/droid/droids/context-initializer.md +472 -0
  51. package/packages/droid/{agents → droids}/master.md +1 -5
  52. package/packages/droid/{agents → droids}/orchestrator.md +1 -4
  53. package/packages/droid/resources/data.md +3 -3
  54. package/packages/droid/subagentic-manual.md +155 -0
  55. package/packages/droid/variants.json +13 -11
  56. package/packages/opencode/AGENTS.md +72 -63
  57. package/packages/opencode/{agents → agent}/1-create-prd.md +7 -2
  58. package/packages/opencode/{agents → agent}/2-generate-tasks.md +7 -2
  59. package/packages/opencode/{agents → agent}/3-process-task-list.md +6 -6
  60. package/packages/opencode/{agents → agent}/business-analyst.md +6 -2
  61. package/packages/opencode/agent/context-initializer.md +476 -0
  62. package/packages/opencode/{agents → agent}/full-stack-dev.md +6 -2
  63. package/packages/opencode/{agents → agent}/holistic-architect.md +6 -2
  64. package/packages/opencode/{agents → agent}/master.md +7 -7
  65. package/packages/opencode/{agents → agent}/orchestrator.md +7 -5
  66. package/packages/opencode/{agents → agent}/product-manager.md +6 -2
  67. package/packages/opencode/{agents → agent}/product-owner.md +6 -2
  68. package/packages/opencode/{agents → agent}/qa-test-architect.md +6 -2
  69. package/packages/opencode/{agents → agent}/scrum-master.md +6 -2
  70. package/packages/opencode/{agents → agent}/ux-expert.md +6 -2
  71. package/packages/opencode/command/algorithmic-art.md +159 -0
  72. package/packages/opencode/command/artifacts-builder.md +285 -0
  73. package/packages/{droid/skills/brainstorming/SKILL.md → opencode/command/brainstorming.md} +5 -10
  74. package/packages/opencode/command/brand-guidelines.md +123 -0
  75. package/packages/opencode/command/canvas-design.md +155 -0
  76. package/packages/opencode/command/code-review.md +92 -0
  77. package/packages/{ampcode/skills/condition-based-waiting/SKILL.md → opencode/command/condition-based-waiting.md} +52 -39
  78. package/packages/opencode/command/docx.md +255 -0
  79. package/packages/opencode/command/internal-comms.md +142 -0
  80. package/packages/opencode/command/mcp-builder.md +282 -0
  81. package/packages/opencode/command/pdf.md +194 -0
  82. package/packages/opencode/command/pptx.md +272 -0
  83. package/packages/opencode/{skills/root-cause-tracing/SKILL.md → command/root-cause-tracing.md} +99 -62
  84. package/packages/opencode/command/skill-creator.md +196 -0
  85. package/packages/opencode/command/slack-gif-creator.md +340 -0
  86. package/packages/opencode/command/systematic-debugging.md +215 -0
  87. package/packages/opencode/command/test-driven-development.md +231 -0
  88. package/packages/opencode/command/testing-anti-patterns.md +248 -0
  89. package/packages/opencode/command/theme-factory.md +146 -0
  90. package/packages/opencode/command/verification-before-completion.md +151 -0
  91. package/packages/opencode/command/webapp-testing.md +275 -0
  92. package/packages/opencode/command/xlsx.md +254 -0
  93. package/packages/opencode/opencode.jsonc +44 -34
  94. package/packages/opencode/subagentic-manual.md +155 -0
  95. package/packages/opencode/variants.json +13 -11
  96. package/packages/subagentic-manual.md +155 -0
  97. package/packages/ampcode/hooks/register-agents.js +0 -128
  98. package/packages/ampcode/hooks/session-start.js +0 -168
  99. package/packages/ampcode/skills/algorithmic-art/LICENSE.txt +0 -202
  100. package/packages/ampcode/skills/artifacts-builder/LICENSE.txt +0 -202
  101. package/packages/ampcode/skills/brand-guidelines/LICENSE.txt +0 -202
  102. package/packages/ampcode/skills/brand-guidelines/SKILL.md +0 -73
  103. package/packages/ampcode/skills/canvas-design/LICENSE.txt +0 -202
  104. package/packages/ampcode/skills/code-review/SKILL.md +0 -105
  105. package/packages/ampcode/skills/code-review/code-reviewer.md +0 -146
  106. package/packages/ampcode/skills/docx/LICENSE.txt +0 -30
  107. package/packages/ampcode/skills/docx/SKILL.md +0 -197
  108. package/packages/ampcode/skills/docx/docx-js.md +0 -350
  109. package/packages/ampcode/skills/docx/ooxml.md +0 -610
  110. package/packages/ampcode/skills/internal-comms/LICENSE.txt +0 -202
  111. package/packages/ampcode/skills/mcp-builder/LICENSE.txt +0 -202
  112. package/packages/ampcode/skills/mcp-builder/SKILL.md +0 -328
  113. package/packages/ampcode/skills/pdf/LICENSE.txt +0 -30
  114. package/packages/ampcode/skills/pdf/SKILL.md +0 -294
  115. package/packages/ampcode/skills/pdf/forms.md +0 -205
  116. package/packages/ampcode/skills/pdf/reference.md +0 -612
  117. package/packages/ampcode/skills/pptx/LICENSE.txt +0 -30
  118. package/packages/ampcode/skills/pptx/SKILL.md +0 -484
  119. package/packages/ampcode/skills/pptx/html2pptx.md +0 -625
  120. package/packages/ampcode/skills/pptx/ooxml.md +0 -427
  121. package/packages/ampcode/skills/root-cause-tracing/SKILL.md +0 -174
  122. package/packages/ampcode/skills/skill-creator/LICENSE.txt +0 -202
  123. package/packages/ampcode/skills/slack-gif-creator/LICENSE.txt +0 -202
  124. package/packages/ampcode/skills/slack-gif-creator/SKILL.md +0 -646
  125. package/packages/ampcode/skills/slack-gif-creator/requirements.txt +0 -4
  126. package/packages/ampcode/skills/systematic-debugging/CREATION-LOG.md +0 -119
  127. package/packages/ampcode/skills/systematic-debugging/SKILL.md +0 -295
  128. package/packages/ampcode/skills/systematic-debugging/test-academic.md +0 -14
  129. package/packages/ampcode/skills/systematic-debugging/test-pressure-1.md +0 -58
  130. package/packages/ampcode/skills/systematic-debugging/test-pressure-2.md +0 -68
  131. package/packages/ampcode/skills/systematic-debugging/test-pressure-3.md +0 -69
  132. package/packages/ampcode/skills/test-driven-development/SKILL.md +0 -364
  133. package/packages/ampcode/skills/testing-anti-patterns/SKILL.md +0 -302
  134. package/packages/ampcode/skills/theme-factory/LICENSE.txt +0 -202
  135. package/packages/ampcode/skills/theme-factory/SKILL.md +0 -59
  136. package/packages/ampcode/skills/theme-factory/theme-showcase.pdf +0 -0
  137. package/packages/ampcode/skills/verification-before-completion/SKILL.md +0 -139
  138. package/packages/ampcode/skills/webapp-testing/LICENSE.txt +0 -202
  139. package/packages/ampcode/skills/xlsx/LICENSE.txt +0 -30
  140. package/packages/ampcode/skills/xlsx/SKILL.md +0 -289
  141. package/packages/ampcode/subagents-and-skills.md +0 -79
  142. package/packages/claude/subagents-and-skills.md +0 -79
  143. package/packages/droid/hooks/register-agents.js +0 -128
  144. package/packages/droid/hooks/session-start.js +0 -168
  145. package/packages/droid/skills/algorithmic-art/LICENSE.txt +0 -202
  146. package/packages/droid/skills/algorithmic-art/SKILL.md +0 -405
  147. package/packages/droid/skills/artifacts-builder/LICENSE.txt +0 -202
  148. package/packages/droid/skills/artifacts-builder/SKILL.md +0 -74
  149. package/packages/droid/skills/brand-guidelines/LICENSE.txt +0 -202
  150. package/packages/droid/skills/canvas-design/LICENSE.txt +0 -202
  151. package/packages/droid/skills/canvas-design/SKILL.md +0 -130
  152. package/packages/droid/skills/code-review/SKILL.md +0 -105
  153. package/packages/droid/skills/docx/LICENSE.txt +0 -30
  154. package/packages/droid/skills/docx/SKILL.md +0 -197
  155. package/packages/droid/skills/docx/docx-js.md +0 -350
  156. package/packages/droid/skills/docx/ooxml.md +0 -610
  157. package/packages/droid/skills/internal-comms/LICENSE.txt +0 -202
  158. package/packages/droid/skills/internal-comms/SKILL.md +0 -32
  159. package/packages/droid/skills/mcp-builder/LICENSE.txt +0 -202
  160. package/packages/droid/skills/pdf/LICENSE.txt +0 -30
  161. package/packages/droid/skills/pdf/SKILL.md +0 -294
  162. package/packages/droid/skills/pdf/forms.md +0 -205
  163. package/packages/droid/skills/pdf/reference.md +0 -612
  164. package/packages/droid/skills/pptx/LICENSE.txt +0 -30
  165. package/packages/droid/skills/pptx/SKILL.md +0 -484
  166. package/packages/droid/skills/pptx/html2pptx.md +0 -625
  167. package/packages/droid/skills/pptx/ooxml.md +0 -427
  168. package/packages/droid/skills/skill-creator/LICENSE.txt +0 -202
  169. package/packages/droid/skills/skill-creator/SKILL.md +0 -209
  170. package/packages/droid/skills/slack-gif-creator/LICENSE.txt +0 -202
  171. package/packages/droid/skills/slack-gif-creator/SKILL.md +0 -646
  172. package/packages/droid/skills/slack-gif-creator/requirements.txt +0 -4
  173. package/packages/droid/skills/systematic-debugging/CREATION-LOG.md +0 -119
  174. package/packages/droid/skills/systematic-debugging/SKILL.md +0 -295
  175. package/packages/droid/skills/systematic-debugging/test-academic.md +0 -14
  176. package/packages/droid/skills/systematic-debugging/test-pressure-1.md +0 -58
  177. package/packages/droid/skills/systematic-debugging/test-pressure-2.md +0 -68
  178. package/packages/droid/skills/systematic-debugging/test-pressure-3.md +0 -69
  179. package/packages/droid/skills/testing-anti-patterns/SKILL.md +0 -302
  180. package/packages/droid/skills/theme-factory/LICENSE.txt +0 -202
  181. package/packages/droid/skills/theme-factory/theme-showcase.pdf +0 -0
  182. package/packages/droid/skills/verification-before-completion/SKILL.md +0 -139
  183. package/packages/droid/skills/webapp-testing/LICENSE.txt +0 -202
  184. package/packages/droid/skills/webapp-testing/SKILL.md +0 -96
  185. package/packages/droid/skills/xlsx/LICENSE.txt +0 -30
  186. package/packages/droid/subagents-and-skills.md +0 -79
  187. package/packages/opencode/hooks/register-agents.js +0 -128
  188. package/packages/opencode/hooks/session-start.js +0 -168
  189. package/packages/opencode/skills/README.md +0 -76
  190. package/packages/opencode/skills/algorithmic-art/LICENSE.txt +0 -202
  191. package/packages/opencode/skills/algorithmic-art/SKILL.md +0 -405
  192. package/packages/opencode/skills/artifacts-builder/LICENSE.txt +0 -202
  193. package/packages/opencode/skills/artifacts-builder/SKILL.md +0 -74
  194. package/packages/opencode/skills/brainstorming/SKILL.md +0 -54
  195. package/packages/opencode/skills/brand-guidelines/LICENSE.txt +0 -202
  196. package/packages/opencode/skills/brand-guidelines/SKILL.md +0 -73
  197. package/packages/opencode/skills/canvas-design/LICENSE.txt +0 -202
  198. package/packages/opencode/skills/canvas-design/SKILL.md +0 -130
  199. package/packages/opencode/skills/code-review/SKILL.md +0 -105
  200. package/packages/opencode/skills/code-review/code-reviewer.md +0 -146
  201. package/packages/opencode/skills/condition-based-waiting/SKILL.md +0 -120
  202. package/packages/opencode/skills/docx/LICENSE.txt +0 -30
  203. package/packages/opencode/skills/docx/SKILL.md +0 -197
  204. package/packages/opencode/skills/docx/docx-js.md +0 -350
  205. package/packages/opencode/skills/docx/ooxml.md +0 -610
  206. package/packages/opencode/skills/internal-comms/LICENSE.txt +0 -202
  207. package/packages/opencode/skills/internal-comms/SKILL.md +0 -32
  208. package/packages/opencode/skills/mcp-builder/LICENSE.txt +0 -202
  209. package/packages/opencode/skills/mcp-builder/SKILL.md +0 -328
  210. package/packages/opencode/skills/pdf/LICENSE.txt +0 -30
  211. package/packages/opencode/skills/pdf/SKILL.md +0 -294
  212. package/packages/opencode/skills/pdf/forms.md +0 -205
  213. package/packages/opencode/skills/pptx/LICENSE.txt +0 -30
  214. package/packages/opencode/skills/pptx/SKILL.md +0 -484
  215. package/packages/opencode/skills/pptx/html2pptx.md +0 -625
  216. package/packages/opencode/skills/pptx/ooxml.md +0 -427
  217. package/packages/opencode/skills/skill-creator/LICENSE.txt +0 -202
  218. package/packages/opencode/skills/skill-creator/SKILL.md +0 -209
  219. package/packages/opencode/skills/slack-gif-creator/LICENSE.txt +0 -202
  220. package/packages/opencode/skills/slack-gif-creator/requirements.txt +0 -4
  221. package/packages/opencode/skills/systematic-debugging/CREATION-LOG.md +0 -119
  222. package/packages/opencode/skills/systematic-debugging/SKILL.md +0 -295
  223. package/packages/opencode/skills/systematic-debugging/test-academic.md +0 -14
  224. package/packages/opencode/skills/systematic-debugging/test-pressure-1.md +0 -58
  225. package/packages/opencode/skills/systematic-debugging/test-pressure-2.md +0 -68
  226. package/packages/opencode/skills/systematic-debugging/test-pressure-3.md +0 -69
  227. package/packages/opencode/skills/test-driven-development/SKILL.md +0 -364
  228. package/packages/opencode/skills/theme-factory/LICENSE.txt +0 -202
  229. package/packages/opencode/skills/theme-factory/SKILL.md +0 -59
  230. package/packages/opencode/skills/theme-factory/theme-showcase.pdf +0 -0
  231. package/packages/opencode/skills/webapp-testing/LICENSE.txt +0 -202
  232. package/packages/opencode/skills/webapp-testing/SKILL.md +0 -96
  233. package/packages/opencode/skills/xlsx/LICENSE.txt +0 -30
  234. package/packages/opencode/skills/xlsx/SKILL.md +0 -289
  235. package/packages/opencode/subagents-and-skills.md +0 -79
  236. /package/packages/ampcode/{skills → commands}/README.md +0 -0
  237. /package/packages/ampcode/{skills → commands}/algorithmic-art/templates/generator_template.js +0 -0
  238. /package/packages/ampcode/{skills → commands}/algorithmic-art/templates/viewer.html +0 -0
  239. /package/packages/ampcode/{skills/algorithmic-art/SKILL.md → commands/algorithmic-art.md} +0 -0
  240. /package/packages/ampcode/{skills → commands}/artifacts-builder/scripts/bundle-artifact.sh +0 -0
  241. /package/packages/ampcode/{skills → commands}/artifacts-builder/scripts/init-artifact.sh +0 -0
  242. /package/packages/ampcode/{skills → commands}/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  243. /package/packages/ampcode/{skills/artifacts-builder/SKILL.md → commands/artifacts-builder.md} +0 -0
  244. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  245. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  246. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  247. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  248. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  249. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  250. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  251. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  252. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  253. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  254. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  255. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  256. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  257. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  258. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  259. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  260. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  261. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  262. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  263. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  264. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  265. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  266. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  267. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  268. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  269. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  270. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  271. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  272. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  273. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  274. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  275. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  276. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  277. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  278. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  279. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  280. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  281. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  282. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  283. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  284. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  285. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  286. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  287. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  288. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  289. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  290. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  291. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  292. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  293. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  294. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  295. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  296. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  297. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  298. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  299. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  300. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  301. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  302. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  303. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  304. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  305. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  306. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  307. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  308. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  309. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  310. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  311. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  312. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  313. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  314. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  315. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  316. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  317. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  318. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  319. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  320. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  321. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  322. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  323. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  324. /package/packages/ampcode/{skills → commands}/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  325. /package/packages/ampcode/{skills/canvas-design/SKILL.md → commands/canvas-design.md} +0 -0
  326. /package/packages/ampcode/{skills → commands}/condition-based-waiting/example.ts +0 -0
  327. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  328. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  329. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  330. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  331. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  332. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  333. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  334. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  335. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  336. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  337. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  338. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  339. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  340. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  341. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  342. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  343. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  344. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  345. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  346. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  347. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  348. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  349. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  350. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  351. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  352. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  353. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  354. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  355. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  356. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  357. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  358. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/mce/mc.xsd +0 -0
  359. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  360. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  361. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  362. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  363. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  364. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  365. /package/packages/ampcode/{skills → commands}/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  366. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/pack.py +0 -0
  367. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/unpack.py +0 -0
  368. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/validate.py +0 -0
  369. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/validation/__init__.py +0 -0
  370. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/validation/base.py +0 -0
  371. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/validation/docx.py +0 -0
  372. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/validation/pptx.py +0 -0
  373. /package/packages/ampcode/{skills → commands}/docx/ooxml/scripts/validation/redlining.py +0 -0
  374. /package/packages/ampcode/{skills → commands}/docx/scripts/__init__.py +0 -0
  375. /package/packages/ampcode/{skills → commands}/docx/scripts/document.py +0 -0
  376. /package/packages/ampcode/{skills → commands}/docx/scripts/templates/comments.xml +0 -0
  377. /package/packages/ampcode/{skills → commands}/docx/scripts/templates/commentsExtended.xml +0 -0
  378. /package/packages/ampcode/{skills → commands}/docx/scripts/templates/commentsExtensible.xml +0 -0
  379. /package/packages/ampcode/{skills → commands}/docx/scripts/templates/commentsIds.xml +0 -0
  380. /package/packages/ampcode/{skills → commands}/docx/scripts/templates/people.xml +0 -0
  381. /package/packages/ampcode/{skills → commands}/docx/scripts/utilities.py +0 -0
  382. /package/packages/ampcode/{skills → commands}/internal-comms/examples/3p-updates.md +0 -0
  383. /package/packages/ampcode/{skills → commands}/internal-comms/examples/company-newsletter.md +0 -0
  384. /package/packages/ampcode/{skills → commands}/internal-comms/examples/faq-answers.md +0 -0
  385. /package/packages/ampcode/{skills → commands}/internal-comms/examples/general-comms.md +0 -0
  386. /package/packages/ampcode/{skills → commands}/mcp-builder/reference/evaluation.md +0 -0
  387. /package/packages/ampcode/{skills → commands}/mcp-builder/reference/mcp_best_practices.md +0 -0
  388. /package/packages/ampcode/{skills → commands}/mcp-builder/reference/node_mcp_server.md +0 -0
  389. /package/packages/ampcode/{skills → commands}/mcp-builder/reference/python_mcp_server.md +0 -0
  390. /package/packages/ampcode/{skills → commands}/mcp-builder/scripts/connections.py +0 -0
  391. /package/packages/ampcode/{skills → commands}/mcp-builder/scripts/evaluation.py +0 -0
  392. /package/packages/ampcode/{skills → commands}/mcp-builder/scripts/example_evaluation.xml +0 -0
  393. /package/packages/ampcode/{skills → commands}/mcp-builder/scripts/requirements.txt +0 -0
  394. /package/packages/ampcode/{skills → commands}/pdf/scripts/check_bounding_boxes.py +0 -0
  395. /package/packages/ampcode/{skills → commands}/pdf/scripts/check_bounding_boxes_test.py +0 -0
  396. /package/packages/ampcode/{skills → commands}/pdf/scripts/check_fillable_fields.py +0 -0
  397. /package/packages/ampcode/{skills → commands}/pdf/scripts/convert_pdf_to_images.py +0 -0
  398. /package/packages/ampcode/{skills → commands}/pdf/scripts/create_validation_image.py +0 -0
  399. /package/packages/ampcode/{skills → commands}/pdf/scripts/extract_form_field_info.py +0 -0
  400. /package/packages/ampcode/{skills → commands}/pdf/scripts/fill_fillable_fields.py +0 -0
  401. /package/packages/ampcode/{skills → commands}/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  402. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  403. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  404. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  405. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  406. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  407. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  408. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  409. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  410. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  411. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  412. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  413. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  414. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  415. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  416. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  417. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  418. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  419. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  420. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  421. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  422. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  423. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  424. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  425. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  426. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  427. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  428. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  429. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  430. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  431. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  432. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  433. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/mce/mc.xsd +0 -0
  434. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  435. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  436. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  437. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  438. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  439. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  440. /package/packages/ampcode/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  441. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/pack.py +0 -0
  442. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/unpack.py +0 -0
  443. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/validate.py +0 -0
  444. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/validation/__init__.py +0 -0
  445. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/validation/base.py +0 -0
  446. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/validation/docx.py +0 -0
  447. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/validation/pptx.py +0 -0
  448. /package/packages/ampcode/{skills → commands}/pptx/ooxml/scripts/validation/redlining.py +0 -0
  449. /package/packages/ampcode/{skills → commands}/pptx/scripts/html2pptx.js +0 -0
  450. /package/packages/ampcode/{skills → commands}/pptx/scripts/inventory.py +0 -0
  451. /package/packages/ampcode/{skills → commands}/pptx/scripts/rearrange.py +0 -0
  452. /package/packages/ampcode/{skills → commands}/pptx/scripts/replace.py +0 -0
  453. /package/packages/ampcode/{skills → commands}/pptx/scripts/thumbnail.py +0 -0
  454. /package/packages/ampcode/{skills → commands}/root-cause-tracing/find-polluter.sh +0 -0
  455. /package/packages/ampcode/{skills → commands}/skill-creator/scripts/init_skill.py +0 -0
  456. /package/packages/ampcode/{skills → commands}/skill-creator/scripts/package_skill.py +0 -0
  457. /package/packages/ampcode/{skills → commands}/skill-creator/scripts/quick_validate.py +0 -0
  458. /package/packages/ampcode/{skills → commands}/slack-gif-creator/core/color_palettes.py +0 -0
  459. /package/packages/ampcode/{skills → commands}/slack-gif-creator/core/easing.py +0 -0
  460. /package/packages/ampcode/{skills → commands}/slack-gif-creator/core/frame_composer.py +0 -0
  461. /package/packages/ampcode/{skills → commands}/slack-gif-creator/core/gif_builder.py +0 -0
  462. /package/packages/ampcode/{skills → commands}/slack-gif-creator/core/typography.py +0 -0
  463. /package/packages/ampcode/{skills → commands}/slack-gif-creator/core/validators.py +0 -0
  464. /package/packages/ampcode/{skills → commands}/slack-gif-creator/core/visual_effects.py +0 -0
  465. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/bounce.py +0 -0
  466. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/explode.py +0 -0
  467. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/fade.py +0 -0
  468. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/flip.py +0 -0
  469. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/kaleidoscope.py +0 -0
  470. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/morph.py +0 -0
  471. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/move.py +0 -0
  472. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/pulse.py +0 -0
  473. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/shake.py +0 -0
  474. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/slide.py +0 -0
  475. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/spin.py +0 -0
  476. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/wiggle.py +0 -0
  477. /package/packages/ampcode/{skills → commands}/slack-gif-creator/templates/zoom.py +0 -0
  478. /package/packages/ampcode/{skills → commands}/theme-factory/themes/arctic-frost.md +0 -0
  479. /package/packages/ampcode/{skills → commands}/theme-factory/themes/botanical-garden.md +0 -0
  480. /package/packages/ampcode/{skills → commands}/theme-factory/themes/desert-rose.md +0 -0
  481. /package/packages/ampcode/{skills → commands}/theme-factory/themes/forest-canopy.md +0 -0
  482. /package/packages/ampcode/{skills → commands}/theme-factory/themes/golden-hour.md +0 -0
  483. /package/packages/ampcode/{skills → commands}/theme-factory/themes/midnight-galaxy.md +0 -0
  484. /package/packages/ampcode/{skills → commands}/theme-factory/themes/modern-minimalist.md +0 -0
  485. /package/packages/ampcode/{skills → commands}/theme-factory/themes/ocean-depths.md +0 -0
  486. /package/packages/ampcode/{skills → commands}/theme-factory/themes/sunset-boulevard.md +0 -0
  487. /package/packages/ampcode/{skills → commands}/theme-factory/themes/tech-innovation.md +0 -0
  488. /package/packages/ampcode/{skills → commands}/webapp-testing/examples/console_logging.py +0 -0
  489. /package/packages/ampcode/{skills → commands}/webapp-testing/examples/element_discovery.py +0 -0
  490. /package/packages/ampcode/{skills → commands}/webapp-testing/examples/static_html_automation.py +0 -0
  491. /package/packages/ampcode/{skills → commands}/webapp-testing/scripts/with_server.py +0 -0
  492. /package/packages/ampcode/{skills/webapp-testing/SKILL.md → commands/webapp-testing.md} +0 -0
  493. /package/packages/ampcode/{skills → commands}/xlsx/recalc.py +0 -0
  494. /package/packages/droid/{skills → commands}/README.md +0 -0
  495. /package/packages/droid/{skills → commands}/algorithmic-art/templates/generator_template.js +0 -0
  496. /package/packages/droid/{skills → commands}/algorithmic-art/templates/viewer.html +0 -0
  497. /package/packages/{opencode/skills-backup → droid/commands}/algorithmic-art.md +0 -0
  498. /package/packages/droid/{skills → commands}/artifacts-builder/scripts/bundle-artifact.sh +0 -0
  499. /package/packages/droid/{skills → commands}/artifacts-builder/scripts/init-artifact.sh +0 -0
  500. /package/packages/droid/{skills → commands}/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  501. /package/packages/{opencode/skills-backup → droid/commands}/artifacts-builder.md +0 -0
  502. /package/packages/{opencode/skills-backup → droid/commands}/brainstorming.md +0 -0
  503. /package/packages/{opencode/skills-backup → droid/commands}/brand-guidelines.md +0 -0
  504. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  505. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  506. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  507. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  508. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  509. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  510. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  511. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  512. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  513. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  514. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  515. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  516. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  517. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  518. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  519. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  520. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  521. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  522. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  523. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  524. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  525. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  526. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  527. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  528. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  529. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  530. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  531. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  532. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  533. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  534. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  535. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  536. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  537. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  538. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  539. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  540. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  541. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  542. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  543. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  544. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  545. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  546. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  547. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  548. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  549. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  550. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  551. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  552. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  553. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  554. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  555. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  556. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  557. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  558. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  559. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  560. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  561. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  562. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  563. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  564. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  565. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  566. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  567. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  568. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  569. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  570. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  571. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  572. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  573. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  574. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  575. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  576. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  577. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  578. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  579. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  580. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  581. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  582. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  583. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  584. /package/packages/droid/{skills → commands}/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  585. /package/packages/{opencode/skills-backup → droid/commands}/canvas-design.md +0 -0
  586. /package/packages/{opencode/skills-backup → droid/commands}/code-review.md +0 -0
  587. /package/packages/droid/{skills → commands}/condition-based-waiting/example.ts +0 -0
  588. /package/packages/{opencode/skills-backup → droid/commands}/condition-based-waiting.md +0 -0
  589. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  590. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  591. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  592. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  593. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  594. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  595. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  596. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  597. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  598. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  599. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  600. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  601. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  602. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  603. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  604. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  605. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  606. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  607. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  608. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  609. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  610. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  611. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  612. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  613. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  614. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  615. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  616. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  617. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  618. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  619. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  620. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/mce/mc.xsd +0 -0
  621. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  622. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  623. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  624. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  625. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  626. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  627. /package/packages/droid/{skills → commands}/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  628. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/pack.py +0 -0
  629. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/unpack.py +0 -0
  630. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/validate.py +0 -0
  631. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/validation/__init__.py +0 -0
  632. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/validation/base.py +0 -0
  633. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/validation/docx.py +0 -0
  634. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/validation/pptx.py +0 -0
  635. /package/packages/droid/{skills → commands}/docx/ooxml/scripts/validation/redlining.py +0 -0
  636. /package/packages/droid/{skills → commands}/docx/scripts/__init__.py +0 -0
  637. /package/packages/droid/{skills → commands}/docx/scripts/document.py +0 -0
  638. /package/packages/droid/{skills → commands}/docx/scripts/templates/comments.xml +0 -0
  639. /package/packages/droid/{skills → commands}/docx/scripts/templates/commentsExtended.xml +0 -0
  640. /package/packages/droid/{skills → commands}/docx/scripts/templates/commentsExtensible.xml +0 -0
  641. /package/packages/droid/{skills → commands}/docx/scripts/templates/commentsIds.xml +0 -0
  642. /package/packages/droid/{skills → commands}/docx/scripts/templates/people.xml +0 -0
  643. /package/packages/droid/{skills → commands}/docx/scripts/utilities.py +0 -0
  644. /package/packages/{opencode/skills-backup → droid/commands}/docx.md +0 -0
  645. /package/packages/droid/{skills → commands}/internal-comms/examples/3p-updates.md +0 -0
  646. /package/packages/droid/{skills → commands}/internal-comms/examples/company-newsletter.md +0 -0
  647. /package/packages/droid/{skills → commands}/internal-comms/examples/faq-answers.md +0 -0
  648. /package/packages/droid/{skills → commands}/internal-comms/examples/general-comms.md +0 -0
  649. /package/packages/{opencode/skills-backup → droid/commands}/internal-comms.md +0 -0
  650. /package/packages/droid/{skills → commands}/mcp-builder/reference/evaluation.md +0 -0
  651. /package/packages/droid/{skills → commands}/mcp-builder/reference/mcp_best_practices.md +0 -0
  652. /package/packages/droid/{skills → commands}/mcp-builder/reference/node_mcp_server.md +0 -0
  653. /package/packages/droid/{skills → commands}/mcp-builder/reference/python_mcp_server.md +0 -0
  654. /package/packages/droid/{skills → commands}/mcp-builder/scripts/connections.py +0 -0
  655. /package/packages/droid/{skills → commands}/mcp-builder/scripts/evaluation.py +0 -0
  656. /package/packages/droid/{skills → commands}/mcp-builder/scripts/example_evaluation.xml +0 -0
  657. /package/packages/droid/{skills → commands}/mcp-builder/scripts/requirements.txt +0 -0
  658. /package/packages/{opencode/skills-backup → droid/commands}/mcp-builder.md +0 -0
  659. /package/packages/droid/{skills → commands}/pdf/scripts/check_bounding_boxes.py +0 -0
  660. /package/packages/droid/{skills → commands}/pdf/scripts/check_bounding_boxes_test.py +0 -0
  661. /package/packages/droid/{skills → commands}/pdf/scripts/check_fillable_fields.py +0 -0
  662. /package/packages/droid/{skills → commands}/pdf/scripts/convert_pdf_to_images.py +0 -0
  663. /package/packages/droid/{skills → commands}/pdf/scripts/create_validation_image.py +0 -0
  664. /package/packages/droid/{skills → commands}/pdf/scripts/extract_form_field_info.py +0 -0
  665. /package/packages/droid/{skills → commands}/pdf/scripts/fill_fillable_fields.py +0 -0
  666. /package/packages/droid/{skills → commands}/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  667. /package/packages/{opencode/skills-backup → droid/commands}/pdf.md +0 -0
  668. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  669. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  670. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  671. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  672. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  673. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  674. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  675. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  676. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  677. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  678. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  679. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  680. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  681. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  682. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  683. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  684. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  685. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  686. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  687. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  688. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  689. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  690. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  691. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  692. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  693. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  694. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  695. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  696. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  697. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  698. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  699. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/mce/mc.xsd +0 -0
  700. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  701. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  702. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  703. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  704. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  705. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  706. /package/packages/droid/{skills → commands}/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  707. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/pack.py +0 -0
  708. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/unpack.py +0 -0
  709. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/validate.py +0 -0
  710. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/validation/__init__.py +0 -0
  711. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/validation/base.py +0 -0
  712. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/validation/docx.py +0 -0
  713. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/validation/pptx.py +0 -0
  714. /package/packages/droid/{skills → commands}/pptx/ooxml/scripts/validation/redlining.py +0 -0
  715. /package/packages/droid/{skills → commands}/pptx/scripts/html2pptx.js +0 -0
  716. /package/packages/droid/{skills → commands}/pptx/scripts/inventory.py +0 -0
  717. /package/packages/droid/{skills → commands}/pptx/scripts/rearrange.py +0 -0
  718. /package/packages/droid/{skills → commands}/pptx/scripts/replace.py +0 -0
  719. /package/packages/droid/{skills → commands}/pptx/scripts/thumbnail.py +0 -0
  720. /package/packages/{opencode/skills-backup → droid/commands}/pptx.md +0 -0
  721. /package/packages/droid/{skills → commands}/root-cause-tracing/find-polluter.sh +0 -0
  722. /package/packages/{opencode/skills-backup → droid/commands}/root-cause-tracing.md +0 -0
  723. /package/packages/droid/{skills → commands}/skill-creator/scripts/init_skill.py +0 -0
  724. /package/packages/droid/{skills → commands}/skill-creator/scripts/package_skill.py +0 -0
  725. /package/packages/droid/{skills → commands}/skill-creator/scripts/quick_validate.py +0 -0
  726. /package/packages/{opencode/skills-backup → droid/commands}/skill-creator.md +0 -0
  727. /package/packages/droid/{skills → commands}/slack-gif-creator/core/color_palettes.py +0 -0
  728. /package/packages/droid/{skills → commands}/slack-gif-creator/core/easing.py +0 -0
  729. /package/packages/droid/{skills → commands}/slack-gif-creator/core/frame_composer.py +0 -0
  730. /package/packages/droid/{skills → commands}/slack-gif-creator/core/gif_builder.py +0 -0
  731. /package/packages/droid/{skills → commands}/slack-gif-creator/core/typography.py +0 -0
  732. /package/packages/droid/{skills → commands}/slack-gif-creator/core/validators.py +0 -0
  733. /package/packages/droid/{skills → commands}/slack-gif-creator/core/visual_effects.py +0 -0
  734. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/bounce.py +0 -0
  735. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/explode.py +0 -0
  736. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/fade.py +0 -0
  737. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/flip.py +0 -0
  738. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/kaleidoscope.py +0 -0
  739. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/morph.py +0 -0
  740. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/move.py +0 -0
  741. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/pulse.py +0 -0
  742. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/shake.py +0 -0
  743. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/slide.py +0 -0
  744. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/spin.py +0 -0
  745. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/wiggle.py +0 -0
  746. /package/packages/droid/{skills → commands}/slack-gif-creator/templates/zoom.py +0 -0
  747. /package/packages/{opencode/skills-backup → droid/commands}/slack-gif-creator.md +0 -0
  748. /package/packages/{opencode/skills-backup → droid/commands}/systematic-debugging.md +0 -0
  749. /package/packages/{opencode/skills-backup → droid/commands}/test-driven-development.md +0 -0
  750. /package/packages/{opencode/skills-backup → droid/commands}/testing-anti-patterns.md +0 -0
  751. /package/packages/droid/{skills → commands}/theme-factory/themes/arctic-frost.md +0 -0
  752. /package/packages/droid/{skills → commands}/theme-factory/themes/botanical-garden.md +0 -0
  753. /package/packages/droid/{skills → commands}/theme-factory/themes/desert-rose.md +0 -0
  754. /package/packages/droid/{skills → commands}/theme-factory/themes/forest-canopy.md +0 -0
  755. /package/packages/droid/{skills → commands}/theme-factory/themes/golden-hour.md +0 -0
  756. /package/packages/droid/{skills → commands}/theme-factory/themes/midnight-galaxy.md +0 -0
  757. /package/packages/droid/{skills → commands}/theme-factory/themes/modern-minimalist.md +0 -0
  758. /package/packages/droid/{skills → commands}/theme-factory/themes/ocean-depths.md +0 -0
  759. /package/packages/droid/{skills → commands}/theme-factory/themes/sunset-boulevard.md +0 -0
  760. /package/packages/droid/{skills → commands}/theme-factory/themes/tech-innovation.md +0 -0
  761. /package/packages/{opencode/skills-backup → droid/commands}/theme-factory.md +0 -0
  762. /package/packages/{opencode/skills-backup → droid/commands}/verification-before-completion.md +0 -0
  763. /package/packages/droid/{skills → commands}/webapp-testing/examples/console_logging.py +0 -0
  764. /package/packages/droid/{skills → commands}/webapp-testing/examples/element_discovery.py +0 -0
  765. /package/packages/droid/{skills → commands}/webapp-testing/examples/static_html_automation.py +0 -0
  766. /package/packages/droid/{skills → commands}/webapp-testing/scripts/with_server.py +0 -0
  767. /package/packages/{opencode/skills-backup → droid/commands}/webapp-testing.md +0 -0
  768. /package/packages/droid/{skills → commands}/xlsx/recalc.py +0 -0
  769. /package/packages/{opencode/skills-backup → droid/commands}/xlsx.md +0 -0
  770. /package/packages/droid/{agents → droids}/business-analyst.md +0 -0
  771. /package/packages/droid/{agents → droids}/full-stack-dev.md +0 -0
  772. /package/packages/droid/{agents → droids}/holistic-architect.md +0 -0
  773. /package/packages/droid/{agents → droids}/product-manager.md +0 -0
  774. /package/packages/droid/{agents → droids}/product-owner.md +0 -0
  775. /package/packages/droid/{agents → droids}/qa-test-architect.md +0 -0
  776. /package/packages/droid/{agents → droids}/scrum-master.md +0 -0
  777. /package/packages/droid/{agents → droids}/ux-expert.md +0 -0
  778. /package/packages/opencode/{skills-backup → command}/README.md +0 -0
  779. /package/packages/opencode/{skills → command}/algorithmic-art/templates/generator_template.js +0 -0
  780. /package/packages/opencode/{skills → command}/algorithmic-art/templates/viewer.html +0 -0
  781. /package/packages/opencode/{skills → command}/artifacts-builder/scripts/bundle-artifact.sh +0 -0
  782. /package/packages/opencode/{skills → command}/artifacts-builder/scripts/init-artifact.sh +0 -0
  783. /package/packages/opencode/{skills → command}/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  784. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +0 -0
  785. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  786. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  787. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/BigShoulders-OFL.txt +0 -0
  788. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  789. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Boldonse-OFL.txt +0 -0
  790. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  791. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  792. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +0 -0
  793. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  794. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  795. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  796. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +0 -0
  797. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  798. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/DMMono-OFL.txt +0 -0
  799. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  800. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/EricaOne-OFL.txt +0 -0
  801. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  802. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  803. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/GeistMono-OFL.txt +0 -0
  804. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  805. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Gloock-OFL.txt +0 -0
  806. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  807. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  808. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +0 -0
  809. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  810. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  811. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  812. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  813. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  814. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  815. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  816. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  817. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +0 -0
  818. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  819. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  820. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  821. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Italiana-OFL.txt +0 -0
  822. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  823. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  824. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +0 -0
  825. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  826. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  827. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  828. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Jura-OFL.txt +0 -0
  829. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +0 -0
  830. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  831. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  832. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  833. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  834. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Lora-OFL.txt +0 -0
  835. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  836. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  837. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/NationalPark-OFL.txt +0 -0
  838. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  839. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +0 -0
  840. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  841. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  842. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Outfit-OFL.txt +0 -0
  843. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  844. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  845. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/PixelifySans-OFL.txt +0 -0
  846. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/PoiretOne-OFL.txt +0 -0
  847. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  848. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  849. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/RedHatMono-OFL.txt +0 -0
  850. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  851. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Silkscreen-OFL.txt +0 -0
  852. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  853. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  854. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/SmoochSans-OFL.txt +0 -0
  855. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  856. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Tektur-OFL.txt +0 -0
  857. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  858. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  859. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  860. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  861. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/WorkSans-OFL.txt +0 -0
  862. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  863. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/YoungSerif-OFL.txt +0 -0
  864. /package/packages/opencode/{skills → command}/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  865. /package/packages/opencode/{skills → command}/condition-based-waiting/example.ts +0 -0
  866. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  867. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  868. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  869. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  870. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  871. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  872. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  873. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  874. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  875. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  876. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  877. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  878. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  879. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  880. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  881. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  882. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  883. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  884. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  885. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  886. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  887. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  888. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  889. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  890. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  891. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  892. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  893. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  894. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  895. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  896. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  897. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/mce/mc.xsd +0 -0
  898. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  899. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  900. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  901. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  902. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  903. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  904. /package/packages/opencode/{skills → command}/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  905. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/pack.py +0 -0
  906. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/unpack.py +0 -0
  907. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/validate.py +0 -0
  908. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/validation/__init__.py +0 -0
  909. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/validation/base.py +0 -0
  910. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/validation/docx.py +0 -0
  911. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/validation/pptx.py +0 -0
  912. /package/packages/opencode/{skills → command}/docx/ooxml/scripts/validation/redlining.py +0 -0
  913. /package/packages/opencode/{skills → command}/docx/scripts/__init__.py +0 -0
  914. /package/packages/opencode/{skills → command}/docx/scripts/document.py +0 -0
  915. /package/packages/opencode/{skills → command}/docx/scripts/templates/comments.xml +0 -0
  916. /package/packages/opencode/{skills → command}/docx/scripts/templates/commentsExtended.xml +0 -0
  917. /package/packages/opencode/{skills → command}/docx/scripts/templates/commentsExtensible.xml +0 -0
  918. /package/packages/opencode/{skills → command}/docx/scripts/templates/commentsIds.xml +0 -0
  919. /package/packages/opencode/{skills → command}/docx/scripts/templates/people.xml +0 -0
  920. /package/packages/opencode/{skills → command}/docx/scripts/utilities.py +0 -0
  921. /package/packages/opencode/{skills → command}/internal-comms/examples/3p-updates.md +0 -0
  922. /package/packages/opencode/{skills → command}/internal-comms/examples/company-newsletter.md +0 -0
  923. /package/packages/opencode/{skills → command}/internal-comms/examples/faq-answers.md +0 -0
  924. /package/packages/opencode/{skills → command}/internal-comms/examples/general-comms.md +0 -0
  925. /package/packages/opencode/{skills → command}/mcp-builder/reference/evaluation.md +0 -0
  926. /package/packages/opencode/{skills → command}/mcp-builder/reference/mcp_best_practices.md +0 -0
  927. /package/packages/opencode/{skills → command}/mcp-builder/reference/node_mcp_server.md +0 -0
  928. /package/packages/opencode/{skills → command}/mcp-builder/reference/python_mcp_server.md +0 -0
  929. /package/packages/opencode/{skills → command}/mcp-builder/scripts/connections.py +0 -0
  930. /package/packages/opencode/{skills → command}/mcp-builder/scripts/evaluation.py +0 -0
  931. /package/packages/opencode/{skills → command}/mcp-builder/scripts/example_evaluation.xml +0 -0
  932. /package/packages/opencode/{skills → command}/mcp-builder/scripts/requirements.txt +0 -0
  933. /package/packages/opencode/{skills → command}/pdf/scripts/check_bounding_boxes.py +0 -0
  934. /package/packages/opencode/{skills → command}/pdf/scripts/check_bounding_boxes_test.py +0 -0
  935. /package/packages/opencode/{skills → command}/pdf/scripts/check_fillable_fields.py +0 -0
  936. /package/packages/opencode/{skills → command}/pdf/scripts/convert_pdf_to_images.py +0 -0
  937. /package/packages/opencode/{skills → command}/pdf/scripts/create_validation_image.py +0 -0
  938. /package/packages/opencode/{skills → command}/pdf/scripts/extract_form_field_info.py +0 -0
  939. /package/packages/opencode/{skills → command}/pdf/scripts/fill_fillable_fields.py +0 -0
  940. /package/packages/opencode/{skills → command}/pdf/scripts/fill_pdf_form_with_annotations.py +0 -0
  941. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  942. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  943. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  944. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  945. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  946. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  947. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  948. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  949. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  950. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  951. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  952. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  953. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  954. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  955. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  956. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  957. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  958. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  959. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  960. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  961. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  962. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  963. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  964. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  965. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  966. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  967. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  968. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  969. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  970. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  971. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  972. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/mce/mc.xsd +0 -0
  973. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/microsoft/wml-2010.xsd +0 -0
  974. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/microsoft/wml-2012.xsd +0 -0
  975. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/microsoft/wml-2018.xsd +0 -0
  976. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +0 -0
  977. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +0 -0
  978. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  979. /package/packages/opencode/{skills → command}/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +0 -0
  980. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/pack.py +0 -0
  981. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/unpack.py +0 -0
  982. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/validate.py +0 -0
  983. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/validation/__init__.py +0 -0
  984. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/validation/base.py +0 -0
  985. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/validation/docx.py +0 -0
  986. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/validation/pptx.py +0 -0
  987. /package/packages/opencode/{skills → command}/pptx/ooxml/scripts/validation/redlining.py +0 -0
  988. /package/packages/opencode/{skills → command}/pptx/scripts/html2pptx.js +0 -0
  989. /package/packages/opencode/{skills → command}/pptx/scripts/inventory.py +0 -0
  990. /package/packages/opencode/{skills → command}/pptx/scripts/rearrange.py +0 -0
  991. /package/packages/opencode/{skills → command}/pptx/scripts/replace.py +0 -0
  992. /package/packages/opencode/{skills → command}/pptx/scripts/thumbnail.py +0 -0
  993. /package/packages/opencode/{skills → command}/root-cause-tracing/find-polluter.sh +0 -0
  994. /package/packages/opencode/{skills → command}/skill-creator/scripts/init_skill.py +0 -0
  995. /package/packages/opencode/{skills → command}/skill-creator/scripts/package_skill.py +0 -0
  996. /package/packages/opencode/{skills → command}/skill-creator/scripts/quick_validate.py +0 -0
  997. /package/packages/opencode/{skills → command}/slack-gif-creator/core/color_palettes.py +0 -0
  998. /package/packages/opencode/{skills → command}/slack-gif-creator/core/easing.py +0 -0
  999. /package/packages/opencode/{skills → command}/slack-gif-creator/core/frame_composer.py +0 -0
  1000. /package/packages/opencode/{skills → command}/slack-gif-creator/core/gif_builder.py +0 -0
  1001. /package/packages/opencode/{skills → command}/slack-gif-creator/core/typography.py +0 -0
  1002. /package/packages/opencode/{skills → command}/slack-gif-creator/core/validators.py +0 -0
  1003. /package/packages/opencode/{skills → command}/slack-gif-creator/core/visual_effects.py +0 -0
  1004. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/bounce.py +0 -0
  1005. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/explode.py +0 -0
  1006. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/fade.py +0 -0
  1007. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/flip.py +0 -0
  1008. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/kaleidoscope.py +0 -0
  1009. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/morph.py +0 -0
  1010. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/move.py +0 -0
  1011. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/pulse.py +0 -0
  1012. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/shake.py +0 -0
  1013. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/slide.py +0 -0
  1014. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/spin.py +0 -0
  1015. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/wiggle.py +0 -0
  1016. /package/packages/opencode/{skills → command}/slack-gif-creator/templates/zoom.py +0 -0
  1017. /package/packages/opencode/{skills → command}/theme-factory/themes/arctic-frost.md +0 -0
  1018. /package/packages/opencode/{skills → command}/theme-factory/themes/botanical-garden.md +0 -0
  1019. /package/packages/opencode/{skills → command}/theme-factory/themes/desert-rose.md +0 -0
  1020. /package/packages/opencode/{skills → command}/theme-factory/themes/forest-canopy.md +0 -0
  1021. /package/packages/opencode/{skills → command}/theme-factory/themes/golden-hour.md +0 -0
  1022. /package/packages/opencode/{skills → command}/theme-factory/themes/midnight-galaxy.md +0 -0
  1023. /package/packages/opencode/{skills → command}/theme-factory/themes/modern-minimalist.md +0 -0
  1024. /package/packages/opencode/{skills → command}/theme-factory/themes/ocean-depths.md +0 -0
  1025. /package/packages/opencode/{skills → command}/theme-factory/themes/sunset-boulevard.md +0 -0
  1026. /package/packages/opencode/{skills → command}/theme-factory/themes/tech-innovation.md +0 -0
  1027. /package/packages/opencode/{skills → command}/webapp-testing/examples/console_logging.py +0 -0
  1028. /package/packages/opencode/{skills → command}/webapp-testing/examples/element_discovery.py +0 -0
  1029. /package/packages/opencode/{skills → command}/webapp-testing/examples/static_html_automation.py +0 -0
  1030. /package/packages/opencode/{skills → command}/webapp-testing/scripts/with_server.py +0 -0
  1031. /package/packages/opencode/{skills → command}/xlsx/recalc.py +0 -0
@@ -0,0 +1,1163 @@
1
+ ---
2
+ name: docx
3
+ description: "Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction. When Claude needs to work with professional documents (.docx files) for: (1) Creating new documents, (2) Modifying or editing content, (3) Working with tracked changes, (4) Adding comments, or any other document tasks"
4
+ license: Proprietary. LICENSE.txt has complete terms
5
+ ---
6
+
7
+ # DOCX creation, editing, and analysis
8
+
9
+ ## Overview
10
+
11
+ A user may ask you to create, edit, or analyze the contents of a .docx file. A .docx file is essentially a ZIP archive containing XML files and other resources that you can read or edit. You have different tools and workflows available for different tasks.
12
+
13
+ ## Workflow Decision Tree
14
+
15
+ ### Reading/Analyzing Content
16
+ Use "Text extraction" or "Raw XML access" sections below
17
+
18
+ ### Creating New Document
19
+ Use "Creating a new Word document" workflow
20
+
21
+ ### Editing Existing Document
22
+ - **Your own document + simple changes**
23
+ Use "Basic OOXML editing" workflow
24
+
25
+ - **Someone else's document**
26
+ Use **"Redlining workflow"** (recommended default)
27
+
28
+ - **Legal, academic, business, or government docs**
29
+ Use **"Redlining workflow"** (required)
30
+
31
+ ## Reading and analyzing content
32
+
33
+ ### Text extraction
34
+ If you just need to read the text contents of a document, you should convert the document to markdown using pandoc. Pandoc provides excellent support for preserving document structure and can show tracked changes:
35
+
36
+ ```bash
37
+ # Convert document to markdown with tracked changes
38
+ pandoc --track-changes=all path-to-file.docx -o output.md
39
+ # Options: --track-changes=accept/reject/all
40
+ ```
41
+
42
+ ### Raw XML access
43
+ You need raw XML access for: comments, complex formatting, document structure, embedded media, and metadata. For any of these features, you'll need to unpack a document and read its raw XML contents.
44
+
45
+ #### Unpacking a file
46
+ `python ooxml/scripts/unpack.py <office_file> <output_directory>`
47
+
48
+ #### Key file structures
49
+ * `word/document.xml` - Main document contents
50
+ * `word/comments.xml` - Comments referenced in document.xml
51
+ * `word/media/` - Embedded images and media files
52
+ * Tracked changes use `<w:ins>` (insertions) and `<w:del>` (deletions) tags
53
+
54
+ ## Creating a new Word document
55
+
56
+ When creating a new Word document from scratch, use **docx-js**, which allows you to create Word documents using JavaScript/TypeScript.
57
+
58
+ ### Workflow
59
+ 1. **MANDATORY - READ ENTIRE FILE**: Read [`docx-js.md`](docx-js.md) (~500 lines) completely from start to finish. **NEVER set any range limits when reading this file.** Read the full file content for detailed syntax, critical formatting rules, and best practices before proceeding with document creation.
60
+ 2. Create a JavaScript/TypeScript file using Document, Paragraph, TextRun components (You can assume all dependencies are installed, but if not, refer to the dependencies section below)
61
+ 3. Export as .docx using Packer.toBuffer()
62
+
63
+ ## Editing an existing Word document
64
+
65
+ When editing an existing Word document, use the **Document library** (a Python library for OOXML manipulation). The library automatically handles infrastructure setup and provides methods for document manipulation. For complex scenarios, you can access the underlying DOM directly through the library.
66
+
67
+ ### Workflow
68
+ 1. **MANDATORY - READ ENTIRE FILE**: Read [`ooxml.md`](ooxml.md) (~600 lines) completely from start to finish. **NEVER set any range limits when reading this file.** Read the full file content for the Document library API and XML patterns for directly editing document files.
69
+ 2. Unpack the document: `python ooxml/scripts/unpack.py <office_file> <output_directory>`
70
+ 3. Create and run a Python script using the Document library (see "Document Library" section in ooxml.md)
71
+ 4. Pack the final document: `python ooxml/scripts/pack.py <input_directory> <office_file>`
72
+
73
+ The Document library provides both high-level methods for common operations and direct DOM access for complex scenarios.
74
+
75
+ ## Redlining workflow for document review
76
+
77
+ This workflow allows you to plan comprehensive tracked changes using markdown before implementing them in OOXML. **CRITICAL**: For complete tracked changes, you must implement ALL changes systematically.
78
+
79
+ **Batching Strategy**: Group related changes into batches of 3-10 changes. This makes debugging manageable while maintaining efficiency. Test each batch before moving to the next.
80
+
81
+ **Principle: Minimal, Precise Edits**
82
+ When implementing tracked changes, only mark text that actually changes. Repeating unchanged text makes edits harder to review and appears unprofessional. Break replacements into: [unchanged text] + [deletion] + [insertion] + [unchanged text]. Preserve the original run's RSID for unchanged text by extracting the `<w:r>` element from the original and reusing it.
83
+
84
+ Example - Changing "30 days" to "60 days" in a sentence:
85
+ ```python
86
+ # BAD - Replaces entire sentence
87
+ '<w:del><w:r><w:delText>The term is 30 days.</w:delText></w:r></w:del><w:ins><w:r><w:t>The term is 60 days.</w:t></w:r></w:ins>'
88
+
89
+ # GOOD - Only marks what changed, preserves original <w:r> for unchanged text
90
+ '<w:r w:rsidR="00AB12CD"><w:t>The term is </w:t></w:r><w:del><w:r><w:delText>30</w:delText></w:r></w:del><w:ins><w:r><w:t>60</w:t></w:r></w:ins><w:r w:rsidR="00AB12CD"><w:t> days.</w:t></w:r>'
91
+ ```
92
+
93
+ ### Tracked changes workflow
94
+
95
+ 1. **Get markdown representation**: Convert document to markdown with tracked changes preserved:
96
+ ```bash
97
+ pandoc --track-changes=all path-to-file.docx -o current.md
98
+ ```
99
+
100
+ 2. **Identify and group changes**: Review the document and identify ALL changes needed, organizing them into logical batches:
101
+
102
+ **Location methods** (for finding changes in XML):
103
+ - Section/heading numbers (e.g., "Section 3.2", "Article IV")
104
+ - Paragraph identifiers if numbered
105
+ - Grep patterns with unique surrounding text
106
+ - Document structure (e.g., "first paragraph", "signature block")
107
+ - **DO NOT use markdown line numbers** - they don't map to XML structure
108
+
109
+ **Batch organization** (group 3-10 related changes per batch):
110
+ - By section: "Batch 1: Section 2 amendments", "Batch 2: Section 5 updates"
111
+ - By type: "Batch 1: Date corrections", "Batch 2: Party name changes"
112
+ - By complexity: Start with simple text replacements, then tackle complex structural changes
113
+ - Sequential: "Batch 1: Pages 1-3", "Batch 2: Pages 4-6"
114
+
115
+ 3. **Read documentation and unpack**:
116
+ - **MANDATORY - READ ENTIRE FILE**: Read [`ooxml.md`](ooxml.md) (~600 lines) completely from start to finish. **NEVER set any range limits when reading this file.** Pay special attention to the "Document Library" and "Tracked Change Patterns" sections.
117
+ - **Unpack the document**: `python ooxml/scripts/unpack.py <file.docx> <dir>`
118
+ - **Note the suggested RSID**: The unpack script will suggest an RSID to use for your tracked changes. Copy this RSID for use in step 4b.
119
+
120
+ 4. **Implement changes in batches**: Group changes logically (by section, by type, or by proximity) and implement them together in a single script. This approach:
121
+ - Makes debugging easier (smaller batch = easier to isolate errors)
122
+ - Allows incremental progress
123
+ - Maintains efficiency (batch size of 3-10 changes works well)
124
+
125
+ **Suggested batch groupings:**
126
+ - By document section (e.g., "Section 3 changes", "Definitions", "Termination clause")
127
+ - By change type (e.g., "Date changes", "Party name updates", "Legal term replacements")
128
+ - By proximity (e.g., "Changes on pages 1-3", "Changes in first half of document")
129
+
130
+ For each batch of related changes:
131
+
132
+ **a. Map text to XML**: Grep for text in `word/document.xml` to verify how text is split across `<w:r>` elements.
133
+
134
+ **b. Create and run script**: Use `get_node` to find nodes, implement changes, then `doc.save()`. See **"Document Library"** section in ooxml.md for patterns.
135
+
136
+ **Note**: Always grep `word/document.xml` immediately before writing a script to get current line numbers and verify text content. Line numbers change after each script run.
137
+
138
+ 5. **Pack the document**: After all batches are complete, convert the unpacked directory back to .docx:
139
+ ```bash
140
+ python ooxml/scripts/pack.py unpacked reviewed-document.docx
141
+ ```
142
+
143
+ 6. **Final verification**: Do a comprehensive check of the complete document:
144
+ - Convert final document to markdown:
145
+ ```bash
146
+ pandoc --track-changes=all reviewed-document.docx -o verification.md
147
+ ```
148
+ - Verify ALL changes were applied correctly:
149
+ ```bash
150
+ grep "original phrase" verification.md # Should NOT find it
151
+ grep "replacement phrase" verification.md # Should find it
152
+ ```
153
+ - Check that no unintended changes were introduced
154
+
155
+
156
+ ## Converting Documents to Images
157
+
158
+ To visually analyze Word documents, convert them to images using a two-step process:
159
+
160
+ 1. **Convert DOCX to PDF**:
161
+ ```bash
162
+ soffice --headless --convert-to pdf document.docx
163
+ ```
164
+
165
+ 2. **Convert PDF pages to JPEG images**:
166
+ ```bash
167
+ pdftoppm -jpeg -r 150 document.pdf page
168
+ ```
169
+ This creates files like `page-1.jpg`, `page-2.jpg`, etc.
170
+
171
+ Options:
172
+ - `-r 150`: Sets resolution to 150 DPI (adjust for quality/size balance)
173
+ - `-jpeg`: Output JPEG format (use `-png` for PNG if preferred)
174
+ - `-f N`: First page to convert (e.g., `-f 2` starts from page 2)
175
+ - `-l N`: Last page to convert (e.g., `-l 5` stops at page 5)
176
+ - `page`: Prefix for output files
177
+
178
+ Example for specific range:
179
+ ```bash
180
+ pdftoppm -jpeg -r 150 -f 2 -l 5 document.pdf page # Converts only pages 2-5
181
+ ```
182
+
183
+ ## Code Style Guidelines
184
+ **IMPORTANT**: When generating code for DOCX operations:
185
+ - Write concise code
186
+ - Avoid verbose variable names and redundant operations
187
+ - Avoid unnecessary print statements
188
+
189
+ ## Dependencies
190
+
191
+ Required dependencies (install if not available):
192
+
193
+ - **pandoc**: `sudo apt-get install pandoc` (for text extraction)
194
+ - **docx**: `npm install -g docx` (for creating new documents)
195
+ - **LibreOffice**: `sudo apt-get install libreoffice` (for PDF conversion)
196
+ - **Poppler**: `sudo apt-get install poppler-utils` (for pdftoppm to convert PDF to images)
197
+ - **defusedxml**: `pip install defusedxml` (for secure XML parsing)
198
+
199
+ ## Docx JS
200
+
201
+ # DOCX Library Tutorial
202
+
203
+ Generate .docx files with JavaScript/TypeScript.
204
+
205
+ **Important: Read this entire document before starting.** Critical formatting rules and common pitfalls are covered throughout - skipping sections may result in corrupted files or rendering issues.
206
+
207
+ ## Setup
208
+ Assumes docx is already installed globally
209
+ If not installed: `npm install -g docx`
210
+
211
+ ```javascript
212
+ const { Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell, ImageRun, Media,
213
+ Header, Footer, AlignmentType, PageOrientation, LevelFormat, ExternalHyperlink,
214
+ InternalHyperlink, TableOfContents, HeadingLevel, BorderStyle, WidthType, TabStopType,
215
+ TabStopPosition, UnderlineType, ShadingType, VerticalAlign, SymbolRun, PageNumber,
216
+ FootnoteReferenceRun, Footnote, PageBreak } = require('docx');
217
+
218
+ // Create & Save
219
+ const doc = new Document({ sections: [{ children: [/* content */] }] });
220
+ Packer.toBuffer(doc).then(buffer => fs.writeFileSync("doc.docx", buffer)); // Node.js
221
+ Packer.toBlob(doc).then(blob => { /* download logic */ }); // Browser
222
+ ```
223
+
224
+ ## Text & Formatting
225
+ ```javascript
226
+ // IMPORTANT: Never use \n for line breaks - always use separate Paragraph elements
227
+ // ❌ WRONG: new TextRun("Line 1\nLine 2")
228
+ // ✅ CORRECT: new Paragraph({ children: [new TextRun("Line 1")] }), new Paragraph({ children: [new TextRun("Line 2")] })
229
+
230
+ // Basic text with all formatting options
231
+ new Paragraph({
232
+ alignment: AlignmentType.CENTER,
233
+ spacing: { before: 200, after: 200 },
234
+ indent: { left: 720, right: 720 },
235
+ children: [
236
+ new TextRun({ text: "Bold", bold: true }),
237
+ new TextRun({ text: "Italic", italics: true }),
238
+ new TextRun({ text: "Underlined", underline: { type: UnderlineType.DOUBLE, color: "FF0000" } }),
239
+ new TextRun({ text: "Colored", color: "FF0000", size: 28, font: "Arial" }), // Arial default
240
+ new TextRun({ text: "Highlighted", highlight: "yellow" }),
241
+ new TextRun({ text: "Strikethrough", strike: true }),
242
+ new TextRun({ text: "x2", superScript: true }),
243
+ new TextRun({ text: "H2O", subScript: true }),
244
+ new TextRun({ text: "SMALL CAPS", smallCaps: true }),
245
+ new SymbolRun({ char: "2022", font: "Symbol" }), // Bullet •
246
+ new SymbolRun({ char: "00A9", font: "Arial" }) // Copyright © - Arial for symbols
247
+ ]
248
+ })
249
+ ```
250
+
251
+ ## Styles & Professional Formatting
252
+
253
+ ```javascript
254
+ const doc = new Document({
255
+ styles: {
256
+ default: { document: { run: { font: "Arial", size: 24 } } }, // 12pt default
257
+ paragraphStyles: [
258
+ // Document title style - override built-in Title style
259
+ { id: "Title", name: "Title", basedOn: "Normal",
260
+ run: { size: 56, bold: true, color: "000000", font: "Arial" },
261
+ paragraph: { spacing: { before: 240, after: 120 }, alignment: AlignmentType.CENTER } },
262
+ // IMPORTANT: Override built-in heading styles by using their exact IDs
263
+ { id: "Heading1", name: "Heading 1", basedOn: "Normal", next: "Normal", quickFormat: true,
264
+ run: { size: 32, bold: true, color: "000000", font: "Arial" }, // 16pt
265
+ paragraph: { spacing: { before: 240, after: 240 }, outlineLevel: 0 } }, // Required for TOC
266
+ { id: "Heading2", name: "Heading 2", basedOn: "Normal", next: "Normal", quickFormat: true,
267
+ run: { size: 28, bold: true, color: "000000", font: "Arial" }, // 14pt
268
+ paragraph: { spacing: { before: 180, after: 180 }, outlineLevel: 1 } },
269
+ // Custom styles use your own IDs
270
+ { id: "myStyle", name: "My Style", basedOn: "Normal",
271
+ run: { size: 28, bold: true, color: "000000" },
272
+ paragraph: { spacing: { after: 120 }, alignment: AlignmentType.CENTER } }
273
+ ],
274
+ characterStyles: [{ id: "myCharStyle", name: "My Char Style",
275
+ run: { color: "FF0000", bold: true, underline: { type: UnderlineType.SINGLE } } }]
276
+ },
277
+ sections: [{
278
+ properties: { page: { margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } } },
279
+ children: [
280
+ new Paragraph({ heading: HeadingLevel.TITLE, children: [new TextRun("Document Title")] }), // Uses overridden Title style
281
+ new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("Heading 1")] }), // Uses overridden Heading1 style
282
+ new Paragraph({ style: "myStyle", children: [new TextRun("Custom paragraph style")] }),
283
+ new Paragraph({ children: [
284
+ new TextRun("Normal with "),
285
+ new TextRun({ text: "custom char style", style: "myCharStyle" })
286
+ ]})
287
+ ]
288
+ }]
289
+ });
290
+ ```
291
+
292
+ **Professional Font Combinations:**
293
+ - **Arial (Headers) + Arial (Body)** - Most universally supported, clean and professional
294
+ - **Times New Roman (Headers) + Arial (Body)** - Classic serif headers with modern sans-serif body
295
+ - **Georgia (Headers) + Verdana (Body)** - Optimized for screen reading, elegant contrast
296
+
297
+ **Key Styling Principles:**
298
+ - **Override built-in styles**: Use exact IDs like "Heading1", "Heading2", "Heading3" to override Word's built-in heading styles
299
+ - **HeadingLevel constants**: `HeadingLevel.HEADING_1` uses "Heading1" style, `HeadingLevel.HEADING_2` uses "Heading2" style, etc.
300
+ - **Include outlineLevel**: Set `outlineLevel: 0` for H1, `outlineLevel: 1` for H2, etc. to ensure TOC works correctly
301
+ - **Use custom styles** instead of inline formatting for consistency
302
+ - **Set a default font** using `styles.default.document.run.font` - Arial is universally supported
303
+ - **Establish visual hierarchy** with different font sizes (titles > headers > body)
304
+ - **Add proper spacing** with `before` and `after` paragraph spacing
305
+ - **Use colors sparingly**: Default to black (000000) and shades of gray for titles and headings (heading 1, heading 2, etc.)
306
+ - **Set consistent margins** (1440 = 1 inch is standard)
307
+
308
+
309
+ ## Lists (ALWAYS USE PROPER LISTS - NEVER USE UNICODE BULLETS)
310
+ ```javascript
311
+ // Bullets - ALWAYS use the numbering config, NOT unicode symbols
312
+ // CRITICAL: Use LevelFormat.BULLET constant, NOT the string "bullet"
313
+ const doc = new Document({
314
+ numbering: {
315
+ config: [
316
+ { reference: "bullet-list",
317
+ levels: [{ level: 0, format: LevelFormat.BULLET, text: "•", alignment: AlignmentType.LEFT,
318
+ style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
319
+ { reference: "first-numbered-list",
320
+ levels: [{ level: 0, format: LevelFormat.DECIMAL, text: "%1.", alignment: AlignmentType.LEFT,
321
+ style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] },
322
+ { reference: "second-numbered-list", // Different reference = restarts at 1
323
+ levels: [{ level: 0, format: LevelFormat.DECIMAL, text: "%1.", alignment: AlignmentType.LEFT,
324
+ style: { paragraph: { indent: { left: 720, hanging: 360 } } } }] }
325
+ ]
326
+ },
327
+ sections: [{
328
+ children: [
329
+ // Bullet list items
330
+ new Paragraph({ numbering: { reference: "bullet-list", level: 0 },
331
+ children: [new TextRun("First bullet point")] }),
332
+ new Paragraph({ numbering: { reference: "bullet-list", level: 0 },
333
+ children: [new TextRun("Second bullet point")] }),
334
+ // Numbered list items
335
+ new Paragraph({ numbering: { reference: "first-numbered-list", level: 0 },
336
+ children: [new TextRun("First numbered item")] }),
337
+ new Paragraph({ numbering: { reference: "first-numbered-list", level: 0 },
338
+ children: [new TextRun("Second numbered item")] }),
339
+ // ⚠️ CRITICAL: Different reference = INDEPENDENT list that restarts at 1
340
+ // Same reference = CONTINUES previous numbering
341
+ new Paragraph({ numbering: { reference: "second-numbered-list", level: 0 },
342
+ children: [new TextRun("Starts at 1 again (because different reference)")] })
343
+ ]
344
+ }]
345
+ });
346
+
347
+ // ⚠️ CRITICAL NUMBERING RULE: Each reference creates an INDEPENDENT numbered list
348
+ // - Same reference = continues numbering (1, 2, 3... then 4, 5, 6...)
349
+ // - Different reference = restarts at 1 (1, 2, 3... then 1, 2, 3...)
350
+ // Use unique reference names for each separate numbered section!
351
+
352
+ // ⚠️ CRITICAL: NEVER use unicode bullets - they create fake lists that don't work properly
353
+ // new TextRun("• Item") // WRONG
354
+ // new SymbolRun({ char: "2022" }) // WRONG
355
+ // ✅ ALWAYS use numbering config with LevelFormat.BULLET for real Word lists
356
+ ```
357
+
358
+ ## Tables
359
+ ```javascript
360
+ // Complete table with margins, borders, headers, and bullet points
361
+ const tableBorder = { style: BorderStyle.SINGLE, size: 1, color: "CCCCCC" };
362
+ const cellBorders = { top: tableBorder, bottom: tableBorder, left: tableBorder, right: tableBorder };
363
+
364
+ new Table({
365
+ columnWidths: [4680, 4680], // ⚠️ CRITICAL: Set column widths at table level - values in DXA (twentieths of a point)
366
+ margins: { top: 100, bottom: 100, left: 180, right: 180 }, // Set once for all cells
367
+ rows: [
368
+ new TableRow({
369
+ tableHeader: true,
370
+ children: [
371
+ new TableCell({
372
+ borders: cellBorders,
373
+ width: { size: 4680, type: WidthType.DXA }, // ALSO set width on each cell
374
+ // ⚠️ CRITICAL: Always use ShadingType.CLEAR to prevent black backgrounds in Word.
375
+ shading: { fill: "D5E8F0", type: ShadingType.CLEAR },
376
+ verticalAlign: VerticalAlign.CENTER,
377
+ children: [new Paragraph({
378
+ alignment: AlignmentType.CENTER,
379
+ children: [new TextRun({ text: "Header", bold: true, size: 22 })]
380
+ })]
381
+ }),
382
+ new TableCell({
383
+ borders: cellBorders,
384
+ width: { size: 4680, type: WidthType.DXA }, // ALSO set width on each cell
385
+ shading: { fill: "D5E8F0", type: ShadingType.CLEAR },
386
+ children: [new Paragraph({
387
+ alignment: AlignmentType.CENTER,
388
+ children: [new TextRun({ text: "Bullet Points", bold: true, size: 22 })]
389
+ })]
390
+ })
391
+ ]
392
+ }),
393
+ new TableRow({
394
+ children: [
395
+ new TableCell({
396
+ borders: cellBorders,
397
+ width: { size: 4680, type: WidthType.DXA }, // ALSO set width on each cell
398
+ children: [new Paragraph({ children: [new TextRun("Regular data")] })]
399
+ }),
400
+ new TableCell({
401
+ borders: cellBorders,
402
+ width: { size: 4680, type: WidthType.DXA }, // ALSO set width on each cell
403
+ children: [
404
+ new Paragraph({
405
+ numbering: { reference: "bullet-list", level: 0 },
406
+ children: [new TextRun("First bullet point")]
407
+ }),
408
+ new Paragraph({
409
+ numbering: { reference: "bullet-list", level: 0 },
410
+ children: [new TextRun("Second bullet point")]
411
+ })
412
+ ]
413
+ })
414
+ ]
415
+ })
416
+ ]
417
+ })
418
+ ```
419
+
420
+ **IMPORTANT: Table Width & Borders**
421
+ - Use BOTH `columnWidths: [width1, width2, ...]` array AND `width: { size: X, type: WidthType.DXA }` on each cell
422
+ - Values in DXA (twentieths of a point): 1440 = 1 inch, Letter usable width = 9360 DXA (with 1" margins)
423
+ - Apply borders to individual `TableCell` elements, NOT the `Table` itself
424
+
425
+ **Precomputed Column Widths (Letter size with 1" margins = 9360 DXA total):**
426
+ - **2 columns:** `columnWidths: [4680, 4680]` (equal width)
427
+ - **3 columns:** `columnWidths: [3120, 3120, 3120]` (equal width)
428
+
429
+ ## Links & Navigation
430
+ ```javascript
431
+ // TOC (requires headings) - CRITICAL: Use HeadingLevel only, NOT custom styles
432
+ // ❌ WRONG: new Paragraph({ heading: HeadingLevel.HEADING_1, style: "customHeader", children: [new TextRun("Title")] })
433
+ // ✅ CORRECT: new Paragraph({ heading: HeadingLevel.HEADING_1, children: [new TextRun("Title")] })
434
+ new TableOfContents("Table of Contents", { hyperlink: true, headingStyleRange: "1-3" }),
435
+
436
+ // External link
437
+ new Paragraph({
438
+ children: [new ExternalHyperlink({
439
+ children: [new TextRun({ text: "Google", style: "Hyperlink" })],
440
+ link: "https://www.google.com"
441
+ })]
442
+ }),
443
+
444
+ // Internal link & bookmark
445
+ new Paragraph({
446
+ children: [new InternalHyperlink({
447
+ children: [new TextRun({ text: "Go to Section", style: "Hyperlink" })],
448
+ anchor: "section1"
449
+ })]
450
+ }),
451
+ new Paragraph({
452
+ children: [new TextRun("Section Content")],
453
+ bookmark: { id: "section1", name: "section1" }
454
+ }),
455
+ ```
456
+
457
+ ## Images & Media
458
+ ```javascript
459
+ // Basic image with sizing & positioning
460
+ // CRITICAL: Always specify 'type' parameter - it's REQUIRED for ImageRun
461
+ new Paragraph({
462
+ alignment: AlignmentType.CENTER,
463
+ children: [new ImageRun({
464
+ type: "png", // NEW REQUIREMENT: Must specify image type (png, jpg, jpeg, gif, bmp, svg)
465
+ data: fs.readFileSync("image.png"),
466
+ transformation: { width: 200, height: 150, rotation: 0 }, // rotation in degrees
467
+ altText: { title: "Logo", description: "Company logo", name: "Name" } // IMPORTANT: All three fields are required
468
+ })]
469
+ })
470
+ ```
471
+
472
+ ## Page Breaks
473
+ ```javascript
474
+ // Manual page break
475
+ new Paragraph({ children: [new PageBreak()] }),
476
+
477
+ // Page break before paragraph
478
+ new Paragraph({
479
+ pageBreakBefore: true,
480
+ children: [new TextRun("This starts on a new page")]
481
+ })
482
+
483
+ // ⚠️ CRITICAL: NEVER use PageBreak standalone - it will create invalid XML that Word cannot open
484
+ // ❌ WRONG: new PageBreak()
485
+ // ✅ CORRECT: new Paragraph({ children: [new PageBreak()] })
486
+ ```
487
+
488
+ ## Headers/Footers & Page Setup
489
+ ```javascript
490
+ const doc = new Document({
491
+ sections: [{
492
+ properties: {
493
+ page: {
494
+ margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 }, // 1440 = 1 inch
495
+ size: { orientation: PageOrientation.LANDSCAPE },
496
+ pageNumbers: { start: 1, formatType: "decimal" } // "upperRoman", "lowerRoman", "upperLetter", "lowerLetter"
497
+ }
498
+ },
499
+ headers: {
500
+ default: new Header({ children: [new Paragraph({
501
+ alignment: AlignmentType.RIGHT,
502
+ children: [new TextRun("Header Text")]
503
+ })] })
504
+ },
505
+ footers: {
506
+ default: new Footer({ children: [new Paragraph({
507
+ alignment: AlignmentType.CENTER,
508
+ children: [new TextRun("Page "), new TextRun({ children: [PageNumber.CURRENT] }), new TextRun(" of "), new TextRun({ children: [PageNumber.TOTAL_PAGES] })]
509
+ })] })
510
+ },
511
+ children: [/* content */]
512
+ }]
513
+ });
514
+ ```
515
+
516
+ ## Tabs
517
+ ```javascript
518
+ new Paragraph({
519
+ tabStops: [
520
+ { type: TabStopType.LEFT, position: TabStopPosition.MAX / 4 },
521
+ { type: TabStopType.CENTER, position: TabStopPosition.MAX / 2 },
522
+ { type: TabStopType.RIGHT, position: TabStopPosition.MAX * 3 / 4 }
523
+ ],
524
+ children: [new TextRun("Left\tCenter\tRight")]
525
+ })
526
+ ```
527
+
528
+ ## Constants & Quick Reference
529
+ - **Underlines:** `SINGLE`, `DOUBLE`, `WAVY`, `DASH`
530
+ - **Borders:** `SINGLE`, `DOUBLE`, `DASHED`, `DOTTED`
531
+ - **Numbering:** `DECIMAL` (1,2,3), `UPPER_ROMAN` (I,II,III), `LOWER_LETTER` (a,b,c)
532
+ - **Tabs:** `LEFT`, `CENTER`, `RIGHT`, `DECIMAL`
533
+ - **Symbols:** `"2022"` (•), `"00A9"` (©), `"00AE"` (®), `"2122"` (™), `"00B0"` (°), `"F070"` (✓), `"F0FC"` (✗)
534
+
535
+ ## Critical Issues & Common Mistakes
536
+ - **CRITICAL: PageBreak must ALWAYS be inside a Paragraph** - standalone PageBreak creates invalid XML that Word cannot open
537
+ - **ALWAYS use ShadingType.CLEAR for table cell shading** - Never use ShadingType.SOLID (causes black background).
538
+ - Measurements in DXA (1440 = 1 inch) | Each table cell needs ≥1 Paragraph | TOC requires HeadingLevel styles only
539
+ - **ALWAYS use custom styles** with Arial font for professional appearance and proper visual hierarchy
540
+ - **ALWAYS set a default font** using `styles.default.document.run.font` - Arial recommended
541
+ - **ALWAYS use columnWidths array for tables** + individual cell widths for compatibility
542
+ - **NEVER use unicode symbols for bullets** - always use proper numbering configuration with `LevelFormat.BULLET` constant (NOT the string "bullet")
543
+ - **NEVER use \n for line breaks anywhere** - always use separate Paragraph elements for each line
544
+ - **ALWAYS use TextRun objects within Paragraph children** - never use text property directly on Paragraph
545
+ - **CRITICAL for images**: ImageRun REQUIRES `type` parameter - always specify "png", "jpg", "jpeg", "gif", "bmp", or "svg"
546
+ - **CRITICAL for bullets**: Must use `LevelFormat.BULLET` constant, not string "bullet", and include `text: "•"` for the bullet character
547
+ - **CRITICAL for numbering**: Each numbering reference creates an INDEPENDENT list. Same reference = continues numbering (1,2,3 then 4,5,6). Different reference = restarts at 1 (1,2,3 then 1,2,3). Use unique reference names for each separate numbered section!
548
+ - **CRITICAL for TOC**: When using TableOfContents, headings must use HeadingLevel ONLY - do NOT add custom styles to heading paragraphs or TOC will break
549
+ - **Tables**: Set `columnWidths` array + individual cell widths, apply borders to cells not table
550
+ - **Set table margins at TABLE level** for consistent cell padding (avoids repetition per cell)
551
+
552
+ ## Ooxml
553
+
554
+ # Office Open XML Technical Reference
555
+
556
+ **Important: Read this entire document before starting.** This document covers:
557
+ - [Technical Guidelines](#technical-guidelines) - Schema compliance rules and validation requirements
558
+ - [Document Content Patterns](#document-content-patterns) - XML patterns for headings, lists, tables, formatting, etc.
559
+ - [Document Library (Python)](#document-library-python) - Recommended approach for OOXML manipulation with automatic infrastructure setup
560
+ - [Tracked Changes (Redlining)](#tracked-changes-redlining) - XML patterns for implementing tracked changes
561
+
562
+ ## Technical Guidelines
563
+
564
+ ### Schema Compliance
565
+ - **Element ordering in `<w:pPr>`**: `<w:pStyle>`, `<w:numPr>`, `<w:spacing>`, `<w:ind>`, `<w:jc>`
566
+ - **Whitespace**: Add `xml:space='preserve'` to `<w:t>` elements with leading/trailing spaces
567
+ - **Unicode**: Escape characters in ASCII content: `"` becomes `&#8220;`
568
+ - **Character encoding reference**: Curly quotes `""` become `&#8220;&#8221;`, apostrophe `'` becomes `&#8217;`, em-dash `—` becomes `&#8212;`
569
+ - **Tracked changes**: Use `<w:del>` and `<w:ins>` tags with `w:author="Claude"` outside `<w:r>` elements
570
+ - **Critical**: `<w:ins>` closes with `</w:ins>`, `<w:del>` closes with `</w:del>` - never mix
571
+ - **RSIDs must be 8-digit hex**: Use values like `00AB1234` (only 0-9, A-F characters)
572
+ - **trackRevisions placement**: Add `<w:trackRevisions/>` after `<w:proofState>` in settings.xml
573
+ - **Images**: Add to `word/media/`, reference in `document.xml`, set dimensions to prevent overflow
574
+
575
+ ## Document Content Patterns
576
+
577
+ ### Basic Structure
578
+ ```xml
579
+ <w:p>
580
+ <w:r><w:t>Text content</w:t></w:r>
581
+ </w:p>
582
+ ```
583
+
584
+ ### Headings and Styles
585
+ ```xml
586
+ <w:p>
587
+ <w:pPr>
588
+ <w:pStyle w:val="Title"/>
589
+ <w:jc w:val="center"/>
590
+ </w:pPr>
591
+ <w:r><w:t>Document Title</w:t></w:r>
592
+ </w:p>
593
+
594
+ <w:p>
595
+ <w:pPr><w:pStyle w:val="Heading2"/></w:pPr>
596
+ <w:r><w:t>Section Heading</w:t></w:r>
597
+ </w:p>
598
+ ```
599
+
600
+ ### Text Formatting
601
+ ```xml
602
+ <!-- Bold -->
603
+ <w:r><w:rPr><w:b/><w:bCs/></w:rPr><w:t>Bold</w:t></w:r>
604
+ <!-- Italic -->
605
+ <w:r><w:rPr><w:i/><w:iCs/></w:rPr><w:t>Italic</w:t></w:r>
606
+ <!-- Underline -->
607
+ <w:r><w:rPr><w:u w:val="single"/></w:rPr><w:t>Underlined</w:t></w:r>
608
+ <!-- Highlight -->
609
+ <w:r><w:rPr><w:highlight w:val="yellow"/></w:rPr><w:t>Highlighted</w:t></w:r>
610
+ ```
611
+
612
+ ### Lists
613
+ ```xml
614
+ <!-- Numbered list -->
615
+ <w:p>
616
+ <w:pPr>
617
+ <w:pStyle w:val="ListParagraph"/>
618
+ <w:numPr><w:ilvl w:val="0"/><w:numId w:val="1"/></w:numPr>
619
+ <w:spacing w:before="240"/>
620
+ </w:pPr>
621
+ <w:r><w:t>First item</w:t></w:r>
622
+ </w:p>
623
+
624
+ <!-- Restart numbered list at 1 - use different numId -->
625
+ <w:p>
626
+ <w:pPr>
627
+ <w:pStyle w:val="ListParagraph"/>
628
+ <w:numPr><w:ilvl w:val="0"/><w:numId w:val="2"/></w:numPr>
629
+ <w:spacing w:before="240"/>
630
+ </w:pPr>
631
+ <w:r><w:t>New list item 1</w:t></w:r>
632
+ </w:p>
633
+
634
+ <!-- Bullet list (level 2) -->
635
+ <w:p>
636
+ <w:pPr>
637
+ <w:pStyle w:val="ListParagraph"/>
638
+ <w:numPr><w:ilvl w:val="1"/><w:numId w:val="1"/></w:numPr>
639
+ <w:spacing w:before="240"/>
640
+ <w:ind w:left="900"/>
641
+ </w:pPr>
642
+ <w:r><w:t>Bullet item</w:t></w:r>
643
+ </w:p>
644
+ ```
645
+
646
+ ### Tables
647
+ ```xml
648
+ <w:tbl>
649
+ <w:tblPr>
650
+ <w:tblStyle w:val="TableGrid"/>
651
+ <w:tblW w:w="0" w:type="auto"/>
652
+ </w:tblPr>
653
+ <w:tblGrid>
654
+ <w:gridCol w:w="4675"/><w:gridCol w:w="4675"/>
655
+ </w:tblGrid>
656
+ <w:tr>
657
+ <w:tc>
658
+ <w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr>
659
+ <w:p><w:r><w:t>Cell 1</w:t></w:r></w:p>
660
+ </w:tc>
661
+ <w:tc>
662
+ <w:tcPr><w:tcW w:w="4675" w:type="dxa"/></w:tcPr>
663
+ <w:p><w:r><w:t>Cell 2</w:t></w:r></w:p>
664
+ </w:tc>
665
+ </w:tr>
666
+ </w:tbl>
667
+ ```
668
+
669
+ ### Layout
670
+ ```xml
671
+ <!-- Page break before new section (common pattern) -->
672
+ <w:p>
673
+ <w:r>
674
+ <w:br w:type="page"/>
675
+ </w:r>
676
+ </w:p>
677
+ <w:p>
678
+ <w:pPr>
679
+ <w:pStyle w:val="Heading1"/>
680
+ </w:pPr>
681
+ <w:r>
682
+ <w:t>New Section Title</w:t>
683
+ </w:r>
684
+ </w:p>
685
+
686
+ <!-- Centered paragraph -->
687
+ <w:p>
688
+ <w:pPr>
689
+ <w:spacing w:before="240" w:after="0"/>
690
+ <w:jc w:val="center"/>
691
+ </w:pPr>
692
+ <w:r><w:t>Centered text</w:t></w:r>
693
+ </w:p>
694
+
695
+ <!-- Font change - paragraph level (applies to all runs) -->
696
+ <w:p>
697
+ <w:pPr>
698
+ <w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New"/></w:rPr>
699
+ </w:pPr>
700
+ <w:r><w:t>Monospace text</w:t></w:r>
701
+ </w:p>
702
+
703
+ <!-- Font change - run level (specific to this text) -->
704
+ <w:p>
705
+ <w:r>
706
+ <w:rPr><w:rFonts w:ascii="Courier New" w:hAnsi="Courier New"/></w:rPr>
707
+ <w:t>This text is Courier New</w:t>
708
+ </w:r>
709
+ <w:r><w:t> and this text uses default font</w:t></w:r>
710
+ </w:p>
711
+ ```
712
+
713
+ ## File Updates
714
+
715
+ When adding content, update these files:
716
+
717
+ **`word/_rels/document.xml.rels`:**
718
+ ```xml
719
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering" Target="numbering.xml"/>
720
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png"/>
721
+ ```
722
+
723
+ **`[Content_Types].xml`:**
724
+ ```xml
725
+ <Default Extension="png" ContentType="image/png"/>
726
+ <Override PartName="/word/numbering.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml"/>
727
+ ```
728
+
729
+ ### Images
730
+ **CRITICAL**: Calculate dimensions to prevent page overflow and maintain aspect ratio.
731
+
732
+ ```xml
733
+ <!-- Minimal required structure -->
734
+ <w:p>
735
+ <w:r>
736
+ <w:drawing>
737
+ <wp:inline>
738
+ <wp:extent cx="2743200" cy="1828800"/>
739
+ <wp:docPr id="1" name="Picture 1"/>
740
+ <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
741
+ <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
742
+ <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
743
+ <pic:nvPicPr>
744
+ <pic:cNvPr id="0" name="image1.png"/>
745
+ <pic:cNvPicPr/>
746
+ </pic:nvPicPr>
747
+ <pic:blipFill>
748
+ <a:blip r:embed="rId5"/>
749
+ <!-- Add for stretch fill with aspect ratio preservation -->
750
+ <a:stretch>
751
+ <a:fillRect/>
752
+ </a:stretch>
753
+ </pic:blipFill>
754
+ <pic:spPr>
755
+ <a:xfrm>
756
+ <a:ext cx="2743200" cy="1828800"/>
757
+ </a:xfrm>
758
+ <a:prstGeom prst="rect"/>
759
+ </pic:spPr>
760
+ </pic:pic>
761
+ </a:graphicData>
762
+ </a:graphic>
763
+ </wp:inline>
764
+ </w:drawing>
765
+ </w:r>
766
+ </w:p>
767
+ ```
768
+
769
+ ### Links (Hyperlinks)
770
+
771
+ **IMPORTANT**: All hyperlinks (both internal and external) require the Hyperlink style to be defined in styles.xml. Without this style, links will look like regular text instead of blue underlined clickable links.
772
+
773
+ **External Links:**
774
+ ```xml
775
+ <!-- In document.xml -->
776
+ <w:hyperlink r:id="rId5">
777
+ <w:r>
778
+ <w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr>
779
+ <w:t>Link Text</w:t>
780
+ </w:r>
781
+ </w:hyperlink>
782
+
783
+ <!-- In word/_rels/document.xml.rels -->
784
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink"
785
+ Target="https://www.example.com/" TargetMode="External"/>
786
+ ```
787
+
788
+ **Internal Links:**
789
+
790
+ ```xml
791
+ <!-- Link to bookmark -->
792
+ <w:hyperlink w:anchor="myBookmark">
793
+ <w:r>
794
+ <w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr>
795
+ <w:t>Link Text</w:t>
796
+ </w:r>
797
+ </w:hyperlink>
798
+
799
+ <!-- Bookmark target -->
800
+ <w:bookmarkStart w:id="0" w:name="myBookmark"/>
801
+ <w:r><w:t>Target content</w:t></w:r>
802
+ <w:bookmarkEnd w:id="0"/>
803
+ ```
804
+
805
+ **Hyperlink Style (required in styles.xml):**
806
+ ```xml
807
+ <w:style w:type="character" w:styleId="Hyperlink">
808
+ <w:name w:val="Hyperlink"/>
809
+ <w:basedOn w:val="DefaultParagraphFont"/>
810
+ <w:uiPriority w:val="99"/>
811
+ <w:unhideWhenUsed/>
812
+ <w:rPr>
813
+ <w:color w:val="467886" w:themeColor="hyperlink"/>
814
+ <w:u w:val="single"/>
815
+ </w:rPr>
816
+ </w:style>
817
+ ```
818
+
819
+ ## Document Library (Python)
820
+
821
+ Use the Document class from `scripts/document.py` for all tracked changes and comments. It automatically handles infrastructure setup (people.xml, RSIDs, settings.xml, comment files, relationships, content types). Only use direct XML manipulation for complex scenarios not supported by the library.
822
+
823
+ **Working with Unicode and Entities:**
824
+ - **Searching**: Both entity notation and Unicode characters work - `contains="&#8220;Company"` and `contains="\u201cCompany"` find the same text
825
+ - **Replacing**: Use either entities (`&#8220;`) or Unicode (`\u201c`) - both work and will be converted appropriately based on the file's encoding (ascii → entities, utf-8 → Unicode)
826
+
827
+ ### Initialization
828
+
829
+ **Find the docx skill root** (directory containing `scripts/` and `ooxml/`):
830
+ ```bash
831
+ # Search for document.py to locate the skill root
832
+ # Note: /mnt/skills is used here as an example; check your context for the actual location
833
+ find /mnt/skills -name "document.py" -path "*/docx/scripts/*" 2>/dev/null | head -1
834
+ # Example output: /mnt/skills/docx/scripts/document.py
835
+ # Skill root is: /mnt/skills/docx
836
+ ```
837
+
838
+ **Run your script with PYTHONPATH** set to the docx skill root:
839
+ ```bash
840
+ PYTHONPATH=/mnt/skills/docx python your_script.py
841
+ ```
842
+
843
+ **In your script**, import from the skill root:
844
+ ```python
845
+ from scripts.document import Document, DocxXMLEditor
846
+
847
+ # Basic initialization (automatically creates temp copy and sets up infrastructure)
848
+ doc = Document('unpacked')
849
+
850
+ # Customize author and initials
851
+ doc = Document('unpacked', author="John Doe", initials="JD")
852
+
853
+ # Enable track revisions mode
854
+ doc = Document('unpacked', track_revisions=True)
855
+
856
+ # Specify custom RSID (auto-generated if not provided)
857
+ doc = Document('unpacked', rsid="07DC5ECB")
858
+ ```
859
+
860
+ ### Creating Tracked Changes
861
+
862
+ **CRITICAL**: Only mark text that actually changes. Keep ALL unchanged text outside `<w:del>`/`<w:ins>` tags. Marking unchanged text makes edits unprofessional and harder to review.
863
+
864
+ **Attribute Handling**: The Document class auto-injects attributes (w:id, w:date, w:rsidR, w:rsidDel, w16du:dateUtc, xml:space) into new elements. When preserving unchanged text from the original document, copy the original `<w:r>` element with its existing attributes to maintain document integrity.
865
+
866
+ **Method Selection Guide**:
867
+ - **Adding your own changes to regular text**: Use `replace_node()` with `<w:del>`/`<w:ins>` tags, or `suggest_deletion()` for removing entire `<w:r>` or `<w:p>` elements
868
+ - **Partially modifying another author's tracked change**: Use `replace_node()` to nest your changes inside their `<w:ins>`/`<w:del>`
869
+ - **Completely rejecting another author's insertion**: Use `revert_insertion()` on the `<w:ins>` element (NOT `suggest_deletion()`)
870
+ - **Completely rejecting another author's deletion**: Use `revert_deletion()` on the `<w:del>` element to restore deleted content using tracked changes
871
+
872
+ ```python
873
+ # Minimal edit - change one word: "The report is monthly" → "The report is quarterly"
874
+ # Original: <w:r w:rsidR="00AB12CD"><w:rPr><w:rFonts w:ascii="Calibri"/></w:rPr><w:t>The report is monthly</w:t></w:r>
875
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="The report is monthly")
876
+ rpr = tags[0].toxml() if (tags := node.getElementsByTagName("w:rPr")) else ""
877
+ replacement = f'<w:r w:rsidR="00AB12CD">{rpr}<w:t>The report is </w:t></w:r><w:del><w:r>{rpr}<w:delText>monthly</w:delText></w:r></w:del><w:ins><w:r>{rpr}<w:t>quarterly</w:t></w:r></w:ins>'
878
+ doc["word/document.xml"].replace_node(node, replacement)
879
+
880
+ # Minimal edit - change number: "within 30 days" → "within 45 days"
881
+ # Original: <w:r w:rsidR="00XYZ789"><w:rPr><w:rFonts w:ascii="Calibri"/></w:rPr><w:t>within 30 days</w:t></w:r>
882
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="within 30 days")
883
+ rpr = tags[0].toxml() if (tags := node.getElementsByTagName("w:rPr")) else ""
884
+ replacement = f'<w:r w:rsidR="00XYZ789">{rpr}<w:t>within </w:t></w:r><w:del><w:r>{rpr}<w:delText>30</w:delText></w:r></w:del><w:ins><w:r>{rpr}<w:t>45</w:t></w:r></w:ins><w:r w:rsidR="00XYZ789">{rpr}<w:t> days</w:t></w:r>'
885
+ doc["word/document.xml"].replace_node(node, replacement)
886
+
887
+ # Complete replacement - preserve formatting even when replacing all text
888
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="apple")
889
+ rpr = tags[0].toxml() if (tags := node.getElementsByTagName("w:rPr")) else ""
890
+ replacement = f'<w:del><w:r>{rpr}<w:delText>apple</w:delText></w:r></w:del><w:ins><w:r>{rpr}<w:t>banana orange</w:t></w:r></w:ins>'
891
+ doc["word/document.xml"].replace_node(node, replacement)
892
+
893
+ # Insert new content (no attributes needed - auto-injected)
894
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="existing text")
895
+ doc["word/document.xml"].insert_after(node, '<w:ins><w:r><w:t>new text</w:t></w:r></w:ins>')
896
+
897
+ # Partially delete another author's insertion
898
+ # Original: <w:ins w:author="Jane Smith" w:date="..."><w:r><w:t>quarterly financial report</w:t></w:r></w:ins>
899
+ # Goal: Delete only "financial" to make it "quarterly report"
900
+ node = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "5"})
901
+ # IMPORTANT: Preserve w:author="Jane Smith" on the outer <w:ins> to maintain authorship
902
+ replacement = '''<w:ins w:author="Jane Smith" w:date="2025-01-15T10:00:00Z">
903
+ <w:r><w:t>quarterly </w:t></w:r>
904
+ <w:del><w:r><w:delText>financial </w:delText></w:r></w:del>
905
+ <w:r><w:t>report</w:t></w:r>
906
+ </w:ins>'''
907
+ doc["word/document.xml"].replace_node(node, replacement)
908
+
909
+ # Change part of another author's insertion
910
+ # Original: <w:ins w:author="Jane Smith"><w:r><w:t>in silence, safe and sound</w:t></w:r></w:ins>
911
+ # Goal: Change "safe and sound" to "soft and unbound"
912
+ node = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "8"})
913
+ replacement = f'''<w:ins w:author="Jane Smith" w:date="2025-01-15T10:00:00Z">
914
+ <w:r><w:t>in silence, </w:t></w:r>
915
+ </w:ins>
916
+ <w:ins>
917
+ <w:r><w:t>soft and unbound</w:t></w:r>
918
+ </w:ins>
919
+ <w:ins w:author="Jane Smith" w:date="2025-01-15T10:00:00Z">
920
+ <w:del><w:r><w:delText>safe and sound</w:delText></w:r></w:del>
921
+ </w:ins>'''
922
+ doc["word/document.xml"].replace_node(node, replacement)
923
+
924
+ # Delete entire run (use only when deleting all content; use replace_node for partial deletions)
925
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="text to delete")
926
+ doc["word/document.xml"].suggest_deletion(node)
927
+
928
+ # Delete entire paragraph (in-place, handles both regular and numbered list paragraphs)
929
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph to delete")
930
+ doc["word/document.xml"].suggest_deletion(para)
931
+
932
+ # Add new numbered list item
933
+ target_para = doc["word/document.xml"].get_node(tag="w:p", contains="existing list item")
934
+ pPr = tags[0].toxml() if (tags := target_para.getElementsByTagName("w:pPr")) else ""
935
+ new_item = f'<w:p>{pPr}<w:r><w:t>New item</w:t></w:r></w:p>'
936
+ tracked_para = DocxXMLEditor.suggest_paragraph(new_item)
937
+ doc["word/document.xml"].insert_after(target_para, tracked_para)
938
+ # Optional: add spacing paragraph before content for better visual separation
939
+ # spacing = DocxXMLEditor.suggest_paragraph('<w:p><w:pPr><w:pStyle w:val="ListParagraph"/></w:pPr></w:p>')
940
+ # doc["word/document.xml"].insert_after(target_para, spacing + tracked_para)
941
+ ```
942
+
943
+ ### Adding Comments
944
+
945
+ ```python
946
+ # Add comment spanning two existing tracked changes
947
+ # Note: w:id is auto-generated. Only search by w:id if you know it from XML inspection
948
+ start_node = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "1"})
949
+ end_node = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "2"})
950
+ doc.add_comment(start=start_node, end=end_node, text="Explanation of this change")
951
+
952
+ # Add comment on a paragraph
953
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph text")
954
+ doc.add_comment(start=para, end=para, text="Comment on this paragraph")
955
+
956
+ # Add comment on newly created tracked change
957
+ # First create the tracked change
958
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="old")
959
+ new_nodes = doc["word/document.xml"].replace_node(
960
+ node,
961
+ '<w:del><w:r><w:delText>old</w:delText></w:r></w:del><w:ins><w:r><w:t>new</w:t></w:r></w:ins>'
962
+ )
963
+ # Then add comment on the newly created elements
964
+ # new_nodes[0] is the <w:del>, new_nodes[1] is the <w:ins>
965
+ doc.add_comment(start=new_nodes[0], end=new_nodes[1], text="Changed old to new per requirements")
966
+
967
+ # Reply to existing comment
968
+ doc.reply_to_comment(parent_comment_id=0, text="I agree with this change")
969
+ ```
970
+
971
+ ### Rejecting Tracked Changes
972
+
973
+ **IMPORTANT**: Use `revert_insertion()` to reject insertions and `revert_deletion()` to restore deletions using tracked changes. Use `suggest_deletion()` only for regular unmarked content.
974
+
975
+ ```python
976
+ # Reject insertion (wraps it in deletion)
977
+ # Use this when another author inserted text that you want to delete
978
+ ins = doc["word/document.xml"].get_node(tag="w:ins", attrs={"w:id": "5"})
979
+ nodes = doc["word/document.xml"].revert_insertion(ins) # Returns [ins]
980
+
981
+ # Reject deletion (creates insertion to restore deleted content)
982
+ # Use this when another author deleted text that you want to restore
983
+ del_elem = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "3"})
984
+ nodes = doc["word/document.xml"].revert_deletion(del_elem) # Returns [del_elem, new_ins]
985
+
986
+ # Reject all insertions in a paragraph
987
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph text")
988
+ nodes = doc["word/document.xml"].revert_insertion(para) # Returns [para]
989
+
990
+ # Reject all deletions in a paragraph
991
+ para = doc["word/document.xml"].get_node(tag="w:p", contains="paragraph text")
992
+ nodes = doc["word/document.xml"].revert_deletion(para) # Returns [para]
993
+ ```
994
+
995
+ ### Inserting Images
996
+
997
+ **CRITICAL**: The Document class works with a temporary copy at `doc.unpacked_path`. Always copy images to this temp directory, not the original unpacked folder.
998
+
999
+ ```python
1000
+ from PIL import Image
1001
+ import shutil, os
1002
+
1003
+ # Initialize document first
1004
+ doc = Document('unpacked')
1005
+
1006
+ # Copy image and calculate full-width dimensions with aspect ratio
1007
+ media_dir = os.path.join(doc.unpacked_path, 'word/media')
1008
+ os.makedirs(media_dir, exist_ok=True)
1009
+ shutil.copy('image.png', os.path.join(media_dir, 'image1.png'))
1010
+ img = Image.open(os.path.join(media_dir, 'image1.png'))
1011
+ width_emus = int(6.5 * 914400) # 6.5" usable width, 914400 EMUs/inch
1012
+ height_emus = int(width_emus * img.size[1] / img.size[0])
1013
+
1014
+ # Add relationship and content type
1015
+ rels_editor = doc['word/_rels/document.xml.rels']
1016
+ next_rid = rels_editor.get_next_rid()
1017
+ rels_editor.append_to(rels_editor.dom.documentElement,
1018
+ f'<Relationship Id="{next_rid}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.png"/>')
1019
+ doc['[Content_Types].xml'].append_to(doc['[Content_Types].xml'].dom.documentElement,
1020
+ '<Default Extension="png" ContentType="image/png"/>')
1021
+
1022
+ # Insert image
1023
+ node = doc["word/document.xml"].get_node(tag="w:p", line_number=100)
1024
+ doc["word/document.xml"].insert_after(node, f'''<w:p>
1025
+ <w:r>
1026
+ <w:drawing>
1027
+ <wp:inline distT="0" distB="0" distL="0" distR="0">
1028
+ <wp:extent cx="{width_emus}" cy="{height_emus}"/>
1029
+ <wp:docPr id="1" name="Picture 1"/>
1030
+ <a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
1031
+ <a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/picture">
1032
+ <pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
1033
+ <pic:nvPicPr><pic:cNvPr id="1" name="image1.png"/><pic:cNvPicPr/></pic:nvPicPr>
1034
+ <pic:blipFill><a:blip r:embed="{next_rid}"/><a:stretch><a:fillRect/></a:stretch></pic:blipFill>
1035
+ <pic:spPr><a:xfrm><a:ext cx="{width_emus}" cy="{height_emus}"/></a:xfrm><a:prstGeom prst="rect"><a:avLst/></a:prstGeom></pic:spPr>
1036
+ </pic:pic>
1037
+ </a:graphicData>
1038
+ </a:graphic>
1039
+ </wp:inline>
1040
+ </w:drawing>
1041
+ </w:r>
1042
+ </w:p>''')
1043
+ ```
1044
+
1045
+ ### Getting Nodes
1046
+
1047
+ ```python
1048
+ # By text content
1049
+ node = doc["word/document.xml"].get_node(tag="w:p", contains="specific text")
1050
+
1051
+ # By line range
1052
+ para = doc["word/document.xml"].get_node(tag="w:p", line_number=range(100, 150))
1053
+
1054
+ # By attributes
1055
+ node = doc["word/document.xml"].get_node(tag="w:del", attrs={"w:id": "1"})
1056
+
1057
+ # By exact line number (must be line number where tag opens)
1058
+ para = doc["word/document.xml"].get_node(tag="w:p", line_number=42)
1059
+
1060
+ # Combine filters
1061
+ node = doc["word/document.xml"].get_node(tag="w:r", line_number=range(40, 60), contains="text")
1062
+
1063
+ # Disambiguate when text appears multiple times - add line_number range
1064
+ node = doc["word/document.xml"].get_node(tag="w:r", contains="Section", line_number=range(2400, 2500))
1065
+ ```
1066
+
1067
+ ### Saving
1068
+
1069
+ ```python
1070
+ # Save with automatic validation (copies back to original directory)
1071
+ doc.save() # Validates by default, raises error if validation fails
1072
+
1073
+ # Save to different location
1074
+ doc.save('modified-unpacked')
1075
+
1076
+ # Skip validation (debugging only - needing this in production indicates XML issues)
1077
+ doc.save(validate=False)
1078
+ ```
1079
+
1080
+ ### Direct DOM Manipulation
1081
+
1082
+ For complex scenarios not covered by the library:
1083
+
1084
+ ```python
1085
+ # Access any XML file
1086
+ editor = doc["word/document.xml"]
1087
+ editor = doc["word/comments.xml"]
1088
+
1089
+ # Direct DOM access (defusedxml.minidom.Document)
1090
+ node = doc["word/document.xml"].get_node(tag="w:p", line_number=5)
1091
+ parent = node.parentNode
1092
+ parent.removeChild(node)
1093
+ parent.appendChild(node) # Move to end
1094
+
1095
+ # General document manipulation (without tracked changes)
1096
+ old_node = doc["word/document.xml"].get_node(tag="w:p", contains="original text")
1097
+ doc["word/document.xml"].replace_node(old_node, "<w:p><w:r><w:t>replacement text</w:t></w:r></w:p>")
1098
+
1099
+ # Multiple insertions - use return value to maintain order
1100
+ node = doc["word/document.xml"].get_node(tag="w:r", line_number=100)
1101
+ nodes = doc["word/document.xml"].insert_after(node, "<w:r><w:t>A</w:t></w:r>")
1102
+ nodes = doc["word/document.xml"].insert_after(nodes[-1], "<w:r><w:t>B</w:t></w:r>")
1103
+ nodes = doc["word/document.xml"].insert_after(nodes[-1], "<w:r><w:t>C</w:t></w:r>")
1104
+ # Results in: original_node, A, B, C
1105
+ ```
1106
+
1107
+ ## Tracked Changes (Redlining)
1108
+
1109
+ **Use the Document class above for all tracked changes.** The patterns below are for reference when constructing replacement XML strings.
1110
+
1111
+ ### Validation Rules
1112
+ The validator checks that the document text matches the original after reverting Claude's changes. This means:
1113
+ - **NEVER modify text inside another author's `<w:ins>` or `<w:del>` tags**
1114
+ - **ALWAYS use nested deletions** to remove another author's insertions
1115
+ - **Every edit must be properly tracked** with `<w:ins>` or `<w:del>` tags
1116
+
1117
+ ### Tracked Change Patterns
1118
+
1119
+ **CRITICAL RULES**:
1120
+ 1. Never modify the content inside another author's tracked changes. Always use nested deletions.
1121
+ 2. **XML Structure**: Always place `<w:del>` and `<w:ins>` at paragraph level containing complete `<w:r>` elements. Never nest inside `<w:r>` elements - this creates invalid XML that breaks document processing.
1122
+
1123
+ **Text Insertion:**
1124
+ ```xml
1125
+ <w:ins w:id="1" w:author="Claude" w:date="2025-07-30T23:05:00Z" w16du:dateUtc="2025-07-31T06:05:00Z">
1126
+ <w:r w:rsidR="00792858">
1127
+ <w:t>inserted text</w:t>
1128
+ </w:r>
1129
+ </w:ins>
1130
+ ```
1131
+
1132
+ **Text Deletion:**
1133
+ ```xml
1134
+ <w:del w:id="2" w:author="Claude" w:date="2025-07-30T23:05:00Z" w16du:dateUtc="2025-07-31T06:05:00Z">
1135
+ <w:r w:rsidDel="00792858">
1136
+ <w:delText>deleted text</w:delText>
1137
+ </w:r>
1138
+ </w:del>
1139
+ ```
1140
+
1141
+ **Deleting Another Author's Insertion (MUST use nested structure):**
1142
+ ```xml
1143
+ <!-- Nest deletion inside the original insertion -->
1144
+ <w:ins w:author="Jane Smith" w:id="16">
1145
+ <w:del w:author="Claude" w:id="40">
1146
+ <w:r><w:delText>monthly</w:delText></w:r>
1147
+ </w:del>
1148
+ </w:ins>
1149
+ <w:ins w:author="Claude" w:id="41">
1150
+ <w:r><w:t>weekly</w:t></w:r>
1151
+ </w:ins>
1152
+ ```
1153
+
1154
+ **Restoring Another Author's Deletion:**
1155
+ ```xml
1156
+ <!-- Leave their deletion unchanged, add new insertion after it -->
1157
+ <w:del w:author="Jane Smith" w:id="50">
1158
+ <w:r><w:delText>within 30 days</w:delText></w:r>
1159
+ </w:del>
1160
+ <w:ins w:author="Claude" w:id="51">
1161
+ <w:r><w:t>within 30 days</w:t></w:r>
1162
+ </w:ins>
1163
+ ```