claude-code-templates 1.21.13 → 1.21.14
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/.claude/settings.local.json +8 -2
- package/.claude-plugin/marketplace.json +251 -0
- package/.github/workflows/component-security-validation.yml +129 -0
- package/README.md +13 -6
- package/cli-tool/README.md +56 -0
- package/cli-tool/bin/create-claude-config.js +2 -0
- package/cli-tool/components/.claude-plugin/marketplace.json +92 -0
- package/cli-tool/components/agents/development-tools/flutter-go-reviewer.md +163 -0
- package/cli-tool/components/agents/development-tools/unused-code-cleaner.md +194 -0
- package/cli-tool/components/commands/git-workflow/gemini-review.md +293 -0
- package/cli-tool/components/commands/testing/add-mutation-testing.md +2 -2
- package/cli-tool/components/commands/testing/add-property-based-testing.md +2 -2
- package/cli-tool/components/commands/testing/e2e-setup.md +2 -2
- package/cli-tool/components/commands/testing/generate-test-cases.md +2 -2
- package/cli-tool/components/commands/testing/generate-tests.md +8 -3
- package/cli-tool/components/commands/testing/setup-comprehensive-testing.md +2 -2
- package/cli-tool/components/commands/testing/setup-load-testing.md +2 -2
- package/cli-tool/components/commands/testing/setup-visual-testing.md +2 -2
- package/cli-tool/components/commands/testing/test-automation-orchestrator.md +2 -2
- package/cli-tool/components/commands/testing/test-changelog-automation.md +2 -2
- package/cli-tool/components/commands/testing/test-coverage.md +2 -2
- package/cli-tool/components/commands/testing/test-quality-analyzer.md +2 -2
- package/cli-tool/components/commands/testing/testing_plan_integration.md +2 -2
- package/cli-tool/components/commands/testing/write-tests.md +2 -2
- package/cli-tool/components/commands/utilities/ultra-think.md +10 -5
- package/cli-tool/components/hooks/git/validate-branch-name.json +1 -1
- package/cli-tool/components/mcps/devtools/chrome-devtools.json +9 -0
- package/cli-tool/components/mcps/devtools/grafana.json +15 -0
- package/cli-tool/components/mcps/devtools/pulumi.json +9 -0
- package/cli-tool/components/mcps/devtools/terraform.json +1 -1
- package/cli-tool/components/settings/statusline/context-monitor.py +1 -1
- package/cli-tool/components/skills/ANTHROPIC_ATTRIBUTION.md +81 -0
- package/cli-tool/components/skills/creative-design/algorithmic-art/LICENSE.txt +202 -0
- package/cli-tool/components/skills/creative-design/algorithmic-art/SKILL.md +405 -0
- package/cli-tool/components/skills/creative-design/algorithmic-art/templates/generator_template.js +223 -0
- package/cli-tool/components/skills/creative-design/algorithmic-art/templates/viewer.html +599 -0
- package/cli-tool/components/skills/creative-design/canvas-design/LICENSE.txt +202 -0
- package/cli-tool/components/skills/creative-design/canvas-design/SKILL.md +130 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/LICENSE.txt +202 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/SKILL.md +646 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/core/color_palettes.py +302 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/core/easing.py +230 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/core/frame_composer.py +469 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/core/gif_builder.py +246 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/core/typography.py +357 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/core/validators.py +264 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/core/visual_effects.py +494 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/requirements.txt +4 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/bounce.py +106 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/explode.py +331 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/fade.py +329 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/flip.py +291 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/kaleidoscope.py +211 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/morph.py +329 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/move.py +293 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/pulse.py +268 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/shake.py +127 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/slide.py +291 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/spin.py +269 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/wiggle.py +300 -0
- package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/zoom.py +312 -0
- package/cli-tool/components/skills/creative-design/theme-factory/LICENSE.txt +202 -0
- package/cli-tool/components/skills/creative-design/theme-factory/SKILL.md +59 -0
- package/cli-tool/components/skills/creative-design/theme-factory/theme-showcase.pdf +0 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/arctic-frost.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/botanical-garden.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/desert-rose.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/forest-canopy.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/golden-hour.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/midnight-galaxy.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/modern-minimalist.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/ocean-depths.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/sunset-boulevard.md +19 -0
- package/cli-tool/components/skills/creative-design/theme-factory/themes/tech-innovation.md +19 -0
- package/cli-tool/components/skills/development/artifacts-builder/LICENSE.txt +202 -0
- package/cli-tool/components/skills/development/artifacts-builder/SKILL.md +74 -0
- package/cli-tool/components/skills/development/artifacts-builder/scripts/bundle-artifact.sh +54 -0
- package/cli-tool/components/skills/development/artifacts-builder/scripts/init-artifact.sh +322 -0
- package/cli-tool/components/skills/development/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
- package/cli-tool/components/skills/development/git-commit-helper/SKILL.md +203 -0
- package/cli-tool/components/skills/development/mcp-builder/LICENSE.txt +202 -0
- package/cli-tool/components/skills/development/mcp-builder/SKILL.md +328 -0
- package/cli-tool/components/skills/development/mcp-builder/reference/evaluation.md +602 -0
- package/cli-tool/components/skills/development/mcp-builder/reference/mcp_best_practices.md +915 -0
- package/cli-tool/components/skills/development/mcp-builder/reference/node_mcp_server.md +916 -0
- package/cli-tool/components/skills/development/mcp-builder/reference/python_mcp_server.md +752 -0
- package/cli-tool/components/skills/development/mcp-builder/scripts/connections.py +151 -0
- package/cli-tool/components/skills/development/mcp-builder/scripts/evaluation.py +373 -0
- package/cli-tool/components/skills/development/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/cli-tool/components/skills/development/mcp-builder/scripts/requirements.txt +2 -0
- package/cli-tool/components/skills/development/skill-creator/LICENSE.txt +202 -0
- package/cli-tool/components/skills/development/skill-creator/SKILL.md +209 -0
- package/cli-tool/components/skills/development/skill-creator/scripts/init_skill.py +303 -0
- package/cli-tool/components/skills/development/skill-creator/scripts/package_skill.py +110 -0
- package/cli-tool/components/skills/development/skill-creator/scripts/quick_validate.py +65 -0
- package/cli-tool/components/skills/development/webapp-testing/LICENSE.txt +202 -0
- package/cli-tool/components/skills/development/webapp-testing/SKILL.md +96 -0
- package/cli-tool/components/skills/development/webapp-testing/examples/console_logging.py +35 -0
- package/cli-tool/components/skills/development/webapp-testing/examples/element_discovery.py +40 -0
- package/cli-tool/components/skills/development/webapp-testing/examples/static_html_automation.py +33 -0
- package/cli-tool/components/skills/development/webapp-testing/scripts/with_server.py +106 -0
- package/cli-tool/components/skills/document-processing/docx/LICENSE.txt +30 -0
- package/cli-tool/components/skills/document-processing/docx/SKILL.md +197 -0
- package/cli-tool/components/skills/document-processing/docx/docx-js.md +350 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/mce/mc.xsd +75 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/pack.py +159 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/unpack.py +29 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validate.py +69 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/__init__.py +15 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/base.py +951 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/docx.py +274 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/pptx.py +315 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/redlining.py +279 -0
- package/cli-tool/components/skills/document-processing/docx/ooxml.md +610 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/__init__.py +1 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/document.py +1276 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/templates/comments.xml +3 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsExtended.xml +3 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsExtensible.xml +3 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsIds.xml +3 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/templates/people.xml +3 -0
- package/cli-tool/components/skills/document-processing/docx/scripts/utilities.py +374 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/LICENSE.txt +30 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/SKILL.md +294 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/forms.md +205 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/reference.md +612 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_bounding_boxes.py +70 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_bounding_boxes_test.py +226 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_fillable_fields.py +12 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/convert_pdf_to_images.py +35 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/create_validation_image.py +41 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/extract_form_field_info.py +152 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/fill_fillable_fields.py +114 -0
- package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/fill_pdf_form_with_annotations.py +108 -0
- package/cli-tool/components/skills/document-processing/pdf-processing/FORMS.md +143 -0
- package/cli-tool/components/skills/document-processing/pdf-processing/SKILL.md +149 -0
- package/cli-tool/components/skills/document-processing/pdf-processing-pro/FORMS.md +610 -0
- package/cli-tool/components/skills/document-processing/pdf-processing-pro/OCR.md +137 -0
- package/cli-tool/components/skills/document-processing/pdf-processing-pro/SKILL.md +296 -0
- package/cli-tool/components/skills/document-processing/pdf-processing-pro/TABLES.md +626 -0
- package/cli-tool/components/skills/document-processing/pdf-processing-pro/scripts/analyze_form.py +307 -0
- package/cli-tool/components/skills/document-processing/pptx/LICENSE.txt +30 -0
- package/cli-tool/components/skills/document-processing/pptx/SKILL.md +484 -0
- package/cli-tool/components/skills/document-processing/pptx/html2pptx.md +625 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/mce/mc.xsd +75 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/pack.py +159 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/unpack.py +29 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validate.py +69 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/__init__.py +15 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/base.py +951 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/docx.py +274 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/pptx.py +315 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/redlining.py +279 -0
- package/cli-tool/components/skills/document-processing/pptx/ooxml.md +427 -0
- package/cli-tool/components/skills/document-processing/pptx/scripts/html2pptx.js +979 -0
- package/cli-tool/components/skills/document-processing/pptx/scripts/inventory.py +1020 -0
- package/cli-tool/components/skills/document-processing/pptx/scripts/rearrange.py +231 -0
- package/cli-tool/components/skills/document-processing/pptx/scripts/replace.py +385 -0
- package/cli-tool/components/skills/document-processing/pptx/scripts/thumbnail.py +450 -0
- package/cli-tool/components/skills/document-processing/xlsx/LICENSE.txt +30 -0
- package/cli-tool/components/skills/document-processing/xlsx/SKILL.md +289 -0
- package/cli-tool/components/skills/document-processing/xlsx/recalc.py +178 -0
- package/cli-tool/components/skills/enterprise-communication/brand-guidelines/LICENSE.txt +202 -0
- package/cli-tool/components/skills/enterprise-communication/brand-guidelines/SKILL.md +73 -0
- package/cli-tool/components/skills/enterprise-communication/email-composer/SKILL.md +317 -0
- package/cli-tool/components/skills/enterprise-communication/excel-analysis/SKILL.md +247 -0
- package/cli-tool/components/skills/enterprise-communication/internal-comms/LICENSE.txt +202 -0
- package/cli-tool/components/skills/enterprise-communication/internal-comms/SKILL.md +32 -0
- package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/3p-updates.md +47 -0
- package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/company-newsletter.md +65 -0
- package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/faq-answers.md +30 -0
- package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/general-comms.md +16 -0
- package/cli-tool/package-lock.json +39 -16
- package/cli-tool/package.json +7 -2
- package/cli-tool/security-report.json +62361 -0
- package/cli-tool/src/analytics-web/chats_mobile.html +17 -16
- package/cli-tool/src/console-bridge.js +3 -3
- package/cli-tool/src/index.js +157 -10
- package/cli-tool/src/plugin-dashboard-web/app.js +806 -0
- package/cli-tool/src/plugin-dashboard-web/index.html +292 -0
- package/cli-tool/src/plugin-dashboard-web/styles.css +1781 -0
- package/cli-tool/src/plugin-dashboard.js +689 -0
- package/cli-tool/src/security-audit.js +164 -0
- package/cli-tool/src/validation/ARCHITECTURE.md +309 -0
- package/cli-tool/src/validation/BaseValidator.js +152 -0
- package/cli-tool/src/validation/README.md +543 -0
- package/cli-tool/src/validation/ValidationOrchestrator.js +305 -0
- package/cli-tool/src/validation/validators/IntegrityValidator.js +338 -0
- package/cli-tool/src/validation/validators/ProvenanceValidator.js +399 -0
- package/cli-tool/src/validation/validators/ReferenceValidator.js +373 -0
- package/cli-tool/src/validation/validators/SemanticValidator.js +449 -0
- package/cli-tool/src/validation/validators/StructuralValidator.js +376 -0
- package/docs/CLAUDE.md +363 -0
- package/docs/api/README.md +297 -0
- package/docs/api/package.json +7 -0
- package/docs/api/track-download-supabase.js +150 -0
- package/docs/blog/README.md +199 -0
- package/docs/blog/blog-articles.json +133 -0
- package/docs/blog/css/blog-controls.css +254 -0
- package/docs/blog/e2b-claude-code-sandbox/index.html +8 -0
- package/docs/blog/index.html +81 -124
- package/docs/blog/js/blog-loader.js +602 -0
- package/docs/blog/nextjs-vercel-claude-code-integration/index.html +8 -0
- package/docs/blog/supabase-claude-code-integration/index.html +8 -0
- package/docs/component.html +226 -48
- package/docs/components.json +61610 -604
- package/docs/css/blog.css +292 -0
- package/docs/css/component-page.css +840 -3
- package/docs/css/plugin-page.css +648 -0
- package/docs/css/styles.css +504 -1
- package/docs/css/trending.css +110 -6
- package/docs/download-stats.html +8 -0
- package/docs/index.html +48 -22
- package/docs/jobs.html +8 -0
- package/docs/js/cart-manager.js +21 -8
- package/docs/js/component-page.js +1013 -12
- package/docs/js/data-loader.js +11 -8
- package/docs/js/index-events.js +305 -53
- package/docs/js/plugin-page.js +390 -0
- package/docs/js/script.js +50 -3
- package/docs/js/search-functionality.js +19 -16
- package/docs/js/trending.js +55 -20
- package/docs/plugin.html +262 -0
- package/docs/sandbox-interface.html +8 -0
- package/docs/static/favicon/about.txt +6 -0
- package/docs/static/favicon/android-chrome-192x192.png +0 -0
- package/docs/static/favicon/android-chrome-512x512.png +0 -0
- package/docs/static/favicon/apple-touch-icon.png +0 -0
- package/docs/static/favicon/favicon-16x16.png +0 -0
- package/docs/static/favicon/favicon-32x32.png +0 -0
- package/docs/static/favicon/favicon.ico +0 -0
- package/docs/static/favicon/site.webmanifest +1 -0
- package/docs/trending-data.json +616 -579
- package/docs/trending.html +24 -3
- package/docs/vercel.json +12 -0
- package/docs/workflows.html +8 -0
- package/generate_components_json.py +386 -11
- package/package.json +1 -1
- package/sync-api.sh +50 -0
- package/vercel.json +10 -75
- package/ROADMAP.md +0 -278
- package/test_serpapi.py +0 -36
- /package/cli-tool/components/commands/svelte/{svelte:a11y.md → svelte-a11y.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:component.md → svelte-component.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:debug.md → svelte-debug.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:migrate.md → svelte-migrate.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:optimize.md → svelte-optimize.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:scaffold.md → svelte-scaffold.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:storybook-migrate.md → svelte-storybook-migrate.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:storybook-mock.md → svelte-storybook-mock.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:storybook-setup.md → svelte-storybook-setup.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:storybook-story.md → svelte-storybook-story.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:storybook-troubleshoot.md → svelte-storybook-troubleshoot.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:storybook.md → svelte-storybook.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:test-coverage.md → svelte-test-coverage.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:test-fix.md → svelte-test-fix.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:test-setup.md → svelte-test-setup.md} +0 -0
- /package/cli-tool/components/commands/svelte/{svelte:test.md → svelte-test.md} +0 -0
package/docs/trending.html
CHANGED
|
@@ -4,9 +4,17 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Trending - Claude Code Templates</title>
|
|
7
|
+
|
|
8
|
+
<!-- Favicon -->
|
|
9
|
+
<link rel="icon" type="image/x-icon" href="static/favicon/favicon.ico">
|
|
10
|
+
<link rel="icon" type="image/png" sizes="16x16" href="static/favicon/favicon-16x16.png">
|
|
11
|
+
<link rel="icon" type="image/png" sizes="32x32" href="static/favicon/favicon-32x32.png">
|
|
12
|
+
<link rel="apple-touch-icon" sizes="180x180" href="static/favicon/apple-touch-icon.png">
|
|
13
|
+
<link rel="icon" type="image/png" sizes="192x192" href="static/favicon/android-chrome-192x192.png">
|
|
14
|
+
<link rel="icon" type="image/png" sizes="512x512" href="static/favicon/android-chrome-512x512.png">
|
|
15
|
+
|
|
7
16
|
<link rel="stylesheet" href="css/styles.css">
|
|
8
17
|
<link rel="stylesheet" href="css/trending.css">
|
|
9
|
-
<link rel="icon" type="image/svg+xml" href="static/img/logo.svg">
|
|
10
18
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
11
19
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
12
20
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
|
@@ -76,7 +84,7 @@
|
|
|
76
84
|
<!-- Terminal command header at the top -->
|
|
77
85
|
<div class="terminal-command-header">
|
|
78
86
|
<div class="header-content">
|
|
79
|
-
<h2 class="search-title"><span class="terminal-dot"></span><strong>Trending </strong><span class="title-params">(
|
|
87
|
+
<h2 class="search-title"><span class="terminal-dot"></span><strong>Trending </strong><span class="title-params">(agents/commands/settings/hooks/mcps)</span></h2>
|
|
80
88
|
<p class="search-subtitle">⎿ Discover what the Claude Code community is using most</p>
|
|
81
89
|
</div>
|
|
82
90
|
</div>
|
|
@@ -120,7 +128,6 @@
|
|
|
120
128
|
<button class="component-tab" data-type="settings">Settings</button>
|
|
121
129
|
<button class="component-tab" data-type="hooks">Hooks</button>
|
|
122
130
|
<button class="component-tab" data-type="mcps">MCPs</button>
|
|
123
|
-
<button class="component-tab" data-type="templates">Templates</button>
|
|
124
131
|
</div>
|
|
125
132
|
</div>
|
|
126
133
|
|
|
@@ -159,6 +166,20 @@
|
|
|
159
166
|
<!-- Popular categories will be populated by JavaScript -->
|
|
160
167
|
</div>
|
|
161
168
|
</div>
|
|
169
|
+
|
|
170
|
+
<!-- Top Countries Section -->
|
|
171
|
+
<div class="sidebar-section">
|
|
172
|
+
<div class="sidebar-header">
|
|
173
|
+
<h3 class="sidebar-title">
|
|
174
|
+
<span class="terminal-dot"></span>
|
|
175
|
+
<strong>Top Countries</strong>
|
|
176
|
+
</h3>
|
|
177
|
+
<p class="sidebar-subtitle">Top 5 countries by downloads</p>
|
|
178
|
+
</div>
|
|
179
|
+
<div class="top-countries-list" id="top-countries-list">
|
|
180
|
+
<!-- Top countries will be populated by JavaScript -->
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
162
183
|
</aside>
|
|
163
184
|
</div>
|
|
164
185
|
</div>
|
package/docs/vercel.json
CHANGED
|
@@ -28,6 +28,18 @@
|
|
|
28
28
|
"source": "/templates",
|
|
29
29
|
"destination": "/index.html"
|
|
30
30
|
},
|
|
31
|
+
{
|
|
32
|
+
"source": "/plugins",
|
|
33
|
+
"destination": "/index.html"
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"source": "/skills",
|
|
37
|
+
"destination": "/index.html"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"source": "/plugin/:name",
|
|
41
|
+
"destination": "/plugin.html"
|
|
42
|
+
},
|
|
31
43
|
{
|
|
32
44
|
"source": "/component/:type/:name*",
|
|
33
45
|
"destination": "/component.html"
|
package/docs/workflows.html
CHANGED
|
@@ -4,6 +4,14 @@
|
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>Workflow Builder - Claude Code Templates</title>
|
|
7
|
+
<!-- Favicon -->
|
|
8
|
+
<link rel="icon" type="image/x-icon" href="static/favicon/favicon.ico">
|
|
9
|
+
<link rel="icon" type="image/png" sizes="16x16" href="static/favicon/favicon-16x16.png">
|
|
10
|
+
<link rel="icon" type="image/png" sizes="32x32" href="static/favicon/favicon-32x32.png">
|
|
11
|
+
<link rel="apple-touch-icon" sizes="180x180" href="static/favicon/apple-touch-icon.png">
|
|
12
|
+
<link rel="icon" type="image/png" sizes="192x192" href="static/favicon/android-chrome-192x192.png">
|
|
13
|
+
<link rel="icon" type="image/png" sizes="512x512" href="static/favicon/android-chrome-512x512.png">
|
|
14
|
+
|
|
7
15
|
<link rel="stylesheet" href="css/styles.css">
|
|
8
16
|
<link rel="stylesheet" href="css/workflows.css">
|
|
9
17
|
<link rel="stylesheet" href="css/workflows-modal.css">
|
|
@@ -1,12 +1,193 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import json
|
|
3
3
|
import requests
|
|
4
|
+
import subprocess
|
|
4
5
|
from collections import defaultdict
|
|
5
6
|
from dotenv import load_dotenv
|
|
7
|
+
from pathlib import Path
|
|
6
8
|
|
|
7
9
|
# Load environment variables
|
|
8
10
|
load_dotenv()
|
|
9
11
|
|
|
12
|
+
def run_security_validation():
|
|
13
|
+
"""
|
|
14
|
+
Run security validation on all components and return the results.
|
|
15
|
+
Returns a dictionary with component paths as keys and security data as values.
|
|
16
|
+
"""
|
|
17
|
+
print("🔒 Running security validation on components...")
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
# Change to cli-tool directory to run npm command
|
|
21
|
+
cli_tool_dir = Path(__file__).parent / 'cli-tool'
|
|
22
|
+
|
|
23
|
+
# Run security audit and generate JSON report
|
|
24
|
+
result = subprocess.run(
|
|
25
|
+
['npm', 'run', 'security-audit:json'],
|
|
26
|
+
cwd=cli_tool_dir,
|
|
27
|
+
capture_output=True,
|
|
28
|
+
text=True,
|
|
29
|
+
timeout=300 # 5 minute timeout
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
if result.returncode != 0:
|
|
33
|
+
print(f"⚠️ Security validation completed with warnings")
|
|
34
|
+
print(f" stdout: {result.stdout[:200]}")
|
|
35
|
+
print(f" stderr: {result.stderr[:200]}")
|
|
36
|
+
else:
|
|
37
|
+
print("✅ Security validation completed successfully")
|
|
38
|
+
|
|
39
|
+
# Read the generated security report
|
|
40
|
+
security_report_path = cli_tool_dir / 'security-report.json'
|
|
41
|
+
|
|
42
|
+
if not security_report_path.exists():
|
|
43
|
+
print("⚠️ Security report not found, skipping security metadata")
|
|
44
|
+
return {}
|
|
45
|
+
|
|
46
|
+
with open(security_report_path, 'r', encoding='utf-8') as f:
|
|
47
|
+
security_data = json.load(f)
|
|
48
|
+
|
|
49
|
+
# Transform security data into a lookup dictionary
|
|
50
|
+
# Key format: "agents/category/name" -> security metadata
|
|
51
|
+
security_lookup = {}
|
|
52
|
+
|
|
53
|
+
for component_result in security_data.get('components', []):
|
|
54
|
+
component_info = component_result.get('component', {})
|
|
55
|
+
component_path = component_info.get('path', '')
|
|
56
|
+
component_type = component_info.get('type', '')
|
|
57
|
+
|
|
58
|
+
if component_path:
|
|
59
|
+
# Extract category and name from path
|
|
60
|
+
# Path format: components/agents/development-team/frontend-developer.md
|
|
61
|
+
path_parts = component_path.replace('\\', '/').split('/')
|
|
62
|
+
|
|
63
|
+
# Handle both formats: "components/agents/..." and "cli-tool/components/agents/..."
|
|
64
|
+
if 'components' in path_parts:
|
|
65
|
+
components_idx = path_parts.index('components')
|
|
66
|
+
if len(path_parts) > components_idx + 3:
|
|
67
|
+
component_type = path_parts[components_idx + 1] # agents, commands, etc.
|
|
68
|
+
category = path_parts[components_idx + 2]
|
|
69
|
+
file_name = path_parts[components_idx + 3]
|
|
70
|
+
name = os.path.splitext(file_name)[0]
|
|
71
|
+
|
|
72
|
+
# Create lookup key
|
|
73
|
+
key = f"{component_type}/{category}/{name}"
|
|
74
|
+
|
|
75
|
+
# Extract security metadata
|
|
76
|
+
overall = component_result.get('overall', {})
|
|
77
|
+
validators = component_result.get('validators', {})
|
|
78
|
+
|
|
79
|
+
# Build validators object with detailed errors and warnings
|
|
80
|
+
validators_data = {}
|
|
81
|
+
for validator_name, validator_result in validators.items():
|
|
82
|
+
# Process errors to extract line/column information
|
|
83
|
+
processed_errors = []
|
|
84
|
+
for error in validator_result.get('errors', []):
|
|
85
|
+
error_data = {
|
|
86
|
+
'level': error.get('level', 'error'),
|
|
87
|
+
'code': error.get('code', ''),
|
|
88
|
+
'message': error.get('message', ''),
|
|
89
|
+
'timestamp': error.get('timestamp', '')
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
# Extract metadata with line/column info
|
|
93
|
+
metadata = error.get('metadata', {})
|
|
94
|
+
if metadata:
|
|
95
|
+
error_data['metadata'] = metadata
|
|
96
|
+
|
|
97
|
+
# Extract location info if available
|
|
98
|
+
if 'line' in metadata:
|
|
99
|
+
error_data['line'] = metadata['line']
|
|
100
|
+
if 'column' in metadata:
|
|
101
|
+
error_data['column'] = metadata['column']
|
|
102
|
+
if 'position' in metadata:
|
|
103
|
+
error_data['position'] = metadata['position']
|
|
104
|
+
if 'lineText' in metadata:
|
|
105
|
+
error_data['lineText'] = metadata['lineText']
|
|
106
|
+
|
|
107
|
+
# Extract examples array if present (for patterns with multiple matches)
|
|
108
|
+
if 'examples' in metadata:
|
|
109
|
+
error_data['examples'] = metadata['examples']
|
|
110
|
+
|
|
111
|
+
processed_errors.append(error_data)
|
|
112
|
+
|
|
113
|
+
# Process warnings similarly
|
|
114
|
+
processed_warnings = []
|
|
115
|
+
for warning in validator_result.get('warnings', []):
|
|
116
|
+
warning_data = {
|
|
117
|
+
'level': warning.get('level', 'warning'),
|
|
118
|
+
'code': warning.get('code', ''),
|
|
119
|
+
'message': warning.get('message', ''),
|
|
120
|
+
'timestamp': warning.get('timestamp', '')
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
# Extract metadata with line/column info
|
|
124
|
+
metadata = warning.get('metadata', {})
|
|
125
|
+
if metadata:
|
|
126
|
+
warning_data['metadata'] = metadata
|
|
127
|
+
|
|
128
|
+
# Extract location info if available
|
|
129
|
+
if 'line' in metadata:
|
|
130
|
+
warning_data['line'] = metadata['line']
|
|
131
|
+
if 'column' in metadata:
|
|
132
|
+
warning_data['column'] = metadata['column']
|
|
133
|
+
if 'position' in metadata:
|
|
134
|
+
warning_data['position'] = metadata['position']
|
|
135
|
+
if 'lineText' in metadata:
|
|
136
|
+
warning_data['lineText'] = metadata['lineText']
|
|
137
|
+
|
|
138
|
+
# Extract examples array if present
|
|
139
|
+
if 'examples' in metadata:
|
|
140
|
+
warning_data['examples'] = metadata['examples']
|
|
141
|
+
|
|
142
|
+
processed_warnings.append(warning_data)
|
|
143
|
+
|
|
144
|
+
validators_data[validator_name] = {
|
|
145
|
+
'valid': validator_result.get('valid', False),
|
|
146
|
+
'score': validator_result.get('score', 0),
|
|
147
|
+
'errorCount': validator_result.get('errorCount', 0),
|
|
148
|
+
'warningCount': validator_result.get('warningCount', 0),
|
|
149
|
+
'errors': processed_errors,
|
|
150
|
+
'warnings': processed_warnings,
|
|
151
|
+
'info': validator_result.get('info', [])
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
security_lookup[key] = {
|
|
155
|
+
'validated': True,
|
|
156
|
+
'valid': overall.get('valid', False),
|
|
157
|
+
'score': overall.get('score', 0),
|
|
158
|
+
'errorCount': overall.get('errorCount', 0),
|
|
159
|
+
'warningCount': overall.get('warningCount', 0),
|
|
160
|
+
'lastValidated': security_data.get('timestamp', ''),
|
|
161
|
+
'validators': validators_data
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
# Add hash if available from integrity validator
|
|
165
|
+
integrity_data = validators.get('integrity', {})
|
|
166
|
+
if 'info' in integrity_data:
|
|
167
|
+
for info_item in integrity_data['info']:
|
|
168
|
+
# info_item is a dictionary with code, message, metadata
|
|
169
|
+
if isinstance(info_item, dict):
|
|
170
|
+
metadata = info_item.get('metadata', {})
|
|
171
|
+
if 'fullHash' in metadata:
|
|
172
|
+
security_lookup[key]['hash'] = metadata['fullHash']
|
|
173
|
+
break
|
|
174
|
+
elif 'hash' in metadata:
|
|
175
|
+
security_lookup[key]['hash'] = metadata['hash']
|
|
176
|
+
break
|
|
177
|
+
|
|
178
|
+
print(f"✅ Security metadata extracted for {len(security_lookup)} components")
|
|
179
|
+
return security_lookup
|
|
180
|
+
|
|
181
|
+
except subprocess.TimeoutExpired:
|
|
182
|
+
print("⚠️ Security validation timed out after 5 minutes")
|
|
183
|
+
return {}
|
|
184
|
+
except FileNotFoundError:
|
|
185
|
+
print("⚠️ npm command not found, skipping security validation")
|
|
186
|
+
return {}
|
|
187
|
+
except Exception as e:
|
|
188
|
+
print(f"⚠️ Error running security validation: {e}")
|
|
189
|
+
return {}
|
|
190
|
+
|
|
10
191
|
def fetch_download_stats():
|
|
11
192
|
"""
|
|
12
193
|
Fetch download statistics from Supabase
|
|
@@ -35,9 +216,9 @@ def fetch_download_stats():
|
|
|
35
216
|
all_downloads = []
|
|
36
217
|
offset = 0
|
|
37
218
|
limit = 1000
|
|
38
|
-
|
|
219
|
+
|
|
39
220
|
# Fetch all records with pagination
|
|
40
|
-
max_pages =
|
|
221
|
+
max_pages = 200 # Safety limit (200 pages * 1000 records = 200,000 max)
|
|
41
222
|
for page in range(max_pages):
|
|
42
223
|
paginated_headers = headers.copy()
|
|
43
224
|
paginated_headers['Range'] = f'{offset}-{offset + limit - 1}'
|
|
@@ -113,6 +294,7 @@ def fetch_download_stats():
|
|
|
113
294
|
'setting': 'settings',
|
|
114
295
|
'hook': 'hooks',
|
|
115
296
|
'mcp': 'mcps',
|
|
297
|
+
'skill': 'skills',
|
|
116
298
|
'template': 'templates'
|
|
117
299
|
}
|
|
118
300
|
|
|
@@ -157,6 +339,7 @@ def fetch_download_stats():
|
|
|
157
339
|
'setting': 'settings',
|
|
158
340
|
'hook': 'hooks',
|
|
159
341
|
'mcp': 'mcps',
|
|
342
|
+
'skill': 'skills',
|
|
160
343
|
'template': 'templates'
|
|
161
344
|
}
|
|
162
345
|
|
|
@@ -201,12 +384,16 @@ def generate_components_json():
|
|
|
201
384
|
"""
|
|
202
385
|
components_base_path = 'cli-tool/components'
|
|
203
386
|
templates_base_path = 'cli-tool/templates'
|
|
387
|
+
plugins_path = '.claude-plugin/marketplace.json'
|
|
204
388
|
output_path = 'docs/components.json'
|
|
205
|
-
components_data = {'agents': [], 'commands': [], 'mcps': [], 'settings': [], 'hooks': [], 'sandbox': [], 'templates': []}
|
|
206
|
-
|
|
389
|
+
components_data = {'agents': [], 'commands': [], 'mcps': [], 'settings': [], 'hooks': [], 'sandbox': [], 'skills': [], 'templates': [], 'plugins': []}
|
|
390
|
+
|
|
391
|
+
# Run security validation
|
|
392
|
+
security_metadata = run_security_validation()
|
|
393
|
+
|
|
207
394
|
# Fetch download statistics
|
|
208
395
|
download_stats = fetch_download_stats()
|
|
209
|
-
component_types = ['agents', 'commands', 'mcps', 'settings', 'hooks', 'sandbox']
|
|
396
|
+
component_types = ['agents', 'commands', 'mcps', 'settings', 'hooks', 'sandbox', 'skills']
|
|
210
397
|
|
|
211
398
|
print(f"Starting scan of {components_base_path} and {templates_base_path}...")
|
|
212
399
|
|
|
@@ -218,7 +405,71 @@ def generate_components_json():
|
|
|
218
405
|
continue
|
|
219
406
|
|
|
220
407
|
print(f"Scanning for {component_type} in {type_path}...")
|
|
221
|
-
|
|
408
|
+
|
|
409
|
+
# Special handling for skills - they use SKILL.md inside category/skill directories
|
|
410
|
+
if component_type == 'skills':
|
|
411
|
+
for category in os.listdir(type_path):
|
|
412
|
+
category_path = os.path.join(type_path, category)
|
|
413
|
+
if os.path.isdir(category_path) and not category.endswith('.md'):
|
|
414
|
+
for skill_dir in os.listdir(category_path):
|
|
415
|
+
skill_dir_path = os.path.join(category_path, skill_dir)
|
|
416
|
+
if os.path.isdir(skill_dir_path):
|
|
417
|
+
# Look for SKILL.md inside the skill directory
|
|
418
|
+
skill_file_path = os.path.join(skill_dir_path, 'SKILL.md')
|
|
419
|
+
if os.path.isfile(skill_file_path):
|
|
420
|
+
name = skill_dir # Use directory name as skill name
|
|
421
|
+
|
|
422
|
+
# Read file content
|
|
423
|
+
content = ''
|
|
424
|
+
description = ''
|
|
425
|
+
try:
|
|
426
|
+
with open(skill_file_path, 'r', encoding='utf-8') as f:
|
|
427
|
+
content = f.read()
|
|
428
|
+
|
|
429
|
+
# Extract description from frontmatter if available
|
|
430
|
+
if content.startswith('---'):
|
|
431
|
+
frontmatter_end = content.find('---', 3)
|
|
432
|
+
if frontmatter_end != -1:
|
|
433
|
+
frontmatter = content[3:frontmatter_end]
|
|
434
|
+
for line in frontmatter.split('\n'):
|
|
435
|
+
if line.startswith('description:'):
|
|
436
|
+
description = line.split('description:', 1)[1].strip()
|
|
437
|
+
break
|
|
438
|
+
|
|
439
|
+
except Exception as e:
|
|
440
|
+
print(f"Warning: Could not read file {skill_file_path}: {e}")
|
|
441
|
+
|
|
442
|
+
# Look up download count for this skill
|
|
443
|
+
download_key = f"{component_type}/{category}/{name}"
|
|
444
|
+
downloads = download_stats.get(download_key, 0)
|
|
445
|
+
|
|
446
|
+
# Look up security metadata for this skill
|
|
447
|
+
security_key = f"{component_type}/{category}/{name}"
|
|
448
|
+
security = security_metadata.get(security_key, {
|
|
449
|
+
'validated': False,
|
|
450
|
+
'valid': None,
|
|
451
|
+
'score': None,
|
|
452
|
+
'errorCount': 0,
|
|
453
|
+
'warningCount': 0,
|
|
454
|
+
'lastValidated': None
|
|
455
|
+
})
|
|
456
|
+
|
|
457
|
+
# Path includes category for proper organization
|
|
458
|
+
component = {
|
|
459
|
+
'name': name, # Just the skill directory name
|
|
460
|
+
'path': f"{category}/{name}", # category/skill-name format
|
|
461
|
+
'category': category,
|
|
462
|
+
'type': 'skill',
|
|
463
|
+
'content': content,
|
|
464
|
+
'description': description,
|
|
465
|
+
'downloads': downloads,
|
|
466
|
+
'security': security
|
|
467
|
+
}
|
|
468
|
+
components_data[component_type].append(component)
|
|
469
|
+
print(f" Processed skill: {category}/{name}")
|
|
470
|
+
continue # Skip the normal file scanning for skills
|
|
471
|
+
|
|
472
|
+
# Normal scanning for other component types
|
|
222
473
|
for category in os.listdir(type_path):
|
|
223
474
|
category_path = os.path.join(type_path, category)
|
|
224
475
|
if os.path.isdir(category_path):
|
|
@@ -262,7 +513,18 @@ def generate_components_json():
|
|
|
262
513
|
# The key in download_stats uses the plural form: agents/category/name
|
|
263
514
|
download_key = f"{component_type}/{category}/{name}"
|
|
264
515
|
downloads = download_stats.get(download_key, 0)
|
|
265
|
-
|
|
516
|
+
|
|
517
|
+
# Look up security metadata for this component
|
|
518
|
+
security_key = f"{component_type}/{category}/{name}"
|
|
519
|
+
security = security_metadata.get(security_key, {
|
|
520
|
+
'validated': False,
|
|
521
|
+
'valid': None,
|
|
522
|
+
'score': None,
|
|
523
|
+
'errorCount': 0,
|
|
524
|
+
'warningCount': 0,
|
|
525
|
+
'lastValidated': None
|
|
526
|
+
})
|
|
527
|
+
|
|
266
528
|
component = {
|
|
267
529
|
'name': name,
|
|
268
530
|
'path': os.path.join(category, file_name).replace("\\", "/"),
|
|
@@ -270,7 +532,8 @@ def generate_components_json():
|
|
|
270
532
|
'type': component_type[:-1], # singular form
|
|
271
533
|
'content': content, # Add file content
|
|
272
534
|
'description': description, # Add description for MCPs
|
|
273
|
-
'downloads': downloads # Add download count
|
|
535
|
+
'downloads': downloads, # Add download count
|
|
536
|
+
'security': security # Add security metadata
|
|
274
537
|
}
|
|
275
538
|
components_data[component_type].append(component)
|
|
276
539
|
|
|
@@ -360,15 +623,110 @@ def generate_components_json():
|
|
|
360
623
|
else:
|
|
361
624
|
print(f"Warning: Templates directory not found: {templates_base_path}")
|
|
362
625
|
|
|
363
|
-
#
|
|
626
|
+
# Load components metadata from marketplace.json (Claude Code standard)
|
|
627
|
+
components_marketplace_path = 'cli-tool/components/.claude-plugin/marketplace.json'
|
|
628
|
+
components_marketplace = None
|
|
629
|
+
if os.path.isfile(components_marketplace_path):
|
|
630
|
+
print(f"Loading components metadata from {components_marketplace_path}...")
|
|
631
|
+
try:
|
|
632
|
+
with open(components_marketplace_path, 'r', encoding='utf-8') as f:
|
|
633
|
+
components_marketplace = json.load(f)
|
|
634
|
+
print(f"✅ Loaded metadata for {len(components_marketplace.get('agents', []))} agents")
|
|
635
|
+
except Exception as e:
|
|
636
|
+
print(f"⚠️ Error reading components metadata from {components_marketplace_path}: {e}")
|
|
637
|
+
|
|
638
|
+
# Scan plugins from marketplace.json and store marketplace data
|
|
639
|
+
marketplace_full_data = None
|
|
640
|
+
if os.path.isfile(plugins_path):
|
|
641
|
+
print(f"Scanning for plugins in {plugins_path}...")
|
|
642
|
+
try:
|
|
643
|
+
with open(plugins_path, 'r', encoding='utf-8') as f:
|
|
644
|
+
marketplace_data = json.load(f)
|
|
645
|
+
|
|
646
|
+
# Store full marketplace data for inclusion in components.json
|
|
647
|
+
marketplace_full_data = marketplace_data
|
|
648
|
+
|
|
649
|
+
if 'plugins' in marketplace_data:
|
|
650
|
+
for plugin in marketplace_data['plugins']:
|
|
651
|
+
plugin_name = plugin.get('name', '')
|
|
652
|
+
plugin_description = plugin.get('description', '')
|
|
653
|
+
plugin_version = plugin.get('version', '1.0.0')
|
|
654
|
+
plugin_keywords = plugin.get('keywords', [])
|
|
655
|
+
plugin_author = plugin.get('author', {}).get('name', '')
|
|
656
|
+
|
|
657
|
+
# Get component lists with file names
|
|
658
|
+
commands_list = plugin.get('commands', [])
|
|
659
|
+
agents_list = plugin.get('agents', [])
|
|
660
|
+
mcps_list = plugin.get('mcpServers', [])
|
|
661
|
+
|
|
662
|
+
# Extract component names with category/folder from file paths
|
|
663
|
+
def extract_component_with_category(path):
|
|
664
|
+
# Extract category/name from path like "./cli-tool/components/commands/git/feature.md"
|
|
665
|
+
# Result should be "git/feature"
|
|
666
|
+
parts = path.split('/')
|
|
667
|
+
if len(parts) >= 2:
|
|
668
|
+
filename = parts[-1].replace('.md', '').replace('.json', '')
|
|
669
|
+
category = parts[-2]
|
|
670
|
+
return f"{category}/{filename}"
|
|
671
|
+
else:
|
|
672
|
+
# Fallback to just filename if path structure is unexpected
|
|
673
|
+
filename = path.split('/')[-1]
|
|
674
|
+
return filename.replace('.md', '').replace('.json', '')
|
|
675
|
+
|
|
676
|
+
commands_names = [extract_component_with_category(cmd) for cmd in commands_list]
|
|
677
|
+
agents_names = [extract_component_with_category(agent) for agent in agents_list]
|
|
678
|
+
mcps_names = [extract_component_with_category(mcp) for mcp in mcps_list]
|
|
679
|
+
|
|
680
|
+
# Look up download count for this plugin
|
|
681
|
+
plugin_download_key = f"plugins/{plugin_name}"
|
|
682
|
+
plugin_downloads = download_stats.get(plugin_download_key, 0)
|
|
683
|
+
|
|
684
|
+
# Create plugin entry
|
|
685
|
+
plugin_entry = {
|
|
686
|
+
'name': plugin_name,
|
|
687
|
+
'id': plugin_name,
|
|
688
|
+
'type': 'plugin',
|
|
689
|
+
'description': plugin_description,
|
|
690
|
+
'version': plugin_version,
|
|
691
|
+
'keywords': plugin_keywords,
|
|
692
|
+
'author': plugin_author,
|
|
693
|
+
'commands': len(commands_list),
|
|
694
|
+
'agents': len(agents_list),
|
|
695
|
+
'mcpServers': len(mcps_list),
|
|
696
|
+
'commandsList': commands_names,
|
|
697
|
+
'agentsList': agents_names,
|
|
698
|
+
'mcpServersList': mcps_names,
|
|
699
|
+
'installCommand': f'/plugin install {plugin_name}@claude-code-templates',
|
|
700
|
+
'downloads': plugin_downloads
|
|
701
|
+
}
|
|
702
|
+
components_data['plugins'].append(plugin_entry)
|
|
703
|
+
print(f" Processed plugin: {plugin_name}")
|
|
704
|
+
|
|
705
|
+
print(f"✅ Processed {len(components_data['plugins'])} plugins from marketplace.json")
|
|
706
|
+
except Exception as e:
|
|
707
|
+
print(f"⚠️ Error reading plugins from {plugins_path}: {e}")
|
|
708
|
+
else:
|
|
709
|
+
print(f"Warning: Plugins file not found: {plugins_path}")
|
|
710
|
+
|
|
711
|
+
# Sort components alphabetically
|
|
364
712
|
for component_type in components_data:
|
|
365
|
-
if component_type
|
|
366
|
-
# Sort templates by name since they don't have path
|
|
713
|
+
if component_type in ['templates', 'plugins']:
|
|
714
|
+
# Sort templates and plugins by name since they don't have path
|
|
367
715
|
components_data[component_type].sort(key=lambda x: x['name'])
|
|
368
716
|
else:
|
|
369
717
|
# Sort other components by path
|
|
370
718
|
components_data[component_type].sort(key=lambda x: x['path'])
|
|
371
719
|
|
|
720
|
+
# Add marketplace metadata (root level - our public marketplace)
|
|
721
|
+
if marketplace_full_data:
|
|
722
|
+
components_data['marketplace'] = marketplace_full_data
|
|
723
|
+
print("✅ Added public marketplace metadata to components.json")
|
|
724
|
+
|
|
725
|
+
# Add components marketplace metadata (Claude Code standard)
|
|
726
|
+
if components_marketplace:
|
|
727
|
+
components_data['componentsMarketplace'] = components_marketplace
|
|
728
|
+
print("✅ Added components marketplace metadata to components.json")
|
|
729
|
+
|
|
372
730
|
try:
|
|
373
731
|
with open(output_path, 'w', encoding='utf-8') as f:
|
|
374
732
|
json.dump(components_data, f, indent=2, ensure_ascii=False)
|
|
@@ -377,11 +735,28 @@ def generate_components_json():
|
|
|
377
735
|
# Log summary
|
|
378
736
|
print("\n--- Generation Summary ---")
|
|
379
737
|
for component_type, components in components_data.items():
|
|
738
|
+
# Skip marketplace metadata in summary (it's not a component type)
|
|
739
|
+
if component_type in ['marketplace', 'componentsMarketplace']:
|
|
740
|
+
continue
|
|
741
|
+
|
|
380
742
|
print(f" - Found and processed {len(components)} {component_type}")
|
|
381
743
|
if component_type == 'templates':
|
|
382
744
|
languages = len([t for t in components if t.get('subtype') == 'language'])
|
|
383
745
|
frameworks = len([t for t in components if t.get('subtype') == 'framework'])
|
|
384
746
|
print(f" • {languages} languages, {frameworks} frameworks")
|
|
747
|
+
elif component_type == 'plugins':
|
|
748
|
+
total_commands = sum(p.get('commands', 0) for p in components)
|
|
749
|
+
total_agents = sum(p.get('agents', 0) for p in components)
|
|
750
|
+
total_mcps = sum(p.get('mcpServers', 0) for p in components)
|
|
751
|
+
print(f" • {total_commands} commands, {total_agents} agents, {total_mcps} MCPs")
|
|
752
|
+
|
|
753
|
+
# Security statistics for components with security metadata
|
|
754
|
+
if component_type not in ['templates', 'plugins']:
|
|
755
|
+
validated = len([c for c in components if c.get('security', {}).get('validated', False)])
|
|
756
|
+
valid_components = len([c for c in components if c.get('security', {}).get('valid', False)])
|
|
757
|
+
avg_score = sum(c.get('security', {}).get('score', 0) for c in components if c.get('security', {}).get('validated', False)) / validated if validated > 0 else 0
|
|
758
|
+
print(f" • Security: {validated} validated, {valid_components} passed, avg score: {avg_score:.1f}")
|
|
759
|
+
|
|
385
760
|
print("--------------------------")
|
|
386
761
|
|
|
387
762
|
except IOError as e:
|
package/package.json
CHANGED
package/sync-api.sh
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# sync-api.sh - Sync API files from /api to /docs/api
|
|
4
|
+
# This ensures serverless functions are deployed correctly with Vercel
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
echo "🔄 Syncing API files from /api to /docs/api..."
|
|
9
|
+
echo ""
|
|
10
|
+
|
|
11
|
+
# Colors for output
|
|
12
|
+
GREEN='\033[0;32m'
|
|
13
|
+
BLUE='\033[0;34m'
|
|
14
|
+
NC='\033[0m' # No Color
|
|
15
|
+
|
|
16
|
+
# Check if source files exist
|
|
17
|
+
if [ ! -f "api/track-download-supabase.js" ]; then
|
|
18
|
+
echo "❌ Error: api/track-download-supabase.js not found"
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if [ ! -f "api/package.json" ]; then
|
|
23
|
+
echo "❌ Error: api/package.json not found"
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Create docs/api directory if it doesn't exist
|
|
28
|
+
mkdir -p docs/api
|
|
29
|
+
|
|
30
|
+
# Copy files
|
|
31
|
+
echo "${BLUE}📄 Copying track-download-supabase.js...${NC}"
|
|
32
|
+
cp api/track-download-supabase.js docs/api/
|
|
33
|
+
echo "${GREEN}✓ Copied track-download-supabase.js${NC}"
|
|
34
|
+
|
|
35
|
+
echo "${BLUE}📦 Copying package.json...${NC}"
|
|
36
|
+
cp api/package.json docs/api/
|
|
37
|
+
echo "${GREEN}✓ Copied package.json${NC}"
|
|
38
|
+
|
|
39
|
+
echo ""
|
|
40
|
+
echo "${GREEN}✅ Sync completed successfully!${NC}"
|
|
41
|
+
echo ""
|
|
42
|
+
echo "📁 Files synced to docs/api/:"
|
|
43
|
+
ls -lh docs/api/ | grep -E "(track-download-supabase.js|package.json)"
|
|
44
|
+
|
|
45
|
+
echo ""
|
|
46
|
+
echo "📝 Next steps:"
|
|
47
|
+
echo " 1. Review changes: git diff docs/api/"
|
|
48
|
+
echo " 2. Commit changes: git add docs/api/ && git commit -m 'Sync API files'"
|
|
49
|
+
echo " 3. Deploy to Vercel: vercel --prod"
|
|
50
|
+
echo ""
|