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.
Files changed (415) hide show
  1. package/.claude/settings.local.json +8 -2
  2. package/.claude-plugin/marketplace.json +251 -0
  3. package/.github/workflows/component-security-validation.yml +129 -0
  4. package/README.md +13 -6
  5. package/cli-tool/README.md +56 -0
  6. package/cli-tool/bin/create-claude-config.js +2 -0
  7. package/cli-tool/components/.claude-plugin/marketplace.json +92 -0
  8. package/cli-tool/components/agents/development-tools/flutter-go-reviewer.md +163 -0
  9. package/cli-tool/components/agents/development-tools/unused-code-cleaner.md +194 -0
  10. package/cli-tool/components/commands/git-workflow/gemini-review.md +293 -0
  11. package/cli-tool/components/commands/testing/add-mutation-testing.md +2 -2
  12. package/cli-tool/components/commands/testing/add-property-based-testing.md +2 -2
  13. package/cli-tool/components/commands/testing/e2e-setup.md +2 -2
  14. package/cli-tool/components/commands/testing/generate-test-cases.md +2 -2
  15. package/cli-tool/components/commands/testing/generate-tests.md +8 -3
  16. package/cli-tool/components/commands/testing/setup-comprehensive-testing.md +2 -2
  17. package/cli-tool/components/commands/testing/setup-load-testing.md +2 -2
  18. package/cli-tool/components/commands/testing/setup-visual-testing.md +2 -2
  19. package/cli-tool/components/commands/testing/test-automation-orchestrator.md +2 -2
  20. package/cli-tool/components/commands/testing/test-changelog-automation.md +2 -2
  21. package/cli-tool/components/commands/testing/test-coverage.md +2 -2
  22. package/cli-tool/components/commands/testing/test-quality-analyzer.md +2 -2
  23. package/cli-tool/components/commands/testing/testing_plan_integration.md +2 -2
  24. package/cli-tool/components/commands/testing/write-tests.md +2 -2
  25. package/cli-tool/components/commands/utilities/ultra-think.md +10 -5
  26. package/cli-tool/components/hooks/git/validate-branch-name.json +1 -1
  27. package/cli-tool/components/mcps/devtools/chrome-devtools.json +9 -0
  28. package/cli-tool/components/mcps/devtools/grafana.json +15 -0
  29. package/cli-tool/components/mcps/devtools/pulumi.json +9 -0
  30. package/cli-tool/components/mcps/devtools/terraform.json +1 -1
  31. package/cli-tool/components/settings/statusline/context-monitor.py +1 -1
  32. package/cli-tool/components/skills/ANTHROPIC_ATTRIBUTION.md +81 -0
  33. package/cli-tool/components/skills/creative-design/algorithmic-art/LICENSE.txt +202 -0
  34. package/cli-tool/components/skills/creative-design/algorithmic-art/SKILL.md +405 -0
  35. package/cli-tool/components/skills/creative-design/algorithmic-art/templates/generator_template.js +223 -0
  36. package/cli-tool/components/skills/creative-design/algorithmic-art/templates/viewer.html +599 -0
  37. package/cli-tool/components/skills/creative-design/canvas-design/LICENSE.txt +202 -0
  38. package/cli-tool/components/skills/creative-design/canvas-design/SKILL.md +130 -0
  39. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  40. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  41. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  42. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  43. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  44. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  45. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  46. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  47. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  48. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  49. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  50. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  51. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  52. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  53. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  54. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  55. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  56. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  57. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  58. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  59. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  60. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  61. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  62. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  63. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  64. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  65. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  66. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  67. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  68. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  69. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  70. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  71. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  72. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  73. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  74. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  75. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  76. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  77. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  78. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  79. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  80. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  81. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  82. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  83. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  84. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  85. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  86. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  87. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  88. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  89. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  90. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  91. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  92. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  93. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  94. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  95. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  96. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  97. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  98. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  99. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  100. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  101. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  102. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  103. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  104. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  105. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  106. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  107. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  108. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  109. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  110. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  111. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  112. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  113. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  114. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  115. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  116. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  117. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  118. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  119. package/cli-tool/components/skills/creative-design/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  120. package/cli-tool/components/skills/creative-design/slack-gif-creator/LICENSE.txt +202 -0
  121. package/cli-tool/components/skills/creative-design/slack-gif-creator/SKILL.md +646 -0
  122. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/color_palettes.py +302 -0
  123. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/easing.py +230 -0
  124. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/frame_composer.py +469 -0
  125. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/gif_builder.py +246 -0
  126. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/typography.py +357 -0
  127. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/validators.py +264 -0
  128. package/cli-tool/components/skills/creative-design/slack-gif-creator/core/visual_effects.py +494 -0
  129. package/cli-tool/components/skills/creative-design/slack-gif-creator/requirements.txt +4 -0
  130. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/bounce.py +106 -0
  131. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/explode.py +331 -0
  132. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/fade.py +329 -0
  133. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/flip.py +291 -0
  134. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/kaleidoscope.py +211 -0
  135. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/morph.py +329 -0
  136. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/move.py +293 -0
  137. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/pulse.py +268 -0
  138. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/shake.py +127 -0
  139. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/slide.py +291 -0
  140. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/spin.py +269 -0
  141. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/wiggle.py +300 -0
  142. package/cli-tool/components/skills/creative-design/slack-gif-creator/templates/zoom.py +312 -0
  143. package/cli-tool/components/skills/creative-design/theme-factory/LICENSE.txt +202 -0
  144. package/cli-tool/components/skills/creative-design/theme-factory/SKILL.md +59 -0
  145. package/cli-tool/components/skills/creative-design/theme-factory/theme-showcase.pdf +0 -0
  146. package/cli-tool/components/skills/creative-design/theme-factory/themes/arctic-frost.md +19 -0
  147. package/cli-tool/components/skills/creative-design/theme-factory/themes/botanical-garden.md +19 -0
  148. package/cli-tool/components/skills/creative-design/theme-factory/themes/desert-rose.md +19 -0
  149. package/cli-tool/components/skills/creative-design/theme-factory/themes/forest-canopy.md +19 -0
  150. package/cli-tool/components/skills/creative-design/theme-factory/themes/golden-hour.md +19 -0
  151. package/cli-tool/components/skills/creative-design/theme-factory/themes/midnight-galaxy.md +19 -0
  152. package/cli-tool/components/skills/creative-design/theme-factory/themes/modern-minimalist.md +19 -0
  153. package/cli-tool/components/skills/creative-design/theme-factory/themes/ocean-depths.md +19 -0
  154. package/cli-tool/components/skills/creative-design/theme-factory/themes/sunset-boulevard.md +19 -0
  155. package/cli-tool/components/skills/creative-design/theme-factory/themes/tech-innovation.md +19 -0
  156. package/cli-tool/components/skills/development/artifacts-builder/LICENSE.txt +202 -0
  157. package/cli-tool/components/skills/development/artifacts-builder/SKILL.md +74 -0
  158. package/cli-tool/components/skills/development/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  159. package/cli-tool/components/skills/development/artifacts-builder/scripts/init-artifact.sh +322 -0
  160. package/cli-tool/components/skills/development/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  161. package/cli-tool/components/skills/development/git-commit-helper/SKILL.md +203 -0
  162. package/cli-tool/components/skills/development/mcp-builder/LICENSE.txt +202 -0
  163. package/cli-tool/components/skills/development/mcp-builder/SKILL.md +328 -0
  164. package/cli-tool/components/skills/development/mcp-builder/reference/evaluation.md +602 -0
  165. package/cli-tool/components/skills/development/mcp-builder/reference/mcp_best_practices.md +915 -0
  166. package/cli-tool/components/skills/development/mcp-builder/reference/node_mcp_server.md +916 -0
  167. package/cli-tool/components/skills/development/mcp-builder/reference/python_mcp_server.md +752 -0
  168. package/cli-tool/components/skills/development/mcp-builder/scripts/connections.py +151 -0
  169. package/cli-tool/components/skills/development/mcp-builder/scripts/evaluation.py +373 -0
  170. package/cli-tool/components/skills/development/mcp-builder/scripts/example_evaluation.xml +22 -0
  171. package/cli-tool/components/skills/development/mcp-builder/scripts/requirements.txt +2 -0
  172. package/cli-tool/components/skills/development/skill-creator/LICENSE.txt +202 -0
  173. package/cli-tool/components/skills/development/skill-creator/SKILL.md +209 -0
  174. package/cli-tool/components/skills/development/skill-creator/scripts/init_skill.py +303 -0
  175. package/cli-tool/components/skills/development/skill-creator/scripts/package_skill.py +110 -0
  176. package/cli-tool/components/skills/development/skill-creator/scripts/quick_validate.py +65 -0
  177. package/cli-tool/components/skills/development/webapp-testing/LICENSE.txt +202 -0
  178. package/cli-tool/components/skills/development/webapp-testing/SKILL.md +96 -0
  179. package/cli-tool/components/skills/development/webapp-testing/examples/console_logging.py +35 -0
  180. package/cli-tool/components/skills/development/webapp-testing/examples/element_discovery.py +40 -0
  181. package/cli-tool/components/skills/development/webapp-testing/examples/static_html_automation.py +33 -0
  182. package/cli-tool/components/skills/development/webapp-testing/scripts/with_server.py +106 -0
  183. package/cli-tool/components/skills/document-processing/docx/LICENSE.txt +30 -0
  184. package/cli-tool/components/skills/document-processing/docx/SKILL.md +197 -0
  185. package/cli-tool/components/skills/document-processing/docx/docx-js.md +350 -0
  186. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  187. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  188. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  189. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  190. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  191. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  192. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  193. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  194. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  195. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  196. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  197. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  198. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  199. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  200. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  201. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  202. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  203. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  204. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  205. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  206. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  207. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  208. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  209. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  210. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  211. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  212. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  213. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  214. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  215. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  216. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  217. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/mce/mc.xsd +75 -0
  218. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  219. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  220. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  221. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  222. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  223. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  224. package/cli-tool/components/skills/document-processing/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  225. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/pack.py +159 -0
  226. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/unpack.py +29 -0
  227. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validate.py +69 -0
  228. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/__init__.py +15 -0
  229. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/base.py +951 -0
  230. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/docx.py +274 -0
  231. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/pptx.py +315 -0
  232. package/cli-tool/components/skills/document-processing/docx/ooxml/scripts/validation/redlining.py +279 -0
  233. package/cli-tool/components/skills/document-processing/docx/ooxml.md +610 -0
  234. package/cli-tool/components/skills/document-processing/docx/scripts/__init__.py +1 -0
  235. package/cli-tool/components/skills/document-processing/docx/scripts/document.py +1276 -0
  236. package/cli-tool/components/skills/document-processing/docx/scripts/templates/comments.xml +3 -0
  237. package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsExtended.xml +3 -0
  238. package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsExtensible.xml +3 -0
  239. package/cli-tool/components/skills/document-processing/docx/scripts/templates/commentsIds.xml +3 -0
  240. package/cli-tool/components/skills/document-processing/docx/scripts/templates/people.xml +3 -0
  241. package/cli-tool/components/skills/document-processing/docx/scripts/utilities.py +374 -0
  242. package/cli-tool/components/skills/document-processing/pdf-anthropic/LICENSE.txt +30 -0
  243. package/cli-tool/components/skills/document-processing/pdf-anthropic/SKILL.md +294 -0
  244. package/cli-tool/components/skills/document-processing/pdf-anthropic/forms.md +205 -0
  245. package/cli-tool/components/skills/document-processing/pdf-anthropic/reference.md +612 -0
  246. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_bounding_boxes.py +70 -0
  247. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_bounding_boxes_test.py +226 -0
  248. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/check_fillable_fields.py +12 -0
  249. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/convert_pdf_to_images.py +35 -0
  250. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/create_validation_image.py +41 -0
  251. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/extract_form_field_info.py +152 -0
  252. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/fill_fillable_fields.py +114 -0
  253. package/cli-tool/components/skills/document-processing/pdf-anthropic/scripts/fill_pdf_form_with_annotations.py +108 -0
  254. package/cli-tool/components/skills/document-processing/pdf-processing/FORMS.md +143 -0
  255. package/cli-tool/components/skills/document-processing/pdf-processing/SKILL.md +149 -0
  256. package/cli-tool/components/skills/document-processing/pdf-processing-pro/FORMS.md +610 -0
  257. package/cli-tool/components/skills/document-processing/pdf-processing-pro/OCR.md +137 -0
  258. package/cli-tool/components/skills/document-processing/pdf-processing-pro/SKILL.md +296 -0
  259. package/cli-tool/components/skills/document-processing/pdf-processing-pro/TABLES.md +626 -0
  260. package/cli-tool/components/skills/document-processing/pdf-processing-pro/scripts/analyze_form.py +307 -0
  261. package/cli-tool/components/skills/document-processing/pptx/LICENSE.txt +30 -0
  262. package/cli-tool/components/skills/document-processing/pptx/SKILL.md +484 -0
  263. package/cli-tool/components/skills/document-processing/pptx/html2pptx.md +625 -0
  264. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -0
  265. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -0
  266. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -0
  267. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -0
  268. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -0
  269. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -0
  270. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -0
  271. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -0
  272. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -0
  273. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -0
  274. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -0
  275. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -0
  276. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -0
  277. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -0
  278. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -0
  279. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -0
  280. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -0
  281. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -0
  282. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -0
  283. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -0
  284. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -0
  285. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -0
  286. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -0
  287. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -0
  288. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -0
  289. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -0
  290. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -0
  291. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -0
  292. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -0
  293. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -0
  294. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -0
  295. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/mce/mc.xsd +75 -0
  296. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -0
  297. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -0
  298. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -0
  299. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -0
  300. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -0
  301. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -0
  302. package/cli-tool/components/skills/document-processing/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -0
  303. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/pack.py +159 -0
  304. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/unpack.py +29 -0
  305. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validate.py +69 -0
  306. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/__init__.py +15 -0
  307. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/base.py +951 -0
  308. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/docx.py +274 -0
  309. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/pptx.py +315 -0
  310. package/cli-tool/components/skills/document-processing/pptx/ooxml/scripts/validation/redlining.py +279 -0
  311. package/cli-tool/components/skills/document-processing/pptx/ooxml.md +427 -0
  312. package/cli-tool/components/skills/document-processing/pptx/scripts/html2pptx.js +979 -0
  313. package/cli-tool/components/skills/document-processing/pptx/scripts/inventory.py +1020 -0
  314. package/cli-tool/components/skills/document-processing/pptx/scripts/rearrange.py +231 -0
  315. package/cli-tool/components/skills/document-processing/pptx/scripts/replace.py +385 -0
  316. package/cli-tool/components/skills/document-processing/pptx/scripts/thumbnail.py +450 -0
  317. package/cli-tool/components/skills/document-processing/xlsx/LICENSE.txt +30 -0
  318. package/cli-tool/components/skills/document-processing/xlsx/SKILL.md +289 -0
  319. package/cli-tool/components/skills/document-processing/xlsx/recalc.py +178 -0
  320. package/cli-tool/components/skills/enterprise-communication/brand-guidelines/LICENSE.txt +202 -0
  321. package/cli-tool/components/skills/enterprise-communication/brand-guidelines/SKILL.md +73 -0
  322. package/cli-tool/components/skills/enterprise-communication/email-composer/SKILL.md +317 -0
  323. package/cli-tool/components/skills/enterprise-communication/excel-analysis/SKILL.md +247 -0
  324. package/cli-tool/components/skills/enterprise-communication/internal-comms/LICENSE.txt +202 -0
  325. package/cli-tool/components/skills/enterprise-communication/internal-comms/SKILL.md +32 -0
  326. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/3p-updates.md +47 -0
  327. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/company-newsletter.md +65 -0
  328. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/faq-answers.md +30 -0
  329. package/cli-tool/components/skills/enterprise-communication/internal-comms/examples/general-comms.md +16 -0
  330. package/cli-tool/package-lock.json +39 -16
  331. package/cli-tool/package.json +7 -2
  332. package/cli-tool/security-report.json +62361 -0
  333. package/cli-tool/src/analytics-web/chats_mobile.html +17 -16
  334. package/cli-tool/src/console-bridge.js +3 -3
  335. package/cli-tool/src/index.js +157 -10
  336. package/cli-tool/src/plugin-dashboard-web/app.js +806 -0
  337. package/cli-tool/src/plugin-dashboard-web/index.html +292 -0
  338. package/cli-tool/src/plugin-dashboard-web/styles.css +1781 -0
  339. package/cli-tool/src/plugin-dashboard.js +689 -0
  340. package/cli-tool/src/security-audit.js +164 -0
  341. package/cli-tool/src/validation/ARCHITECTURE.md +309 -0
  342. package/cli-tool/src/validation/BaseValidator.js +152 -0
  343. package/cli-tool/src/validation/README.md +543 -0
  344. package/cli-tool/src/validation/ValidationOrchestrator.js +305 -0
  345. package/cli-tool/src/validation/validators/IntegrityValidator.js +338 -0
  346. package/cli-tool/src/validation/validators/ProvenanceValidator.js +399 -0
  347. package/cli-tool/src/validation/validators/ReferenceValidator.js +373 -0
  348. package/cli-tool/src/validation/validators/SemanticValidator.js +449 -0
  349. package/cli-tool/src/validation/validators/StructuralValidator.js +376 -0
  350. package/docs/CLAUDE.md +363 -0
  351. package/docs/api/README.md +297 -0
  352. package/docs/api/package.json +7 -0
  353. package/docs/api/track-download-supabase.js +150 -0
  354. package/docs/blog/README.md +199 -0
  355. package/docs/blog/blog-articles.json +133 -0
  356. package/docs/blog/css/blog-controls.css +254 -0
  357. package/docs/blog/e2b-claude-code-sandbox/index.html +8 -0
  358. package/docs/blog/index.html +81 -124
  359. package/docs/blog/js/blog-loader.js +602 -0
  360. package/docs/blog/nextjs-vercel-claude-code-integration/index.html +8 -0
  361. package/docs/blog/supabase-claude-code-integration/index.html +8 -0
  362. package/docs/component.html +226 -48
  363. package/docs/components.json +61610 -604
  364. package/docs/css/blog.css +292 -0
  365. package/docs/css/component-page.css +840 -3
  366. package/docs/css/plugin-page.css +648 -0
  367. package/docs/css/styles.css +504 -1
  368. package/docs/css/trending.css +110 -6
  369. package/docs/download-stats.html +8 -0
  370. package/docs/index.html +48 -22
  371. package/docs/jobs.html +8 -0
  372. package/docs/js/cart-manager.js +21 -8
  373. package/docs/js/component-page.js +1013 -12
  374. package/docs/js/data-loader.js +11 -8
  375. package/docs/js/index-events.js +305 -53
  376. package/docs/js/plugin-page.js +390 -0
  377. package/docs/js/script.js +50 -3
  378. package/docs/js/search-functionality.js +19 -16
  379. package/docs/js/trending.js +55 -20
  380. package/docs/plugin.html +262 -0
  381. package/docs/sandbox-interface.html +8 -0
  382. package/docs/static/favicon/about.txt +6 -0
  383. package/docs/static/favicon/android-chrome-192x192.png +0 -0
  384. package/docs/static/favicon/android-chrome-512x512.png +0 -0
  385. package/docs/static/favicon/apple-touch-icon.png +0 -0
  386. package/docs/static/favicon/favicon-16x16.png +0 -0
  387. package/docs/static/favicon/favicon-32x32.png +0 -0
  388. package/docs/static/favicon/favicon.ico +0 -0
  389. package/docs/static/favicon/site.webmanifest +1 -0
  390. package/docs/trending-data.json +616 -579
  391. package/docs/trending.html +24 -3
  392. package/docs/vercel.json +12 -0
  393. package/docs/workflows.html +8 -0
  394. package/generate_components_json.py +386 -11
  395. package/package.json +1 -1
  396. package/sync-api.sh +50 -0
  397. package/vercel.json +10 -75
  398. package/ROADMAP.md +0 -278
  399. package/test_serpapi.py +0 -36
  400. /package/cli-tool/components/commands/svelte/{svelte:a11y.md → svelte-a11y.md} +0 -0
  401. /package/cli-tool/components/commands/svelte/{svelte:component.md → svelte-component.md} +0 -0
  402. /package/cli-tool/components/commands/svelte/{svelte:debug.md → svelte-debug.md} +0 -0
  403. /package/cli-tool/components/commands/svelte/{svelte:migrate.md → svelte-migrate.md} +0 -0
  404. /package/cli-tool/components/commands/svelte/{svelte:optimize.md → svelte-optimize.md} +0 -0
  405. /package/cli-tool/components/commands/svelte/{svelte:scaffold.md → svelte-scaffold.md} +0 -0
  406. /package/cli-tool/components/commands/svelte/{svelte:storybook-migrate.md → svelte-storybook-migrate.md} +0 -0
  407. /package/cli-tool/components/commands/svelte/{svelte:storybook-mock.md → svelte-storybook-mock.md} +0 -0
  408. /package/cli-tool/components/commands/svelte/{svelte:storybook-setup.md → svelte-storybook-setup.md} +0 -0
  409. /package/cli-tool/components/commands/svelte/{svelte:storybook-story.md → svelte-storybook-story.md} +0 -0
  410. /package/cli-tool/components/commands/svelte/{svelte:storybook-troubleshoot.md → svelte-storybook-troubleshoot.md} +0 -0
  411. /package/cli-tool/components/commands/svelte/{svelte:storybook.md → svelte-storybook.md} +0 -0
  412. /package/cli-tool/components/commands/svelte/{svelte:test-coverage.md → svelte-test-coverage.md} +0 -0
  413. /package/cli-tool/components/commands/svelte/{svelte:test-fix.md → svelte-test-fix.md} +0 -0
  414. /package/cli-tool/components/commands/svelte/{svelte:test-setup.md → svelte-test-setup.md} +0 -0
  415. /package/cli-tool/components/commands/svelte/{svelte:test.md → svelte-test.md} +0 -0
