@nguyenphp/antigravity-marketing 1.0.18 → 1.0.20

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 (231) hide show
  1. package/README.md +130 -78
  2. package/package.json +4 -3
  3. package/templates/.agent/skills/marketing-report-expert/SKILL.md +70 -0
  4. package/templates/.agent/skills/minimax-docx/LICENSE +21 -0
  5. package/templates/.agent/skills/minimax-docx/SKILL.md +274 -0
  6. package/templates/.agent/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
  7. package/templates/.agent/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
  8. package/templates/.agent/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
  9. package/templates/.agent/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
  10. package/templates/.agent/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
  11. package/templates/.agent/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
  12. package/templates/.agent/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
  13. package/templates/.agent/skills/minimax-docx/references/cjk_typography.md +357 -0
  14. package/templates/.agent/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
  15. package/templates/.agent/skills/minimax-docx/references/comments_guide.md +191 -0
  16. package/templates/.agent/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
  17. package/templates/.agent/skills/minimax-docx/references/design_principles.md +819 -0
  18. package/templates/.agent/skills/minimax-docx/references/openxml_element_order.md +308 -0
  19. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
  20. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
  21. package/templates/.agent/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
  22. package/templates/.agent/skills/minimax-docx/references/openxml_namespaces.md +82 -0
  23. package/templates/.agent/skills/minimax-docx/references/openxml_units.md +72 -0
  24. package/templates/.agent/skills/minimax-docx/references/scenario_a_create.md +284 -0
  25. package/templates/.agent/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
  26. package/templates/.agent/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
  27. package/templates/.agent/skills/minimax-docx/references/track_changes_guide.md +200 -0
  28. package/templates/.agent/skills/minimax-docx/references/troubleshooting.md +506 -0
  29. package/templates/.agent/skills/minimax-docx/references/typography_guide.md +294 -0
  30. package/templates/.agent/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
  31. package/templates/.agent/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
  32. package/templates/.agent/skills/minimax-docx/scripts/docx_preview.sh +37 -0
  33. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
  34. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
  35. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
  36. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
  37. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
  38. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
  39. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
  40. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
  41. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
  42. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
  43. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
  44. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
  45. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
  46. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
  47. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
  48. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
  49. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
  50. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
  51. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
  52. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
  53. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
  54. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
  55. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
  56. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
  57. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
  58. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
  59. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
  60. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
  61. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
  62. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
  63. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
  64. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
  65. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
  66. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
  67. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
  68. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
  69. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
  70. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
  71. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
  72. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
  73. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
  74. package/templates/.agent/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
  75. package/templates/.agent/skills/minimax-docx/scripts/env_check.sh +196 -0
  76. package/templates/.agent/skills/minimax-docx/scripts/setup.ps1 +274 -0
  77. package/templates/.agent/skills/minimax-docx/scripts/setup.sh +504 -0
  78. package/templates/.agent/skills/minimax-multimodal-toolkit/SKILL.md +359 -0
  79. package/templates/.agent/skills/minimax-pdf/README.md +222 -0
  80. package/templates/.agent/skills/minimax-pdf/SKILL.md +201 -0
  81. package/templates/.agent/skills/minimax-pdf/design/design.md +381 -0
  82. package/templates/.agent/skills/minimax-pdf/scripts/cover.py +1579 -0
  83. package/templates/.agent/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
  84. package/templates/.agent/skills/minimax-pdf/scripts/fill_write.py +242 -0
  85. package/templates/.agent/skills/minimax-pdf/scripts/make.sh +491 -0
  86. package/templates/.agent/skills/minimax-pdf/scripts/merge.py +112 -0
  87. package/templates/.agent/skills/minimax-pdf/scripts/palette.py +559 -0
  88. package/templates/.agent/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
  89. package/templates/.agent/skills/minimax-pdf/scripts/render_body.py +1055 -0
  90. package/templates/.agent/skills/minimax-pdf/scripts/render_cover.cjs +111 -0
  91. package/templates/.agent/skills/minimax-xlsx/SKILL.md +138 -0
  92. package/templates/.agent/skills/minimax-xlsx/references/create.md +691 -0
  93. package/templates/.agent/skills/minimax-xlsx/references/edit.md +684 -0
  94. package/templates/.agent/skills/minimax-xlsx/references/fix.md +37 -0
  95. package/templates/.agent/skills/minimax-xlsx/references/format.md +768 -0
  96. package/templates/.agent/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
  97. package/templates/.agent/skills/minimax-xlsx/references/read-analyze.md +97 -0
  98. package/templates/.agent/skills/minimax-xlsx/references/validate.md +772 -0
  99. package/templates/.agent/skills/minimax-xlsx/scripts/formula_check.py +422 -0
  100. package/templates/.agent/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
  101. package/templates/.agent/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
  102. package/templates/.agent/skills/minimax-xlsx/scripts/style_audit.py +575 -0
  103. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
  104. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
  105. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
  106. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
  107. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
  108. package/templates/.agent/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
  109. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
  110. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
  111. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
  112. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
  113. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
  114. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
  115. package/templates/.agent/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
  116. package/templates/.agent/skills/pptx-generator/SKILL.md +249 -0
  117. package/templates/.agent/skills/pptx-generator/references/design-system.md +392 -0
  118. package/templates/.agent/skills/pptx-generator/references/editing.md +162 -0
  119. package/templates/.agent/skills/pptx-generator/references/pitfalls.md +112 -0
  120. package/templates/.agent/skills/pptx-generator/references/pptxgenjs.md +420 -0
  121. package/templates/.agent/skills/pptx-generator/references/slide-types.md +413 -0
  122. package/templates/.agent/skills/tutorial-video-expert/SKILL.md +88 -0
  123. package/templates/.agent/skills/ui-ux-pro-max/SKILL.md +170 -585
  124. package/templates/.agent/skills/vision-analysis/SKILL.md +174 -0
  125. package/templates/.agent/workflows/analyze.md +3 -0
  126. package/templates/.agent/workflows/brand-report.md +44 -0
  127. package/templates/.agent/workflows/report.md +49 -0
  128. package/templates/.agent/agents/backend-specialist.md +0 -263
  129. package/templates/.agent/agents/database-architect.md +0 -226
  130. package/templates/.agent/agents/debugger.md +0 -225
  131. package/templates/.agent/agents/devops-engineer.md +0 -242
  132. package/templates/.agent/agents/frontend-specialist.md +0 -527
  133. package/templates/.agent/agents/game-developer.md +0 -162
  134. package/templates/.agent/agents/mobile-developer.md +0 -377
  135. package/templates/.agent/agents/penetration-tester.md +0 -188
  136. package/templates/.agent/agents/security-auditor.md +0 -170
  137. package/templates/.agent/agents/test-engineer.md +0 -158
  138. package/templates/.agent/skills/api-patterns/SKILL.md +0 -81
  139. package/templates/.agent/skills/api-patterns/api-style.md +0 -42
  140. package/templates/.agent/skills/api-patterns/auth.md +0 -24
  141. package/templates/.agent/skills/api-patterns/documentation.md +0 -26
  142. package/templates/.agent/skills/api-patterns/graphql.md +0 -41
  143. package/templates/.agent/skills/api-patterns/rate-limiting.md +0 -31
  144. package/templates/.agent/skills/api-patterns/response.md +0 -37
  145. package/templates/.agent/skills/api-patterns/rest.md +0 -40
  146. package/templates/.agent/skills/api-patterns/scripts/api_validator.py +0 -211
  147. package/templates/.agent/skills/api-patterns/security-testing.md +0 -122
  148. package/templates/.agent/skills/api-patterns/trpc.md +0 -41
  149. package/templates/.agent/skills/api-patterns/versioning.md +0 -22
  150. package/templates/.agent/skills/app-builder/SKILL.md +0 -75
  151. package/templates/.agent/skills/app-builder/agent-coordination.md +0 -71
  152. package/templates/.agent/skills/app-builder/feature-building.md +0 -53
  153. package/templates/.agent/skills/app-builder/project-detection.md +0 -34
  154. package/templates/.agent/skills/app-builder/scaffolding.md +0 -118
  155. package/templates/.agent/skills/app-builder/tech-stack.md +0 -40
  156. package/templates/.agent/skills/app-builder/templates/SKILL.md +0 -39
  157. package/templates/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +0 -76
  158. package/templates/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +0 -92
  159. package/templates/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +0 -88
  160. package/templates/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +0 -88
  161. package/templates/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +0 -83
  162. package/templates/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +0 -90
  163. package/templates/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +0 -90
  164. package/templates/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +0 -82
  165. package/templates/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +0 -100
  166. package/templates/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +0 -106
  167. package/templates/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +0 -101
  168. package/templates/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +0 -83
  169. package/templates/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +0 -93
  170. package/templates/.agent/skills/architecture/SKILL.md +0 -55
  171. package/templates/.agent/skills/architecture/context-discovery.md +0 -43
  172. package/templates/.agent/skills/architecture/examples.md +0 -94
  173. package/templates/.agent/skills/architecture/pattern-selection.md +0 -68
  174. package/templates/.agent/skills/architecture/patterns-reference.md +0 -50
  175. package/templates/.agent/skills/architecture/trade-off-analysis.md +0 -77
  176. package/templates/.agent/skills/bash-linux/SKILL.md +0 -199
  177. package/templates/.agent/skills/behavioral-modes/SKILL.md +0 -242
  178. package/templates/.agent/skills/clean-code/SKILL.md +0 -201
  179. package/templates/.agent/skills/code-review-checklist/SKILL.md +0 -109
  180. package/templates/.agent/skills/database-design/SKILL.md +0 -52
  181. package/templates/.agent/skills/database-design/database-selection.md +0 -43
  182. package/templates/.agent/skills/database-design/indexing.md +0 -39
  183. package/templates/.agent/skills/database-design/migrations.md +0 -48
  184. package/templates/.agent/skills/database-design/optimization.md +0 -36
  185. package/templates/.agent/skills/database-design/orm-selection.md +0 -30
  186. package/templates/.agent/skills/database-design/schema-design.md +0 -56
  187. package/templates/.agent/skills/database-design/scripts/schema_validator.py +0 -172
  188. package/templates/.agent/skills/deployment-procedures/SKILL.md +0 -241
  189. package/templates/.agent/skills/docker-expert/SKILL.md +0 -409
  190. package/templates/.agent/skills/game-development/2d-games/SKILL.md +0 -119
  191. package/templates/.agent/skills/game-development/3d-games/SKILL.md +0 -135
  192. package/templates/.agent/skills/game-development/SKILL.md +0 -167
  193. package/templates/.agent/skills/game-development/game-art/SKILL.md +0 -185
  194. package/templates/.agent/skills/game-development/game-audio/SKILL.md +0 -190
  195. package/templates/.agent/skills/game-development/game-design/SKILL.md +0 -129
  196. package/templates/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
  197. package/templates/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
  198. package/templates/.agent/skills/game-development/pc-games/SKILL.md +0 -144
  199. package/templates/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
  200. package/templates/.agent/skills/game-development/web-games/SKILL.md +0 -150
  201. package/templates/.agent/skills/lint-and-validate/SKILL.md +0 -45
  202. package/templates/.agent/skills/lint-and-validate/scripts/lint_runner.py +0 -172
  203. package/templates/.agent/skills/lint-and-validate/scripts/type_coverage.py +0 -173
  204. package/templates/.agent/skills/mcp-builder/SKILL.md +0 -176
  205. package/templates/.agent/skills/nestjs-expert/SKILL.md +0 -552
  206. package/templates/.agent/skills/nextjs-best-practices/SKILL.md +0 -203
  207. package/templates/.agent/skills/nodejs-best-practices/SKILL.md +0 -333
  208. package/templates/.agent/skills/parallel-agents/SKILL.md +0 -175
  209. package/templates/.agent/skills/performance-profiling/SKILL.md +0 -143
  210. package/templates/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +0 -76
  211. package/templates/.agent/skills/powershell-windows/SKILL.md +0 -167
  212. package/templates/.agent/skills/prisma-expert/SKILL.md +0 -355
  213. package/templates/.agent/skills/python-patterns/SKILL.md +0 -441
  214. package/templates/.agent/skills/react-patterns/SKILL.md +0 -198
  215. package/templates/.agent/skills/red-team-tactics/SKILL.md +0 -199
  216. package/templates/.agent/skills/server-management/SKILL.md +0 -161
  217. package/templates/.agent/skills/systematic-debugging/SKILL.md +0 -109
  218. package/templates/.agent/skills/tdd-workflow/SKILL.md +0 -149
  219. package/templates/.agent/skills/testing-patterns/SKILL.md +0 -178
  220. package/templates/.agent/skills/testing-patterns/scripts/test_runner.py +0 -219
  221. package/templates/.agent/skills/typescript-expert/SKILL.md +0 -429
  222. package/templates/.agent/skills/vue-expert/SKILL.md +0 -374
  223. package/templates/.agent/skills/vulnerability-scanner/SKILL.md +0 -276
  224. package/templates/.agent/skills/vulnerability-scanner/checklists.md +0 -121
  225. package/templates/.agent/skills/vulnerability-scanner/scripts/security_scan.py +0 -458
  226. package/templates/.agent/skills/webapp-testing/SKILL.md +0 -187
  227. package/templates/.agent/skills/webapp-testing/scripts/playwright_runner.py +0 -173
  228. package/templates/.agent/workflows/debug.md +0 -103
  229. package/templates/.agent/workflows/deploy.md +0 -176
  230. package/templates/.agent/workflows/enhance.md +0 -63
  231. package/templates/.agent/workflows/test.md +0 -144
