devskill 2.0.6 → 2.0.7

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 (435) hide show
  1. package/meta.ts +9 -1
  2. package/package.json +1 -1
  3. package/scripts/cli.ts +55 -10
  4. package/skills/algorithmic-art/LICENSE.txt +202 -0
  5. package/skills/algorithmic-art/SKILL.md +405 -0
  6. package/skills/algorithmic-art/SYNC.md +5 -0
  7. package/skills/algorithmic-art/templates/generator_template.js +223 -0
  8. package/skills/algorithmic-art/templates/viewer.html +599 -0
  9. package/skills/brand-guidelines/LICENSE.txt +202 -0
  10. package/skills/brand-guidelines/SKILL.md +73 -0
  11. package/skills/brand-guidelines/SYNC.md +5 -0
  12. package/skills/canvas-design/LICENSE.txt +202 -0
  13. package/skills/canvas-design/SKILL.md +130 -0
  14. package/skills/canvas-design/SYNC.md +5 -0
  15. package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  16. package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  17. package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  18. package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  19. package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  20. package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  21. package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  22. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  23. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  24. package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  25. package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  26. package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  27. package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  28. package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  29. package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  30. package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  31. package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  32. package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  33. package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  34. package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  35. package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  36. package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  37. package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  38. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  39. package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  40. package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  41. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  42. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  43. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  44. package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  45. package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  46. package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  47. package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  48. package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  49. package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  50. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  51. package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  52. package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  53. package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  54. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  55. package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  56. package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  57. package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  58. package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  59. package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  60. package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  61. package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  62. package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  63. package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  64. package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  65. package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  66. package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  67. package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  68. package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  69. package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  70. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  71. package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  72. package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  73. package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  74. package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  75. package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  76. package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  77. package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  78. package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  79. package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  80. package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  81. package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  82. package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  83. package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  84. package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  85. package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  86. package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  87. package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  88. package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  89. package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  90. package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  91. package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  92. package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  93. package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  94. package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  95. package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  96. package/skills/claude-api/LICENSE.txt +202 -0
  97. package/skills/claude-api/SKILL.md +246 -0
  98. package/skills/claude-api/SYNC.md +5 -0
  99. package/skills/claude-api/csharp/claude-api.md +400 -0
  100. package/skills/claude-api/curl/examples.md +193 -0
  101. package/skills/claude-api/go/claude-api.md +404 -0
  102. package/skills/claude-api/java/claude-api.md +430 -0
  103. package/skills/claude-api/php/claude-api.md +241 -0
  104. package/skills/claude-api/python/agent-sdk/README.md +345 -0
  105. package/skills/claude-api/python/agent-sdk/patterns.md +359 -0
  106. package/skills/claude-api/python/claude-api/README.md +410 -0
  107. package/skills/claude-api/python/claude-api/batches.md +185 -0
  108. package/skills/claude-api/python/claude-api/files-api.md +165 -0
  109. package/skills/claude-api/python/claude-api/streaming.md +162 -0
  110. package/skills/claude-api/python/claude-api/tool-use.md +590 -0
  111. package/skills/claude-api/ruby/claude-api.md +92 -0
  112. package/skills/claude-api/shared/error-codes.md +206 -0
  113. package/skills/claude-api/shared/live-sources.md +121 -0
  114. package/skills/claude-api/shared/models.md +119 -0
  115. package/skills/claude-api/shared/tool-use-concepts.md +305 -0
  116. package/skills/claude-api/typescript/agent-sdk/README.md +296 -0
  117. package/skills/claude-api/typescript/agent-sdk/patterns.md +209 -0
  118. package/skills/claude-api/typescript/claude-api/README.md +321 -0
  119. package/skills/claude-api/typescript/claude-api/batches.md +106 -0
  120. package/skills/claude-api/typescript/claude-api/files-api.md +98 -0
  121. package/skills/claude-api/typescript/claude-api/streaming.md +178 -0
  122. package/skills/claude-api/typescript/claude-api/tool-use.md +527 -0
  123. package/skills/doc-coauthoring/SKILL.md +375 -0
  124. package/skills/doc-coauthoring/SYNC.md +5 -0
  125. package/skills/docx/LICENSE.txt +30 -0
  126. package/skills/docx/SKILL.md +590 -0
  127. package/skills/docx/SYNC.md +5 -0
  128. package/skills/docx/scripts/__init__.py +1 -0
  129. package/skills/docx/scripts/accept_changes.py +135 -0
  130. package/skills/docx/scripts/comment.py +318 -0
  131. package/skills/docx/scripts/office/helpers/__init__.py +0 -0
  132. package/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
  133. package/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
  134. package/skills/docx/scripts/office/pack.py +159 -0
  135. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  136. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  137. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  138. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  139. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  140. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  141. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  142. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  143. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  144. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  145. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  146. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  147. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  148. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  149. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  150. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  151. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  152. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  153. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  154. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  155. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  156. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  157. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  158. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  159. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  160. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  161. package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  162. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  163. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  164. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  165. package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  166. package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
  167. package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  168. package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  169. package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  170. package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  171. package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  172. package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  173. package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  174. package/skills/docx/scripts/office/soffice.py +183 -0
  175. package/skills/docx/scripts/office/unpack.py +132 -0
  176. package/skills/docx/scripts/office/validate.py +111 -0
  177. package/skills/docx/scripts/office/validators/__init__.py +15 -0
  178. package/skills/docx/scripts/office/validators/base.py +847 -0
  179. package/skills/docx/scripts/office/validators/docx.py +446 -0
  180. package/skills/docx/scripts/office/validators/pptx.py +275 -0
  181. package/skills/docx/scripts/office/validators/redlining.py +247 -0
  182. package/skills/docx/scripts/templates/comments.xml +3 -0
  183. package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
  184. package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
  185. package/skills/docx/scripts/templates/commentsIds.xml +3 -0
  186. package/skills/docx/scripts/templates/people.xml +3 -0
  187. package/skills/frontend-design/LICENSE.txt +177 -0
  188. package/skills/frontend-design/SKILL.md +42 -0
  189. package/skills/frontend-design/SYNC.md +5 -0
  190. package/skills/internal-comms/LICENSE.txt +202 -0
  191. package/skills/internal-comms/SKILL.md +32 -0
  192. package/skills/internal-comms/SYNC.md +5 -0
  193. package/skills/internal-comms/examples/3p-updates.md +47 -0
  194. package/skills/internal-comms/examples/company-newsletter.md +65 -0
  195. package/skills/internal-comms/examples/faq-answers.md +30 -0
  196. package/skills/internal-comms/examples/general-comms.md +16 -0
  197. package/skills/mcp-builder/LICENSE.txt +202 -0
  198. package/skills/mcp-builder/SKILL.md +236 -0
  199. package/skills/mcp-builder/SYNC.md +5 -0
  200. package/skills/mcp-builder/reference/evaluation.md +602 -0
  201. package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  202. package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  203. package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  204. package/skills/mcp-builder/scripts/connections.py +151 -0
  205. package/skills/mcp-builder/scripts/evaluation.py +373 -0
  206. package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  207. package/skills/mcp-builder/scripts/requirements.txt +2 -0
  208. package/skills/next-best-practices/SKILL.md +153 -0
  209. package/skills/next-best-practices/SYNC.md +5 -0
  210. package/skills/next-best-practices/async-patterns.md +87 -0
  211. package/skills/next-best-practices/bundling.md +180 -0
  212. package/skills/next-best-practices/data-patterns.md +297 -0
  213. package/skills/next-best-practices/debug-tricks.md +105 -0
  214. package/skills/next-best-practices/directives.md +73 -0
  215. package/skills/next-best-practices/error-handling.md +227 -0
  216. package/skills/next-best-practices/file-conventions.md +140 -0
  217. package/skills/next-best-practices/font.md +245 -0
  218. package/skills/next-best-practices/functions.md +108 -0
  219. package/skills/next-best-practices/hydration-error.md +91 -0
  220. package/skills/next-best-practices/image.md +173 -0
  221. package/skills/next-best-practices/metadata.md +301 -0
  222. package/skills/next-best-practices/parallel-routes.md +287 -0
  223. package/skills/next-best-practices/route-handlers.md +146 -0
  224. package/skills/next-best-practices/rsc-boundaries.md +159 -0
  225. package/skills/next-best-practices/runtime-selection.md +39 -0
  226. package/skills/next-best-practices/scripts.md +141 -0
  227. package/skills/next-best-practices/self-hosting.md +371 -0
  228. package/skills/next-best-practices/suspense-boundaries.md +67 -0
  229. package/skills/next-cache-components/SKILL.md +411 -0
  230. package/skills/next-cache-components/SYNC.md +5 -0
  231. package/skills/next-upgrade/SKILL.md +50 -0
  232. package/skills/next-upgrade/SYNC.md +5 -0
  233. package/skills/pdf/LICENSE.txt +30 -0
  234. package/skills/pdf/SKILL.md +314 -0
  235. package/skills/pdf/SYNC.md +5 -0
  236. package/skills/pdf/forms.md +294 -0
  237. package/skills/pdf/reference.md +612 -0
  238. package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
  239. package/skills/pdf/scripts/check_fillable_fields.py +11 -0
  240. package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
  241. package/skills/pdf/scripts/create_validation_image.py +37 -0
  242. package/skills/pdf/scripts/extract_form_field_info.py +122 -0
  243. package/skills/pdf/scripts/extract_form_structure.py +115 -0
  244. package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
  245. package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
  246. package/skills/pptx/LICENSE.txt +30 -0
  247. package/skills/pptx/SKILL.md +232 -0
  248. package/skills/pptx/SYNC.md +5 -0
  249. package/skills/pptx/editing.md +205 -0
  250. package/skills/pptx/pptxgenjs.md +420 -0
  251. package/skills/pptx/scripts/__init__.py +0 -0
  252. package/skills/pptx/scripts/add_slide.py +195 -0
  253. package/skills/pptx/scripts/clean.py +286 -0
  254. package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
  255. package/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
  256. package/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
  257. package/skills/pptx/scripts/office/pack.py +159 -0
  258. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  259. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  260. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  261. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  262. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  263. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  264. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  265. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  266. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  267. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  268. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  269. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  270. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  271. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  272. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  273. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  274. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  275. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  276. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  277. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  278. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  279. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  280. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  281. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  282. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  283. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  284. package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  285. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  286. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  287. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  288. package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  289. package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
  290. package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  291. package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  292. package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  293. package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  294. package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  295. package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  296. package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  297. package/skills/pptx/scripts/office/soffice.py +183 -0
  298. package/skills/pptx/scripts/office/unpack.py +132 -0
  299. package/skills/pptx/scripts/office/validate.py +111 -0
  300. package/skills/pptx/scripts/office/validators/__init__.py +15 -0
  301. package/skills/pptx/scripts/office/validators/base.py +847 -0
  302. package/skills/pptx/scripts/office/validators/docx.py +446 -0
  303. package/skills/pptx/scripts/office/validators/pptx.py +275 -0
  304. package/skills/pptx/scripts/office/validators/redlining.py +247 -0
  305. package/skills/pptx/scripts/thumbnail.py +289 -0
  306. package/skills/shadcn/LICENSE.md +21 -0
  307. package/skills/shadcn/SKILL.md +242 -0
  308. package/skills/shadcn/SYNC.md +5 -0
  309. package/skills/shadcn/agents/openai.yml +5 -0
  310. package/skills/shadcn/assets/shadcn-small.png +0 -0
  311. package/skills/shadcn/assets/shadcn.png +0 -0
  312. package/skills/shadcn/cli.md +257 -0
  313. package/skills/shadcn/customization.md +202 -0
  314. package/skills/shadcn/evals/evals.json +47 -0
  315. package/skills/shadcn/mcp.md +94 -0
  316. package/skills/shadcn/rules/base-vs-radix.md +306 -0
  317. package/skills/shadcn/rules/composition.md +195 -0
  318. package/skills/shadcn/rules/forms.md +192 -0
  319. package/skills/shadcn/rules/icons.md +101 -0
  320. package/skills/shadcn/rules/styling.md +162 -0
  321. package/skills/skill-creator/LICENSE.txt +202 -0
  322. package/skills/skill-creator/SKILL.md +485 -0
  323. package/skills/skill-creator/SYNC.md +5 -0
  324. package/skills/skill-creator/agents/analyzer.md +274 -0
  325. package/skills/skill-creator/agents/comparator.md +202 -0
  326. package/skills/skill-creator/agents/grader.md +223 -0
  327. package/skills/skill-creator/assets/eval_review.html +146 -0
  328. package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
  329. package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
  330. package/skills/skill-creator/references/schemas.md +430 -0
  331. package/skills/skill-creator/scripts/__init__.py +0 -0
  332. package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
  333. package/skills/skill-creator/scripts/generate_report.py +326 -0
  334. package/skills/skill-creator/scripts/improve_description.py +247 -0
  335. package/skills/skill-creator/scripts/package_skill.py +136 -0
  336. package/skills/skill-creator/scripts/quick_validate.py +103 -0
  337. package/skills/skill-creator/scripts/run_eval.py +310 -0
  338. package/skills/skill-creator/scripts/run_loop.py +328 -0
  339. package/skills/skill-creator/scripts/utils.py +47 -0
  340. package/skills/slack-gif-creator/LICENSE.txt +202 -0
  341. package/skills/slack-gif-creator/SKILL.md +254 -0
  342. package/skills/slack-gif-creator/SYNC.md +5 -0
  343. package/skills/slack-gif-creator/core/easing.py +234 -0
  344. package/skills/slack-gif-creator/core/frame_composer.py +176 -0
  345. package/skills/slack-gif-creator/core/gif_builder.py +269 -0
  346. package/skills/slack-gif-creator/core/validators.py +136 -0
  347. package/skills/slack-gif-creator/requirements.txt +4 -0
  348. package/skills/theme-factory/LICENSE.txt +202 -0
  349. package/skills/theme-factory/SKILL.md +59 -0
  350. package/skills/theme-factory/SYNC.md +5 -0
  351. package/skills/theme-factory/theme-showcase.pdf +0 -0
  352. package/skills/theme-factory/themes/arctic-frost.md +19 -0
  353. package/skills/theme-factory/themes/botanical-garden.md +19 -0
  354. package/skills/theme-factory/themes/desert-rose.md +19 -0
  355. package/skills/theme-factory/themes/forest-canopy.md +19 -0
  356. package/skills/theme-factory/themes/golden-hour.md +19 -0
  357. package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
  358. package/skills/theme-factory/themes/modern-minimalist.md +19 -0
  359. package/skills/theme-factory/themes/ocean-depths.md +19 -0
  360. package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
  361. package/skills/theme-factory/themes/tech-innovation.md +19 -0
  362. package/skills/vue-best-practices/SYNC.md +1 -1
  363. package/skills/vue-jsx-best-practices/SYNC.md +1 -1
  364. package/skills/vue-options-api-best-practices/SYNC.md +1 -1
  365. package/skills/vue-pinia-best-practices/SYNC.md +1 -1
  366. package/skills/vue-router-best-practices/SYNC.md +1 -1
  367. package/skills/vue-testing-best-practices/SYNC.md +1 -1
  368. package/skills/web-artifacts-builder/LICENSE.txt +202 -0
  369. package/skills/web-artifacts-builder/SKILL.md +74 -0
  370. package/skills/web-artifacts-builder/SYNC.md +5 -0
  371. package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  372. package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  373. package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  374. package/skills/webapp-testing/LICENSE.txt +202 -0
  375. package/skills/webapp-testing/SKILL.md +96 -0
  376. package/skills/webapp-testing/SYNC.md +5 -0
  377. package/skills/webapp-testing/examples/console_logging.py +35 -0
  378. package/skills/webapp-testing/examples/element_discovery.py +40 -0
  379. package/skills/webapp-testing/examples/static_html_automation.py +33 -0
  380. package/skills/webapp-testing/scripts/with_server.py +106 -0
  381. package/skills/xlsx/LICENSE.txt +30 -0
  382. package/skills/xlsx/SKILL.md +292 -0
  383. package/skills/xlsx/SYNC.md +5 -0
  384. package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
  385. package/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
  386. package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
  387. package/skills/xlsx/scripts/office/pack.py +159 -0
  388. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  389. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  390. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  391. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  392. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  393. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  394. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  395. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  396. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  397. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  398. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  399. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  400. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  401. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  402. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  403. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  404. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  405. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  406. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  407. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  408. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  409. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  410. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  411. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  412. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  413. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  414. package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  415. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  416. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  417. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  418. package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  419. package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
  420. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
  421. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
  422. package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
  423. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
  424. package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
  425. package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  426. package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
  427. package/skills/xlsx/scripts/office/soffice.py +183 -0
  428. package/skills/xlsx/scripts/office/unpack.py +132 -0
  429. package/skills/xlsx/scripts/office/validate.py +111 -0
  430. package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
  431. package/skills/xlsx/scripts/office/validators/base.py +847 -0
  432. package/skills/xlsx/scripts/office/validators/docx.py +446 -0
  433. package/skills/xlsx/scripts/office/validators/pptx.py +275 -0
  434. package/skills/xlsx/scripts/office/validators/redlining.py +247 -0
  435. package/skills/xlsx/scripts/recalc.py +184 -0
