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.
- package/meta.ts +9 -1
- package/package.json +1 -1
- package/scripts/cli.ts +55 -10
- package/skills/algorithmic-art/LICENSE.txt +202 -0
- package/skills/algorithmic-art/SKILL.md +405 -0
- package/skills/algorithmic-art/SYNC.md +5 -0
- package/skills/algorithmic-art/templates/generator_template.js +223 -0
- package/skills/algorithmic-art/templates/viewer.html +599 -0
- package/skills/brand-guidelines/LICENSE.txt +202 -0
- package/skills/brand-guidelines/SKILL.md +73 -0
- package/skills/brand-guidelines/SYNC.md +5 -0
- package/skills/canvas-design/LICENSE.txt +202 -0
- package/skills/canvas-design/SKILL.md +130 -0
- package/skills/canvas-design/SYNC.md +5 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/claude-api/LICENSE.txt +202 -0
- package/skills/claude-api/SKILL.md +246 -0
- package/skills/claude-api/SYNC.md +5 -0
- package/skills/claude-api/csharp/claude-api.md +400 -0
- package/skills/claude-api/curl/examples.md +193 -0
- package/skills/claude-api/go/claude-api.md +404 -0
- package/skills/claude-api/java/claude-api.md +430 -0
- package/skills/claude-api/php/claude-api.md +241 -0
- package/skills/claude-api/python/agent-sdk/README.md +345 -0
- package/skills/claude-api/python/agent-sdk/patterns.md +359 -0
- package/skills/claude-api/python/claude-api/README.md +410 -0
- package/skills/claude-api/python/claude-api/batches.md +185 -0
- package/skills/claude-api/python/claude-api/files-api.md +165 -0
- package/skills/claude-api/python/claude-api/streaming.md +162 -0
- package/skills/claude-api/python/claude-api/tool-use.md +590 -0
- package/skills/claude-api/ruby/claude-api.md +92 -0
- package/skills/claude-api/shared/error-codes.md +206 -0
- package/skills/claude-api/shared/live-sources.md +121 -0
- package/skills/claude-api/shared/models.md +119 -0
- package/skills/claude-api/shared/tool-use-concepts.md +305 -0
- package/skills/claude-api/typescript/agent-sdk/README.md +296 -0
- package/skills/claude-api/typescript/agent-sdk/patterns.md +209 -0
- package/skills/claude-api/typescript/claude-api/README.md +321 -0
- package/skills/claude-api/typescript/claude-api/batches.md +106 -0
- package/skills/claude-api/typescript/claude-api/files-api.md +98 -0
- package/skills/claude-api/typescript/claude-api/streaming.md +178 -0
- package/skills/claude-api/typescript/claude-api/tool-use.md +527 -0
- package/skills/doc-coauthoring/SKILL.md +375 -0
- package/skills/doc-coauthoring/SYNC.md +5 -0
- package/skills/docx/LICENSE.txt +30 -0
- package/skills/docx/SKILL.md +590 -0
- package/skills/docx/SYNC.md +5 -0
- package/skills/docx/scripts/__init__.py +1 -0
- package/skills/docx/scripts/accept_changes.py +135 -0
- package/skills/docx/scripts/comment.py +318 -0
- package/skills/docx/scripts/office/helpers/__init__.py +0 -0
- package/skills/docx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/docx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/docx/scripts/office/pack.py +159 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/docx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/docx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/docx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/docx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/docx/scripts/office/soffice.py +183 -0
- package/skills/docx/scripts/office/unpack.py +132 -0
- package/skills/docx/scripts/office/validate.py +111 -0
- package/skills/docx/scripts/office/validators/__init__.py +15 -0
- package/skills/docx/scripts/office/validators/base.py +847 -0
- package/skills/docx/scripts/office/validators/docx.py +446 -0
- package/skills/docx/scripts/office/validators/pptx.py +275 -0
- package/skills/docx/scripts/office/validators/redlining.py +247 -0
- package/skills/docx/scripts/templates/comments.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtended.xml +3 -0
- package/skills/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/skills/docx/scripts/templates/commentsIds.xml +3 -0
- package/skills/docx/scripts/templates/people.xml +3 -0
- package/skills/frontend-design/LICENSE.txt +177 -0
- package/skills/frontend-design/SKILL.md +42 -0
- package/skills/frontend-design/SYNC.md +5 -0
- package/skills/internal-comms/LICENSE.txt +202 -0
- package/skills/internal-comms/SKILL.md +32 -0
- package/skills/internal-comms/SYNC.md +5 -0
- package/skills/internal-comms/examples/3p-updates.md +47 -0
- package/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/skills/internal-comms/examples/faq-answers.md +30 -0
- package/skills/internal-comms/examples/general-comms.md +16 -0
- package/skills/mcp-builder/LICENSE.txt +202 -0
- package/skills/mcp-builder/SKILL.md +236 -0
- package/skills/mcp-builder/SYNC.md +5 -0
- package/skills/mcp-builder/reference/evaluation.md +602 -0
- package/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/skills/mcp-builder/scripts/connections.py +151 -0
- package/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/skills/next-best-practices/SKILL.md +153 -0
- package/skills/next-best-practices/SYNC.md +5 -0
- package/skills/next-best-practices/async-patterns.md +87 -0
- package/skills/next-best-practices/bundling.md +180 -0
- package/skills/next-best-practices/data-patterns.md +297 -0
- package/skills/next-best-practices/debug-tricks.md +105 -0
- package/skills/next-best-practices/directives.md +73 -0
- package/skills/next-best-practices/error-handling.md +227 -0
- package/skills/next-best-practices/file-conventions.md +140 -0
- package/skills/next-best-practices/font.md +245 -0
- package/skills/next-best-practices/functions.md +108 -0
- package/skills/next-best-practices/hydration-error.md +91 -0
- package/skills/next-best-practices/image.md +173 -0
- package/skills/next-best-practices/metadata.md +301 -0
- package/skills/next-best-practices/parallel-routes.md +287 -0
- package/skills/next-best-practices/route-handlers.md +146 -0
- package/skills/next-best-practices/rsc-boundaries.md +159 -0
- package/skills/next-best-practices/runtime-selection.md +39 -0
- package/skills/next-best-practices/scripts.md +141 -0
- package/skills/next-best-practices/self-hosting.md +371 -0
- package/skills/next-best-practices/suspense-boundaries.md +67 -0
- package/skills/next-cache-components/SKILL.md +411 -0
- package/skills/next-cache-components/SYNC.md +5 -0
- package/skills/next-upgrade/SKILL.md +50 -0
- package/skills/next-upgrade/SYNC.md +5 -0
- package/skills/pdf/LICENSE.txt +30 -0
- package/skills/pdf/SKILL.md +314 -0
- package/skills/pdf/SYNC.md +5 -0
- package/skills/pdf/forms.md +294 -0
- package/skills/pdf/reference.md +612 -0
- package/skills/pdf/scripts/check_bounding_boxes.py +65 -0
- package/skills/pdf/scripts/check_fillable_fields.py +11 -0
- package/skills/pdf/scripts/convert_pdf_to_images.py +33 -0
- package/skills/pdf/scripts/create_validation_image.py +37 -0
- package/skills/pdf/scripts/extract_form_field_info.py +122 -0
- package/skills/pdf/scripts/extract_form_structure.py +115 -0
- package/skills/pdf/scripts/fill_fillable_fields.py +98 -0
- package/skills/pdf/scripts/fill_pdf_form_with_annotations.py +107 -0
- package/skills/pptx/LICENSE.txt +30 -0
- package/skills/pptx/SKILL.md +232 -0
- package/skills/pptx/SYNC.md +5 -0
- package/skills/pptx/editing.md +205 -0
- package/skills/pptx/pptxgenjs.md +420 -0
- package/skills/pptx/scripts/__init__.py +0 -0
- package/skills/pptx/scripts/add_slide.py +195 -0
- package/skills/pptx/scripts/clean.py +286 -0
- package/skills/pptx/scripts/office/helpers/__init__.py +0 -0
- package/skills/pptx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/pptx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/pptx/scripts/office/pack.py +159 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/pptx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/pptx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/pptx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/pptx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/pptx/scripts/office/soffice.py +183 -0
- package/skills/pptx/scripts/office/unpack.py +132 -0
- package/skills/pptx/scripts/office/validate.py +111 -0
- package/skills/pptx/scripts/office/validators/__init__.py +15 -0
- package/skills/pptx/scripts/office/validators/base.py +847 -0
- package/skills/pptx/scripts/office/validators/docx.py +446 -0
- package/skills/pptx/scripts/office/validators/pptx.py +275 -0
- package/skills/pptx/scripts/office/validators/redlining.py +247 -0
- package/skills/pptx/scripts/thumbnail.py +289 -0
- package/skills/shadcn/LICENSE.md +21 -0
- package/skills/shadcn/SKILL.md +242 -0
- package/skills/shadcn/SYNC.md +5 -0
- package/skills/shadcn/agents/openai.yml +5 -0
- package/skills/shadcn/assets/shadcn-small.png +0 -0
- package/skills/shadcn/assets/shadcn.png +0 -0
- package/skills/shadcn/cli.md +257 -0
- package/skills/shadcn/customization.md +202 -0
- package/skills/shadcn/evals/evals.json +47 -0
- package/skills/shadcn/mcp.md +94 -0
- package/skills/shadcn/rules/base-vs-radix.md +306 -0
- package/skills/shadcn/rules/composition.md +195 -0
- package/skills/shadcn/rules/forms.md +192 -0
- package/skills/shadcn/rules/icons.md +101 -0
- package/skills/shadcn/rules/styling.md +162 -0
- package/skills/skill-creator/LICENSE.txt +202 -0
- package/skills/skill-creator/SKILL.md +485 -0
- package/skills/skill-creator/SYNC.md +5 -0
- package/skills/skill-creator/agents/analyzer.md +274 -0
- package/skills/skill-creator/agents/comparator.md +202 -0
- package/skills/skill-creator/agents/grader.md +223 -0
- package/skills/skill-creator/assets/eval_review.html +146 -0
- package/skills/skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/skill-creator/references/schemas.md +430 -0
- package/skills/skill-creator/scripts/__init__.py +0 -0
- package/skills/skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/skill-creator/scripts/generate_report.py +326 -0
- package/skills/skill-creator/scripts/improve_description.py +247 -0
- package/skills/skill-creator/scripts/package_skill.py +136 -0
- package/skills/skill-creator/scripts/quick_validate.py +103 -0
- package/skills/skill-creator/scripts/run_eval.py +310 -0
- package/skills/skill-creator/scripts/run_loop.py +328 -0
- package/skills/skill-creator/scripts/utils.py +47 -0
- package/skills/slack-gif-creator/LICENSE.txt +202 -0
- package/skills/slack-gif-creator/SKILL.md +254 -0
- package/skills/slack-gif-creator/SYNC.md +5 -0
- package/skills/slack-gif-creator/core/easing.py +234 -0
- package/skills/slack-gif-creator/core/frame_composer.py +176 -0
- package/skills/slack-gif-creator/core/gif_builder.py +269 -0
- package/skills/slack-gif-creator/core/validators.py +136 -0
- package/skills/slack-gif-creator/requirements.txt +4 -0
- package/skills/theme-factory/LICENSE.txt +202 -0
- package/skills/theme-factory/SKILL.md +59 -0
- package/skills/theme-factory/SYNC.md +5 -0
- package/skills/theme-factory/theme-showcase.pdf +0 -0
- package/skills/theme-factory/themes/arctic-frost.md +19 -0
- package/skills/theme-factory/themes/botanical-garden.md +19 -0
- package/skills/theme-factory/themes/desert-rose.md +19 -0
- package/skills/theme-factory/themes/forest-canopy.md +19 -0
- package/skills/theme-factory/themes/golden-hour.md +19 -0
- package/skills/theme-factory/themes/midnight-galaxy.md +19 -0
- package/skills/theme-factory/themes/modern-minimalist.md +19 -0
- package/skills/theme-factory/themes/ocean-depths.md +19 -0
- package/skills/theme-factory/themes/sunset-boulevard.md +19 -0
- package/skills/theme-factory/themes/tech-innovation.md +19 -0
- package/skills/vue-best-practices/SYNC.md +1 -1
- package/skills/vue-jsx-best-practices/SYNC.md +1 -1
- package/skills/vue-options-api-best-practices/SYNC.md +1 -1
- package/skills/vue-pinia-best-practices/SYNC.md +1 -1
- package/skills/vue-router-best-practices/SYNC.md +1 -1
- package/skills/vue-testing-best-practices/SYNC.md +1 -1
- package/skills/web-artifacts-builder/LICENSE.txt +202 -0
- package/skills/web-artifacts-builder/SKILL.md +74 -0
- package/skills/web-artifacts-builder/SYNC.md +5 -0
- package/skills/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/skills/web-artifacts-builder/scripts/init-artifact.sh +322 -0
- package/skills/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/skills/webapp-testing/LICENSE.txt +202 -0
- package/skills/webapp-testing/SKILL.md +96 -0
- package/skills/webapp-testing/SYNC.md +5 -0
- package/skills/webapp-testing/examples/console_logging.py +35 -0
- package/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/skills/webapp-testing/scripts/with_server.py +106 -0
- package/skills/xlsx/LICENSE.txt +30 -0
- package/skills/xlsx/SKILL.md +292 -0
- package/skills/xlsx/SYNC.md +5 -0
- package/skills/xlsx/scripts/office/helpers/__init__.py +0 -0
- package/skills/xlsx/scripts/office/helpers/merge_runs.py +199 -0
- package/skills/xlsx/scripts/office/helpers/simplify_redlines.py +197 -0
- package/skills/xlsx/scripts/office/pack.py +159 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/skills/xlsx/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/skills/xlsx/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/skills/xlsx/scripts/office/schemas/mce/mc.xsd +75 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2010.xsd +560 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2012.xsd +67 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-2018.xsd +14 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/skills/xlsx/scripts/office/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/skills/xlsx/scripts/office/soffice.py +183 -0
- package/skills/xlsx/scripts/office/unpack.py +132 -0
- package/skills/xlsx/scripts/office/validate.py +111 -0
- package/skills/xlsx/scripts/office/validators/__init__.py +15 -0
- package/skills/xlsx/scripts/office/validators/base.py +847 -0
- package/skills/xlsx/scripts/office/validators/docx.py +446 -0
- package/skills/xlsx/scripts/office/validators/pptx.py +275 -0
- package/skills/xlsx/scripts/office/validators/redlining.py +247 -0
- 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
|
+
```
|