anymous 1.2.7 → 1.3.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 (567) hide show
  1. package/bin/anymous.cjs +1 -1
  2. package/package.json +1 -1
  3. package/script/postinstall.mjs +214 -0
  4. package/skills/algorithmic-art/LICENSE.txt +202 -0
  5. package/skills/algorithmic-art/SKILL.md +405 -0
  6. package/skills/algorithmic-art/templates/generator_template.js +223 -0
  7. package/skills/algorithmic-art/templates/viewer.html +599 -0
  8. package/skills/artifacts-builder/LICENSE.txt +202 -0
  9. package/skills/artifacts-builder/SKILL.md +74 -0
  10. package/skills/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  11. package/skills/artifacts-builder/scripts/init-artifact.sh +322 -0
  12. package/skills/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  13. package/skills/brainstorming/SKILL.md +151 -0
  14. package/skills/brainstorming/scripts/frame-template.html +213 -0
  15. package/skills/brainstorming/scripts/helper.js +167 -0
  16. package/skills/brainstorming/scripts/server.cjs +723 -0
  17. package/skills/brainstorming/scripts/start-server.sh +209 -0
  18. package/skills/brainstorming/scripts/stop-server.sh +120 -0
  19. package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  20. package/skills/brainstorming/visual-companion.md +298 -0
  21. package/skills/brand-guidelines/LICENSE.txt +202 -0
  22. package/skills/brand-guidelines/SKILL.md +73 -0
  23. package/skills/canvas-design/LICENSE.txt +202 -0
  24. package/skills/canvas-design/SKILL.md +130 -0
  25. package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  26. package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  27. package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  28. package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  29. package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  30. package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  31. package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  32. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  33. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  34. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  35. package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  36. package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  37. package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  38. package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  39. package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  40. package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  41. package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  42. package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  43. package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  44. package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  45. package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  46. package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  47. package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  48. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  49. package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  50. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  51. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  52. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  53. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  54. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  55. package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  56. package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  57. package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  58. package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  59. package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  60. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  61. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  62. package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  63. package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  64. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  65. package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  66. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  67. package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  68. package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  69. package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  70. package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  71. package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  72. package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  73. package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  74. package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  75. package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  76. package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  77. package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  78. package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  79. package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  80. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  81. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  82. package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  83. package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  84. package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  85. package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  86. package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  87. package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  88. package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  89. package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  90. package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  91. package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  92. package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  93. package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  94. package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  95. package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  96. package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  97. package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  98. package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  99. package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  100. package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  101. package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  102. package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  103. package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  104. package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  105. package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  106. package/skills/changelog-generator/SKILL.md +110 -0
  107. package/skills/claude-api/LICENSE.txt +202 -0
  108. package/skills/claude-api/SKILL.md +546 -0
  109. package/skills/claude-api/csharp/claude-api/README.md +362 -0
  110. package/skills/claude-api/csharp/claude-api/batches.md +14 -0
  111. package/skills/claude-api/csharp/claude-api/files-api.md +23 -0
  112. package/skills/claude-api/csharp/claude-api/streaming.md +28 -0
  113. package/skills/claude-api/csharp/claude-api/tool-use.md +164 -0
  114. package/skills/claude-api/curl/examples.md +256 -0
  115. package/skills/claude-api/curl/managed-agents.md +340 -0
  116. package/skills/claude-api/go/claude-api/README.md +188 -0
  117. package/skills/claude-api/go/claude-api/files-api.md +21 -0
  118. package/skills/claude-api/go/claude-api/streaming.md +43 -0
  119. package/skills/claude-api/go/claude-api/tool-use.md +220 -0
  120. package/skills/claude-api/go/managed-agents/README.md +564 -0
  121. package/skills/claude-api/java/claude-api/README.md +238 -0
  122. package/skills/claude-api/java/claude-api/files-api.md +25 -0
  123. package/skills/claude-api/java/claude-api/streaming.md +24 -0
  124. package/skills/claude-api/java/claude-api/tool-use.md +228 -0
  125. package/skills/claude-api/java/managed-agents/README.md +443 -0
  126. package/skills/claude-api/php/claude-api/README.md +174 -0
  127. package/skills/claude-api/php/claude-api/batches.md +15 -0
  128. package/skills/claude-api/php/claude-api/files-api.md +11 -0
  129. package/skills/claude-api/php/claude-api/streaming.md +27 -0
  130. package/skills/claude-api/php/claude-api/tool-use.md +253 -0
  131. package/skills/claude-api/php/managed-agents/README.md +443 -0
  132. package/skills/claude-api/python/claude-api/README.md +565 -0
  133. package/skills/claude-api/python/claude-api/batches.md +198 -0
  134. package/skills/claude-api/python/claude-api/files-api.md +170 -0
  135. package/skills/claude-api/python/claude-api/streaming.md +179 -0
  136. package/skills/claude-api/python/claude-api/tool-use.md +629 -0
  137. package/skills/claude-api/python/managed-agents/README.md +335 -0
  138. package/skills/claude-api/ruby/claude-api/README.md +134 -0
  139. package/skills/claude-api/ruby/claude-api/streaming.md +16 -0
  140. package/skills/claude-api/ruby/claude-api/tool-use.md +41 -0
  141. package/skills/claude-api/ruby/managed-agents/README.md +394 -0
  142. package/skills/claude-api/shared/agent-design.md +101 -0
  143. package/skills/claude-api/shared/anthropic-cli.md +246 -0
  144. package/skills/claude-api/shared/claude-platform-on-aws.md +59 -0
  145. package/skills/claude-api/shared/error-codes.md +257 -0
  146. package/skills/claude-api/shared/live-sources.md +143 -0
  147. package/skills/claude-api/shared/managed-agents-api-reference.md +448 -0
  148. package/skills/claude-api/shared/managed-agents-client-patterns.md +217 -0
  149. package/skills/claude-api/shared/managed-agents-core.md +319 -0
  150. package/skills/claude-api/shared/managed-agents-environments.md +219 -0
  151. package/skills/claude-api/shared/managed-agents-events.md +270 -0
  152. package/skills/claude-api/shared/managed-agents-memory.md +199 -0
  153. package/skills/claude-api/shared/managed-agents-multiagent.md +125 -0
  154. package/skills/claude-api/shared/managed-agents-onboarding.md +82 -0
  155. package/skills/claude-api/shared/managed-agents-outcomes.md +108 -0
  156. package/skills/claude-api/shared/managed-agents-overview.md +71 -0
  157. package/skills/claude-api/shared/managed-agents-scheduled-deployments.md +146 -0
  158. package/skills/claude-api/shared/managed-agents-self-hosted-sandboxes.md +174 -0
  159. package/skills/claude-api/shared/managed-agents-tools.md +371 -0
  160. package/skills/claude-api/shared/managed-agents-webhooks.md +143 -0
  161. package/skills/claude-api/shared/model-migration.md +1548 -0
  162. package/skills/claude-api/shared/models.md +138 -0
  163. package/skills/claude-api/shared/platform-availability.md +97 -0
  164. package/skills/claude-api/shared/prompt-caching.md +235 -0
  165. package/skills/claude-api/shared/token-counting.md +56 -0
  166. package/skills/claude-api/shared/tool-use-concepts.md +514 -0
  167. package/skills/claude-api/typescript/claude-api/README.md +405 -0
  168. package/skills/claude-api/typescript/claude-api/batches.md +106 -0
  169. package/skills/claude-api/typescript/claude-api/files-api.md +98 -0
  170. package/skills/claude-api/typescript/claude-api/streaming.md +178 -0
  171. package/skills/claude-api/typescript/claude-api/tool-use.md +589 -0
  172. package/skills/claude-api/typescript/managed-agents/README.md +358 -0
  173. package/skills/code-security-auditor/SKILL.md +164 -0
  174. package/skills/code-security-auditor/references/package_checks.md +59 -0
  175. package/skills/competitive-ads-extractor/SKILL.md +298 -0
  176. package/skills/content-research-writer/SKILL.md +538 -0
  177. package/skills/developer-growth-analysis/SKILL.md +322 -0
  178. package/skills/dispatching-parallel-agents/SKILL.md +167 -0
  179. package/skills/doc-coauthoring/SKILL.md +375 -0
  180. package/skills/docx/LICENSE.txt +30 -0
  181. package/skills/docx/SKILL.md +91 -0
  182. package/skills/docx/scripts/__init__.py +1 -0
  183. package/skills/docx/scripts/accept_changes.py +135 -0
  184. package/skills/docx/scripts/comment.py +368 -0
  185. package/skills/docx/scripts/merge_runs.py +310 -0
  186. package/skills/docx/scripts/office/helpers/__init__.py +111 -0
  187. package/skills/docx/scripts/office/helpers/pptx_chart.py +170 -0
  188. package/skills/docx/scripts/office/helpers/pptx_slide.py +60 -0
  189. package/skills/docx/scripts/office/helpers/pptx_theme.py +114 -0
  190. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  191. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  192. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  193. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  194. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  195. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  196. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  197. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  198. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  199. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  200. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  201. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  202. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  203. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  204. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  205. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  206. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  207. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  208. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  209. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  210. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  211. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  212. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  213. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  214. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  215. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  216. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  217. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  218. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  219. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  220. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  221. package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  222. package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  223. package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  224. package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  225. package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  226. package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  227. package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  228. package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  229. package/skills/docx/scripts/office/soffice.py +192 -0
  230. package/skills/docx/scripts/office/validate.py +173 -0
  231. package/skills/docx/scripts/office/validators/__init__.py +15 -0
  232. package/skills/docx/scripts/office/validators/base.py +875 -0
  233. package/skills/docx/scripts/office/validators/docx.py +466 -0
  234. package/skills/docx/scripts/office/validators/pptx.py +441 -0
  235. package/skills/docx/scripts/office/validators/redlining.py +299 -0
  236. package/skills/docx/scripts/templates/comments.xml +3 -0
  237. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  238. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  239. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  240. package/skills/docx/scripts/templates/people.xml +3 -0
  241. package/skills/domain-name-brainstormer/SKILL.md +217 -0
  242. package/skills/executing-plans/SKILL.md +64 -0
  243. package/skills/file-organizer/SKILL.md +433 -0
  244. package/skills/finishing-a-development-branch/SKILL.md +201 -0
  245. package/skills/frontend-design/LICENSE.txt +177 -0
  246. package/skills/frontend-design/SKILL.md +55 -0
  247. package/skills/image-enhancer/SKILL.md +106 -0
  248. package/skills/internal-comms/LICENSE.txt +202 -0
  249. package/skills/internal-comms/SKILL.md +32 -0
  250. package/skills/internal-comms/examples/3p-updates.md +47 -0
  251. package/skills/internal-comms/examples/company-newsletter.md +65 -0
  252. package/skills/internal-comms/examples/faq-answers.md +30 -0
  253. package/skills/internal-comms/examples/general-comms.md +16 -0
  254. package/skills/invoice-organizer/SKILL.md +452 -0
  255. package/skills/lead-research-assistant/SKILL.md +205 -0
  256. package/skills/mcp-builder/LICENSE.txt +202 -0
  257. package/skills/mcp-builder/SKILL.md +236 -0
  258. package/skills/mcp-builder/reference/evaluation.md +602 -0
  259. package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  260. package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  261. package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  262. package/skills/mcp-builder/scripts/connections.py +151 -0
  263. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  264. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  265. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  266. package/skills/meeting-insights-analyzer/SKILL.md +327 -0
  267. package/skills/pdf/LICENSE.txt +30 -0
  268. package/skills/pdf/SKILL.md +314 -0
  269. package/skills/pdf/forms.md +294 -0
  270. package/skills/pdf/reference.md +612 -0
  271. package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  272. package/skills/pdf/scripts/check_fillable_fields.py +11 -0
  273. package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  274. package/skills/pdf/scripts/create_validation_image.py +37 -0
  275. package/skills/pdf/scripts/extract_form_field_info.py +122 -0
  276. package/skills/pdf/scripts/extract_form_structure.py +115 -0
  277. package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  278. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  279. package/skills/pptx/LICENSE.txt +30 -0
  280. package/skills/pptx/SKILL.md +238 -0
  281. package/skills/pptx/scripts/__init__.py +0 -0
  282. package/skills/pptx/scripts/add_slide.py +367 -0
  283. package/skills/pptx/scripts/clean.py +309 -0
  284. package/skills/pptx/scripts/office/helpers/__init__.py +111 -0
  285. package/skills/pptx/scripts/office/helpers/pptx_chart.py +170 -0
  286. package/skills/pptx/scripts/office/helpers/pptx_slide.py +60 -0
  287. package/skills/pptx/scripts/office/helpers/pptx_theme.py +114 -0
  288. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  289. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  290. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  291. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  292. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  293. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  294. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  295. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  296. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  297. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  298. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  299. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  300. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  301. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  302. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  303. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  304. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  305. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  306. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  307. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  308. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  309. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  310. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  311. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  312. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  313. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  314. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  315. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  316. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  317. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  318. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  319. package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  320. package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  321. package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  322. package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  323. package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  324. package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  325. package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  326. package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  327. package/skills/pptx/scripts/office/soffice.py +192 -0
  328. package/skills/pptx/scripts/office/validate.py +173 -0
  329. package/skills/pptx/scripts/office/validators/__init__.py +15 -0
  330. package/skills/pptx/scripts/office/validators/base.py +875 -0
  331. package/skills/pptx/scripts/office/validators/docx.py +466 -0
  332. package/skills/pptx/scripts/office/validators/pptx.py +441 -0
  333. package/skills/pptx/scripts/office/validators/redlining.py +299 -0
  334. package/skills/pptx/scripts/thumbnail.py +311 -0
  335. package/skills/raffle-winner-picker/SKILL.md +165 -0
  336. package/skills/receiving-code-review/SKILL.md +205 -0
  337. package/skills/requesting-code-review/SKILL.md +95 -0
  338. package/skills/requesting-code-review/code-reviewer.md +172 -0
  339. package/skills/skill-creator/LICENSE.txt +202 -0
  340. package/skills/skill-creator/SKILL.md +485 -0
  341. package/skills/skill-creator/agents/analyzer.md +274 -0
  342. package/skills/skill-creator/agents/comparator.md +202 -0
  343. package/skills/skill-creator/agents/grader.md +223 -0
  344. package/skills/skill-creator/assets/eval_review.html +146 -0
  345. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  346. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  347. package/skills/skill-creator/references/schemas.md +430 -0
  348. package/skills/skill-creator/scripts/__init__.py +0 -0
  349. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  350. package/skills/skill-creator/scripts/generate_report.py +326 -0
  351. package/skills/skill-creator/scripts/improve_description.py +247 -0
  352. package/skills/skill-creator/scripts/package_skill.py +136 -0
  353. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  354. package/skills/skill-creator/scripts/run_eval.py +310 -0
  355. package/skills/skill-creator/scripts/run_loop.py +328 -0
  356. package/skills/skill-creator/scripts/utils.py +47 -0
  357. package/skills/skill-share/SKILL.md +80 -0
  358. package/skills/slack-gif-creator/LICENSE.txt +202 -0
  359. package/skills/slack-gif-creator/SKILL.md +254 -0
  360. package/skills/slack-gif-creator/core/easing.py +234 -0
  361. package/skills/slack-gif-creator/core/frame_composer.py +176 -0
  362. package/skills/slack-gif-creator/core/gif_builder.py +269 -0
  363. package/skills/slack-gif-creator/core/validators.py +136 -0
  364. package/skills/slack-gif-creator/requirements.txt +4 -0
  365. package/skills/staff-engineer-review/SKILL.md +172 -0
  366. package/skills/subagent-driven-development/SKILL.md +503 -0
  367. package/skills/subagent-driven-development/implementer-prompt.md +142 -0
  368. package/skills/subagent-driven-development/re-review-prompt.md +106 -0
  369. package/skills/subagent-driven-development/scripts/review-package +46 -0
  370. package/skills/subagent-driven-development/scripts/sdd-workspace +40 -0
  371. package/skills/subagent-driven-development/scripts/task-brief +41 -0
  372. package/skills/subagent-driven-development/task-reviewer-prompt.md +185 -0
  373. package/skills/systematic-debugging/CREATION-LOG.md +119 -0
  374. package/skills/systematic-debugging/SKILL.md +283 -0
  375. package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  376. package/skills/systematic-debugging/condition-based-waiting.md +115 -0
  377. package/skills/systematic-debugging/defense-in-depth.md +122 -0
  378. package/skills/systematic-debugging/find-polluter.sh +72 -0
  379. package/skills/systematic-debugging/root-cause-tracing.md +169 -0
  380. package/skills/systematic-debugging/test-academic.md +14 -0
  381. package/skills/systematic-debugging/test-pressure-1.md +58 -0
  382. package/skills/systematic-debugging/test-pressure-2.md +68 -0
  383. package/skills/systematic-debugging/test-pressure-3.md +69 -0
  384. package/skills/test-driven-development/SKILL.md +320 -0
  385. package/skills/test-driven-development/writing-good-tests.md +198 -0
  386. package/skills/theme-factory/LICENSE.txt +202 -0
  387. package/skills/theme-factory/SKILL.md +59 -0
  388. package/skills/theme-factory/theme-showcase.pdf +0 -0
  389. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  390. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  391. package/skills/theme-factory/themes/desert-rose.md +19 -0
  392. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  393. package/skills/theme-factory/themes/golden-hour.md +19 -0
  394. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  395. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  396. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  397. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  398. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  399. package/skills/using-git-worktrees/SKILL.md +167 -0
  400. package/skills/using-superpowers/SKILL.md +62 -0
  401. package/skills/using-superpowers/references/antigravity-tools.md +23 -0
  402. package/skills/using-superpowers/references/codex-tools.md +39 -0
  403. package/skills/using-superpowers/references/gemini-tools.md +63 -0
  404. package/skills/using-superpowers/references/pi-tools.md +16 -0
  405. package/skills/verification-before-completion/SKILL.md +120 -0
  406. package/skills/video-downloader/SKILL.md +112 -0
  407. package/skills/web-artifacts-builder/LICENSE.txt +202 -0
  408. package/skills/web-artifacts-builder/SKILL.md +74 -0
  409. package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  410. package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  411. package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  412. package/skills/webapp-testing/LICENSE.txt +202 -0
  413. package/skills/webapp-testing/SKILL.md +96 -0
  414. package/skills/webapp-testing/examples/console_logging.py +35 -0
  415. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  416. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  417. package/skills/webapp-testing/scripts/with_server.py +106 -0
  418. package/skills/writing-plans/SKILL.md +168 -0
  419. package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
  420. package/skills/writing-skills/SKILL.md +679 -0
  421. package/skills/writing-skills/anthropic-best-practices.md +1150 -0
  422. package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  423. package/skills/writing-skills/graphviz-conventions.dot +172 -0
  424. package/skills/writing-skills/persuasion-principles.md +187 -0
  425. package/skills/writing-skills/render-graphs.js +168 -0
  426. package/skills/writing-skills/testing-skills-with-subagents.md +384 -0
  427. package/skills/xlsx/LICENSE.txt +30 -0
  428. package/skills/xlsx/SKILL.md +99 -0
  429. package/skills/xlsx/scripts/office/helpers/__init__.py +111 -0
  430. package/skills/xlsx/scripts/office/helpers/pptx_chart.py +170 -0
  431. package/skills/xlsx/scripts/office/helpers/pptx_slide.py +60 -0
  432. package/skills/xlsx/scripts/office/helpers/pptx_theme.py +114 -0
  433. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  434. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  435. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  436. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  437. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  438. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  439. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  440. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  441. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  442. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  443. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  444. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  445. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  446. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  447. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  448. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  449. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  450. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  451. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  452. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  453. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  454. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  455. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  456. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  457. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  458. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  459. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  460. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  461. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  462. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  463. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  464. package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  465. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  466. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  467. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  468. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  469. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  470. package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  471. package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  472. package/skills/xlsx/scripts/office/soffice.py +192 -0
  473. package/skills/xlsx/scripts/office/validate.py +173 -0
  474. package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  475. package/skills/xlsx/scripts/office/validators/base.py +875 -0
  476. package/skills/xlsx/scripts/office/validators/docx.py +466 -0
  477. package/skills/xlsx/scripts/office/validators/pptx.py +441 -0
  478. package/skills/xlsx/scripts/office/validators/redlining.py +299 -0
  479. package/skills/xlsx/scripts/recalc.py +308 -0
  480. package/src/account/account.ts +1 -2
  481. package/src/account/repo.ts +2 -1
  482. package/src/acp/content.ts +1 -1
  483. package/src/acp/directory.ts +2 -2
  484. package/src/acp/event.ts +1 -1
  485. package/src/acp/session.ts +2 -2
  486. package/src/agent/agent.ts +62 -31
  487. package/src/agent/subagent-permissions.ts +1 -1
  488. package/src/cli/cmd/account.ts +2 -1
  489. package/src/cli/cmd/debug/agent.handler.ts +1 -1
  490. package/src/cli/cmd/export.ts +1 -1
  491. package/src/cli/cmd/github.handler.ts +4 -2
  492. package/src/cli/cmd/mcp.ts +2 -2
  493. package/src/cli/cmd/run/footer.prompt.tsx +7 -2
  494. package/src/cli/cmd/stats.ts +1 -1
  495. package/src/cli/network.ts +1 -1
  496. package/src/config/config.ts +3 -5
  497. package/src/config/plugin.ts +1 -1
  498. package/src/control-plane/workspace.ts +3 -2
  499. package/src/effect/app-node-builder-v1.ts +1 -1
  500. package/src/effect/instance-state.ts +2 -1
  501. package/src/effect/runner.ts +2 -1
  502. package/src/effect/runtime-flags.ts +2 -1
  503. package/src/image/image.ts +1 -1
  504. package/src/installation/index.ts +4 -8
  505. package/src/lsp/diagnostic.ts +1 -1
  506. package/src/mcp/catalog.ts +1 -1
  507. package/src/mcp/index.ts +2 -2
  508. package/src/mcp/oauth-provider.ts +1 -1
  509. package/src/permission/index.ts +7 -3
  510. package/src/plugin/index.ts +7 -3
  511. package/src/plugin/loader.ts +1 -1
  512. package/src/plugin/tui/runtime.ts +1 -1
  513. package/src/project/bootstrap-service.ts +2 -1
  514. package/src/project/project.ts +3 -2
  515. package/src/project/vcs.ts +1 -1
  516. package/src/provider/error.ts +1 -1
  517. package/src/provider/provider.ts +3 -2
  518. package/src/question/index.ts +1 -1
  519. package/src/server/auth.ts +2 -1
  520. package/src/server/routes/instance/httpapi/groups/metadata.ts +1 -1
  521. package/src/server/routes/instance/httpapi/handlers/control-plane.ts +2 -1
  522. package/src/server/routes/instance/httpapi/handlers/control.ts +2 -2
  523. package/src/server/routes/instance/httpapi/handlers/experimental.ts +2 -1
  524. package/src/server/routes/instance/httpapi/handlers/global.ts +2 -1
  525. package/src/server/routes/instance/httpapi/handlers/mcp.ts +2 -1
  526. package/src/server/routes/instance/httpapi/handlers/permission.ts +1 -1
  527. package/src/server/routes/instance/httpapi/handlers/project-copy.ts +1 -1
  528. package/src/server/routes/instance/httpapi/handlers/provider.ts +3 -2
  529. package/src/server/routes/instance/httpapi/handlers/pty.ts +1 -1
  530. package/src/server/routes/instance/httpapi/handlers/question.ts +1 -1
  531. package/src/server/routes/instance/httpapi/handlers/session.ts +5 -5
  532. package/src/server/routes/instance/httpapi/handlers/sync.ts +2 -2
  533. package/src/server/routes/instance/httpapi/handlers/tui.ts +1 -1
  534. package/src/server/routes/instance/httpapi/handlers/workspace.ts +2 -1
  535. package/src/server/routes/instance/httpapi/lifecycle.ts +2 -1
  536. package/src/server/routes/instance/httpapi/middleware/instance-context.ts +1 -1
  537. package/src/server/routes/instance/httpapi/middleware/proxy.ts +2 -1
  538. package/src/server/routes/instance/httpapi/server.ts +2 -1
  539. package/src/server/shared/fence.ts +1 -1
  540. package/src/server/shared/ui.ts +2 -1
  541. package/src/session/compaction.ts +5 -4
  542. package/src/session/instruction.ts +1 -1
  543. package/src/session/llm/native-runtime.ts +2 -1
  544. package/src/session/llm/request.ts +2 -2
  545. package/src/session/llm.ts +2 -2
  546. package/src/session/message-v2.ts +5 -16
  547. package/src/session/overflow.ts +2 -2
  548. package/src/session/prompt.ts +4 -3
  549. package/src/session/reminders.ts +2 -2
  550. package/src/session/revert.ts +1 -1
  551. package/src/session/run-state.ts +4 -3
  552. package/src/session/session.ts +2 -1
  553. package/src/session/status.ts +1 -1
  554. package/src/session/summary.ts +1 -1
  555. package/src/session/system.ts +1 -1
  556. package/src/session/todo.ts +1 -1
  557. package/src/session/tools.ts +6 -6
  558. package/src/share/session.ts +1 -1
  559. package/src/share/share-next.ts +1 -1
  560. package/src/tool/computer.ts +195 -136
  561. package/src/tool/edit.ts +1 -1
  562. package/src/tool/mcp-websearch.ts +2 -1
  563. package/src/tool/plan.ts +1 -1
  564. package/src/tool/registry.ts +2 -2
  565. package/src/tool/task.ts +1 -1
  566. package/src/tool/tool.ts +2 -2
  567. package/src/util/bom.ts +1 -1
