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
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Security Audit CLI - Validates component security
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* node src/security-audit.js [options]
|
|
8
|
+
* npm run security-audit
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const ValidationOrchestrator = require('./validation/ValidationOrchestrator');
|
|
12
|
+
const fs = require('fs-extra');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
const chalk = require('chalk');
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Scan directory for component files
|
|
18
|
+
*/
|
|
19
|
+
async function scanComponents(directory) {
|
|
20
|
+
const components = [];
|
|
21
|
+
const componentTypes = ['agents', 'commands', 'mcps', 'settings', 'hooks'];
|
|
22
|
+
|
|
23
|
+
for (const type of componentTypes) {
|
|
24
|
+
const typeDir = path.join(directory, type);
|
|
25
|
+
|
|
26
|
+
if (!await fs.pathExists(typeDir)) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Recursively find all .md files
|
|
31
|
+
const files = await findMarkdownFiles(typeDir);
|
|
32
|
+
|
|
33
|
+
for (const file of files) {
|
|
34
|
+
const content = await fs.readFile(file, 'utf8');
|
|
35
|
+
const relativePath = path.relative(process.cwd(), file);
|
|
36
|
+
|
|
37
|
+
components.push({
|
|
38
|
+
content,
|
|
39
|
+
path: relativePath,
|
|
40
|
+
type: type.slice(0, -1) // Remove 's' (agents -> agent)
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return components;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Recursively find all markdown files
|
|
50
|
+
*/
|
|
51
|
+
async function findMarkdownFiles(dir) {
|
|
52
|
+
const files = [];
|
|
53
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
54
|
+
|
|
55
|
+
for (const entry of entries) {
|
|
56
|
+
const fullPath = path.join(dir, entry.name);
|
|
57
|
+
|
|
58
|
+
if (entry.isDirectory()) {
|
|
59
|
+
const subFiles = await findMarkdownFiles(fullPath);
|
|
60
|
+
files.push(...subFiles);
|
|
61
|
+
} else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
62
|
+
files.push(fullPath);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return files;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Main execution
|
|
71
|
+
*/
|
|
72
|
+
async function main() {
|
|
73
|
+
const args = process.argv.slice(2);
|
|
74
|
+
const ciMode = args.includes('--ci');
|
|
75
|
+
const verbose = args.includes('--verbose') || args.includes('-v');
|
|
76
|
+
const jsonOutput = args.includes('--json');
|
|
77
|
+
const outputFile = args.find(arg => arg.startsWith('--output='))?.split('=')[1];
|
|
78
|
+
|
|
79
|
+
console.log(chalk.blue('\n🔒 Claude Code Templates - Security Audit\n'));
|
|
80
|
+
console.log(chalk.gray('━'.repeat(60)));
|
|
81
|
+
|
|
82
|
+
// Determine components directory
|
|
83
|
+
// Check if we're running from the cli-tool directory or the root
|
|
84
|
+
let componentsDir = path.join(process.cwd(), 'components');
|
|
85
|
+
if (!await fs.pathExists(componentsDir)) {
|
|
86
|
+
componentsDir = path.join(process.cwd(), 'cli-tool', 'components');
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (!await fs.pathExists(componentsDir)) {
|
|
90
|
+
console.error(chalk.red('❌ Components directory not found:', componentsDir));
|
|
91
|
+
console.error(chalk.gray(' Tried:', path.join(process.cwd(), 'components')));
|
|
92
|
+
console.error(chalk.gray(' Tried:', path.join(process.cwd(), 'cli-tool', 'components')));
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
console.log(chalk.blue('📁 Scanning components directory...'));
|
|
97
|
+
const components = await scanComponents(componentsDir);
|
|
98
|
+
console.log(chalk.gray(` Found ${components.length} components\n`));
|
|
99
|
+
|
|
100
|
+
// Validate all components
|
|
101
|
+
const orchestrator = new ValidationOrchestrator();
|
|
102
|
+
|
|
103
|
+
console.log(chalk.blue('🔍 Running security validation...\n'));
|
|
104
|
+
const results = await orchestrator.validateComponents(components, {
|
|
105
|
+
strict: ciMode,
|
|
106
|
+
updateRegistry: false
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// Generate report
|
|
110
|
+
if (jsonOutput) {
|
|
111
|
+
const report = orchestrator.generateJsonReport(results);
|
|
112
|
+
|
|
113
|
+
if (outputFile) {
|
|
114
|
+
await fs.writeFile(outputFile, report);
|
|
115
|
+
console.log(chalk.green(`✅ JSON report saved to: ${outputFile}`));
|
|
116
|
+
} else {
|
|
117
|
+
console.log(report);
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
const report = orchestrator.generateReport(results, {
|
|
121
|
+
verbose,
|
|
122
|
+
colors: !ciMode
|
|
123
|
+
});
|
|
124
|
+
console.log(report);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Summary
|
|
128
|
+
console.log(chalk.bold('\n📊 Validation Summary:'));
|
|
129
|
+
console.log(chalk.gray('━'.repeat(60)));
|
|
130
|
+
console.log(` Total components: ${results.summary.total}`);
|
|
131
|
+
console.log(` ${chalk.green('✅ Passed')}: ${results.summary.passed}`);
|
|
132
|
+
console.log(` ${chalk.red('❌ Failed')}: ${results.summary.failed}`);
|
|
133
|
+
console.log(` ${chalk.yellow('⚠️ Warnings')}: ${results.summary.warnings}`);
|
|
134
|
+
console.log(chalk.gray('━'.repeat(60)));
|
|
135
|
+
|
|
136
|
+
// Exit with appropriate code
|
|
137
|
+
if (ciMode && results.summary.failed > 0) {
|
|
138
|
+
console.error(chalk.red('\n❌ Security audit failed in CI mode\n'));
|
|
139
|
+
process.exit(1);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (results.summary.failed > 0) {
|
|
143
|
+
console.log(chalk.yellow('\n⚠️ Some components failed validation\n'));
|
|
144
|
+
process.exit(0); // Don't fail in non-CI mode
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
console.log(chalk.green('\n✅ All components passed security validation\n'));
|
|
148
|
+
process.exit(0);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Error handling
|
|
152
|
+
process.on('unhandledRejection', (error) => {
|
|
153
|
+
console.error(chalk.red('\n❌ Unhandled error:'), error);
|
|
154
|
+
process.exit(1);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Run
|
|
158
|
+
main().catch((error) => {
|
|
159
|
+
console.error(chalk.red('\n❌ Security audit failed:'), error.message);
|
|
160
|
+
if (process.argv.includes('--verbose')) {
|
|
161
|
+
console.error(error);
|
|
162
|
+
}
|
|
163
|
+
process.exit(1);
|
|
164
|
+
});
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Security Audit System Architecture
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This document outlines the security validation system for Claude Code Templates components (agents, commands, MCPs, settings, hooks).
|
|
5
|
+
|
|
6
|
+
## Industry Standards Reference
|
|
7
|
+
|
|
8
|
+
### Implemented Standards
|
|
9
|
+
- **NPM 2025**: SHA256 hashing, provenance metadata, trusted publishing principles
|
|
10
|
+
- **SLSA Framework**: Level 2 compliance (build integrity, tamper resistance)
|
|
11
|
+
- **PyPI Security**: Content validation, typo-squatting detection
|
|
12
|
+
- **GitHub Security**: Secret scanning patterns, malicious pattern detection
|
|
13
|
+
|
|
14
|
+
## System Architecture
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
cli-tool/src/validation/
|
|
18
|
+
├── validators/
|
|
19
|
+
│ ├── StructuralValidator.js # Frontmatter, size, encoding
|
|
20
|
+
│ ├── SemanticValidator.js # Prompt injection, jailbreaks
|
|
21
|
+
│ ├── ReferenceValidator.js # URLs, HTML, Safe Browsing
|
|
22
|
+
│ ├── IntegrityValidator.js # SHA256, version tracking
|
|
23
|
+
│ └── ProvenanceValidator.js # Author, repo, commit metadata
|
|
24
|
+
├── ValidationOrchestrator.js # Coordinates all validators
|
|
25
|
+
├── security-audit.js # CLI command implementation
|
|
26
|
+
└── ARCHITECTURE.md # This file
|
|
27
|
+
|
|
28
|
+
.github/workflows/
|
|
29
|
+
└── component-validation.yml # PR validation workflow
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Validation Tiers
|
|
33
|
+
|
|
34
|
+
### Tier 1: Structural Validation (CRITICAL)
|
|
35
|
+
**Validators**: `StructuralValidator.js`
|
|
36
|
+
- ✅ YAML frontmatter validation (name, description, tools, model)
|
|
37
|
+
- ✅ File size limits (max 100KB for agents/commands)
|
|
38
|
+
- ✅ UTF-8 encoding validation
|
|
39
|
+
- ✅ Section count limits (prevent context overflow)
|
|
40
|
+
- ✅ Required fields presence check
|
|
41
|
+
|
|
42
|
+
**Error Codes**: `STRUCT_*`
|
|
43
|
+
|
|
44
|
+
### Tier 2: Semantic Validation (HIGH PRIORITY)
|
|
45
|
+
**Validators**: `SemanticValidator.js`
|
|
46
|
+
- ✅ Prompt injection detection
|
|
47
|
+
- ✅ Jailbreak pattern detection
|
|
48
|
+
- ✅ Instruction override attempts
|
|
49
|
+
- ✅ Self-modification requests
|
|
50
|
+
- ✅ Credential harvesting patterns
|
|
51
|
+
|
|
52
|
+
**Patterns to Detect**:
|
|
53
|
+
```javascript
|
|
54
|
+
const DANGEROUS_PATTERNS = [
|
|
55
|
+
/ignore\s+(previous|all)\s+instructions?/i,
|
|
56
|
+
/system\s+prompt|developer\s+instructions?/i,
|
|
57
|
+
/you\s+are\s+now\s+(a|an)\s+/i,
|
|
58
|
+
/execute\s+the\s+following\s+(code|command)/i,
|
|
59
|
+
/fetch.*?(token|key|password|credential)/i,
|
|
60
|
+
/open\s+a?\s?shell/i,
|
|
61
|
+
/<script|<iframe|javascript:/i
|
|
62
|
+
];
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Error Codes**: `SEM_*`
|
|
66
|
+
|
|
67
|
+
### Tier 3: Reference Validation (MEDIUM PRIORITY)
|
|
68
|
+
**Validators**: `ReferenceValidator.js`
|
|
69
|
+
- ✅ URL validation (HTTPS only)
|
|
70
|
+
- ✅ Private IP blocking (127.0.0.1, 10.0.0.0/8, 192.168.0.0/16)
|
|
71
|
+
- ✅ file:// protocol blocking
|
|
72
|
+
- ✅ HTML tag sanitization
|
|
73
|
+
- ✅ Google Safe Browsing API integration (optional)
|
|
74
|
+
|
|
75
|
+
**Error Codes**: `REF_*`
|
|
76
|
+
|
|
77
|
+
### Tier 4: Integrity (HIGH PRIORITY)
|
|
78
|
+
**Validators**: `IntegrityValidator.js`
|
|
79
|
+
- ✅ SHA256 hash generation
|
|
80
|
+
- ✅ Hash verification on install
|
|
81
|
+
- ✅ Version tracking
|
|
82
|
+
- ✅ Signature validation (future)
|
|
83
|
+
|
|
84
|
+
**Error Codes**: `INT_*`
|
|
85
|
+
|
|
86
|
+
### Tier 5: Provenance (MEDIUM PRIORITY)
|
|
87
|
+
**Validators**: `ProvenanceValidator.js`
|
|
88
|
+
- ✅ Author metadata extraction
|
|
89
|
+
- ✅ Source repository tracking
|
|
90
|
+
- ✅ Git commit SHA tracking
|
|
91
|
+
- ✅ Timestamp tracking
|
|
92
|
+
- ⏳ Digital signatures (future)
|
|
93
|
+
|
|
94
|
+
**Error Codes**: `PROV_*`
|
|
95
|
+
|
|
96
|
+
## CLI Usage
|
|
97
|
+
|
|
98
|
+
### Command: `--security-audit`
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
# Validate all components in the repository
|
|
102
|
+
npx create-claude-config --security-audit
|
|
103
|
+
|
|
104
|
+
# Validate specific component type
|
|
105
|
+
npx create-claude-config --security-audit --agent frontend-developer
|
|
106
|
+
|
|
107
|
+
# Validate specific file
|
|
108
|
+
npx create-claude-config --security-audit --file ./components/agents/frontend-developer.md
|
|
109
|
+
|
|
110
|
+
# Validate with verbose output
|
|
111
|
+
npx create-claude-config --security-audit --verbose
|
|
112
|
+
|
|
113
|
+
# Generate security report (JSON)
|
|
114
|
+
npx create-claude-config --security-audit --output report.json
|
|
115
|
+
|
|
116
|
+
# Validate in CI/CD mode (exit 1 on errors)
|
|
117
|
+
npx create-claude-config --security-audit --ci
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Output Format
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
🔒 Security Audit Report
|
|
124
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
125
|
+
|
|
126
|
+
📁 Scanning: cli-tool/components/agents/
|
|
127
|
+
|
|
128
|
+
✅ frontend-developer.md
|
|
129
|
+
├─ Structural: PASS
|
|
130
|
+
├─ Semantic: PASS
|
|
131
|
+
├─ References: PASS
|
|
132
|
+
├─ Integrity: PASS (sha256: a3f2...)
|
|
133
|
+
└─ Provenance: PASS (author: claude-code-templates)
|
|
134
|
+
|
|
135
|
+
⚠️ backend-api-specialist.md
|
|
136
|
+
├─ Structural: PASS
|
|
137
|
+
├─ Semantic: WARNING (SEM_W001: Potential instruction override)
|
|
138
|
+
├─ References: PASS
|
|
139
|
+
├─ Integrity: PASS (sha256: b4e1...)
|
|
140
|
+
└─ Provenance: PASS
|
|
141
|
+
|
|
142
|
+
❌ malicious-agent.md
|
|
143
|
+
├─ Structural: PASS
|
|
144
|
+
├─ Semantic: FAIL (SEM_E001: Jailbreak pattern detected)
|
|
145
|
+
├─ References: FAIL (REF_E001: file:// protocol detected)
|
|
146
|
+
└─ Integrity: PASS (sha256: c5d2...)
|
|
147
|
+
|
|
148
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
149
|
+
Summary:
|
|
150
|
+
Total: 3 components
|
|
151
|
+
✅ Passed: 1
|
|
152
|
+
⚠️ Warnings: 1
|
|
153
|
+
❌ Failed: 1
|
|
154
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## GitHub Actions Integration
|
|
158
|
+
|
|
159
|
+
### Workflow: `.github/workflows/component-validation.yml`
|
|
160
|
+
|
|
161
|
+
```yaml
|
|
162
|
+
name: Component Security Validation
|
|
163
|
+
|
|
164
|
+
on:
|
|
165
|
+
pull_request:
|
|
166
|
+
paths:
|
|
167
|
+
- 'cli-tool/components/**/*.md'
|
|
168
|
+
push:
|
|
169
|
+
branches:
|
|
170
|
+
- main
|
|
171
|
+
|
|
172
|
+
jobs:
|
|
173
|
+
security-audit:
|
|
174
|
+
runs-on: ubuntu-latest
|
|
175
|
+
steps:
|
|
176
|
+
- uses: actions/checkout@v4
|
|
177
|
+
|
|
178
|
+
- name: Setup Node.js
|
|
179
|
+
uses: actions/setup-node@v4
|
|
180
|
+
with:
|
|
181
|
+
node-version: '18'
|
|
182
|
+
|
|
183
|
+
- name: Install dependencies
|
|
184
|
+
run: |
|
|
185
|
+
cd cli-tool
|
|
186
|
+
npm install
|
|
187
|
+
|
|
188
|
+
- name: Run Security Audit
|
|
189
|
+
run: |
|
|
190
|
+
cd cli-tool
|
|
191
|
+
npm run security-audit -- --ci --verbose
|
|
192
|
+
|
|
193
|
+
- name: Upload Security Report
|
|
194
|
+
if: always()
|
|
195
|
+
uses: actions/upload-artifact@v4
|
|
196
|
+
with:
|
|
197
|
+
name: security-audit-report
|
|
198
|
+
path: cli-tool/security-report.json
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### PR Checks
|
|
202
|
+
- ✅ All validators must pass
|
|
203
|
+
- ⚠️ Warnings are allowed but reported
|
|
204
|
+
- ❌ Any errors block the PR
|
|
205
|
+
|
|
206
|
+
## Component Metadata Schema
|
|
207
|
+
|
|
208
|
+
### Enhanced components.json
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"agents": [
|
|
212
|
+
{
|
|
213
|
+
"name": "frontend-developer",
|
|
214
|
+
"path": "agents/development-team/frontend-developer.md",
|
|
215
|
+
"description": "...",
|
|
216
|
+
"security": {
|
|
217
|
+
"validated": true,
|
|
218
|
+
"validatedAt": "2025-10-15T15:30:00Z",
|
|
219
|
+
"hash": "sha256:a3f2e1d4...",
|
|
220
|
+
"version": "1.0.0",
|
|
221
|
+
"provenance": {
|
|
222
|
+
"author": "claude-code-templates",
|
|
223
|
+
"repository": "https://github.com/danimesq/claude-code-templates",
|
|
224
|
+
"commit": "43dd5f9",
|
|
225
|
+
"verifiedAuthor": false
|
|
226
|
+
},
|
|
227
|
+
"audit": {
|
|
228
|
+
"structural": { "passed": true, "score": 100 },
|
|
229
|
+
"semantic": { "passed": true, "score": 100 },
|
|
230
|
+
"references": { "passed": true, "score": 100 },
|
|
231
|
+
"integrity": { "passed": true, "score": 100 },
|
|
232
|
+
"provenance": { "passed": true, "score": 95 }
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Error Code Reference
|
|
241
|
+
|
|
242
|
+
### Structural (STRUCT_*)
|
|
243
|
+
- `STRUCT_E001`: Missing required frontmatter
|
|
244
|
+
- `STRUCT_E002`: Invalid YAML syntax
|
|
245
|
+
- `STRUCT_E003`: File size exceeds limit
|
|
246
|
+
- `STRUCT_E004`: Invalid UTF-8 encoding
|
|
247
|
+
- `STRUCT_W001`: Missing optional field
|
|
248
|
+
|
|
249
|
+
### Semantic (SEM_*)
|
|
250
|
+
- `SEM_E001`: Jailbreak pattern detected
|
|
251
|
+
- `SEM_E002`: Prompt injection detected
|
|
252
|
+
- `SEM_E003`: Instruction override attempt
|
|
253
|
+
- `SEM_E004`: Self-modification request
|
|
254
|
+
- `SEM_E005`: Credential harvesting pattern
|
|
255
|
+
- `SEM_W001`: Suspicious instruction wording
|
|
256
|
+
|
|
257
|
+
### References (REF_*)
|
|
258
|
+
- `REF_E001`: Insecure protocol (file://, http://)
|
|
259
|
+
- `REF_E002`: Private IP address detected
|
|
260
|
+
- `REF_E003`: Malicious URL (Safe Browsing)
|
|
261
|
+
- `REF_E004`: Dangerous HTML tag
|
|
262
|
+
- `REF_W001`: Missing HTTPS
|
|
263
|
+
|
|
264
|
+
### Integrity (INT_*)
|
|
265
|
+
- `INT_E001`: Hash mismatch
|
|
266
|
+
- `INT_E002`: Missing version
|
|
267
|
+
- `INT_E003`: Invalid signature
|
|
268
|
+
- `INT_W001`: No signature provided
|
|
269
|
+
|
|
270
|
+
### Provenance (PROV_*)
|
|
271
|
+
- `PROV_E001`: Missing author
|
|
272
|
+
- `PROV_E002`: Invalid repository URL
|
|
273
|
+
- `PROV_W001`: Unverified author
|
|
274
|
+
- `PROV_W002`: Missing commit SHA
|
|
275
|
+
|
|
276
|
+
## Testing Strategy
|
|
277
|
+
|
|
278
|
+
### Unit Tests
|
|
279
|
+
```bash
|
|
280
|
+
npm test -- --testPathPattern=validation
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Integration Tests
|
|
284
|
+
```bash
|
|
285
|
+
npm run test:integration -- validation
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Test Coverage
|
|
289
|
+
- Target: 90%+ for validators
|
|
290
|
+
- Mocking: GitHub API, Safe Browsing API
|
|
291
|
+
- Fixtures: Malicious and benign component examples
|
|
292
|
+
|
|
293
|
+
## Future Enhancements
|
|
294
|
+
|
|
295
|
+
### Phase 2
|
|
296
|
+
- [ ] LLM-based semantic analysis (lightweight model)
|
|
297
|
+
- [ ] Community reporting system
|
|
298
|
+
- [ ] Automated revocation mechanism
|
|
299
|
+
- [ ] Digital signatures with PGP/GPG
|
|
300
|
+
|
|
301
|
+
### Phase 3
|
|
302
|
+
- [ ] Real-time validation API endpoint
|
|
303
|
+
- [ ] Browser extension for component preview
|
|
304
|
+
- [ ] Trust score system (0-100)
|
|
305
|
+
- [ ] Historical vulnerability tracking
|
|
306
|
+
|
|
307
|
+
## Security Contact
|
|
308
|
+
For security concerns, please open an issue at:
|
|
309
|
+
https://github.com/danimesq/claude-code-templates/security
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BaseValidator - Abstract base class for component validation
|
|
3
|
+
*
|
|
4
|
+
* Provides common validation infrastructure and result formatting
|
|
5
|
+
* All validators extend this class and implement the validate() method
|
|
6
|
+
*/
|
|
7
|
+
class BaseValidator {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.errors = [];
|
|
10
|
+
this.warnings = [];
|
|
11
|
+
this.info = [];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Add an error to the validation results
|
|
16
|
+
* @param {string} code - Error code for identification (e.g., STRUCT_E001)
|
|
17
|
+
* @param {string} message - Human-readable error message
|
|
18
|
+
* @param {object} metadata - Additional context about the error
|
|
19
|
+
*/
|
|
20
|
+
addError(code, message, metadata = {}) {
|
|
21
|
+
this.errors.push({
|
|
22
|
+
level: 'error',
|
|
23
|
+
code,
|
|
24
|
+
message,
|
|
25
|
+
metadata,
|
|
26
|
+
timestamp: new Date().toISOString()
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Add a warning to the validation results
|
|
32
|
+
* @param {string} code - Warning code for identification
|
|
33
|
+
* @param {string} message - Human-readable warning message
|
|
34
|
+
* @param {object} metadata - Additional context about the warning
|
|
35
|
+
*/
|
|
36
|
+
addWarning(code, message, metadata = {}) {
|
|
37
|
+
this.warnings.push({
|
|
38
|
+
level: 'warning',
|
|
39
|
+
code,
|
|
40
|
+
message,
|
|
41
|
+
metadata,
|
|
42
|
+
timestamp: new Date().toISOString()
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Add an info message to the validation results
|
|
48
|
+
* @param {string} code - Info code for identification
|
|
49
|
+
* @param {string} message - Human-readable info message
|
|
50
|
+
* @param {object} metadata - Additional context
|
|
51
|
+
*/
|
|
52
|
+
addInfo(code, message, metadata = {}) {
|
|
53
|
+
this.info.push({
|
|
54
|
+
level: 'info',
|
|
55
|
+
code,
|
|
56
|
+
message,
|
|
57
|
+
metadata,
|
|
58
|
+
timestamp: new Date().toISOString()
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Check if validation passed (no errors)
|
|
64
|
+
* @returns {boolean}
|
|
65
|
+
*/
|
|
66
|
+
isValid() {
|
|
67
|
+
return this.errors.length === 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Calculate validation score (0-100)
|
|
72
|
+
* Errors reduce score more than warnings
|
|
73
|
+
* @returns {number}
|
|
74
|
+
*/
|
|
75
|
+
getScore() {
|
|
76
|
+
const errorPenalty = this.errors.length * 25;
|
|
77
|
+
const warningPenalty = this.warnings.length * 5;
|
|
78
|
+
return Math.max(0, 100 - errorPenalty - warningPenalty);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Get all validation results
|
|
83
|
+
* @returns {object}
|
|
84
|
+
*/
|
|
85
|
+
getResults() {
|
|
86
|
+
return {
|
|
87
|
+
valid: this.isValid(),
|
|
88
|
+
score: this.getScore(),
|
|
89
|
+
errorCount: this.errors.length,
|
|
90
|
+
warningCount: this.warnings.length,
|
|
91
|
+
infoCount: this.info.length,
|
|
92
|
+
errors: this.errors,
|
|
93
|
+
warnings: this.warnings,
|
|
94
|
+
info: this.info
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Reset validation state
|
|
100
|
+
*/
|
|
101
|
+
reset() {
|
|
102
|
+
this.errors = [];
|
|
103
|
+
this.warnings = [];
|
|
104
|
+
this.info = [];
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Calculate line number from character index in content
|
|
109
|
+
* @param {string} content - Full content
|
|
110
|
+
* @param {number} index - Character index
|
|
111
|
+
* @returns {object} Line information (line number, column, line text)
|
|
112
|
+
*/
|
|
113
|
+
getLineFromIndex(content, index) {
|
|
114
|
+
// Count newlines before the index to get line number
|
|
115
|
+
const beforeIndex = content.substring(0, index);
|
|
116
|
+
const lineNumber = (beforeIndex.match(/\n/g) || []).length + 1;
|
|
117
|
+
|
|
118
|
+
// Find the start of the current line
|
|
119
|
+
const lineStart = beforeIndex.lastIndexOf('\n') + 1;
|
|
120
|
+
|
|
121
|
+
// Find the end of the current line
|
|
122
|
+
const afterIndex = content.substring(index);
|
|
123
|
+
const nextNewline = afterIndex.indexOf('\n');
|
|
124
|
+
const lineEnd = nextNewline === -1 ? content.length : index + nextNewline;
|
|
125
|
+
|
|
126
|
+
// Extract the full line text
|
|
127
|
+
const lineText = content.substring(lineStart, lineEnd);
|
|
128
|
+
|
|
129
|
+
// Calculate column (position in the line)
|
|
130
|
+
const column = index - lineStart + 1;
|
|
131
|
+
|
|
132
|
+
return {
|
|
133
|
+
line: lineNumber,
|
|
134
|
+
column: column,
|
|
135
|
+
lineText: lineText.trim(),
|
|
136
|
+
position: `${lineNumber}:${column}`
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Abstract method - must be implemented by subclasses
|
|
142
|
+
* @param {object} component - Component to validate
|
|
143
|
+
* @param {object} options - Validation options
|
|
144
|
+
* @returns {Promise<object>} Validation results
|
|
145
|
+
* @throws {Error} If not implemented
|
|
146
|
+
*/
|
|
147
|
+
async validate(component, options = {}) {
|
|
148
|
+
throw new Error('validate() must be implemented by subclass');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
module.exports = BaseValidator;
|