@@ -0,0 +1,410 @@
1
+ # Claude API — Python
2
+
3
+ ## Installation
4
+
5
+ ```bash
6
+ pip install anthropic
7
+ ```
8
+
9
+ ## Client Initialization
10
+
11
+ ```python
12
+ import anthropic
13
+
14
+ # Default (uses ANTHROPIC_API_KEY env var)
15
+ client = anthropic.Anthropic()
16
+
17
+ # Explicit API key
18
+ client = anthropic.Anthropic(api_key="your-api-key")
19
+
20
+ # Async client
21
+ async_client = anthropic.AsyncAnthropic()
22
+ ```
23
+
24
+ ---
25
+
26
+ ## Basic Message Request
27
+
28
+ ```python
29
+ response = client.messages.create(
30
+ model="claude-opus-4-6",
31
+ max_tokens=16000,
32
+ messages=[
33
+ {"role": "user", "content": "What is the capital of France?"}
34
+ ]
35
+ )
36
+ # response.content is a list of content block objects (TextBlock, ThinkingBlock,
37
+ # ToolUseBlock, ...). Check .type before accessing .text.
38
+ for block in response.content:
39
+ if block.type == "text":
40
+ print(block.text)
41
+ ```
42
+
43
+ ---
44
+
45
+ ## System Prompts
46
+
47
+ ```python
48
+ response = client.messages.create(
49
+ model="claude-opus-4-6",
50
+ max_tokens=16000,
51
+ system="You are a helpful coding assistant. Always provide examples in Python.",
52
+ messages=[{"role": "user", "content": "How do I read a JSON file?"}]
53
+ )
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Vision (Images)
59
+
60
+ ### Base64
61
+
62
+ ```python
63
+ import base64
64
+
65
+ with open("image.png", "rb") as f:
66
+ image_data = base64.standard_b64encode(f.read()).decode("utf-8")
67
+
68
+ response = client.messages.create(
69
+ model="claude-opus-4-6",
70
+ max_tokens=16000,
71
+ messages=[{
72
+ "role": "user",
73
+ "content": [
74
+ {
75
+ "type": "image",
76
+ "source": {
77
+ "type": "base64",
78
+ "media_type": "image/png",
79
+ "data": image_data
80
+ }
81
+ },
82
+ {"type": "text", "text": "What's in this image?"}
83
+ ]
84
+ }]
85
+ )
86
+ ```
87
+
88
+ ### URL
89
+
90
+ ```python
91
+ response = client.messages.create(
92
+ model="claude-opus-4-6",
93
+ max_tokens=16000,
94
+ messages=[{
95
+ "role": "user",
96
+ "content": [
97
+ {
98
+ "type": "image",
99
+ "source": {
100
+ "type": "url",
101
+ "url": "https://example.com/image.png"
102
+ }
103
+ },
104
+ {"type": "text", "text": "Describe this image"}
105
+ ]
106
+ }]
107
+ )
108
+ ```
109
+
110
+ ---
111
+
112
+ ## Prompt Caching
113
+
114
+ Cache large context to reduce costs (up to 90% savings).
115
+
116
+ ### Automatic Caching (Recommended)
117
+
118
+ Use top-level `cache_control` to automatically cache the last cacheable block in the request — no need to annotate individual content blocks:
119
+
120
+ ```python
121
+ response = client.messages.create(
122
+ model="claude-opus-4-6",
123
+ max_tokens=16000,
124
+ cache_control={"type": "ephemeral"}, # auto-caches the last cacheable block
125
+ system="You are an expert on this large document...",
126
+ messages=[{"role": "user", "content": "Summarize the key points"}]
127
+ )
128
+ ```
129
+
130
+ ### Manual Cache Control
131
+
132
+ For fine-grained control, add `cache_control` to specific content blocks:
133
+
134
+ ```python
135
+ response = client.messages.create(
136
+ model="claude-opus-4-6",
137
+ max_tokens=16000,
138
+ system=[{
139
+ "type": "text",
140
+ "text": "You are an expert on this large document...",
141
+ "cache_control": {"type": "ephemeral"} # default TTL is 5 minutes
142
+ }],
143
+ messages=[{"role": "user", "content": "Summarize the key points"}]
144
+ )
145
+
146
+ # With explicit TTL (time-to-live)
147
+ response = client.messages.create(
148
+ model="claude-opus-4-6",
149
+ max_tokens=16000,
150
+ system=[{
151
+ "type": "text",
152
+ "text": "You are an expert on this large document...",
153
+ "cache_control": {"type": "ephemeral", "ttl": "1h"} # 1 hour TTL
154
+ }],
155
+ messages=[{"role": "user", "content": "Summarize the key points"}]
156
+ )
157
+ ```
158
+
159
+ ---
160
+
161
+ ## Extended Thinking
162
+
163
+ > **Opus 4.6 and Sonnet 4.6:** Use adaptive thinking. `budget_tokens` is deprecated on both Opus 4.6 and Sonnet 4.6.
164
+ > **Older models:** Use `thinking: {type: "enabled", budget_tokens: N}` (must be < `max_tokens`, min 1024).
165
+
166
+ ```python
167
+ # Opus 4.6: adaptive thinking (recommended)
168
+ response = client.messages.create(
169
+ model="claude-opus-4-6",
170
+ max_tokens=16000,
171
+ thinking={"type": "adaptive"},
172
+ output_config={"effort": "high"}, # low | medium | high | max
173
+ messages=[{"role": "user", "content": "Solve this step by step..."}]
174
+ )
175
+
176
+ # Access thinking and response
177
+ for block in response.content:
178
+ if block.type == "thinking":
179
+ print(f"Thinking: {block.thinking}")
180
+ elif block.type == "text":
181
+ print(f"Response: {block.text}")
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Error Handling
187
+
188
+ ```python
189
+ import anthropic
190
+
191
+ try:
192
+ response = client.messages.create(...)
193
+ except anthropic.BadRequestError as e:
194
+ print(f"Bad request: {e.message}")
195
+ except anthropic.AuthenticationError:
196
+ print("Invalid API key")
197
+ except anthropic.PermissionDeniedError:
198
+ print("API key lacks required permissions")
199
+ except anthropic.NotFoundError:
200
+ print("Invalid model or endpoint")
201
+ except anthropic.RateLimitError as e:
202
+ retry_after = int(e.response.headers.get("retry-after", "60"))
203
+ print(f"Rate limited. Retry after {retry_after}s.")
204
+ except anthropic.APIStatusError as e:
205
+ if e.status_code >= 500:
206
+ print(f"Server error ({e.status_code}). Retry later.")
207
+ else:
208
+ print(f"API error: {e.message}")
209
+ except anthropic.APIConnectionError:
210
+ print("Network error. Check internet connection.")
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Multi-Turn Conversations
216
+
217
+ The API is stateless — send the full conversation history each time.
218
+
219
+ ```python
220
+ class ConversationManager:
221
+ """Manage multi-turn conversations with the Claude API."""
222
+
223
+ def __init__(self, client: anthropic.Anthropic, model: str, system: str = None):
224
+ self.client = client
225
+ self.model = model
226
+ self.system = system
227
+ self.messages = []
228
+
229
+ def send(self, user_message: str, **kwargs) -> str:
230
+ """Send a message and get a response."""
231
+ self.messages.append({"role": "user", "content": user_message})
232
+
233
+ response = self.client.messages.create(
234
+ model=self.model,
235
+ max_tokens=kwargs.get("max_tokens", 16000),
236
+ system=self.system,
237
+ messages=self.messages,
238
+ **kwargs
239
+ )
240
+
241
+ assistant_message = next(
242
+ (b.text for b in response.content if b.type == "text"), ""
243
+ )
244
+ self.messages.append({"role": "assistant", "content": assistant_message})
245
+
246
+ return assistant_message
247
+
248
+ # Usage
249
+ conversation = ConversationManager(
250
+ client=anthropic.Anthropic(),
251
+ model="claude-opus-4-6",
252
+ system="You are a helpful assistant."
253
+ )
254
+
255
+ response1 = conversation.send("My name is Alice.")
256
+ response2 = conversation.send("What's my name?") # Claude remembers "Alice"
257
+ ```
258
+
259
+ **Rules:**
260
+
261
+ - Messages must alternate between `user` and `assistant`
262
+ - First message must be `user`
263
+
264
+ ---
265
+
266
+ ### Compaction (long conversations)
267
+
268
+ > **Beta, Opus 4.6 and Sonnet 4.6.** When conversations approach the 200K context window, compaction automatically summarizes earlier context server-side. The API returns a `compaction` block; you must pass it back on subsequent requests — append `response.content`, not just the text.
269
+
270
+ ```python
271
+ import anthropic
272
+
273
+ client = anthropic.Anthropic()
274
+ messages = []
275
+
276
+ def chat(user_message: str) -> str:
277
+ messages.append({"role": "user", "content": user_message})
278
+
279
+ response = client.beta.messages.create(
280
+ betas=["compact-2026-01-12"],
281
+ model="claude-opus-4-6",
282
+ max_tokens=16000,
283
+ messages=messages,
284
+ context_management={
285
+ "edits": [{"type": "compact_20260112"}]
286
+ }
287
+ )
288
+
289
+ # Append full content — compaction blocks must be preserved
290
+ messages.append({"role": "assistant", "content": response.content})
291
+
292
+ return next(block.text for block in response.content if block.type == "text")
293
+
294
+ # Compaction triggers automatically when context grows large
295
+ print(chat("Help me build a Python web scraper"))
296
+ print(chat("Add support for JavaScript-rendered pages"))
297
+ print(chat("Now add rate limiting and error handling"))
298
+ ```
299
+
300
+ ---
301
+
302
+ ## Stop Reasons
303
+
304
+ The `stop_reason` field in the response indicates why the model stopped generating:
305
+
306
+ | Value | Meaning |
307
+ |-------|---------|
308
+ | `end_turn` | Claude finished its response naturally |
309
+ | `max_tokens` | Hit the `max_tokens` limit — increase it or use streaming |
310
+ | `stop_sequence` | Hit a custom stop sequence |
311
+ | `tool_use` | Claude wants to call a tool — execute it and continue |
312
+ | `pause_turn` | Model paused and can be resumed (agentic flows) |
313
+ | `refusal` | Claude refused for safety reasons — output may not match your schema |
314
+
315
+ ---
316
+
317
+ ## Cost Optimization Strategies
318
+
319
+ ### 1. Use Prompt Caching for Repeated Context
320
+
321
+ ```python
322
+ # Automatic caching (simplest — caches the last cacheable block)
323
+ response = client.messages.create(
324
+ model="claude-opus-4-6",
325
+ max_tokens=16000,
326
+ cache_control={"type": "ephemeral"},
327
+ system=large_document_text, # e.g., 50KB of context
328
+ messages=[{"role": "user", "content": "Summarize the key points"}]
329
+ )
330
+
331
+ # First request: full cost
332
+ # Subsequent requests: ~90% cheaper for cached portion
333
+ ```
334
+
335
+ ### 2. Choose the Right Model
336
+
337
+ ```python
338
+ # Default to Opus for most tasks
339
+ response = client.messages.create(
340
+ model="claude-opus-4-6", # $5.00/$25.00 per 1M tokens
341
+ max_tokens=16000,
342
+ messages=[{"role": "user", "content": "Explain quantum computing"}]
343
+ )
344
+
345
+ # Use Sonnet for high-volume production workloads
346
+ standard_response = client.messages.create(
347
+ model="claude-sonnet-4-6", # $3.00/$15.00 per 1M tokens
348
+ max_tokens=16000,
349
+ messages=[{"role": "user", "content": "Summarize this document"}]
350
+ )
351
+
352
+ # Use Haiku only for simple, speed-critical tasks
353
+ simple_response = client.messages.create(
354
+ model="claude-haiku-4-5", # $1.00/$5.00 per 1M tokens
355
+ max_tokens=256,
356
+ messages=[{"role": "user", "content": "Classify this as positive or negative"}]
357
+ )
358
+ ```
359
+
360
+ ### 3. Use Token Counting Before Requests
361
+
362
+ ```python
363
+ count_response = client.messages.count_tokens(
364
+ model="claude-opus-4-6",
365
+ messages=messages,
366
+ system=system
367
+ )
368
+
369
+ estimated_input_cost = count_response.input_tokens * 0.000005 # $5/1M tokens
370
+ print(f"Estimated input cost: ${estimated_input_cost:.4f}")
371
+ ```
372
+
373
+ ---
374
+
375
+ ## Retry with Exponential Backoff
376
+
377
+ > **Note:** The Anthropic SDK automatically retries rate limit (429) and server errors (5xx) with exponential backoff. You can configure this with `max_retries` (default: 2). Only implement custom retry logic if you need behavior beyond what the SDK provides.
378
+
379
+ ```python
380
+ import time
381
+ import random
382
+ import anthropic
383
+
384
+ def call_with_retry(
385
+ client: anthropic.Anthropic,
386
+ max_retries: int = 5,
387
+ base_delay: float = 1.0,
388
+ max_delay: float = 60.0,
389
+ **kwargs
390
+ ):
391
+ """Call the API with exponential backoff retry."""
392
+ last_exception = None
393
+
394
+ for attempt in range(max_retries):
395
+ try:
396
+ return client.messages.create(**kwargs)
397
+ except anthropic.RateLimitError as e:
398
+ last_exception = e
399
+ except anthropic.APIStatusError as e:
400
+ if e.status_code >= 500:
401
+ last_exception = e
402
+ else:
403
+ raise # Client errors (4xx except 429) should not be retried
404
+
405
+ delay = min(base_delay * (2 ** attempt) + random.uniform(0, 1), max_delay)
406
+ print(f"Retry {attempt + 1}/{max_retries} after {delay:.1f}s")
407
+ time.sleep(delay)
408
+
409
+ raise last_exception
410
+ ```
@@ -0,0 +1,185 @@
1
+ # Message Batches API — Python
2
+
3
+ The Batches API (`POST /v1/messages/batches`) processes Messages API requests asynchronously at 50% of standard prices.
4
+
5
+ ## Key Facts
6
+
7
+ - Up to 100,000 requests or 256 MB per batch
8
+ - Most batches complete within 1 hour; maximum 24 hours
9
+ - Results available for 29 days after creation
10
+ - 50% cost reduction on all token usage
11
+ - All Messages API features supported (vision, tools, caching, etc.)
12
+
13
+ ---
14
+
15
+ ## Create a Batch
16
+
17
+ ```python
18
+ import anthropic
19
+ from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
20
+ from anthropic.types.messages.batch_create_params import Request
21
+
22
+ client = anthropic.Anthropic()
23
+
24
+ message_batch = client.messages.batches.create(
25
+ requests=[
26
+ Request(
27
+ custom_id="request-1",
28
+ params=MessageCreateParamsNonStreaming(
29
+ model="claude-opus-4-6",
30
+ max_tokens=16000,
31
+ messages=[{"role": "user", "content": "Summarize climate change impacts"}]
32
+ )
33
+ ),
34
+ Request(
35
+ custom_id="request-2",
36
+ params=MessageCreateParamsNonStreaming(
37
+ model="claude-opus-4-6",
38
+ max_tokens=16000,
39
+ messages=[{"role": "user", "content": "Explain quantum computing basics"}]
40
+ )
41
+ ),
42
+ ]
43
+ )
44
+
45
+ print(f"Batch ID: {message_batch.id}")
46
+ print(f"Status: {message_batch.processing_status}")
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Poll for Completion
52
+
53
+ ```python
54
+ import time
55
+
56
+ while True:
57
+ batch = client.messages.batches.retrieve(message_batch.id)
58
+ if batch.processing_status == "ended":
59
+ break
60
+ print(f"Status: {batch.processing_status}, processing: {batch.request_counts.processing}")
61
+ time.sleep(60)
62
+
63
+ print("Batch complete!")
64
+ print(f"Succeeded: {batch.request_counts.succeeded}")
65
+ print(f"Errored: {batch.request_counts.errored}")
66
+ ```
67
+
68
+ ---
69
+
70
+ ## Retrieve Results
71
+
72
+ > **Note:** Examples below use `match/case` syntax, requiring Python 3.10+. For earlier versions, use `if/elif` chains instead.
73
+
74
+ ```python
75
+ for result in client.messages.batches.results(message_batch.id):
76
+ match result.result.type:
77
+ case "succeeded":
78
+ msg = result.result.message
79
+ text = next((b.text for b in msg.content if b.type == "text"), "")
80
+ print(f"[{result.custom_id}] {text[:100]}")
81
+ case "errored":
82
+ if result.result.error.type == "invalid_request":
83
+ print(f"[{result.custom_id}] Validation error - fix request and retry")
84
+ else:
85
+ print(f"[{result.custom_id}] Server error - safe to retry")
86
+ case "canceled":
87
+ print(f"[{result.custom_id}] Canceled")
88
+ case "expired":
89
+ print(f"[{result.custom_id}] Expired - resubmit")
90
+ ```
91
+
92
+ ---
93
+
94
+ ## Cancel a Batch
95
+
96
+ ```python
97
+ cancelled = client.messages.batches.cancel(message_batch.id)
98
+ print(f"Status: {cancelled.processing_status}") # "canceling"
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Batch with Prompt Caching
104
+
105
+ ```python
106
+ shared_system = [
107
+ {"type": "text", "text": "You are a literary analyst."},
108
+ {
109
+ "type": "text",
110
+ "text": large_document_text, # Shared across all requests
111
+ "cache_control": {"type": "ephemeral"}
112
+ }
113
+ ]
114
+
115
+ message_batch = client.messages.batches.create(
116
+ requests=[
117
+ Request(
118
+ custom_id=f"analysis-{i}",
119
+ params=MessageCreateParamsNonStreaming(
120
+ model="claude-opus-4-6",
121
+ max_tokens=16000,
122
+ system=shared_system,
123
+ messages=[{"role": "user", "content": question}]
124
+ )
125
+ )
126
+ for i, question in enumerate(questions)
127
+ ]
128
+ )
129
+ ```
130
+
131
+ ---
132
+
133
+ ## Full End-to-End Example
134
+
135
+ ```python
136
+ import anthropic
137
+ import time
138
+ from anthropic.types.message_create_params import MessageCreateParamsNonStreaming
139
+ from anthropic.types.messages.batch_create_params import Request
140
+
141
+ client = anthropic.Anthropic()
142
+
143
+ # 1. Prepare requests
144
+ items_to_classify = [
145
+ "The product quality is excellent!",
146
+ "Terrible customer service, never again.",
147
+ "It's okay, nothing special.",
148
+ ]
149
+
150
+ requests = [
151
+ Request(
152
+ custom_id=f"classify-{i}",
153
+ params=MessageCreateParamsNonStreaming(
154
+ model="claude-haiku-4-5",
155
+ max_tokens=50,
156
+ messages=[{
157
+ "role": "user",
158
+ "content": f"Classify as positive/negative/neutral (one word): {text}"
159
+ }]
160
+ )
161
+ )
162
+ for i, text in enumerate(items_to_classify)
163
+ ]
164
+
165
+ # 2. Create batch
166
+ batch = client.messages.batches.create(requests=requests)
167
+ print(f"Created batch: {batch.id}")
168
+
169
+ # 3. Wait for completion
170
+ while True:
171
+ batch = client.messages.batches.retrieve(batch.id)
172
+ if batch.processing_status == "ended":
173
+ break
174
+ time.sleep(10)
175
+
176
+ # 4. Collect results
177
+ results = {}
178
+ for result in client.messages.batches.results(batch.id):
179
+ if result.result.type == "succeeded":
180
+ msg = result.result.message
181
+ results[result.custom_id] = next((b.text for b in msg.content if b.type == "text"), "")
182
+
183
+ for custom_id, classification in sorted(results.items()):
184
+ print(f"{custom_id}: {classification}")
185
+ ```