@@ -0,0 +1,269 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ GIF Builder - Core module for assembling frames into GIFs optimized for Slack.
4
+
5
+ This module provides the main interface for creating GIFs from programmatically
6
+ generated frames, with automatic optimization for Slack's requirements.
7
+ """
8
+
9
+ from pathlib import Path
10
+ from typing import Optional
11
+
12
+ import imageio.v3 as imageio
13
+ import numpy as np
14
+ from PIL import Image
15
+
16
+
17
+ class GIFBuilder:
18
+ """Builder for creating optimized GIFs from frames."""
19
+
20
+ def __init__(self, width: int = 480, height: int = 480, fps: int = 15):
21
+ """
22
+ Initialize GIF builder.
23
+
24
+ Args:
25
+ width: Frame width in pixels
26
+ height: Frame height in pixels
27
+ fps: Frames per second
28
+ """
29
+ self.width = width
30
+ self.height = height
31
+ self.fps = fps
32
+ self.frames: list[np.ndarray] = []
33
+
34
+ def add_frame(self, frame: np.ndarray | Image.Image):
35
+ """
36
+ Add a frame to the GIF.
37
+
38
+ Args:
39
+ frame: Frame as numpy array or PIL Image (will be converted to RGB)
40
+ """
41
+ if isinstance(frame, Image.Image):
42
+ frame = np.array(frame.convert("RGB"))
43
+
44
+ # Ensure frame is correct size
45
+ if frame.shape[:2] != (self.height, self.width):
46
+ pil_frame = Image.fromarray(frame)
47
+ pil_frame = pil_frame.resize(
48
+ (self.width, self.height), Image.Resampling.LANCZOS
49
+ )
50
+ frame = np.array(pil_frame)
51
+
52
+ self.frames.append(frame)
53
+
54
+ def add_frames(self, frames: list[np.ndarray | Image.Image]):
55
+ """Add multiple frames at once."""
56
+ for frame in frames:
57
+ self.add_frame(frame)
58
+
59
+ def optimize_colors(
60
+ self, num_colors: int = 128, use_global_palette: bool = True
61
+ ) -> list[np.ndarray]:
62
+ """
63
+ Reduce colors in all frames using quantization.
64
+
65
+ Args:
66
+ num_colors: Target number of colors (8-256)
67
+ use_global_palette: Use a single palette for all frames (better compression)
68
+
69
+ Returns:
70
+ List of color-optimized frames
71
+ """
72
+ optimized = []
73
+
74
+ if use_global_palette and len(self.frames) > 1:
75
+ # Create a global palette from all frames
76
+ # Sample frames to build palette
77
+ sample_size = min(5, len(self.frames))
78
+ sample_indices = [
79
+ int(i * len(self.frames) / sample_size) for i in range(sample_size)
80
+ ]
81
+ sample_frames = [self.frames[i] for i in sample_indices]
82
+
83
+ # Combine sample frames into a single image for palette generation
84
+ # Flatten each frame to get all pixels, then stack them
85
+ all_pixels = np.vstack(
86
+ [f.reshape(-1, 3) for f in sample_frames]
87
+ ) # (total_pixels, 3)
88
+
89
+ # Create a properly-shaped RGB image from the pixel data
90
+ # We'll make a roughly square image from all the pixels
91
+ total_pixels = len(all_pixels)
92
+ width = min(512, int(np.sqrt(total_pixels))) # Reasonable width, max 512
93
+ height = (total_pixels + width - 1) // width # Ceiling division
94
+
95
+ # Pad if necessary to fill the rectangle
96
+ pixels_needed = width * height
97
+ if pixels_needed > total_pixels:
98
+ padding = np.zeros((pixels_needed - total_pixels, 3), dtype=np.uint8)
99
+ all_pixels = np.vstack([all_pixels, padding])
100
+
101
+ # Reshape to proper RGB image format (H, W, 3)
102
+ img_array = (
103
+ all_pixels[:pixels_needed].reshape(height, width, 3).astype(np.uint8)
104
+ )
105
+ combined_img = Image.fromarray(img_array, mode="RGB")
106
+
107
+ # Generate global palette
108
+ global_palette = combined_img.quantize(colors=num_colors, method=2)
109
+
110
+ # Apply global palette to all frames
111
+ for frame in self.frames:
112
+ pil_frame = Image.fromarray(frame)
113
+ quantized = pil_frame.quantize(palette=global_palette, dither=1)
114
+ optimized.append(np.array(quantized.convert("RGB")))
115
+ else:
116
+ # Use per-frame quantization
117
+ for frame in self.frames:
118
+ pil_frame = Image.fromarray(frame)
119
+ quantized = pil_frame.quantize(colors=num_colors, method=2, dither=1)
120
+ optimized.append(np.array(quantized.convert("RGB")))
121
+
122
+ return optimized
123
+
124
+ def deduplicate_frames(self, threshold: float = 0.9995) -> int:
125
+ """
126
+ Remove duplicate or near-duplicate consecutive frames.
127
+
128
+ Args:
129
+ threshold: Similarity threshold (0.0-1.0). Higher = more strict (0.9995 = nearly identical).
130
+ Use 0.9995+ to preserve subtle animations, 0.98 for aggressive removal.
131
+
132
+ Returns:
133
+ Number of frames removed
134
+ """
135
+ if len(self.frames) < 2:
136
+ return 0
137
+
138
+ deduplicated = [self.frames[0]]
139
+ removed_count = 0
140
+
141
+ for i in range(1, len(self.frames)):
142
+ # Compare with previous frame
143
+ prev_frame = np.array(deduplicated[-1], dtype=np.float32)
144
+ curr_frame = np.array(self.frames[i], dtype=np.float32)
145
+
146
+ # Calculate similarity (normalized)
147
+ diff = np.abs(prev_frame - curr_frame)
148
+ similarity = 1.0 - (np.mean(diff) / 255.0)
149
+
150
+ # Keep frame if sufficiently different
151
+ # High threshold (0.9995+) means only remove nearly identical frames
152
+ if similarity < threshold:
153
+ deduplicated.append(self.frames[i])
154
+ else:
155
+ removed_count += 1
156
+
157
+ self.frames = deduplicated
158
+ return removed_count
159
+
160
+ def save(
161
+ self,
162
+ output_path: str | Path,
163
+ num_colors: int = 128,
164
+ optimize_for_emoji: bool = False,
165
+ remove_duplicates: bool = False,
166
+ ) -> dict:
167
+ """
168
+ Save frames as optimized GIF for Slack.
169
+
170
+ Args:
171
+ output_path: Where to save the GIF
172
+ num_colors: Number of colors to use (fewer = smaller file)
173
+ optimize_for_emoji: If True, optimize for emoji size (128x128, fewer colors)
174
+ remove_duplicates: If True, remove duplicate consecutive frames (opt-in)
175
+
176
+ Returns:
177
+ Dictionary with file info (path, size, dimensions, frame_count)
178
+ """
179
+ if not self.frames:
180
+ raise ValueError("No frames to save. Add frames with add_frame() first.")
181
+
182
+ output_path = Path(output_path)
183
+
184
+ # Remove duplicate frames to reduce file size
185
+ if remove_duplicates:
186
+ removed = self.deduplicate_frames(threshold=0.9995)
187
+ if removed > 0:
188
+ print(
189
+ f" Removed {removed} nearly identical frames (preserved subtle animations)"
190
+ )
191
+
192
+ # Optimize for emoji if requested
193
+ if optimize_for_emoji:
194
+ if self.width > 128 or self.height > 128:
195
+ print(
196
+ f" Resizing from {self.width}x{self.height} to 128x128 for emoji"
197
+ )
198
+ self.width = 128
199
+ self.height = 128
200
+ # Resize all frames
201
+ resized_frames = []
202
+ for frame in self.frames:
203
+ pil_frame = Image.fromarray(frame)
204
+ pil_frame = pil_frame.resize((128, 128), Image.Resampling.LANCZOS)
205
+ resized_frames.append(np.array(pil_frame))
206
+ self.frames = resized_frames
207
+ num_colors = min(num_colors, 48) # More aggressive color limit for emoji
208
+
209
+ # More aggressive FPS reduction for emoji
210
+ if len(self.frames) > 12:
211
+ print(
212
+ f" Reducing frames from {len(self.frames)} to ~12 for emoji size"
213
+ )
214
+ # Keep every nth frame to get close to 12 frames
215
+ keep_every = max(1, len(self.frames) // 12)
216
+ self.frames = [
217
+ self.frames[i] for i in range(0, len(self.frames), keep_every)
218
+ ]
219
+
220
+ # Optimize colors with global palette
221
+ optimized_frames = self.optimize_colors(num_colors, use_global_palette=True)
222
+
223
+ # Calculate frame duration in milliseconds
224
+ frame_duration = 1000 / self.fps
225
+
226
+ # Save GIF
227
+ imageio.imwrite(
228
+ output_path,
229
+ optimized_frames,
230
+ duration=frame_duration,
231
+ loop=0, # Infinite loop
232
+ )
233
+
234
+ # Get file info
235
+ file_size_kb = output_path.stat().st_size / 1024
236
+ file_size_mb = file_size_kb / 1024
237
+
238
+ info = {
239
+ "path": str(output_path),
240
+ "size_kb": file_size_kb,
241
+ "size_mb": file_size_mb,
242
+ "dimensions": f"{self.width}x{self.height}",
243
+ "frame_count": len(optimized_frames),
244
+ "fps": self.fps,
245
+ "duration_seconds": len(optimized_frames) / self.fps,
246
+ "colors": num_colors,
247
+ }
248
+
249
+ # Print info
250
+ print(f"\n✓ GIF created successfully!")
251
+ print(f" Path: {output_path}")
252
+ print(f" Size: {file_size_kb:.1f} KB ({file_size_mb:.2f} MB)")
253
+ print(f" Dimensions: {self.width}x{self.height}")
254
+ print(f" Frames: {len(optimized_frames)} @ {self.fps} fps")
255
+ print(f" Duration: {info['duration_seconds']:.1f}s")
256
+ print(f" Colors: {num_colors}")
257
+
258
+ # Size info
259
+ if optimize_for_emoji:
260
+ print(f" Optimized for emoji (128x128, reduced colors)")
261
+ if file_size_mb > 1.0:
262
+ print(f"\n Note: Large file size ({file_size_kb:.1f} KB)")
263
+ print(" Consider: fewer frames, smaller dimensions, or fewer colors")
264
+
265
+ return info
266
+
267
+ def clear(self):
268
+ """Clear all frames (useful for creating multiple GIFs)."""
269
+ self.frames = []
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Validators - Check if GIFs meet Slack's requirements.
4
+
5
+ These validators help ensure your GIFs meet Slack's size and dimension constraints.
6
+ """
7
+
8
+ from pathlib import Path
9
+
10
+
11
+ def validate_gif(
12
+ gif_path: str | Path, is_emoji: bool = True, verbose: bool = True
13
+ ) -> tuple[bool, dict]:
14
+ """
15
+ Validate GIF for Slack (dimensions, size, frame count).
16
+
17
+ Args:
18
+ gif_path: Path to GIF file
19
+ is_emoji: True for emoji (128x128 recommended), False for message GIF
20
+ verbose: Print validation details
21
+
22
+ Returns:
23
+ Tuple of (passes: bool, results: dict with all details)
24
+ """
25
+ from PIL import Image
26
+
27
+ gif_path = Path(gif_path)
28
+
29
+ if not gif_path.exists():
30
+ return False, {"error": f"File not found: {gif_path}"}
31
+
32
+ # Get file size
33
+ size_bytes = gif_path.stat().st_size
34
+ size_kb = size_bytes / 1024
35
+ size_mb = size_kb / 1024
36
+
37
+ # Get dimensions and frame info
38
+ try:
39
+ with Image.open(gif_path) as img:
40
+ width, height = img.size
41
+
42
+ # Count frames
43
+ frame_count = 0
44
+ try:
45
+ while True:
46
+ img.seek(frame_count)
47
+ frame_count += 1
48
+ except EOFError:
49
+ pass
50
+
51
+ # Get duration
52
+ try:
53
+ duration_ms = img.info.get("duration", 100)
54
+ total_duration = (duration_ms * frame_count) / 1000
55
+ fps = frame_count / total_duration if total_duration > 0 else 0
56
+ except:
57
+ total_duration = None
58
+ fps = None
59
+
60
+ except Exception as e:
61
+ return False, {"error": f"Failed to read GIF: {e}"}
62
+
63
+ # Validate dimensions
64
+ if is_emoji:
65
+ optimal = width == height == 128
66
+ acceptable = width == height and 64 <= width <= 128
67
+ dim_pass = acceptable
68
+ else:
69
+ aspect_ratio = (
70
+ max(width, height) / min(width, height)
71
+ if min(width, height) > 0
72
+ else float("inf")
73
+ )
74
+ dim_pass = aspect_ratio <= 2.0 and 320 <= min(width, height) <= 640
75
+
76
+ results = {
77
+ "file": str(gif_path),
78
+ "passes": dim_pass,
79
+ "width": width,
80
+ "height": height,
81
+ "size_kb": size_kb,
82
+ "size_mb": size_mb,
83
+ "frame_count": frame_count,
84
+ "duration_seconds": total_duration,
85
+ "fps": fps,
86
+ "is_emoji": is_emoji,
87
+ "optimal": optimal if is_emoji else None,
88
+ }
89
+
90
+ # Print if verbose
91
+ if verbose:
92
+ print(f"\nValidating {gif_path.name}:")
93
+ print(
94
+ f" Dimensions: {width}x{height}"
95
+ + (
96
+ f" ({'optimal' if optimal else 'acceptable'})"
97
+ if is_emoji and acceptable
98
+ else ""
99
+ )
100
+ )
101
+ print(
102
+ f" Size: {size_kb:.1f} KB"
103
+ + (f" ({size_mb:.2f} MB)" if size_mb >= 1.0 else "")
104
+ )
105
+ print(
106
+ f" Frames: {frame_count}"
107
+ + (f" @ {fps:.1f} fps ({total_duration:.1f}s)" if fps else "")
108
+ )
109
+
110
+ if not dim_pass:
111
+ print(
112
+ f" Note: {'Emoji should be 128x128' if is_emoji else 'Unusual dimensions for Slack'}"
113
+ )
114
+
115
+ if size_mb > 5.0:
116
+ print(f" Note: Large file size - consider fewer frames/colors")
117
+
118
+ return dim_pass, results
119
+
120
+
121
+ def is_slack_ready(
122
+ gif_path: str | Path, is_emoji: bool = True, verbose: bool = True
123
+ ) -> bool:
124
+ """
125
+ Quick check if GIF is ready for Slack.
126
+
127
+ Args:
128
+ gif_path: Path to GIF file
129
+ is_emoji: True for emoji GIF, False for message GIF
130
+ verbose: Print feedback
131
+
132
+ Returns:
133
+ True if dimensions are acceptable
134
+ """
135
+ passes, _ = validate_gif(gif_path, is_emoji, verbose)
136
+ return passes
@@ -0,0 +1,4 @@
1
+ pillow>=10.0.0
2
+ imageio>=2.31.0
3
+ imageio-ffmpeg>=0.4.9
4
+ numpy>=1.24.0
@@ -0,0 +1,172 @@
1
+ ---
2
+ name: staff-engineer-review
3
+ description: Performs deep code review of pull requests as a Staff+ level engineer. This skill should be used when reviewing PRs, evaluating implementation against plans, assessing architectural decisions, code quality, and providing actionable feedback.
4
+ ---
5
+
6
+ # Staff Engineer Review
7
+
8
+ ## Overview
9
+
10
+ Perform rigorous code review of pull requests by comparing the original plan (PR description) against actual implementation (code changes, diffs, structure). Evaluate alignment, architecture, code quality, correctness, performance, and test coverage to provide structured, actionable feedback.
11
+
12
+ ## When to Use This Skill
13
+
14
+ This skill should be used when:
15
+ - Review a pull request and provide a structured evaluation
16
+ - Evaluate whether implementation matches the stated plan
17
+ - Assess architectural decisions in PRs
18
+ - Provide detailed code review feedback
19
+ - Check code quality, correctness, and performance implications
20
+ - Evaluate test coverage adequacy
21
+
22
+ ## Review Workflow
23
+
24
+ ### 1. Gather Inputs
25
+
26
+ Collect the following:
27
+ - **PR Description** - The original plan and intent
28
+ - **Code Changes** - Diffs, files modified, commits
29
+ - **Additional Context** - Optional background, architecture docs, related PRs
30
+
31
+ ### 2. Plan vs Implementation Alignment
32
+
33
+ Evaluate each item in the PR description against actual changes:
34
+
35
+ | Check | Description |
36
+ |-------|-------------|
37
+ | Missing parts | Items planned but not implemented |
38
+ | Extra changes | Changes implemented but not planned |
39
+ | Partial implementations | Features started but not completed |
40
+
41
+ Document each discrepancy with status: ✅ Done, ⚠️ Partial, ❌ Missing, ➕ Extra
42
+
43
+ ### 3. Architectural & Design Review
44
+
45
+ Evaluate implementation against principles:
46
+
47
+ **Assess:**
48
+ - Separation of concerns
49
+ - Coupling and cohesion
50
+ - Consistency with existing codebase patterns
51
+ - Scalability implications
52
+
53
+ **Identify:**
54
+ - Design flaws or anti-patterns
55
+ - Overengineering or underengineering
56
+ - Hidden complexity
57
+ - Violations of SOLID/DRY principles
58
+
59
+ ### 4. Code Quality Review
60
+
61
+ Check for:
62
+ - Readability and clarity
63
+ - Naming consistency with codebase conventions
64
+ - Function and class responsibilities (single responsibility)
65
+ - Code duplication
66
+ - Cyclomatic and cognitive complexity
67
+ - Edge case handling
68
+ - Error handling completeness
69
+ - Logging and observability
70
+
71
+ ### 5. Correctness & Risk Analysis
72
+
73
+ Identify:
74
+ - Logical errors or questionable assumptions
75
+ - Potential bugs or edge case failures
76
+ - Missing input validation
77
+ - Race conditions or concurrency issues
78
+ - Security vulnerabilities (injection, auth, data exposure)
79
+ - API contract violations
80
+ - Error handling gaps
81
+
82
+ ### 6. Performance Considerations
83
+
84
+ Identify:
85
+ - N+1 query patterns
86
+ - Inefficient loops or operations
87
+ - Memory inefficiencies
88
+ - Unnecessary computations
89
+ - Missing indexes or caching opportunities
90
+ - Blocking operations in hot paths
91
+ - Large data processing without streaming
92
+
93
+ ### 7. Test Coverage Evaluation
94
+
95
+ Assess:
96
+ - Unit tests for new functionality
97
+ - Integration tests for component interactions
98
+ - Edge case coverage
99
+ - Happy path vs error path testing
100
+
101
+ Identify missing tests and suggest specific test cases.
102
+
103
+ ## Output Format
104
+
105
+ ### 1. Summary
106
+
107
+ Provide:
108
+ - **Alignment Score**: 0-100% (plan vs implementation)
109
+ - **Overall Quality**: Excellent / Good / Fair / Poor
110
+ - **Risk Level**: Low / Medium / High
111
+
112
+ ### 2. Plan vs Reality
113
+
114
+ | Item | Planned | Implemented | Status | Notes |
115
+ |------|---------|-------------|--------|-------|
116
+ | [Item 1] | Description from PR | What was actually done | ✅/⚠️/❌/➕ | Explanation |
117
+
118
+ ### 3. Critical Issues
119
+
120
+ List only high-impact problems (if any):
121
+
122
+ - **[Issue Title]**
123
+ - **Why it matters**: [Impact explanation]
124
+ - **Suggested fix**: [Concrete recommendation]
125
+
126
+ ### 4. Improvement Opportunities
127
+
128
+ Group by category:
129
+
130
+ **Architecture:**
131
+ - [Issue] - [Recommendation]
132
+
133
+ **Code Quality:**
134
+ - [Issue] - [Recommendation]
135
+
136
+ **Performance:**
137
+ - [Issue] - [Recommendation]
138
+
139
+ **Tests:**
140
+ - [Issue] - [Recommendation]
141
+
142
+ ### 5. Suggested Additions to PR
143
+
144
+ - Missing features or logic
145
+ - Better approaches or patterns
146
+ - Additional safeguards or validations
147
+
148
+ ### 6. Test Recommendations
149
+
150
+ Specific test cases to add:
151
+
152
+ - **[Test Case Name]**
153
+ - Input: [What to test]
154
+ - Expected: [Expected behavior]
155
+
156
+ ## Style Requirements
157
+
158
+ - Be precise and structured
159
+ - Avoid generic advice
160
+ - Focus on actionable insights
161
+ - Prioritize high-impact issues
162
+ - Use bullet points and tables
163
+ - Reference specific files and line numbers
164
+ - State assumptions explicitly when information is unclear
165
+ - Prefer practical engineering judgment over theoretical purity
166
+
167
+ ## Important Notes
168
+
169
+ - Verify everything; do not assume correctness
170
+ - Consider the context of the codebase and team conventions
171
+ - Balance perfectionism with pragmatism
172
+ - Focus review on what matters most for the PR's success