devskill 2.0.5 → 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/landing/app/[locale]/page.tsx +68 -2
- package/landing/messages/en.json +12 -2
- package/landing/messages/vi.json +13 -3
- package/meta.ts +18 -1
- package/package.json +5 -1
- package/scripts/cli.ts +175 -46
- 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,400 @@
|
|
|
1
|
+
# Claude API — C#
|
|
2
|
+
|
|
3
|
+
> **Note:** The C# SDK is the official Anthropic SDK for C#. Tool use is supported via the Messages API. A class-annotation-based tool runner is not available; use raw tool definitions with JSON schema. The SDK also supports Microsoft.Extensions.AI IChatClient integration with function invocation.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
dotnet add package Anthropic
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Client Initialization
|
|
12
|
+
|
|
13
|
+
```csharp
|
|
14
|
+
using Anthropic;
|
|
15
|
+
|
|
16
|
+
// Default (uses ANTHROPIC_API_KEY env var)
|
|
17
|
+
AnthropicClient client = new();
|
|
18
|
+
|
|
19
|
+
// Explicit API key (use environment variables — never hardcode keys)
|
|
20
|
+
AnthropicClient client = new() {
|
|
21
|
+
ApiKey = Environment.GetEnvironmentVariable("ANTHROPIC_API_KEY")
|
|
22
|
+
};
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Basic Message Request
|
|
28
|
+
|
|
29
|
+
```csharp
|
|
30
|
+
using Anthropic.Models.Messages;
|
|
31
|
+
|
|
32
|
+
var parameters = new MessageCreateParams
|
|
33
|
+
{
|
|
34
|
+
Model = Model.ClaudeOpus4_6,
|
|
35
|
+
MaxTokens = 16000,
|
|
36
|
+
Messages = [new() { Role = Role.User, Content = "What is the capital of France?" }]
|
|
37
|
+
};
|
|
38
|
+
var response = await client.Messages.Create(parameters);
|
|
39
|
+
|
|
40
|
+
// ContentBlock is a union wrapper. .Value unwraps to the variant object,
|
|
41
|
+
// then OfType<T> filters to the type you want. Or use the TryPick* idiom
|
|
42
|
+
// shown in the Thinking section below.
|
|
43
|
+
foreach (var text in response.Content.Select(b => b.Value).OfType<TextBlock>())
|
|
44
|
+
{
|
|
45
|
+
Console.WriteLine(text.Text);
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Streaming
|
|
52
|
+
|
|
53
|
+
```csharp
|
|
54
|
+
using Anthropic.Models.Messages;
|
|
55
|
+
|
|
56
|
+
var parameters = new MessageCreateParams
|
|
57
|
+
{
|
|
58
|
+
Model = Model.ClaudeOpus4_6,
|
|
59
|
+
MaxTokens = 64000,
|
|
60
|
+
Messages = [new() { Role = Role.User, Content = "Write a haiku" }]
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
await foreach (RawMessageStreamEvent streamEvent in client.Messages.CreateStreaming(parameters))
|
|
64
|
+
{
|
|
65
|
+
if (streamEvent.TryPickContentBlockDelta(out var delta) &&
|
|
66
|
+
delta.Delta.TryPickText(out var text))
|
|
67
|
+
{
|
|
68
|
+
Console.Write(text.Text);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**`RawMessageStreamEvent` TryPick methods** (naming drops the `Message`/`Raw` prefix): `TryPickStart`, `TryPickDelta`, `TryPickStop`, `TryPickContentBlockStart`, `TryPickContentBlockDelta`, `TryPickContentBlockStop`. There is no `TryPickMessageStop` — use `TryPickStop`.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Thinking
|
|
78
|
+
|
|
79
|
+
**Adaptive thinking is the recommended mode for Claude 4.6+ models.** Claude decides dynamically when and how much to think.
|
|
80
|
+
|
|
81
|
+
```csharp
|
|
82
|
+
using Anthropic.Models.Messages;
|
|
83
|
+
|
|
84
|
+
var response = await client.Messages.Create(new MessageCreateParams
|
|
85
|
+
{
|
|
86
|
+
Model = Model.ClaudeOpus4_6,
|
|
87
|
+
MaxTokens = 16000,
|
|
88
|
+
// ThinkingConfigParam? implicitly converts from the concrete variant classes —
|
|
89
|
+
// no wrapper needed.
|
|
90
|
+
Thinking = new ThinkingConfigAdaptive(),
|
|
91
|
+
Messages =
|
|
92
|
+
[
|
|
93
|
+
new() { Role = Role.User, Content = "Solve: 27 * 453" },
|
|
94
|
+
],
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
// ThinkingBlock(s) precede TextBlock in Content. TryPick* narrows the union.
|
|
98
|
+
foreach (var block in response.Content)
|
|
99
|
+
{
|
|
100
|
+
if (block.TryPickThinking(out ThinkingBlock? t))
|
|
101
|
+
{
|
|
102
|
+
Console.WriteLine($"[thinking] {t.Thinking}");
|
|
103
|
+
}
|
|
104
|
+
else if (block.TryPickText(out TextBlock? text))
|
|
105
|
+
{
|
|
106
|
+
Console.WriteLine(text.Text);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> **Deprecated:** `new ThinkingConfigEnabled { BudgetTokens = N }` (fixed-budget extended thinking) still works on Claude 4.6 but is deprecated. Use adaptive thinking above.
|
|
112
|
+
|
|
113
|
+
Alternative to `TryPick*`: `.Select(b => b.Value).OfType<ThinkingBlock>()` (same LINQ pattern as the Basic Message example).
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Tool Use
|
|
118
|
+
|
|
119
|
+
### Defining a tool
|
|
120
|
+
|
|
121
|
+
`Tool` (NOT `ToolParam`) with an `InputSchema` record. `InputSchema.Type` is auto-set to `"object"` by the constructor — don't set it. `ToolUnion` has an implicit conversion from `Tool`, triggered by the collection expression `[...]`.
|
|
122
|
+
|
|
123
|
+
```csharp
|
|
124
|
+
using System.Text.Json;
|
|
125
|
+
using Anthropic.Models.Messages;
|
|
126
|
+
|
|
127
|
+
var parameters = new MessageCreateParams
|
|
128
|
+
{
|
|
129
|
+
Model = Model.ClaudeSonnet4_6,
|
|
130
|
+
MaxTokens = 16000,
|
|
131
|
+
Tools = [
|
|
132
|
+
new Tool {
|
|
133
|
+
Name = "get_weather",
|
|
134
|
+
Description = "Get the current weather in a given location",
|
|
135
|
+
InputSchema = new() {
|
|
136
|
+
Properties = new Dictionary<string, JsonElement> {
|
|
137
|
+
["location"] = JsonSerializer.SerializeToElement(
|
|
138
|
+
new { type = "string", description = "City name" }),
|
|
139
|
+
},
|
|
140
|
+
Required = ["location"],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
Messages = [new() { Role = Role.User, Content = "Weather in Paris?" }],
|
|
145
|
+
};
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Derived from `anthropic-sdk-csharp/src/Anthropic/Models/Messages/Tool.cs` and `ToolUnion.cs:799` (implicit conversion).
|
|
149
|
+
|
|
150
|
+
See [shared tool use concepts](../shared/tool-use-concepts.md) for the loop pattern.
|
|
151
|
+
### Converting response content to the follow-up assistant message
|
|
152
|
+
|
|
153
|
+
When echoing Claude's response back in the assistant turn, **there is no `.ToParam()` helper** — manually reconstruct each `ContentBlock` variant as its `*Param` counterpart. Do NOT use `new ContentBlockParam(block.Json)`: it compiles and serializes, but `.Value` stays `null` so `TryPick*`/`Validate()` fail (degraded JSON pass-through, not the typed path).
|
|
154
|
+
|
|
155
|
+
```csharp
|
|
156
|
+
using Anthropic.Models.Messages;
|
|
157
|
+
|
|
158
|
+
Message response = await client.Messages.Create(parameters);
|
|
159
|
+
|
|
160
|
+
// No .ToParam() — reconstruct per variant. Implicit conversions from each
|
|
161
|
+
// *Param type to ContentBlockParam mean no explicit wrapper.
|
|
162
|
+
List<ContentBlockParam> assistantContent = [];
|
|
163
|
+
List<ContentBlockParam> toolResults = [];
|
|
164
|
+
foreach (ContentBlock block in response.Content)
|
|
165
|
+
{
|
|
166
|
+
if (block.TryPickText(out TextBlock? text))
|
|
167
|
+
{
|
|
168
|
+
assistantContent.Add(new TextBlockParam { Text = text.Text });
|
|
169
|
+
}
|
|
170
|
+
else if (block.TryPickThinking(out ThinkingBlock? thinking))
|
|
171
|
+
{
|
|
172
|
+
// Signature MUST be preserved — the API rejects tampering
|
|
173
|
+
assistantContent.Add(new ThinkingBlockParam
|
|
174
|
+
{
|
|
175
|
+
Thinking = thinking.Thinking,
|
|
176
|
+
Signature = thinking.Signature,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
else if (block.TryPickRedactedThinking(out RedactedThinkingBlock? redacted))
|
|
180
|
+
{
|
|
181
|
+
assistantContent.Add(new RedactedThinkingBlockParam { Data = redacted.Data });
|
|
182
|
+
}
|
|
183
|
+
else if (block.TryPickToolUse(out ToolUseBlock? toolUse))
|
|
184
|
+
{
|
|
185
|
+
// ToolUseBlock has required Caller; ToolUseBlockParam.Caller is optional — don't copy it
|
|
186
|
+
assistantContent.Add(new ToolUseBlockParam
|
|
187
|
+
{
|
|
188
|
+
ID = toolUse.ID,
|
|
189
|
+
Name = toolUse.Name,
|
|
190
|
+
Input = toolUse.Input,
|
|
191
|
+
});
|
|
192
|
+
// Execute the tool; collect ONE result per tool_use block — the API
|
|
193
|
+
// rejects the follow-up if any tool_use ID lacks a matching tool_result.
|
|
194
|
+
string result = ExecuteYourTool(toolUse.Name, toolUse.Input);
|
|
195
|
+
toolResults.Add(new ToolResultBlockParam
|
|
196
|
+
{
|
|
197
|
+
ToolUseID = toolUse.ID,
|
|
198
|
+
Content = result,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Follow-up: prior messages + assistant echo + user tool_result(s)
|
|
204
|
+
List<MessageParam> followUpMessages =
|
|
205
|
+
[
|
|
206
|
+
.. parameters.Messages,
|
|
207
|
+
new() { Role = Role.Assistant, Content = assistantContent },
|
|
208
|
+
new() { Role = Role.User, Content = toolResults },
|
|
209
|
+
];
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
`ToolResultBlockParam` has no tuple constructor — use the object initializer. `Content` is a string-or-list union; a plain `string` implicitly converts.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Context Editing / Compaction (Beta)
|
|
217
|
+
|
|
218
|
+
**Beta-namespace prefix is inconsistent** (source-verified against `src/Anthropic/Models/Beta/Messages/*.cs` @ 12.8.0). No prefix: `MessageCreateParams`, `MessageCountTokensParams`, `Role`. **Everything else has the `Beta` prefix**: `BetaMessageParam`, `BetaMessage`, `BetaContentBlock`, `BetaToolUseBlock`, all block param types. The unprefixed `Role` WILL collide with `Anthropic.Models.Messages.Role` if you import both namespaces (CS0104). Safest: import only Beta; if mixing, alias the beta `Role`:
|
|
219
|
+
|
|
220
|
+
```csharp
|
|
221
|
+
using Anthropic.Models.Beta.Messages;
|
|
222
|
+
using NonBeta = Anthropic.Models.Messages; // only if you also need non-beta types
|
|
223
|
+
// Now: MessageCreateParams, BetaMessageParam, Role (beta's), NonBeta.Role (if needed)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
`BetaMessage.Content` is `IReadOnlyList<BetaContentBlock>` — a 15-variant discriminated union. Narrow with `TryPick*`. **Response `BetaContentBlock` is NOT assignable to param `BetaContentBlockParam`** — there's no `.ToParam()` in C#. Round-trip by converting each block:
|
|
228
|
+
|
|
229
|
+
```csharp
|
|
230
|
+
using Anthropic.Models.Beta.Messages;
|
|
231
|
+
|
|
232
|
+
var betaParams = new MessageCreateParams // no Beta prefix — one of only 2 unprefixed
|
|
233
|
+
{
|
|
234
|
+
Model = Model.ClaudeOpus4_6,
|
|
235
|
+
MaxTokens = 16000,
|
|
236
|
+
Betas = ["compact-2026-01-12"],
|
|
237
|
+
ContextManagement = new BetaContextManagementConfig
|
|
238
|
+
{
|
|
239
|
+
Edits = [new BetaCompact20260112Edit()],
|
|
240
|
+
},
|
|
241
|
+
Messages = messages,
|
|
242
|
+
};
|
|
243
|
+
BetaMessage resp = await client.Beta.Messages.Create(betaParams);
|
|
244
|
+
|
|
245
|
+
foreach (BetaContentBlock block in resp.Content)
|
|
246
|
+
{
|
|
247
|
+
if (block.TryPickCompaction(out BetaCompactionBlock? compaction))
|
|
248
|
+
{
|
|
249
|
+
// Content is nullable — compaction can fail server-side
|
|
250
|
+
Console.WriteLine($"compaction summary: {compaction.Content}");
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Context-edit metadata lives on a separate nullable field
|
|
255
|
+
if (resp.ContextManagement is { } ctx)
|
|
256
|
+
{
|
|
257
|
+
foreach (var edit in ctx.AppliedEdits)
|
|
258
|
+
Console.WriteLine($"cleared {edit.ClearedInputTokens} tokens");
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// ROUND-TRIP: BetaMessageParam.Content is BetaMessageParamContent (a string|list
|
|
262
|
+
// union). It implicit-converts from List<BetaContentBlockParam>, NOT from the
|
|
263
|
+
// response's IReadOnlyList<BetaContentBlock>. Convert each block:
|
|
264
|
+
List<BetaContentBlockParam> paramBlocks = [];
|
|
265
|
+
foreach (var b in resp.Content)
|
|
266
|
+
{
|
|
267
|
+
if (b.TryPickText(out var t)) paramBlocks.Add(new BetaTextBlockParam { Text = t.Text });
|
|
268
|
+
else if (b.TryPickCompaction(out var c)) paramBlocks.Add(new BetaCompactionBlockParam { Content = c.Content });
|
|
269
|
+
// ... other variants as needed
|
|
270
|
+
}
|
|
271
|
+
messages.Add(new BetaMessageParam { Role = Role.Assistant, Content = paramBlocks });
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
All 15 `BetaContentBlock.TryPick*` variants: `Text`, `Thinking`, `RedactedThinking`, `ToolUse`, `ServerToolUse`, `WebSearchToolResult`, `WebFetchToolResult`, `CodeExecutionToolResult`, `BashCodeExecutionToolResult`, `TextEditorCodeExecutionToolResult`, `ToolSearchToolResult`, `McpToolUse`, `McpToolResult`, `ContainerUpload`, `Compaction`.
|
|
275
|
+
|
|
276
|
+
**`BetaToolUseBlock.Input` is `IReadOnlyDictionary<string, JsonElement>`** — index by key then call the `JsonElement` extractor:
|
|
277
|
+
|
|
278
|
+
```csharp
|
|
279
|
+
if (block.TryPickToolUse(out BetaToolUseBlock? tu))
|
|
280
|
+
{
|
|
281
|
+
int a = tu.Input["a"].GetInt32();
|
|
282
|
+
string s = tu.Input["name"].GetString()!;
|
|
283
|
+
}
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## Effort Parameter
|
|
289
|
+
|
|
290
|
+
Effort is nested under `OutputConfig`, NOT a top-level property. `ApiEnum<string, Effort>` has an implicit conversion from the enum, so assign `Effort.High` directly.
|
|
291
|
+
|
|
292
|
+
```csharp
|
|
293
|
+
OutputConfig = new OutputConfig { Effort = Effort.High },
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
Values: `Effort.Low`, `Effort.Medium`, `Effort.High`, `Effort.Max`. Combine with `Thinking = new ThinkingConfigAdaptive()` for cost-quality control.
|
|
297
|
+
|
|
298
|
+
---
|
|
299
|
+
|
|
300
|
+
## Prompt Caching
|
|
301
|
+
|
|
302
|
+
`System` takes `MessageCreateParamsSystem?` — a union of `string` or `List<TextBlockParam>`. There is no `SystemTextBlockParam`; use plain `TextBlockParam`. The implicit conversion needs the concrete `List<TextBlockParam>` type (array literals won't convert).
|
|
303
|
+
|
|
304
|
+
```csharp
|
|
305
|
+
System = new List<TextBlockParam> {
|
|
306
|
+
new() {
|
|
307
|
+
Text = longSystemPrompt,
|
|
308
|
+
CacheControl = new CacheControlEphemeral(), // auto-sets Type = "ephemeral"
|
|
309
|
+
},
|
|
310
|
+
},
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Optional `Ttl` on `CacheControlEphemeral`: `new() { Ttl = Ttl.Ttl1h }` or `Ttl.Ttl5m`. `CacheControl` also exists on `Tool.CacheControl` and top-level `MessageCreateParams.CacheControl`.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Token Counting
|
|
318
|
+
|
|
319
|
+
```csharp
|
|
320
|
+
MessageTokensCount result = await client.Messages.CountTokens(new MessageCountTokensParams {
|
|
321
|
+
Model = Model.ClaudeOpus4_6,
|
|
322
|
+
Messages = [new() { Role = Role.User, Content = "Hello" }],
|
|
323
|
+
});
|
|
324
|
+
long tokens = result.InputTokens;
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
`MessageCountTokensParams.Tools` uses a different union type (`MessageCountTokensTool`) than `MessageCreateParams.Tools` (`ToolUnion`) — if you're passing tools, the compiler will tell you when it matters.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
## Structured Output
|
|
332
|
+
|
|
333
|
+
```csharp
|
|
334
|
+
OutputConfig = new OutputConfig {
|
|
335
|
+
Format = new JsonOutputFormat {
|
|
336
|
+
Schema = new Dictionary<string, JsonElement> {
|
|
337
|
+
["type"] = JsonSerializer.SerializeToElement("object"),
|
|
338
|
+
["properties"] = JsonSerializer.SerializeToElement(
|
|
339
|
+
new { name = new { type = "string" } }),
|
|
340
|
+
["required"] = JsonSerializer.SerializeToElement(new[] { "name" }),
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
`JsonOutputFormat.Type` is auto-set to `"json_schema"` by the constructor. `Schema` is `required`.
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## PDF / Document Input
|
|
351
|
+
|
|
352
|
+
`DocumentBlockParam` takes a `DocumentBlockParamSource` union: `Base64PdfSource` / `UrlPdfSource` / `PlainTextSource` / `ContentBlockSource`. `Base64PdfSource` auto-sets `MediaType = "application/pdf"` and `Type = "base64"`.
|
|
353
|
+
|
|
354
|
+
```csharp
|
|
355
|
+
new MessageParam {
|
|
356
|
+
Role = Role.User,
|
|
357
|
+
Content = new List<ContentBlockParam> {
|
|
358
|
+
new DocumentBlockParam { Source = new Base64PdfSource { Data = base64String } },
|
|
359
|
+
new TextBlockParam { Text = "Summarize this PDF" },
|
|
360
|
+
},
|
|
361
|
+
}
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## Server-Side Tools
|
|
367
|
+
|
|
368
|
+
Web search, bash, text editor, and code execution are built-in server tools. Type names are version-suffixed; constructors auto-set `name`/`type`. All implicit-convert to `ToolUnion`.
|
|
369
|
+
|
|
370
|
+
```csharp
|
|
371
|
+
Tools = [
|
|
372
|
+
new WebSearchTool20260209(),
|
|
373
|
+
new ToolBash20250124(),
|
|
374
|
+
new ToolTextEditor20250728(),
|
|
375
|
+
new CodeExecutionTool20260120(),
|
|
376
|
+
],
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Also available: `WebFetchTool20260209`, `MemoryTool20250818`. `WebSearchTool20260209` optionals: `AllowedDomains`, `BlockedDomains`, `MaxUses`, `UserLocation`.
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
## Files API (Beta)
|
|
384
|
+
|
|
385
|
+
Files live under `client.Beta.Files` (namespace `Anthropic.Models.Beta.Files`). `BinaryContent` implicit-converts from `Stream` and `byte[]`.
|
|
386
|
+
|
|
387
|
+
```csharp
|
|
388
|
+
using Anthropic.Models.Beta.Files;
|
|
389
|
+
using Anthropic.Models.Beta.Messages;
|
|
390
|
+
|
|
391
|
+
FileMetadata meta = await client.Beta.Files.Upload(
|
|
392
|
+
new FileUploadParams { File = File.OpenRead("doc.pdf") });
|
|
393
|
+
|
|
394
|
+
// Referencing the uploaded file requires Beta message types:
|
|
395
|
+
new BetaRequestDocumentBlock {
|
|
396
|
+
Source = new BetaFileDocumentSource { FileID = meta.ID },
|
|
397
|
+
}
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
The non-beta `DocumentBlockParamSource` union has no file-ID variant — file references need `client.Beta.Messages.Create()`.
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
# Claude API — cURL / Raw HTTP
|
|
2
|
+
|
|
3
|
+
Use these examples when the user needs raw HTTP requests or is working in a language without an official SDK.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
export ANTHROPIC_API_KEY="your-api-key"
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Basic Message Request
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
curl https://api.anthropic.com/v1/messages \
|
|
17
|
+
-H "Content-Type: application/json" \
|
|
18
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
19
|
+
-H "anthropic-version: 2023-06-01" \
|
|
20
|
+
-d '{
|
|
21
|
+
"model": "claude-opus-4-6",
|
|
22
|
+
"max_tokens": 16000,
|
|
23
|
+
"messages": [
|
|
24
|
+
{"role": "user", "content": "What is the capital of France?"}
|
|
25
|
+
]
|
|
26
|
+
}'
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Parsing the response
|
|
30
|
+
|
|
31
|
+
Use `jq` to extract fields from the JSON response. Do not use `grep`/`sed` —
|
|
32
|
+
JSON strings can contain any character and regex parsing will break on quotes,
|
|
33
|
+
escapes, or multi-line content.
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Capture the response, then extract fields
|
|
37
|
+
response=$(curl -s https://api.anthropic.com/v1/messages \
|
|
38
|
+
-H "Content-Type: application/json" \
|
|
39
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
40
|
+
-H "anthropic-version: 2023-06-01" \
|
|
41
|
+
-d '{"model":"claude-opus-4-6","max_tokens":16000,"messages":[{"role":"user","content":"Hello"}]}')
|
|
42
|
+
|
|
43
|
+
# Print the first text block (-r strips the JSON quotes)
|
|
44
|
+
echo "$response" | jq -r '.content[0].text'
|
|
45
|
+
|
|
46
|
+
# Read usage fields
|
|
47
|
+
input_tokens=$(echo "$response" | jq -r '.usage.input_tokens')
|
|
48
|
+
output_tokens=$(echo "$response" | jq -r '.usage.output_tokens')
|
|
49
|
+
|
|
50
|
+
# Read stop reason (for tool-use loops)
|
|
51
|
+
stop_reason=$(echo "$response" | jq -r '.stop_reason')
|
|
52
|
+
|
|
53
|
+
# Extract all text blocks (content is an array; filter to type=="text")
|
|
54
|
+
echo "$response" | jq -r '.content[] | select(.type == "text") | .text'
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Streaming (SSE)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
curl https://api.anthropic.com/v1/messages \
|
|
64
|
+
-H "Content-Type: application/json" \
|
|
65
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
66
|
+
-H "anthropic-version: 2023-06-01" \
|
|
67
|
+
-d '{
|
|
68
|
+
"model": "claude-opus-4-6",
|
|
69
|
+
"max_tokens": 64000,
|
|
70
|
+
"stream": true,
|
|
71
|
+
"messages": [{"role": "user", "content": "Write a haiku"}]
|
|
72
|
+
}'
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
The response is a stream of Server-Sent Events:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
event: message_start
|
|
79
|
+
data: {"type":"message_start","message":{"id":"msg_...","type":"message",...}}
|
|
80
|
+
|
|
81
|
+
event: content_block_start
|
|
82
|
+
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
|
|
83
|
+
|
|
84
|
+
event: content_block_delta
|
|
85
|
+
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
|
|
86
|
+
|
|
87
|
+
event: content_block_stop
|
|
88
|
+
data: {"type":"content_block_stop","index":0}
|
|
89
|
+
|
|
90
|
+
event: message_delta
|
|
91
|
+
data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}}
|
|
92
|
+
|
|
93
|
+
event: message_stop
|
|
94
|
+
data: {"type":"message_stop"}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Tool Use
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
curl https://api.anthropic.com/v1/messages \
|
|
103
|
+
-H "Content-Type: application/json" \
|
|
104
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
105
|
+
-H "anthropic-version: 2023-06-01" \
|
|
106
|
+
-d '{
|
|
107
|
+
"model": "claude-opus-4-6",
|
|
108
|
+
"max_tokens": 16000,
|
|
109
|
+
"tools": [{
|
|
110
|
+
"name": "get_weather",
|
|
111
|
+
"description": "Get current weather for a location",
|
|
112
|
+
"input_schema": {
|
|
113
|
+
"type": "object",
|
|
114
|
+
"properties": {
|
|
115
|
+
"location": {"type": "string", "description": "City name"}
|
|
116
|
+
},
|
|
117
|
+
"required": ["location"]
|
|
118
|
+
}
|
|
119
|
+
}],
|
|
120
|
+
"messages": [{"role": "user", "content": "What is the weather in Paris?"}]
|
|
121
|
+
}'
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
When Claude responds with a `tool_use` block, send the result back:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
curl https://api.anthropic.com/v1/messages \
|
|
128
|
+
-H "Content-Type: application/json" \
|
|
129
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
130
|
+
-H "anthropic-version: 2023-06-01" \
|
|
131
|
+
-d '{
|
|
132
|
+
"model": "claude-opus-4-6",
|
|
133
|
+
"max_tokens": 16000,
|
|
134
|
+
"tools": [{
|
|
135
|
+
"name": "get_weather",
|
|
136
|
+
"description": "Get current weather for a location",
|
|
137
|
+
"input_schema": {
|
|
138
|
+
"type": "object",
|
|
139
|
+
"properties": {
|
|
140
|
+
"location": {"type": "string", "description": "City name"}
|
|
141
|
+
},
|
|
142
|
+
"required": ["location"]
|
|
143
|
+
}
|
|
144
|
+
}],
|
|
145
|
+
"messages": [
|
|
146
|
+
{"role": "user", "content": "What is the weather in Paris?"},
|
|
147
|
+
{"role": "assistant", "content": [
|
|
148
|
+
{"type": "text", "text": "Let me check the weather."},
|
|
149
|
+
{"type": "tool_use", "id": "toolu_abc123", "name": "get_weather", "input": {"location": "Paris"}}
|
|
150
|
+
]},
|
|
151
|
+
{"role": "user", "content": [
|
|
152
|
+
{"type": "tool_result", "tool_use_id": "toolu_abc123", "content": "72°F and sunny"}
|
|
153
|
+
]}
|
|
154
|
+
]
|
|
155
|
+
}'
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## Extended Thinking
|
|
161
|
+
|
|
162
|
+
> **Opus 4.6 and Sonnet 4.6:** Use adaptive thinking. `budget_tokens` is deprecated on both Opus 4.6 and Sonnet 4.6.
|
|
163
|
+
> **Older models:** Use `"type": "enabled"` with `"budget_tokens": N` (must be < `max_tokens`, min 1024).
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
# Opus 4.6: adaptive thinking (recommended)
|
|
167
|
+
curl https://api.anthropic.com/v1/messages \
|
|
168
|
+
-H "Content-Type: application/json" \
|
|
169
|
+
-H "x-api-key: $ANTHROPIC_API_KEY" \
|
|
170
|
+
-H "anthropic-version: 2023-06-01" \
|
|
171
|
+
-d '{
|
|
172
|
+
"model": "claude-opus-4-6",
|
|
173
|
+
"max_tokens": 16000,
|
|
174
|
+
"thinking": {
|
|
175
|
+
"type": "adaptive"
|
|
176
|
+
},
|
|
177
|
+
"output_config": {
|
|
178
|
+
"effort": "high"
|
|
179
|
+
},
|
|
180
|
+
"messages": [{"role": "user", "content": "Solve this step by step..."}]
|
|
181
|
+
}'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Required Headers
|
|
187
|
+
|
|
188
|
+
| Header | Value | Description |
|
|
189
|
+
| ------------------- | ------------------ | -------------------------- |
|
|
190
|
+
| `Content-Type` | `application/json` | Required |
|
|
191
|
+
| `x-api-key` | Your API key | Authentication |
|
|
192
|
+
| `anthropic-version` | `2023-06-01` | API version |
|
|
193
|
+
| `anthropic-beta` | Beta feature IDs | Required for beta features |
|