@@ -1,121 +0,0 @@
1
- # Security Checklists
2
-
3
- > Quick reference checklists for security audits. Use alongside vulnerability-scanner principles.
4
-
5
- ---
6
-
7
- ## OWASP Top 10 Audit Checklist
8
-
9
- ### A01: Broken Access Control
10
- - [ ] Authorization on all protected routes
11
- - [ ] Deny by default
12
- - [ ] Rate limiting implemented
13
- - [ ] CORS properly configured
14
-
15
- ### A02: Cryptographic Failures
16
- - [ ] Passwords hashed (bcrypt/argon2, cost 12+)
17
- - [ ] Sensitive data encrypted at rest
18
- - [ ] TLS 1.2+ for all connections
19
- - [ ] No secrets in code/logs
20
-
21
- ### A03: Injection
22
- - [ ] Parameterized queries
23
- - [ ] Input validation on all user data
24
- - [ ] Output encoding for XSS
25
- - [ ] No eval() or dynamic code execution
26
-
27
- ### A04: Insecure Design
28
- - [ ] Threat modeling done
29
- - [ ] Security requirements defined
30
- - [ ] Business logic validated
31
-
32
- ### A05: Security Misconfiguration
33
- - [ ] Unnecessary features disabled
34
- - [ ] Error messages sanitized
35
- - [ ] Security headers configured
36
- - [ ] Default credentials changed
37
-
38
- ### A06: Vulnerable Components
39
- - [ ] Dependencies up to date
40
- - [ ] No known vulnerabilities
41
- - [ ] Unused dependencies removed
42
-
43
- ### A07: Authentication Failures
44
- - [ ] MFA available
45
- - [ ] Session invalidation on logout
46
- - [ ] Session timeout implemented
47
- - [ ] Brute force protection
48
-
49
- ### A08: Integrity Failures
50
- - [ ] Dependency integrity verified
51
- - [ ] CI/CD pipeline secured
52
- - [ ] Update mechanism secured
53
-
54
- ### A09: Logging Failures
55
- - [ ] Security events logged
56
- - [ ] Logs protected
57
- - [ ] No sensitive data in logs
58
- - [ ] Alerting configured
59
-
60
- ### A10: SSRF
61
- - [ ] URL validation implemented
62
- - [ ] Allow-list for external calls
63
- - [ ] Network segmentation
64
-
65
- ---
66
-
67
- ## Authentication Checklist
68
-
69
- - [ ] Strong password policy
70
- - [ ] Account lockout
71
- - [ ] Secure password reset
72
- - [ ] Session management
73
- - [ ] Token expiration
74
- - [ ] Logout invalidation
75
-
76
- ---
77
-
78
- ## API Security Checklist
79
-
80
- - [ ] Authentication required
81
- - [ ] Authorization per endpoint
82
- - [ ] Input validation
83
- - [ ] Rate limiting
84
- - [ ] Output sanitization
85
- - [ ] Error handling
86
-
87
- ---
88
-
89
- ## Data Protection Checklist
90
-
91
- - [ ] Encryption at rest
92
- - [ ] Encryption in transit
93
- - [ ] Key management
94
- - [ ] Data minimization
95
- - [ ] Secure deletion
96
-
97
- ---
98
-
99
- ## Security Headers
100
-
101
- | Header | Purpose |
102
- |--------|---------|
103
- | **Content-Security-Policy** | XSS prevention |
104
- | **X-Content-Type-Options** | MIME sniffing |
105
- | **X-Frame-Options** | Clickjacking |
106
- | **Strict-Transport-Security** | Force HTTPS |
107
- | **Referrer-Policy** | Referrer control |
108
-
109
- ---
110
-
111
- ## Quick Audit Commands
112
-
113
- | Check | What to Look For |
114
- |-------|------------------|
115
- | Secrets in code | password, api_key, secret |
116
- | Dangerous patterns | eval, innerHTML, SQL concat |
117
- | Dependency issues | npm audit, snyk |
118
-
119
- ---
120
-
121
- > **Usage:** Copy relevant checklists into your PLAN.md or security report.
@@ -1,458 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Skill: vulnerability-scanner
4
- Script: security_scan.py
5
- Purpose: Validate that security principles from SKILL.md are applied correctly
6
- Usage: python security_scan.py <project_path> [--scan-type all|deps|secrets|patterns|config]
7
- Output: JSON with validation findings
8
-
9
- This script verifies:
10
- 1. Dependencies - Supply chain security (OWASP A03)
11
- 2. Secrets - No hardcoded credentials (OWASP A04)
12
- 3. Code Patterns - Dangerous patterns identified (OWASP A05)
13
- 4. Configuration - Security settings validated (OWASP A02)
14
- """
15
- import subprocess
16
- import json
17
- import os
18
- import sys
19
- import re
20
- import argparse
21
- from pathlib import Path
22
- from typing import Dict, List, Any
23
- from datetime import datetime
24
-
25
- # Fix Windows console encoding for Unicode output
26
- try:
27
- sys.stdout.reconfigure(encoding='utf-8', errors='replace')
28
- sys.stderr.reconfigure(encoding='utf-8', errors='replace')
29
- except AttributeError:
30
- pass # Python < 3.7
31
-
32
-
33
- # ============================================================================
34
- # CONFIGURATION
35
- # ============================================================================
36
-
37
- SECRET_PATTERNS = [
38
- # API Keys & Tokens
39
- (r'api[_-]?key\s*[=:]\s*["\'][^"\']{10,}["\']', "API Key", "high"),
40
- (r'token\s*[=:]\s*["\'][^"\']{10,}["\']', "Token", "high"),
41
- (r'bearer\s+[a-zA-Z0-9\-_.]+', "Bearer Token", "critical"),
42
-
43
- # Cloud Credentials
44
- (r'AKIA[0-9A-Z]{16}', "AWS Access Key", "critical"),
45
- (r'aws[_-]?secret[_-]?access[_-]?key\s*[=:]\s*["\'][^"\']+["\']', "AWS Secret", "critical"),
46
- (r'AZURE[_-]?[A-Z_]+\s*[=:]\s*["\'][^"\']+["\']', "Azure Credential", "critical"),
47
- (r'GOOGLE[_-]?[A-Z_]+\s*[=:]\s*["\'][^"\']+["\']', "GCP Credential", "critical"),
48
-
49
- # Database & Connections
50
- (r'password\s*[=:]\s*["\'][^"\']{4,}["\']', "Password", "high"),
51
- (r'(mongodb|postgres|mysql|redis):\/\/[^\s"\']+', "Database Connection String", "critical"),
52
-
53
- # Private Keys
54
- (r'-----BEGIN\s+(RSA|PRIVATE|EC)\s+KEY-----', "Private Key", "critical"),
55
- (r'ssh-rsa\s+[A-Za-z0-9+/]+', "SSH Key", "critical"),
56
-
57
- # JWT
58
- (r'eyJ[A-Za-z0-9-_]+\.eyJ[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+', "JWT Token", "high"),
59
- ]
60
-
61
- DANGEROUS_PATTERNS = [
62
- # Injection risks
63
- (r'eval\s*\(', "eval() usage", "critical", "Code Injection risk"),
64
- (r'exec\s*\(', "exec() usage", "critical", "Code Injection risk"),
65
- (r'new\s+Function\s*\(', "Function constructor", "high", "Code Injection risk"),
66
- (r'child_process\.exec\s*\(', "child_process.exec", "high", "Command Injection risk"),
67
- (r'subprocess\.call\s*\([^)]*shell\s*=\s*True', "subprocess with shell=True", "high", "Command Injection risk"),
68
-
69
- # XSS risks
70
- (r'dangerouslySetInnerHTML', "dangerouslySetInnerHTML", "high", "XSS risk"),
71
- (r'\.innerHTML\s*=', "innerHTML assignment", "medium", "XSS risk"),
72
- (r'document\.write\s*\(', "document.write", "medium", "XSS risk"),
73
-
74
- # SQL Injection indicators
75
- (r'["\'][^"\']*\+\s*[a-zA-Z_]+\s*\+\s*["\'].*(?:SELECT|INSERT|UPDATE|DELETE)', "SQL String Concat", "critical", "SQL Injection risk"),
76
- (r'f"[^"]*(?:SELECT|INSERT|UPDATE|DELETE)[^"]*\{', "SQL f-string", "critical", "SQL Injection risk"),
77
-
78
- # Insecure configurations
79
- (r'verify\s*=\s*False', "SSL Verify Disabled", "high", "MITM risk"),
80
- (r'--insecure', "Insecure flag", "medium", "Security disabled"),
81
- (r'disable[_-]?ssl', "SSL Disabled", "high", "MITM risk"),
82
-
83
- # Unsafe deserialization
84
- (r'pickle\.loads?\s*\(', "pickle usage", "high", "Deserialization risk"),
85
- (r'yaml\.load\s*\([^)]*\)(?!\s*,\s*Loader)', "Unsafe YAML load", "high", "Deserialization risk"),
86
- ]
87
-
88
- SKIP_DIRS = {'node_modules', '.git', 'dist', 'build', '__pycache__', '.venv', 'venv', '.next'}
89
- CODE_EXTENSIONS = {'.js', '.ts', '.jsx', '.tsx', '.py', '.go', '.java', '.rb', '.php'}
90
- CONFIG_EXTENSIONS = {'.json', '.yaml', '.yml', '.toml', '.env', '.env.local', '.env.development'}
91
-
92
-
93
- # ============================================================================
94
- # SCANNING FUNCTIONS
95
- # ============================================================================
96
-
97
- def scan_dependencies(project_path: str) -> Dict[str, Any]:
98
- """
99
- Validate supply chain security (OWASP A03).
100
- Checks: npm audit, lock file presence, dependency age.
101
- """
102
- results = {"tool": "dependency_scanner", "findings": [], "status": "[OK] Secure"}
103
-
104
- # Check for lock files
105
- lock_files = {
106
- "npm": ["package-lock.json", "npm-shrinkwrap.json"],
107
- "yarn": ["yarn.lock"],
108
- "pnpm": ["pnpm-lock.yaml"],
109
- "pip": ["requirements.txt", "Pipfile.lock", "poetry.lock"],
110
- }
111
-
112
- found_locks = []
113
- missing_locks = []
114
-
115
- for manager, files in lock_files.items():
116
- pkg_file = "package.json" if manager in ["npm", "yarn", "pnpm"] else "setup.py"
117
- pkg_path = Path(project_path) / pkg_file
118
-
119
- if pkg_path.exists() or (manager == "pip" and (Path(project_path) / "requirements.txt").exists()):
120
- has_lock = any((Path(project_path) / f).exists() for f in files)
121
- if has_lock:
122
- found_locks.append(manager)
123
- else:
124
- missing_locks.append(manager)
125
- results["findings"].append({
126
- "type": "Missing Lock File",
127
- "severity": "high",
128
- "message": f"{manager}: No lock file found. Supply chain integrity at risk."
129
- })
130
-
131
- # Run npm audit if applicable
132
- if (Path(project_path) / "package.json").exists():
133
- try:
134
- result = subprocess.run(
135
- ["npm", "audit", "--json"],
136
- cwd=project_path,
137
- capture_output=True,
138
- text=True,
139
- timeout=60
140
- )
141
-
142
- try:
143
- audit_data = json.loads(result.stdout)
144
- vulnerabilities = audit_data.get("vulnerabilities", {})
145
-
146
- severity_count = {"critical": 0, "high": 0, "moderate": 0, "low": 0}
147
- for vuln in vulnerabilities.values():
148
- sev = vuln.get("severity", "low").lower()
149
- if sev in severity_count:
150
- severity_count[sev] += 1
151
-
152
- if severity_count["critical"] > 0:
153
- results["status"] = "[!!] Critical vulnerabilities"
154
- results["findings"].append({
155
- "type": "npm audit",
156
- "severity": "critical",
157
- "message": f"{severity_count['critical']} critical vulnerabilities in dependencies"
158
- })
159
- elif severity_count["high"] > 0:
160
- results["status"] = "[!] High vulnerabilities"
161
- results["findings"].append({
162
- "type": "npm audit",
163
- "severity": "high",
164
- "message": f"{severity_count['high']} high severity vulnerabilities"
165
- })
166
-
167
- results["npm_audit"] = severity_count
168
-
169
- except json.JSONDecodeError:
170
- pass
171
-
172
- except (FileNotFoundError, subprocess.TimeoutExpired):
173
- pass
174
-
175
- if not results["findings"]:
176
- results["status"] = "[OK] Supply chain checks passed"
177
-
178
- return results
179
-
180
-
181
- def scan_secrets(project_path: str) -> Dict[str, Any]:
182
- """
183
- Validate no hardcoded secrets (OWASP A04).
184
- Checks: API keys, tokens, passwords, cloud credentials.
185
- """
186
- results = {
187
- "tool": "secret_scanner",
188
- "findings": [],
189
- "status": "[OK] No secrets detected",
190
- "scanned_files": 0,
191
- "by_severity": {"critical": 0, "high": 0, "medium": 0}
192
- }
193
-
194
- for root, dirs, files in os.walk(project_path):
195
- dirs[:] = [d for d in dirs if d not in SKIP_DIRS]
196
-
197
- for file in files:
198
- ext = Path(file).suffix.lower()
199
- if ext not in CODE_EXTENSIONS and ext not in CONFIG_EXTENSIONS:
200
- continue
201
-
202
- filepath = Path(root) / file
203
- results["scanned_files"] += 1
204
-
205
- try:
206
- with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
207
- content = f.read()
208
-
209
- for pattern, secret_type, severity in SECRET_PATTERNS:
210
- matches = re.findall(pattern, content, re.IGNORECASE)
211
- if matches:
212
- results["findings"].append({
213
- "file": str(filepath.relative_to(project_path)),
214
- "type": secret_type,
215
- "severity": severity,
216
- "count": len(matches)
217
- })
218
- results["by_severity"][severity] += len(matches)
219
-
220
- except Exception:
221
- pass
222
-
223
- if results["by_severity"]["critical"] > 0:
224
- results["status"] = "[!!] CRITICAL: Secrets exposed!"
225
- elif results["by_severity"]["high"] > 0:
226
- results["status"] = "[!] HIGH: Secrets found"
227
- elif sum(results["by_severity"].values()) > 0:
228
- results["status"] = "[?] Potential secrets detected"
229
-
230
- # Limit findings for output
231
- results["findings"] = results["findings"][:15]
232
-
233
- return results
234
-
235
-
236
- def scan_code_patterns(project_path: str) -> Dict[str, Any]:
237
- """
238
- Validate dangerous code patterns (OWASP A05).
239
- Checks: Injection risks, XSS, unsafe deserialization.
240
- """
241
- results = {
242
- "tool": "pattern_scanner",
243
- "findings": [],
244
- "status": "[OK] No dangerous patterns",
245
- "scanned_files": 0,
246
- "by_category": {}
247
- }
248
-
249
- for root, dirs, files in os.walk(project_path):
250
- dirs[:] = [d for d in dirs if d not in SKIP_DIRS]
251
-
252
- for file in files:
253
- ext = Path(file).suffix.lower()
254
- if ext not in CODE_EXTENSIONS:
255
- continue
256
-
257
- filepath = Path(root) / file
258
- results["scanned_files"] += 1
259
-
260
- try:
261
- with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
262
- lines = f.readlines()
263
-
264
- for line_num, line in enumerate(lines, 1):
265
- for pattern, name, severity, category in DANGEROUS_PATTERNS:
266
- if re.search(pattern, line, re.IGNORECASE):
267
- results["findings"].append({
268
- "file": str(filepath.relative_to(project_path)),
269
- "line": line_num,
270
- "pattern": name,
271
- "severity": severity,
272
- "category": category,
273
- "snippet": line.strip()[:80]
274
- })
275
- results["by_category"][category] = results["by_category"].get(category, 0) + 1
276
-
277
- except Exception:
278
- pass
279
-
280
- critical_count = sum(1 for f in results["findings"] if f["severity"] == "critical")
281
- high_count = sum(1 for f in results["findings"] if f["severity"] == "high")
282
-
283
- if critical_count > 0:
284
- results["status"] = f"[!!] CRITICAL: {critical_count} dangerous patterns"
285
- elif high_count > 0:
286
- results["status"] = f"[!] HIGH: {high_count} risky patterns"
287
- elif results["findings"]:
288
- results["status"] = "[?] Some patterns need review"
289
-
290
- # Limit findings
291
- results["findings"] = results["findings"][:20]
292
-
293
- return results
294
-
295
-
296
- def scan_configuration(project_path: str) -> Dict[str, Any]:
297
- """
298
- Validate security configuration (OWASP A02).
299
- Checks: Security headers, CORS, debug modes.
300
- """
301
- results = {
302
- "tool": "config_scanner",
303
- "findings": [],
304
- "status": "[OK] Configuration secure",
305
- "checks": {}
306
- }
307
-
308
- # Check common config files for issues
309
- config_issues = [
310
- (r'"DEBUG"\s*:\s*true', "Debug mode enabled", "high"),
311
- (r'debug\s*=\s*True', "Debug mode enabled", "high"),
312
- (r'NODE_ENV.*development', "Development mode in config", "medium"),
313
- (r'"CORS_ALLOW_ALL".*true', "CORS allow all origins", "high"),
314
- (r'"Access-Control-Allow-Origin".*\*', "CORS wildcard", "high"),
315
- (r'allowCredentials.*true.*origin.*\*', "Dangerous CORS combo", "critical"),
316
- ]
317
-
318
- for root, dirs, files in os.walk(project_path):
319
- dirs[:] = [d for d in dirs if d not in SKIP_DIRS]
320
-
321
- for file in files:
322
- ext = Path(file).suffix.lower()
323
- if ext not in CONFIG_EXTENSIONS and file not in ['next.config.js', 'webpack.config.js', '.eslintrc.js']:
324
- continue
325
-
326
- filepath = Path(root) / file
327
-
328
- try:
329
- with open(filepath, 'r', encoding='utf-8', errors='ignore') as f:
330
- content = f.read()
331
-
332
- for pattern, issue, severity in config_issues:
333
- if re.search(pattern, content, re.IGNORECASE):
334
- results["findings"].append({
335
- "file": str(filepath.relative_to(project_path)),
336
- "issue": issue,
337
- "severity": severity
338
- })
339
-
340
- except Exception:
341
- pass
342
-
343
- # Check for security header configurations
344
- header_files = ["next.config.js", "next.config.mjs", "middleware.ts", "nginx.conf"]
345
- for hf in header_files:
346
- hf_path = Path(project_path) / hf
347
- if hf_path.exists():
348
- results["checks"]["security_headers_config"] = True
349
- break
350
- else:
351
- results["checks"]["security_headers_config"] = False
352
- results["findings"].append({
353
- "issue": "No security headers configuration found",
354
- "severity": "medium",
355
- "recommendation": "Configure CSP, HSTS, X-Frame-Options headers"
356
- })
357
-
358
- if any(f["severity"] == "critical" for f in results["findings"]):
359
- results["status"] = "[!!] CRITICAL: Configuration issues"
360
- elif any(f["severity"] == "high" for f in results["findings"]):
361
- results["status"] = "[!] HIGH: Configuration review needed"
362
- elif results["findings"]:
363
- results["status"] = "[?] Minor configuration issues"
364
-
365
- return results
366
-
367
-
368
- # ============================================================================
369
- # MAIN
370
- # ============================================================================
371
-
372
- def run_full_scan(project_path: str, scan_type: str = "all") -> Dict[str, Any]:
373
- """Execute security validation scans."""
374
-
375
- report = {
376
- "project": project_path,
377
- "timestamp": datetime.now().isoformat(),
378
- "scan_type": scan_type,
379
- "scans": {},
380
- "summary": {
381
- "total_findings": 0,
382
- "critical": 0,
383
- "high": 0,
384
- "overall_status": "[OK] SECURE"
385
- }
386
- }
387
-
388
- scanners = {
389
- "deps": ("dependencies", scan_dependencies),
390
- "secrets": ("secrets", scan_secrets),
391
- "patterns": ("code_patterns", scan_code_patterns),
392
- "config": ("configuration", scan_configuration),
393
- }
394
-
395
- for key, (name, scanner) in scanners.items():
396
- if scan_type == "all" or scan_type == key:
397
- result = scanner(project_path)
398
- report["scans"][name] = result
399
-
400
- findings_count = len(result.get("findings", []))
401
- report["summary"]["total_findings"] += findings_count
402
-
403
- for finding in result.get("findings", []):
404
- sev = finding.get("severity", "low")
405
- if sev == "critical":
406
- report["summary"]["critical"] += 1
407
- elif sev == "high":
408
- report["summary"]["high"] += 1
409
-
410
- # Determine overall status
411
- if report["summary"]["critical"] > 0:
412
- report["summary"]["overall_status"] = "[!!] CRITICAL ISSUES FOUND"
413
- elif report["summary"]["high"] > 0:
414
- report["summary"]["overall_status"] = "[!] HIGH RISK ISSUES"
415
- elif report["summary"]["total_findings"] > 0:
416
- report["summary"]["overall_status"] = "[?] REVIEW RECOMMENDED"
417
-
418
- return report
419
-
420
-
421
- def main():
422
- parser = argparse.ArgumentParser(
423
- description="Validate security principles from vulnerability-scanner skill"
424
- )
425
- parser.add_argument("project_path", nargs="?", default=".", help="Project directory to scan")
426
- parser.add_argument("--scan-type", choices=["all", "deps", "secrets", "patterns", "config"],
427
- default="all", help="Type of scan to run")
428
- parser.add_argument("--output", choices=["json", "summary"], default="json",
429
- help="Output format")
430
-
431
- args = parser.parse_args()
432
-
433
- if not os.path.isdir(args.project_path):
434
- print(json.dumps({"error": f"Directory not found: {args.project_path}"}))
435
- sys.exit(1)
436
-
437
- result = run_full_scan(args.project_path, args.scan_type)
438
-
439
- if args.output == "summary":
440
- print(f"\n{'='*60}")
441
- print(f"Security Scan: {result['project']}")
442
- print(f"{'='*60}")
443
- print(f"Status: {result['summary']['overall_status']}")
444
- print(f"Total Findings: {result['summary']['total_findings']}")
445
- print(f" Critical: {result['summary']['critical']}")
446
- print(f" High: {result['summary']['high']}")
447
- print(f"{'='*60}\n")
448
-
449
- for scan_name, scan_result in result['scans'].items():
450
- print(f"\n{scan_name.upper()}: {scan_result['status']}")
451
- for finding in scan_result.get('findings', [])[:5]:
452
- print(f" - {finding}")
453
- else:
454
- print(json.dumps(result, indent=2))
455
-
456
-
457
- if __name__ == "__main__":
458
- main()