@@ -102,25 +102,31 @@ class ComponentPageManager {
102
102
 
103
103
  // Hide loading state
104
104
  document.getElementById('loadingState').style.display = 'none';
105
-
105
+
106
106
  // Show component content
107
107
  document.getElementById('componentContent').style.display = 'block';
108
108
 
109
109
  // Render component header
110
110
  this.renderComponentHeader();
111
-
111
+
112
112
  // Render component description
113
113
  this.renderComponentDescription();
114
-
114
+
115
+ // Render security validation section
116
+ this.renderSecurityValidation();
117
+
118
+ // Render metadata section
119
+ await this.renderMetadataSection();
120
+
115
121
  // Render installation section
116
122
  this.renderInstallationSection();
117
-
123
+
118
124
  // Render component code
119
125
  await this.renderComponentCode();
120
-
126
+
121
127
  // Render GitHub link
122
128
  this.renderGitHubLink();
123
-
129
+
124
130
  // Update page metadata
125
131
  this.updatePageMetadata();
126
132
  }
@@ -190,10 +196,319 @@ class ComponentPageManager {
190
196
  }
191
197
  }
192
198
 
199
+ renderSecurityValidation() {
200
+ const security = this.component.security;
201
+
202
+ // If no security data, hide everything
203
+ if (!security || !security.validated) {
204
+ const validationSection = document.getElementById('validationSection');
205
+ if (validationSection) validationSection.style.display = 'none';
206
+
207
+ const validationBadge = document.getElementById('componentValidationBadge');
208
+ if (validationBadge) validationBadge.style.display = 'none';
209
+ return;
210
+ }
211
+
212
+ // Show validation section
213
+ const validationSection = document.getElementById('validationSection');
214
+ if (validationSection) validationSection.style.display = 'block';
215
+
216
+ const score = security.score || 0;
217
+ const isValid = security.valid;
218
+ const errors = security.errorCount || 0;
219
+ const warnings = security.warningCount || 0;
220
+
221
+ // Determine color based on score
222
+ let scoreColor = '#48bb78'; // Green
223
+ let scoreStatus = 'Excellent';
224
+
225
+ if (score < 70) {
226
+ scoreColor = '#f56565'; // Red
227
+ scoreStatus = 'Needs Attention';
228
+ } else if (score < 85) {
229
+ scoreColor = '#ed8936'; // Orange
230
+ scoreStatus = 'Good';
231
+ } else if (score < 100) {
232
+ scoreColor = '#48bb78'; // Green
233
+ scoreStatus = 'Very Good';
234
+ } else if (score === 100) {
235
+ scoreColor = '#48bb78'; // Green
236
+ scoreStatus = 'Excellent';
237
+ }
238
+
239
+ // Only override to red if score is below 70 OR (invalid AND low errors)
240
+ if (!isValid && score < 70) {
241
+ scoreColor = '#f56565'; // Red
242
+ scoreStatus = 'Needs Attention';
243
+ }
244
+
245
+ // Update header badge
246
+ const validationBadge = document.getElementById('componentValidationBadge');
247
+ const validationScoreSpan = document.getElementById('validationScore');
248
+ if (validationBadge && validationScoreSpan) {
249
+ validationBadge.style.display = 'inline-flex';
250
+ validationBadge.style.backgroundColor = scoreColor + '20';
251
+ validationBadge.style.borderColor = scoreColor + '50';
252
+ validationBadge.style.color = scoreColor;
253
+ validationScoreSpan.textContent = score;
254
+ validationBadge.title = `Quality Score: ${score}/100 - Click to see details`;
255
+ validationBadge.style.cursor = 'pointer';
256
+
257
+ // Add click event to scroll to validation section
258
+ validationBadge.onclick = function() {
259
+ const validationSection = document.getElementById('validationSection');
260
+ if (validationSection) {
261
+ validationSection.scrollIntoView({
262
+ behavior: 'smooth',
263
+ block: 'start'
264
+ });
265
+
266
+ // Add a highlight animation
267
+ validationSection.style.animation = 'highlight 1s ease';
268
+ setTimeout(() => {
269
+ validationSection.style.animation = '';
270
+ }, 1000);
271
+ }
272
+ };
273
+ }
274
+
275
+ // Update score circle
276
+ const scoreCircle = document.getElementById('scoreCircle');
277
+ const scoreValue = document.getElementById('scoreValue');
278
+ if (scoreCircle && scoreValue) {
279
+ scoreCircle.style.borderColor = scoreColor;
280
+ scoreValue.textContent = score;
281
+ scoreValue.style.color = scoreColor;
282
+ }
283
+
284
+ // Update score status
285
+ const scoreStatusEl = document.getElementById('scoreStatus');
286
+ if (scoreStatusEl) {
287
+ scoreStatusEl.textContent = scoreStatus;
288
+ scoreStatusEl.style.color = scoreColor;
289
+ }
290
+
291
+ // Update inline stats
292
+ const inlineErrors = document.getElementById('inlineErrors');
293
+ const inlineWarnings = document.getElementById('inlineWarnings');
294
+ if (inlineErrors) {
295
+ inlineErrors.textContent = errors;
296
+ inlineErrors.style.color = errors > 0 ? '#f56565' : '#48bb78';
297
+ }
298
+ if (inlineWarnings) {
299
+ inlineWarnings.textContent = warnings;
300
+ inlineWarnings.style.color = warnings > 0 ? '#ed8936' : '#48bb78';
301
+ }
302
+
303
+ // Render validation checks with detailed messages
304
+ const validationChecks = document.getElementById('validationChecks');
305
+ if (validationChecks && security.validators) {
306
+ const checkDescriptions = {
307
+ structural: 'Verifies file format, YAML frontmatter, required fields, and encoding',
308
+ integrity: 'Checks for tampering using SHA256 hash and version tracking',
309
+ semantic: 'Detects malicious patterns, prompt injection, and dangerous commands',
310
+ references: 'Validates external URLs and prevents SSRF attacks',
311
+ provenance: 'Confirms author metadata and repository information'
312
+ };
313
+
314
+ const checkLabels = {
315
+ structural: 'Structure',
316
+ integrity: 'Integrity',
317
+ semantic: 'Content Safety',
318
+ references: 'references',
319
+ provenance: 'Source'
320
+ };
321
+
322
+ validationChecks.innerHTML = '';
323
+ Object.entries(security.validators).forEach(([key, validatorData]) => {
324
+ // Handle both old format (boolean) and new format (object with detailed data)
325
+ const passed = typeof validatorData === 'boolean' ? validatorData : validatorData.valid;
326
+ const hasErrors = typeof validatorData === 'object' && validatorData.errors && validatorData.errors.length > 0;
327
+ const hasWarnings = typeof validatorData === 'object' && validatorData.warnings && validatorData.warnings.length > 0;
328
+ const hasInfo = typeof validatorData === 'object' && validatorData.info && validatorData.info.length > 0;
329
+ const hasDetails = hasErrors || hasWarnings || hasInfo || passed;
330
+
331
+ // Determine status: passed, warning, or failed
332
+ let status = 'passed';
333
+ let icon = '✓';
334
+ if (hasErrors) {
335
+ status = 'failed';
336
+ icon = '✗';
337
+ } else if (hasWarnings) {
338
+ status = 'warning';
339
+ icon = '⚠';
340
+ }
341
+
342
+ const checkItem = document.createElement('div');
343
+ checkItem.className = `validation-check-item ${status}`;
344
+ checkItem.style.cursor = 'pointer';
345
+
346
+ // Build HTML for check item
347
+ checkItem.innerHTML = `
348
+ <div class="check-header">
349
+ <div class="check-main">
350
+ <span class="check-icon">${icon}</span>
351
+ <span class="check-label">${checkLabels[key] || key}</span>
352
+ </div>
353
+ <div class="check-stats">
354
+ ${typeof validatorData === 'object' ? `
355
+ ${validatorData.errorCount > 0 ? `<span class="check-error-count">${validatorData.errorCount} errors</span>` : ''}
356
+ ${validatorData.warningCount > 0 ? `<span class="check-warning-count">${validatorData.warningCount} warnings</span>` : ''}
357
+ ` : ''}
358
+ </div>
359
+ </div>
360
+ `;
361
+
362
+ // Add click event listener - all items are clickable now
363
+ checkItem.addEventListener('click', () => {
364
+ window.openValidationModal(key, checkLabels[key] || key, validatorData, checkDescriptions[key]);
365
+ });
366
+
367
+ validationChecks.appendChild(checkItem);
368
+ });
369
+ }
370
+ }
371
+
372
+ async renderMetadataSection() {
373
+ const metadataSection = document.getElementById('metadataSection');
374
+
375
+ console.log('=== Metadata Section Debug ===');
376
+ console.log('Component type:', this.component.type);
377
+ console.log('Component name:', this.component.name);
378
+
379
+ // Only show metadata for agents (since marketplace.json only contains agent metadata)
380
+ if (this.component.type !== 'agent') {
381
+ console.log('Not an agent, hiding metadata section');
382
+ if (metadataSection) metadataSection.style.display = 'none';
383
+ return;
384
+ }
385
+
386
+ try {
387
+ // Load components marketplace (Claude Code standard)
388
+ const marketplace = await this.loadComponentsMarketplace();
389
+ console.log('Components marketplace loaded:', marketplace);
390
+
391
+ if (!marketplace || !marketplace.agents) {
392
+ console.log('No components marketplace or agents found');
393
+ if (metadataSection) metadataSection.style.display = 'none';
394
+ return;
395
+ }
396
+
397
+ // Find the component in marketplace
398
+ const componentName = this.component.name.replace('.md', '');
399
+ console.log('Looking for component:', componentName);
400
+ console.log('Available agents:', marketplace.agents.map(a => a.name));
401
+
402
+ const agentMetadata = marketplace.agents.find(
403
+ agent => agent.name === componentName
404
+ );
405
+
406
+ console.log('Found agent metadata:', agentMetadata);
407
+
408
+ if (!agentMetadata) {
409
+ console.log('No metadata found for component:', componentName);
410
+ if (metadataSection) metadataSection.style.display = 'none';
411
+ return;
412
+ }
413
+
414
+ // Show metadata section
415
+ if (metadataSection) metadataSection.style.display = 'block';
416
+
417
+ // Populate version
418
+ const versionElement = document.getElementById('metadataVersion');
419
+ if (versionElement) {
420
+ versionElement.textContent = agentMetadata.version || '--';
421
+ }
422
+
423
+ // Populate author
424
+ const authorElement = document.getElementById('metadataAuthor');
425
+ if (authorElement) {
426
+ const authorName = agentMetadata.author?.name || agentMetadata.author || '--';
427
+ authorElement.textContent = authorName;
428
+ }
429
+
430
+ // Populate license
431
+ const licenseElement = document.getElementById('metadataLicense');
432
+ if (licenseElement) {
433
+ licenseElement.textContent = agentMetadata.license || '--';
434
+ }
435
+
436
+ // Populate repository
437
+ const repositoryLink = document.getElementById('metadataRepository');
438
+ const repositoryNone = document.getElementById('metadataRepositoryNone');
439
+ if (agentMetadata.repository) {
440
+ if (repositoryLink) {
441
+ repositoryLink.href = agentMetadata.repository;
442
+ repositoryLink.style.display = 'inline-flex';
443
+ }
444
+ if (repositoryNone) {
445
+ repositoryNone.style.display = 'none';
446
+ }
447
+ } else {
448
+ if (repositoryLink) {
449
+ repositoryLink.style.display = 'none';
450
+ }
451
+ if (repositoryNone) {
452
+ repositoryNone.style.display = 'inline';
453
+ }
454
+ }
455
+
456
+ // Populate keywords
457
+ const keywordsContainer = document.getElementById('metadataKeywords');
458
+ if (keywordsContainer && agentMetadata.keywords && agentMetadata.keywords.length > 0) {
459
+ keywordsContainer.innerHTML = '';
460
+ agentMetadata.keywords.forEach(keyword => {
461
+ const keywordChip = document.createElement('span');
462
+ keywordChip.className = 'metadata-keyword';
463
+ keywordChip.textContent = keyword;
464
+ keywordsContainer.appendChild(keywordChip);
465
+ });
466
+ } else if (keywordsContainer) {
467
+ keywordsContainer.innerHTML = '<span class="metadata-value">--</span>';
468
+ }
469
+
470
+ } catch (error) {
471
+ console.error('Error loading marketplace metadata:', error);
472
+ if (metadataSection) metadataSection.style.display = 'none';
473
+ }
474
+ }
475
+
476
+ async loadComponentsMarketplace() {
477
+ try {
478
+ // Check if components marketplace is already cached
479
+ if (this.componentsMarketplace) {
480
+ return this.componentsMarketplace;
481
+ }
482
+
483
+ // Use the already loaded components data from dataLoader
484
+ const componentsData = await this.dataLoader.loadAllComponents();
485
+
486
+ if (componentsData && componentsData.componentsMarketplace) {
487
+ this.componentsMarketplace = componentsData.componentsMarketplace;
488
+ console.log('Loaded components marketplace:', this.componentsMarketplace);
489
+ return this.componentsMarketplace;
490
+ }
491
+
492
+ // Fallback: try to fetch marketplace.json directly from components/.claude-plugin/
493
+ const marketplaceResponse = await fetch('https://raw.githubusercontent.com/davila7/claude-code-templates/main/cli-tool/components/.claude-plugin/marketplace.json');
494
+ if (marketplaceResponse.ok) {
495
+ this.componentsMarketplace = await marketplaceResponse.json();
496
+ console.log('Loaded components marketplace from GitHub:', this.componentsMarketplace);
497
+ return this.componentsMarketplace;
498
+ }
499
+
500
+ console.warn('No components marketplace found');
501
+ return null;
502
+ } catch (error) {
503
+ console.error('Error loading components marketplace:', error);
504
+ return null;
505
+ }
506
+ }
507
+
193
508
  renderInstallationSection() {
194
509
  const componentPath = this.getCleanPath();
195
510
  const basicInstallCommand = `npx claude-code-templates@latest --${this.component.type}=${componentPath} --yes`;
196
-
511
+
197
512
  // Update basic installation command
198
513
  const basicInstallElement = document.getElementById('basicInstallCommand');
199
514
  if (basicInstallElement) {
@@ -208,7 +523,7 @@ class ComponentPageManager {
208
523
  // Hide agent-specific sections for non-agents
209
524
  const globalAgentSection = document.getElementById('globalAgentSection');
210
525
  const e2bSandboxSection = document.getElementById('e2bSandboxSection');
211
-
526
+
212
527
  if (globalAgentSection) globalAgentSection.style.display = 'none';
213
528
  if (e2bSandboxSection) e2bSandboxSection.style.display = 'none';
214
529
  }
@@ -265,7 +580,7 @@ class ComponentPageManager {
265
580
  // Pretty print JSON
266
581
  try {
267
582
  content = JSON.stringify(JSON.parse(content), null, 2);
268
- } catch (e) {
583
+ } catch (e) {
269
584
  console.warn('Could not parse JSON content:', e);
270
585
  }
271
586
  break;
@@ -279,6 +594,47 @@ class ComponentPageManager {
279
594
  }
280
595
  }
281
596
 
597
+ // Collect line numbers with errors and warnings
598
+ const errorLines = new Set();
599
+ const warningLines = new Set();
600
+
601
+ if (this.component.security && this.component.security.validators) {
602
+ Object.values(this.component.security.validators).forEach(validator => {
603
+ if (validator.errors) {
604
+ validator.errors.forEach(error => {
605
+ // Check direct line property
606
+ if (error.line) {
607
+ errorLines.add(error.line);
608
+ }
609
+ // Check examples array
610
+ if (error.examples && error.examples.length > 0) {
611
+ error.examples.forEach(example => {
612
+ if (example.line) {
613
+ errorLines.add(example.line);
614
+ }
615
+ });
616
+ }
617
+ });
618
+ }
619
+ if (validator.warnings) {
620
+ validator.warnings.forEach(warning => {
621
+ // Check direct line property
622
+ if (warning.line) {
623
+ warningLines.add(warning.line);
624
+ }
625
+ // Check examples array
626
+ if (warning.examples && warning.examples.length > 0) {
627
+ warning.examples.forEach(example => {
628
+ if (example.line) {
629
+ warningLines.add(example.line);
630
+ }
631
+ });
632
+ }
633
+ });
634
+ }
635
+ });
636
+ }
637
+
282
638
  // Update code language indicator
283
639
  const codeLanguageElement = document.getElementById('codeLanguage');
284
640
  if (codeLanguageElement) {
@@ -292,12 +648,109 @@ class ComponentPageManager {
292
648
  codeElement.className = `language-${language}`;
293
649
  }
294
650
 
295
- // Generate line numbers
651
+ // Generate line numbers with error/warning indicators
296
652
  const lines = content.split('\n');
297
- const lineNumbers = lines.map((_, index) => `<span>${index + 1}</span>`).join('');
653
+ const lineNumbers = lines.map((_, index) => {
654
+ const lineNum = index + 1;
655
+ let className = '';
656
+ let style = '';
657
+ let title = '';
658
+
659
+ if (errorLines.has(lineNum)) {
660
+ className = 'line-with-error';
661
+ style = 'background-color: rgba(245, 101, 101, 0.15); color: #f56565; font-weight: 600; border-left: 3px solid #f56565; padding-left: 5px; cursor: pointer;';
662
+ title = 'Line has validation errors - Click to see details';
663
+ } else if (warningLines.has(lineNum)) {
664
+ className = 'line-with-warning';
665
+ style = 'background-color: rgba(237, 137, 54, 0.15); color: #ed8936; font-weight: 600; border-left: 3px solid #ed8936; padding-left: 5px; cursor: pointer;';
666
+ title = 'Line has validation warnings - Click to see details';
667
+ }
668
+
669
+ return `<span class="${className}" style="${style}" title="${title}" data-line-number="${lineNum}">${lineNum}</span>`;
670
+ }).join('');
671
+
298
672
  const lineNumbersElement = document.getElementById('lineNumbers');
299
673
  if (lineNumbersElement) {
300
674
  lineNumbersElement.innerHTML = lineNumbers;
675
+
676
+ // Add click event listeners to error/warning line numbers
677
+ const clickableLines = lineNumbersElement.querySelectorAll('.line-with-error, .line-with-warning');
678
+ clickableLines.forEach(lineSpan => {
679
+ lineSpan.addEventListener('click', () => {
680
+ // Find which validator has the error for this line
681
+ const lineNum = parseInt(lineSpan.getAttribute('data-line-number'));
682
+
683
+ if (this.component.security && this.component.security.validators) {
684
+ // Look for the validator with this line number
685
+ for (const [validatorKey, validatorData] of Object.entries(this.component.security.validators)) {
686
+ if (typeof validatorData === 'object') {
687
+ // Check if this validator has errors/warnings for this line
688
+ const hasError = validatorData.errors && validatorData.errors.some(error => {
689
+ if (error.line === lineNum) return true;
690
+ if (error.examples && error.examples.some(ex => ex.line === lineNum)) return true;
691
+ return false;
692
+ });
693
+
694
+ const hasWarning = validatorData.warnings && validatorData.warnings.some(warning => {
695
+ if (warning.line === lineNum) return true;
696
+ if (warning.examples && warning.examples.some(ex => ex.line === lineNum)) return true;
697
+ return false;
698
+ });
699
+
700
+ if (hasError || hasWarning) {
701
+ // Found the validator with this line, open its modal
702
+ const checkLabels = {
703
+ structural: 'Structure',
704
+ integrity: 'Integrity',
705
+ semantic: 'Content Safety',
706
+ references: 'references',
707
+ provenance: 'Source'
708
+ };
709
+
710
+ const checkDescriptions = {
711
+ structural: 'Verifies file format, YAML frontmatter, required fields, and encoding',
712
+ integrity: 'Checks for tampering using SHA256 hash and version tracking',
713
+ semantic: 'Detects malicious patterns, prompt injection, and dangerous commands',
714
+ references: 'Validates external URLs and prevents SSRF attacks',
715
+ provenance: 'Confirms author metadata and repository information'
716
+ };
717
+
718
+ window.openValidationModal(
719
+ validatorKey,
720
+ checkLabels[validatorKey] || validatorKey,
721
+ validatorData,
722
+ checkDescriptions[validatorKey]
723
+ );
724
+ break;
725
+ }
726
+ }
727
+ }
728
+ }
729
+ });
730
+ });
731
+ }
732
+
733
+ // Add corresponding highlighting to code lines
734
+ if (errorLines.size > 0 || warningLines.size > 0) {
735
+ const codeLines = codeElement.innerHTML.split('\n');
736
+ const highlightedLines = codeLines.map((line, index) => {
737
+ const lineNum = index + 1;
738
+ if (errorLines.has(lineNum)) {
739
+ return `<span style="background-color: rgba(245, 101, 101, 0.08); display: block; margin: 0 -10px; padding: 0 10px;">${line}</span>`;
740
+ } else if (warningLines.has(lineNum)) {
741
+ return `<span style="background-color: rgba(237, 137, 54, 0.08); display: block; margin: 0 -10px; padding: 0 10px;">${line}</span>`;
742
+ }
743
+ return line;
744
+ });
745
+ codeElement.innerHTML = highlightedLines.join('\n');
746
+ }
747
+
748
+ // Sync scroll between line numbers and code content
749
+ const codeContentDiv = document.getElementById('codeContent');
750
+ if (lineNumbersElement && codeContentDiv) {
751
+ codeContentDiv.addEventListener('scroll', function() {
752
+ lineNumbersElement.scrollTop = codeContentDiv.scrollTop;
753
+ });
301
754
  }
302
755
 
303
756
  } catch (error) {
@@ -805,4 +1258,552 @@ document.addEventListener('click', (e) => {
805
1258
  if (shareDropdown && !shareDropdown.contains(e.target)) {
806
1259
  shareDropdown.classList.remove('open');
807
1260
  }
808
- });
1261
+ });
1262
+
1263
+ // Validation Modal System
1264
+ window.openValidationModal = function(validatorKey, validatorLabel, validatorData, description) {
1265
+ // Create modal overlay
1266
+ const modalOverlay = document.createElement('div');
1267
+ modalOverlay.className = 'modal-overlay';
1268
+ modalOverlay.style.cssText = `
1269
+ position: fixed;
1270
+ top: 0;
1271
+ left: 0;
1272
+ width: 100%;
1273
+ height: 100%;
1274
+ background: rgba(0, 0, 0, 0.7);
1275
+ display: flex;
1276
+ align-items: center;
1277
+ justify-content: center;
1278
+ z-index: 10000;
1279
+ padding: 20px;
1280
+ backdrop-filter: blur(3px);
1281
+ overflow: hidden;
1282
+ `;
1283
+
1284
+ // Create modal container
1285
+ const modalContainer = document.createElement('div');
1286
+ modalContainer.style.cssText = `
1287
+ background: #1a1a1a;
1288
+ border: 1px solid #333;
1289
+ border-radius: 8px;
1290
+ max-width: 700px;
1291
+ max-height: 80vh;
1292
+ width: 100%;
1293
+ display: flex;
1294
+ flex-direction: column;
1295
+ box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
1296
+ overflow: hidden;
1297
+ `;
1298
+
1299
+ // Handle both old format (boolean) and new format (object)
1300
+ const passed = typeof validatorData === 'boolean' ? validatorData : validatorData.valid;
1301
+ const hasErrors = typeof validatorData === 'object' && validatorData.errors && validatorData.errors.length > 0;
1302
+ const hasWarnings = typeof validatorData === 'object' && validatorData.warnings && validatorData.warnings.length > 0;
1303
+ const hasInfo = typeof validatorData === 'object' && validatorData.info && validatorData.info.length > 0;
1304
+
1305
+ // Determine status
1306
+ let status = 'passed';
1307
+ let statusColor = '#48bb78';
1308
+ let statusText = 'All Checks Passed';
1309
+ let statusIcon = '✓';
1310
+
1311
+ if (hasErrors) {
1312
+ status = 'failed';
1313
+ statusColor = '#f56565';
1314
+ statusText = 'Validation Failed';
1315
+ statusIcon = '✗';
1316
+ } else if (hasWarnings) {
1317
+ status = 'warning';
1318
+ statusColor = '#ed8936';
1319
+ statusText = 'Validation Passed with Warnings';
1320
+ statusIcon = '⚠';
1321
+ }
1322
+
1323
+ // Build modal content - Header (fixed)
1324
+ let modalHeader = `
1325
+ <div style="padding: 30px 30px 20px 30px; flex-shrink: 0; border-bottom: 1px solid #333;">
1326
+ <!-- Header -->
1327
+ <div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 16px;">
1328
+ <div style="flex: 1;">
1329
+ <h2 style="margin: 0 0 8px 0; color: #fff; font-size: 24px; font-weight: 600;">
1330
+ ${validatorLabel}
1331
+ </h2>
1332
+ <p style="margin: 0; color: #999; font-size: 14px; line-height: 1.6;">
1333
+ ${description || 'Validation check details'}
1334
+ </p>
1335
+ </div>
1336
+ <button id="closeValidationModal" style="
1337
+ background: transparent;
1338
+ border: none;
1339
+ color: #999;
1340
+ font-size: 28px;
1341
+ cursor: pointer;
1342
+ padding: 0;
1343
+ width: 32px;
1344
+ height: 32px;
1345
+ display: flex;
1346
+ align-items: center;
1347
+ justify-content: center;
1348
+ transition: color 0.2s;
1349
+ margin-left: 20px;
1350
+ flex-shrink: 0;
1351
+ " onmouseover="this.style.color='#fff'" onmouseout="this.style.color='#999'">
1352
+ ×
1353
+ </button>
1354
+ </div>
1355
+
1356
+ <!-- Status Badge -->
1357
+ <div style="
1358
+ display: inline-flex;
1359
+ align-items: center;
1360
+ gap: 8px;
1361
+ padding: 8px 16px;
1362
+ background: ${statusColor}20;
1363
+ border: 1px solid ${statusColor}40;
1364
+ border-radius: 6px;
1365
+ color: ${statusColor};
1366
+ font-weight: 600;
1367
+ font-size: 14px;
1368
+ ">
1369
+ <span style="font-size: 16px;">${statusIcon}</span>
1370
+ ${statusText}
1371
+ </div>
1372
+ </div>
1373
+ `;
1374
+
1375
+ // Build modal body content (scrollable)
1376
+ let modalBodyContent = '';
1377
+
1378
+ // Add errors section if present
1379
+ if (hasErrors) {
1380
+ modalBodyContent += `
1381
+ <div style="margin-bottom: 24px;">
1382
+ <h3 style="color: #f56565; font-size: 16px; font-weight: 600; margin: 0 0 12px 0; display: flex; align-items: center; gap: 8px;">
1383
+ <span>✗</span>
1384
+ Errors (${validatorData.errorCount || validatorData.errors.length})
1385
+ </h3>
1386
+ <div style="
1387
+ background: rgba(245, 101, 101, 0.1);
1388
+ border-left: 3px solid #f56565;
1389
+ border-radius: 4px;
1390
+ padding: 16px;
1391
+ ">
1392
+ `;
1393
+
1394
+ validatorData.errors.forEach((error, index) => {
1395
+ // Build location info if available
1396
+ let locationInfo = '';
1397
+ if (error.position || error.line) {
1398
+ locationInfo = `
1399
+ <div style="
1400
+ display: inline-flex;
1401
+ align-items: center;
1402
+ gap: 8px;
1403
+ margin-top: 4px;
1404
+ padding: 4px 8px;
1405
+ background: rgba(0, 0, 0, 0.3);
1406
+ border-radius: 4px;
1407
+ font-size: 12px;
1408
+ color: #999;
1409
+ font-family: 'Courier New', monospace;
1410
+ ">
1411
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">
1412
+ <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,7H13V13H11V7M11,15H13V17H11V15Z"/>
1413
+ </svg>
1414
+ ${error.position ? `Line ${error.position}` : `Line ${error.line}` + (error.column ? `:${error.column}` : '')}
1415
+ </div>
1416
+ `;
1417
+ }
1418
+
1419
+ // Build line text preview if available
1420
+ let lineTextPreview = '';
1421
+ if (error.lineText) {
1422
+ lineTextPreview = `
1423
+ <div style="margin-top: 8px; padding: 8px 12px; background: rgba(0, 0, 0, 0.4); border-left: 2px solid #f56565; border-radius: 4px; font-family: 'Courier New', monospace; font-size: 12px; color: #ddd; white-space: normal; word-wrap: break-word; overflow-wrap: break-word;">
1424
+ ${error.lineText.replace(/</g, '&lt;').replace(/>/g, '&gt;')}
1425
+ </div>
1426
+ `;
1427
+ }
1428
+
1429
+ // Handle examples array (for patterns with multiple matches)
1430
+ let examplesSection = '';
1431
+ if (error.examples && error.examples.length > 0) {
1432
+ examplesSection = `
1433
+ <div style="margin-top: 12px;">
1434
+ <div style="color: #999; font-size: 12px; margin-bottom: 6px; font-weight: 600;">
1435
+ Found ${error.examples.length} occurrence${error.examples.length > 1 ? 's' : ''}:
1436
+ </div>
1437
+ `;
1438
+
1439
+ error.examples.slice(0, 5).forEach((example, exIdx) => {
1440
+ examplesSection += `
1441
+ <div style="margin-bottom: 8px; padding: 8px 12px; background: rgba(0, 0, 0, 0.3); border-radius: 4px;">
1442
+ <div style="display: flex; align-items: center; gap: 8px; margin-bottom: 4px;">
1443
+ <span style="color: #f56565; font-size: 11px; font-weight: 600; font-family: 'Courier New', monospace;">
1444
+ ${example.position || `Line ${example.line}`}
1445
+ </span>
1446
+ ${example.text ? `
1447
+ <span style="color: #ed8936; font-size: 11px; font-family: 'Courier New', monospace;">
1448
+ "${example.text.replace(/</g, '&lt;').replace(/>/g, '&gt;')}"
1449
+ </span>
1450
+ ` : ''}
1451
+ </div>
1452
+ ${example.lineText ? `
1453
+ <div style="color: #999; font-size: 11px; font-family: 'Courier New', monospace; white-space: normal; word-wrap: break-word; overflow-wrap: break-word;">
1454
+ ${example.lineText.replace(/</g, '&lt;').replace(/>/g, '&gt;')}
1455
+ </div>
1456
+ ` : ''}
1457
+ </div>
1458
+ `;
1459
+ });
1460
+
1461
+ if (error.examples.length > 5) {
1462
+ examplesSection += `
1463
+ <div style="color: #666; font-size: 11px; font-style: italic; margin-top: 4px;">
1464
+ ... and ${error.examples.length - 5} more occurrence${error.examples.length - 5 > 1 ? 's' : ''}
1465
+ </div>
1466
+ `;
1467
+ }
1468
+
1469
+ examplesSection += `</div>`;
1470
+ }
1471
+
1472
+ modalBodyContent += `
1473
+ <div style="margin-bottom: ${index < validatorData.errors.length - 1 ? '12px' : '0'}; padding-bottom: ${index < validatorData.errors.length - 1 ? '12px' : '0'}; border-bottom: ${index < validatorData.errors.length - 1 ? '1px solid rgba(245, 101, 101, 0.2)' : 'none'};">
1474
+ <div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px;">
1475
+ <div style="color: #f56565; font-weight: 600; font-size: 13px;">
1476
+ ${error.code || 'ERROR'}
1477
+ </div>
1478
+ ${locationInfo}
1479
+ </div>
1480
+ <div style="color: #ddd; font-size: 16px; line-height: 1.6; margin-bottom: 8px;">
1481
+ ${error.message || error}
1482
+ </div>
1483
+ ${lineTextPreview}
1484
+ ${examplesSection}
1485
+ ${error.context && !error.examples ? `
1486
+ <div style="margin-top: 8px; padding: 8px; background: rgba(0, 0, 0, 0.3); border-radius: 4px; font-family: 'Courier New', monospace; font-size: 12px; color: #999;">
1487
+ ${JSON.stringify(error.context, null, 2).replace(/\n/g, '<br>').replace(/ /g, '&nbsp;')}
1488
+ </div>
1489
+ ` : ''}
1490
+ </div>
1491
+ `;
1492
+ });
1493
+
1494
+ modalBodyContent += `
1495
+ </div>
1496
+ </div>
1497
+ `;
1498
+ }
1499
+
1500
+ // Add warnings section if present
1501
+ if (hasWarnings) {
1502
+ modalBodyContent += `
1503
+ <div style="margin-bottom: 24px;">
1504
+ <h3 style="color: #ed8936; font-size: 16px; font-weight: 600; margin: 0 0 12px 0; display: flex; align-items: center; gap: 8px;">
1505
+ <span>⚠</span>
1506
+ Warnings (${validatorData.warningCount || validatorData.warnings.length})
1507
+ </h3>
1508
+ <div style="
1509
+ background: rgba(237, 137, 54, 0.1);
1510
+ border-left: 3px solid #ed8936;
1511
+ border-radius: 4px;
1512
+ padding: 16px;
1513
+ ">
1514
+ `;
1515
+
1516
+ validatorData.warnings.forEach((warning, index) => {
1517
+ // Build location info if available
1518
+ let locationInfo = '';
1519
+ if (warning.position || warning.line) {
1520
+ locationInfo = `
1521
+ <div style="
1522
+ display: inline-flex;
1523
+ align-items: center;
1524
+ gap: 8px;
1525
+ margin-top: 4px;
1526
+ padding: 4px 8px;
1527
+ background: rgba(0, 0, 0, 0.3);
1528
+ border-radius: 4px;
1529
+ font-size: 12px;
1530
+ color: #999;
1531
+ font-family: 'Courier New', monospace;
1532
+ ">
1533
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">
1534
+ <path d="M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,7H13V13H11V7M11,15H13V17H11V15Z"/>
1535
+ </svg>
1536
+ ${warning.position ? `Line ${warning.position}` : `Line ${warning.line}` + (warning.column ? `:${warning.column}` : '')}
1537
+ </div>
1538
+ `;
1539
+ }
1540
+
1541
+ // Build line text preview if available
1542
+ let lineTextPreview = '';
1543
+ if (warning.lineText) {
1544
+ lineTextPreview = `
1545
+ <div style="margin-top: 8px; padding: 8px 12px; background: rgba(0, 0, 0, 0.4); border-left: 2px solid #ed8936; border-radius: 4px; font-family: 'Courier New', monospace; font-size: 12px; color: #ddd; white-space: normal; word-wrap: break-word; overflow-wrap: break-word;">
1546
+ ${warning.lineText.replace(/</g, '&lt;').replace(/>/g, '&gt;')}
1547
+ </div>
1548
+ `;
1549
+ }
1550
+
1551
+ // Handle examples array (for patterns with multiple matches)
1552
+ let examplesSection = '';
1553
+ if (warning.examples && warning.examples.length > 0) {
1554
+ examplesSection = `
1555
+ <div style="margin-top: 12px;">
1556
+ <div style="color: #999; font-size: 12px; margin-bottom: 6px; font-weight: 600;">
1557
+ Found ${warning.examples.length} occurrence${warning.examples.length > 1 ? 's' : ''}:
1558
+ </div>
1559
+ `;
1560
+
1561
+ warning.examples.slice(0, 5).forEach((example, exIdx) => {
1562
+ examplesSection += `
1563
+ <div style="margin-bottom: 8px; padding: 8px 12px; background: rgba(0, 0, 0, 0.3); border-radius: 4px;">
1564
+ <div style="display: flex; align-items: center; gap: 8px; margin-bottom: 4px;">
1565
+ <span style="color: #ed8936; font-size: 11px; font-weight: 600; font-family: 'Courier New', monospace;">
1566
+ ${example.position || `Line ${example.line}`}
1567
+ </span>
1568
+ ${example.text ? `
1569
+ <span style="color: #f9a825; font-size: 11px; font-family: 'Courier New', monospace;">
1570
+ "${example.text.replace(/</g, '&lt;').replace(/>/g, '&gt;')}"
1571
+ </span>
1572
+ ` : ''}
1573
+ </div>
1574
+ ${example.lineText ? `
1575
+ <div style="color: #999; font-size: 11px; font-family: 'Courier New', monospace; white-space: normal; word-wrap: break-word; overflow-wrap: break-word;">
1576
+ ${example.lineText.replace(/</g, '&lt;').replace(/>/g, '&gt;')}
1577
+ </div>
1578
+ ` : ''}
1579
+ </div>
1580
+ `;
1581
+ });
1582
+
1583
+ if (warning.examples.length > 5) {
1584
+ examplesSection += `
1585
+ <div style="color: #666; font-size: 11px; font-style: italic; margin-top: 4px;">
1586
+ ... and ${warning.examples.length - 5} more occurrence${warning.examples.length - 5 > 1 ? 's' : ''}
1587
+ </div>
1588
+ `;
1589
+ }
1590
+
1591
+ examplesSection += `</div>`;
1592
+ }
1593
+
1594
+ modalBodyContent += `
1595
+ <div style="margin-bottom: ${index < validatorData.warnings.length - 1 ? '12px' : '0'}; padding-bottom: ${index < validatorData.warnings.length - 1 ? '12px' : '0'}; border-bottom: ${index < validatorData.warnings.length - 1 ? '1px solid rgba(237, 137, 54, 0.2)' : 'none'};">
1596
+ <div style="display: flex; align-items: center; justify-content: space-between; margin-bottom: 4px;">
1597
+ <div style="color: #ed8936; font-weight: 600; font-size: 13px;">
1598
+ ${warning.code || 'WARNING'}
1599
+ </div>
1600
+ ${locationInfo}
1601
+ </div>
1602
+ <div style="color: #ddd; font-size: 16px; line-height: 1.6; margin-bottom: 8px;">
1603
+ ${warning.message || warning}
1604
+ </div>
1605
+ ${lineTextPreview}
1606
+ ${examplesSection}
1607
+ ${warning.context && !warning.examples ? `
1608
+ <div style="margin-top: 8px; padding: 8px; background: rgba(0, 0, 0, 0.3); border-radius: 4px; font-family: 'Courier New', monospace; font-size: 12px; color: #999;">
1609
+ ${JSON.stringify(warning.context, null, 2).replace(/\n/g, '<br>').replace(/ /g, '&nbsp;')}
1610
+ </div>
1611
+ ` : ''}
1612
+ </div>
1613
+ `;
1614
+ });
1615
+
1616
+ modalBodyContent += `
1617
+ </div>
1618
+ </div>
1619
+ `;
1620
+ }
1621
+
1622
+ // Add success/info section if everything passed
1623
+ if (!hasErrors && !hasWarnings && (hasInfo || passed)) {
1624
+ // Generate validator-specific success summary
1625
+ let successSummary = '';
1626
+
1627
+ switch(validatorKey) {
1628
+ case 'structural':
1629
+ successSummary = `
1630
+ <div style="color: #bbb; font-size: 14px; line-height: 1.6; margin-bottom: 12px;">
1631
+ This component has a valid structure with proper formatting:
1632
+ </div>
1633
+ <ul style="margin: 0; padding-left: 20px; color: #999; font-size: 13px; line-height: 1.8;">
1634
+ <li>YAML frontmatter is properly formatted and contains all required fields</li>
1635
+ <li>File size is within acceptable limits</li>
1636
+ <li>UTF-8 encoding is valid with no binary content</li>
1637
+ <li>Content structure follows markdown conventions</li>
1638
+ <li>Section count is optimal for readability</li>
1639
+ </ul>
1640
+ `;
1641
+ break;
1642
+
1643
+ case 'integrity':
1644
+ successSummary = `
1645
+ <div style="color: #bbb; font-size: 14px; line-height: 1.6; margin-bottom: 12px;">
1646
+ This component's integrity has been verified:
1647
+ </div>
1648
+ <ul style="margin: 0; padding-left: 20px; color: #999; font-size: 13px; line-height: 1.8;">
1649
+ <li>SHA256 hash matches expected value</li>
1650
+ <li>No tampering or unauthorized modifications detected</li>
1651
+ <li>Version tracking is consistent</li>
1652
+ <li>File has not been corrupted during transmission</li>
1653
+ </ul>
1654
+ `;
1655
+ break;
1656
+
1657
+ case 'semantic':
1658
+ successSummary = `
1659
+ <div style="color: #bbb; font-size: 14px; line-height: 1.6; margin-bottom: 12px;">
1660
+ This component is safe and contains no malicious content:
1661
+ </div>
1662
+ <ul style="margin: 0; padding-left: 20px; color: #999; font-size: 13px; line-height: 1.8;">
1663
+ <li>No prompt injection attempts detected</li>
1664
+ <li>No dangerous shell commands or system calls</li>
1665
+ <li>No obfuscated or suspicious code patterns</li>
1666
+ <li>No attempts to access sensitive file paths</li>
1667
+ <li>Content follows security best practices</li>
1668
+ </ul>
1669
+ `;
1670
+ break;
1671
+
1672
+ case 'references':
1673
+ successSummary = `
1674
+ <div style="color: #bbb; font-size: 14px; line-height: 1.6; margin-bottom: 12px;">
1675
+ All external references have been validated:
1676
+ </div>
1677
+ <ul style="margin: 0; padding-left: 20px; color: #999; font-size: 13px; line-height: 1.8;">
1678
+ <li>All URLs are properly formatted and accessible</li>
1679
+ <li>No SSRF (Server-Side Request Forgery) vulnerabilities</li>
1680
+ <li>External links point to trusted domains</li>
1681
+ <li>No private network or localhost references</li>
1682
+ <li>HTTP links have been upgraded to HTTPS where possible</li>
1683
+ </ul>
1684
+ `;
1685
+ break;
1686
+
1687
+ case 'provenance':
1688
+ successSummary = `
1689
+ <div style="color: #bbb; font-size: 14px; line-height: 1.6; margin-bottom: 12px;">
1690
+ Component origin and authorship have been confirmed:
1691
+ </div>
1692
+ <ul style="margin: 0; padding-left: 20px; color: #999; font-size: 13px; line-height: 1.8;">
1693
+ <li>Author metadata is present and valid</li>
1694
+ <li>Repository information is correct</li>
1695
+ <li>License information is specified</li>
1696
+ <li>Component source can be traced to original repository</li>
1697
+ <li>No signs of unauthorized redistribution</li>
1698
+ </ul>
1699
+ `;
1700
+ break;
1701
+
1702
+ default:
1703
+ successSummary = `
1704
+ <div style="color: #bbb; font-size: 14px; line-height: 1.6;">
1705
+ This component has been validated and meets all ${validatorLabel.toLowerCase()} requirements.
1706
+ </div>
1707
+ `;
1708
+ }
1709
+
1710
+ modalBodyContent += `
1711
+ <div style="margin-bottom: 24px;">
1712
+ <h3 style="color: #48bb78; font-size: 16px; font-weight: 600; margin: 0 0 12px 0; display: flex; align-items: center; gap: 8px;">
1713
+ <span>✓</span>
1714
+ Validation Passed
1715
+ </h3>
1716
+ <div style="
1717
+ background: rgba(72, 187, 120, 0.1);
1718
+ border-left: 3px solid #48bb78;
1719
+ border-radius: 4px;
1720
+ padding: 16px;
1721
+ ">
1722
+ <div style="color: #48bb78; font-weight: 600; font-size: 14px; margin-bottom: 12px;">
1723
+ All ${validatorLabel} checks passed successfully
1724
+ </div>
1725
+ ${successSummary}
1726
+ `;
1727
+
1728
+ // Add info items if present
1729
+ if (hasInfo) {
1730
+ modalBodyContent += `
1731
+ <div style="margin-top: 16px; padding-top: 16px; border-top: 1px solid rgba(72, 187, 120, 0.2);">
1732
+ <div style="color: #48bb78; font-weight: 600; font-size: 13px; margin-bottom: 8px;">
1733
+ Additional Details:
1734
+ </div>
1735
+ `;
1736
+ validatorData.info.forEach((info, index) => {
1737
+ modalBodyContent += `
1738
+ <div style="margin-bottom: ${index < validatorData.info.length - 1 ? '8px' : '0'}; color: #999; font-size: 13px; padding-left: 12px;">
1739
+ • ${info.message || info}
1740
+ </div>
1741
+ `;
1742
+ });
1743
+ modalBodyContent += `
1744
+ </div>
1745
+ `;
1746
+ }
1747
+
1748
+ modalBodyContent += `
1749
+ </div>
1750
+ </div>
1751
+ `;
1752
+ }
1753
+
1754
+ // Build modal footer (fixed)
1755
+ let modalFooter = `
1756
+ <div style="display: flex; justify-content: flex-end; margin-top: 24px; padding-top: 24px; border-top: 1px solid #333;">
1757
+ <button id="closeValidationModalBtn" style="
1758
+ background: #2d2d2d;
1759
+ border: 1px solid #444;
1760
+ color: #fff;
1761
+ padding: 10px 24px;
1762
+ border-radius: 6px;
1763
+ font-size: 14px;
1764
+ font-weight: 600;
1765
+ cursor: pointer;
1766
+ transition: all 0.2s;
1767
+ " onmouseover="this.style.background='#3d3d3d'; this.style.borderColor='#555'" onmouseout="this.style.background='#2d2d2d'; this.style.borderColor='#444'">
1768
+ Close
1769
+ </button>
1770
+ </div>
1771
+ `;
1772
+
1773
+ // Assemble the complete modal with scrollable body
1774
+ modalContainer.innerHTML = `
1775
+ ${modalHeader}
1776
+ <div style="flex: 1; overflow-y: auto; padding: 30px;">
1777
+ ${modalBodyContent}
1778
+ </div>
1779
+ <div style="flex-shrink: 0; padding: 20px 30px; border-top: 1px solid #333;">
1780
+ ${modalFooter}
1781
+ </div>
1782
+ `;
1783
+ modalOverlay.appendChild(modalContainer);
1784
+ document.body.appendChild(modalOverlay);
1785
+
1786
+ // Close modal handlers
1787
+ function closeModal() {
1788
+ document.body.removeChild(modalOverlay);
1789
+ }
1790
+
1791
+ document.getElementById('closeValidationModal').addEventListener('click', closeModal);
1792
+ document.getElementById('closeValidationModalBtn').addEventListener('click', closeModal);
1793
+
1794
+ // Close on overlay click (but not on modal content click)
1795
+ modalOverlay.addEventListener('click', (e) => {
1796
+ if (e.target === modalOverlay) {
1797
+ closeModal();
1798
+ }
1799
+ });
1800
+
1801
+ // Close on Escape key
1802
+ function handleEscape(e) {
1803
+ if (e.key === 'Escape') {
1804
+ closeModal();
1805
+ document.removeEventListener('keydown', handleEscape);
1806
+ }
1807
+ }
1808
+ document.addEventListener('keydown', handleEscape);
1809
+ };