bps-kit 1.0.1 → 1.0.2

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 (368) hide show
  1. package/package.json +1 -1
  2. package/templates/.agents/agents/backend-specialist.md +263 -0
  3. package/templates/.agents/agents/code-archaeologist.md +106 -0
  4. package/templates/.agents/agents/database-architect.md +226 -0
  5. package/templates/.agents/agents/debugger.md +225 -0
  6. package/templates/.agents/agents/devops-engineer.md +242 -0
  7. package/templates/.agents/agents/documentation-writer.md +104 -0
  8. package/templates/.agents/agents/explorer-agent.md +73 -0
  9. package/templates/.agents/agents/frontend-specialist.md +593 -0
  10. package/templates/.agents/agents/game-developer.md +162 -0
  11. package/templates/.agents/agents/mobile-developer.md +377 -0
  12. package/templates/.agents/agents/orchestrator.md +416 -0
  13. package/templates/.agents/agents/penetration-tester.md +188 -0
  14. package/templates/.agents/agents/performance-optimizer.md +187 -0
  15. package/templates/.agents/agents/product-manager.md +112 -0
  16. package/templates/.agents/agents/product-owner.md +95 -0
  17. package/templates/.agents/agents/project-planner.md +406 -0
  18. package/templates/.agents/agents/qa-automation-engineer.md +103 -0
  19. package/templates/.agents/agents/security-auditor.md +170 -0
  20. package/templates/.agents/agents/seo-specialist.md +111 -0
  21. package/templates/.agents/agents/test-engineer.md +158 -0
  22. package/templates/.agents/rules/GEMINI.md +219 -0
  23. package/templates/.agents/scripts/auto_preview.py +148 -0
  24. package/templates/.agents/scripts/checklist.py +217 -0
  25. package/templates/.agents/scripts/session_manager.py +120 -0
  26. package/templates/.agents/scripts/verify_all.py +327 -0
  27. package/templates/.agents/workflows/brainstorm.md +113 -0
  28. package/templates/.agents/workflows/create.md +59 -0
  29. package/templates/.agents/workflows/debug.md +103 -0
  30. package/templates/.agents/workflows/deploy.md +176 -0
  31. package/templates/.agents/workflows/enhance.md +63 -0
  32. package/templates/.agents/workflows/orchestrate.md +237 -0
  33. package/templates/.agents/workflows/plan.md +89 -0
  34. package/templates/.agents/workflows/preview.md +81 -0
  35. package/templates/.agents/workflows/setup-brain.md +39 -0
  36. package/templates/.agents/workflows/status.md +86 -0
  37. package/templates/.agents/workflows/test.md +144 -0
  38. package/templates/.agents/workflows/ui-ux-pro-max.md +296 -0
  39. package/templates/skills_normal/api-patterns/scripts/api_validator.py +211 -0
  40. package/templates/skills_normal/database-design/scripts/schema_validator.py +172 -0
  41. package/templates/skills_normal/frontend-design/scripts/accessibility_checker.py +183 -0
  42. package/templates/skills_normal/frontend-design/scripts/ux_audit.py +722 -0
  43. package/templates/skills_normal/git-pushing/scripts/smart_commit.sh +19 -0
  44. package/templates/skills_normal/lint-and-validate/scripts/lint_runner.py +184 -0
  45. package/templates/skills_normal/lint-and-validate/scripts/type_coverage.py +173 -0
  46. package/templates/skills_normal/performance-profiling/scripts/lighthouse_audit.py +76 -0
  47. package/templates/skills_normal/senior-fullstack/scripts/code_quality_analyzer.py +114 -0
  48. package/templates/skills_normal/senior-fullstack/scripts/fullstack_scaffolder.py +114 -0
  49. package/templates/skills_normal/senior-fullstack/scripts/project_scaffolder.py +114 -0
  50. package/templates/skills_normal/seo-fundamentals/scripts/seo_checker.py +219 -0
  51. package/templates/skills_normal/testing-patterns/scripts/test_runner.py +219 -0
  52. package/templates/skills_normal/vulnerability-scanner/scripts/security_scan.py +458 -0
  53. package/templates/vault/007/scripts/config.py +472 -0
  54. package/templates/vault/007/scripts/full_audit.py +1306 -0
  55. package/templates/vault/007/scripts/quick_scan.py +481 -0
  56. package/templates/vault/007/scripts/requirements.txt +26 -0
  57. package/templates/vault/007/scripts/scanners/__init__.py +0 -0
  58. package/templates/vault/007/scripts/scanners/dependency_scanner.py +1305 -0
  59. package/templates/vault/007/scripts/scanners/injection_scanner.py +1104 -0
  60. package/templates/vault/007/scripts/scanners/secrets_scanner.py +1008 -0
  61. package/templates/vault/007/scripts/score_calculator.py +693 -0
  62. package/templates/vault/agent-orchestrator/scripts/match_skills.py +329 -0
  63. package/templates/vault/agent-orchestrator/scripts/orchestrate.py +304 -0
  64. package/templates/vault/agent-orchestrator/scripts/requirements.txt +1 -0
  65. package/templates/vault/agent-orchestrator/scripts/scan_registry.py +508 -0
  66. package/templates/vault/ai-studio-image/scripts/config.py +613 -0
  67. package/templates/vault/ai-studio-image/scripts/generate.py +630 -0
  68. package/templates/vault/ai-studio-image/scripts/prompt_engine.py +424 -0
  69. package/templates/vault/ai-studio-image/scripts/requirements.txt +4 -0
  70. package/templates/vault/ai-studio-image/scripts/templates.py +349 -0
  71. package/templates/vault/android_ui_verification/scripts/verify_ui.sh +32 -0
  72. package/templates/vault/apify-audience-analysis/reference/scripts/run_actor.js +363 -0
  73. package/templates/vault/apify-brand-reputation-monitoring/reference/scripts/run_actor.js +363 -0
  74. package/templates/vault/apify-competitor-intelligence/reference/scripts/run_actor.js +363 -0
  75. package/templates/vault/apify-content-analytics/reference/scripts/run_actor.js +363 -0
  76. package/templates/vault/apify-ecommerce/reference/scripts/package.json +3 -0
  77. package/templates/vault/apify-ecommerce/reference/scripts/run_actor.js +369 -0
  78. package/templates/vault/apify-influencer-discovery/reference/scripts/run_actor.js +363 -0
  79. package/templates/vault/apify-lead-generation/reference/scripts/run_actor.js +363 -0
  80. package/templates/vault/apify-market-research/reference/scripts/run_actor.js +363 -0
  81. package/templates/vault/apify-trend-analysis/reference/scripts/run_actor.js +363 -0
  82. package/templates/vault/apify-ultimate-scraper/reference/scripts/run_actor.js +363 -0
  83. package/templates/vault/audio-transcriber/scripts/install-requirements.sh +190 -0
  84. package/templates/vault/audio-transcriber/scripts/transcribe.py +486 -0
  85. package/templates/vault/claude-monitor/scripts/api_bench.py +240 -0
  86. package/templates/vault/claude-monitor/scripts/config.py +69 -0
  87. package/templates/vault/claude-monitor/scripts/health_check.py +362 -0
  88. package/templates/vault/claude-monitor/scripts/monitor.py +296 -0
  89. package/templates/vault/content-creator/scripts/brand_voice_analyzer.py +185 -0
  90. package/templates/vault/content-creator/scripts/seo_optimizer.py +419 -0
  91. package/templates/vault/context-agent/scripts/active_context.py +227 -0
  92. package/templates/vault/context-agent/scripts/compressor.py +149 -0
  93. package/templates/vault/context-agent/scripts/config.py +69 -0
  94. package/templates/vault/context-agent/scripts/context_loader.py +155 -0
  95. package/templates/vault/context-agent/scripts/context_manager.py +302 -0
  96. package/templates/vault/context-agent/scripts/models.py +103 -0
  97. package/templates/vault/context-agent/scripts/project_registry.py +132 -0
  98. package/templates/vault/context-agent/scripts/requirements.txt +6 -0
  99. package/templates/vault/context-agent/scripts/search.py +115 -0
  100. package/templates/vault/context-agent/scripts/session_parser.py +206 -0
  101. package/templates/vault/context-agent/scripts/session_summary.py +319 -0
  102. package/templates/vault/context-guardian/scripts/context_snapshot.py +229 -0
  103. package/templates/vault/docx/ooxml/scripts/pack.py +159 -0
  104. package/templates/vault/docx/ooxml/scripts/unpack.py +29 -0
  105. package/templates/vault/docx/ooxml/scripts/validate.py +69 -0
  106. package/templates/vault/docx/ooxml/scripts/validation/__init__.py +15 -0
  107. package/templates/vault/docx/ooxml/scripts/validation/base.py +951 -0
  108. package/templates/vault/docx/ooxml/scripts/validation/docx.py +274 -0
  109. package/templates/vault/docx/ooxml/scripts/validation/pptx.py +315 -0
  110. package/templates/vault/docx/ooxml/scripts/validation/redlining.py +279 -0
  111. package/templates/vault/docx/scripts/__init__.py +1 -0
  112. package/templates/vault/docx/scripts/document.py +1276 -0
  113. package/templates/vault/docx/scripts/templates/comments.xml +3 -0
  114. package/templates/vault/docx/scripts/templates/commentsExtended.xml +3 -0
  115. package/templates/vault/docx/scripts/templates/commentsExtensible.xml +3 -0
  116. package/templates/vault/docx/scripts/templates/commentsIds.xml +3 -0
  117. package/templates/vault/docx/scripts/templates/people.xml +3 -0
  118. package/templates/vault/docx/scripts/utilities.py +374 -0
  119. package/templates/vault/docx-official/ooxml/scripts/pack.py +159 -0
  120. package/templates/vault/docx-official/ooxml/scripts/unpack.py +29 -0
  121. package/templates/vault/docx-official/ooxml/scripts/validate.py +69 -0
  122. package/templates/vault/docx-official/ooxml/scripts/validation/__init__.py +15 -0
  123. package/templates/vault/docx-official/ooxml/scripts/validation/base.py +951 -0
  124. package/templates/vault/docx-official/ooxml/scripts/validation/docx.py +274 -0
  125. package/templates/vault/docx-official/ooxml/scripts/validation/pptx.py +315 -0
  126. package/templates/vault/docx-official/ooxml/scripts/validation/redlining.py +279 -0
  127. package/templates/vault/docx-official/scripts/__init__.py +1 -0
  128. package/templates/vault/docx-official/scripts/document.py +1276 -0
  129. package/templates/vault/docx-official/scripts/templates/comments.xml +3 -0
  130. package/templates/vault/docx-official/scripts/templates/commentsExtended.xml +3 -0
  131. package/templates/vault/docx-official/scripts/templates/commentsExtensible.xml +3 -0
  132. package/templates/vault/docx-official/scripts/templates/commentsIds.xml +3 -0
  133. package/templates/vault/docx-official/scripts/templates/people.xml +3 -0
  134. package/templates/vault/docx-official/scripts/utilities.py +374 -0
  135. package/templates/vault/geo-fundamentals/scripts/geo_checker.py +289 -0
  136. package/templates/vault/helm-chart-scaffolding/scripts/validate-chart.sh +244 -0
  137. package/templates/vault/i18n-localization/scripts/i18n_checker.py +241 -0
  138. package/templates/vault/instagram/scripts/account_setup.py +233 -0
  139. package/templates/vault/instagram/scripts/analyze.py +221 -0
  140. package/templates/vault/instagram/scripts/api_client.py +444 -0
  141. package/templates/vault/instagram/scripts/auth.py +411 -0
  142. package/templates/vault/instagram/scripts/comments.py +160 -0
  143. package/templates/vault/instagram/scripts/config.py +111 -0
  144. package/templates/vault/instagram/scripts/db.py +467 -0
  145. package/templates/vault/instagram/scripts/export.py +138 -0
  146. package/templates/vault/instagram/scripts/governance.py +233 -0
  147. package/templates/vault/instagram/scripts/hashtags.py +114 -0
  148. package/templates/vault/instagram/scripts/insights.py +170 -0
  149. package/templates/vault/instagram/scripts/media.py +65 -0
  150. package/templates/vault/instagram/scripts/messages.py +103 -0
  151. package/templates/vault/instagram/scripts/profile.py +58 -0
  152. package/templates/vault/instagram/scripts/publish.py +449 -0
  153. package/templates/vault/instagram/scripts/requirements.txt +5 -0
  154. package/templates/vault/instagram/scripts/run_all.py +189 -0
  155. package/templates/vault/instagram/scripts/schedule.py +189 -0
  156. package/templates/vault/instagram/scripts/serve_api.py +234 -0
  157. package/templates/vault/instagram/scripts/templates.py +155 -0
  158. package/templates/vault/junta-leiloeiros/scripts/db.py +216 -0
  159. package/templates/vault/junta-leiloeiros/scripts/export.py +137 -0
  160. package/templates/vault/junta-leiloeiros/scripts/requirements.txt +15 -0
  161. package/templates/vault/junta-leiloeiros/scripts/run_all.py +190 -0
  162. package/templates/vault/junta-leiloeiros/scripts/scraper/__init__.py +4 -0
  163. package/templates/vault/junta-leiloeiros/scripts/scraper/base_scraper.py +209 -0
  164. package/templates/vault/junta-leiloeiros/scripts/scraper/generic_scraper.py +110 -0
  165. package/templates/vault/junta-leiloeiros/scripts/scraper/jucap.py +110 -0
  166. package/templates/vault/junta-leiloeiros/scripts/scraper/juceac.py +72 -0
  167. package/templates/vault/junta-leiloeiros/scripts/scraper/juceal.py +72 -0
  168. package/templates/vault/junta-leiloeiros/scripts/scraper/juceb.py +68 -0
  169. package/templates/vault/junta-leiloeiros/scripts/scraper/jucec.py +63 -0
  170. package/templates/vault/junta-leiloeiros/scripts/scraper/jucema.py +211 -0
  171. package/templates/vault/junta-leiloeiros/scripts/scraper/jucemg.py +218 -0
  172. package/templates/vault/junta-leiloeiros/scripts/scraper/jucep.py +70 -0
  173. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepa.py +74 -0
  174. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepar.py +80 -0
  175. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepe.py +78 -0
  176. package/templates/vault/junta-leiloeiros/scripts/scraper/jucepi.py +69 -0
  177. package/templates/vault/junta-leiloeiros/scripts/scraper/jucer.py +256 -0
  178. package/templates/vault/junta-leiloeiros/scripts/scraper/jucerja.py +170 -0
  179. package/templates/vault/junta-leiloeiros/scripts/scraper/jucern.py +71 -0
  180. package/templates/vault/junta-leiloeiros/scripts/scraper/jucesc.py +89 -0
  181. package/templates/vault/junta-leiloeiros/scripts/scraper/jucesp.py +233 -0
  182. package/templates/vault/junta-leiloeiros/scripts/scraper/jucetins.py +134 -0
  183. package/templates/vault/junta-leiloeiros/scripts/scraper/jucis_df.py +63 -0
  184. package/templates/vault/junta-leiloeiros/scripts/scraper/jucisrs.py +299 -0
  185. package/templates/vault/junta-leiloeiros/scripts/scraper/states.py +99 -0
  186. package/templates/vault/junta-leiloeiros/scripts/serve_api.py +164 -0
  187. package/templates/vault/junta-leiloeiros/scripts/web_scraper_fallback.py +233 -0
  188. package/templates/vault/last30days/scripts/last30days.py +521 -0
  189. package/templates/vault/last30days/scripts/lib/__init__.py +1 -0
  190. package/templates/vault/last30days/scripts/lib/cache.py +152 -0
  191. package/templates/vault/last30days/scripts/lib/dates.py +124 -0
  192. package/templates/vault/last30days/scripts/lib/dedupe.py +120 -0
  193. package/templates/vault/last30days/scripts/lib/env.py +149 -0
  194. package/templates/vault/last30days/scripts/lib/http.py +152 -0
  195. package/templates/vault/last30days/scripts/lib/models.py +175 -0
  196. package/templates/vault/last30days/scripts/lib/normalize.py +160 -0
  197. package/templates/vault/last30days/scripts/lib/openai_reddit.py +230 -0
  198. package/templates/vault/last30days/scripts/lib/reddit_enrich.py +232 -0
  199. package/templates/vault/last30days/scripts/lib/render.py +383 -0
  200. package/templates/vault/last30days/scripts/lib/schema.py +336 -0
  201. package/templates/vault/last30days/scripts/lib/score.py +311 -0
  202. package/templates/vault/last30days/scripts/lib/ui.py +324 -0
  203. package/templates/vault/last30days/scripts/lib/websearch.py +401 -0
  204. package/templates/vault/last30days/scripts/lib/xai_x.py +217 -0
  205. package/templates/vault/leiloeiro-avaliacao/scripts/governance.py +106 -0
  206. package/templates/vault/leiloeiro-avaliacao/scripts/requirements.txt +1 -0
  207. package/templates/vault/leiloeiro-edital/scripts/governance.py +106 -0
  208. package/templates/vault/leiloeiro-edital/scripts/requirements.txt +1 -0
  209. package/templates/vault/leiloeiro-ia/scripts/governance.py +106 -0
  210. package/templates/vault/leiloeiro-ia/scripts/requirements.txt +1 -0
  211. package/templates/vault/leiloeiro-juridico/scripts/governance.py +106 -0
  212. package/templates/vault/leiloeiro-juridico/scripts/requirements.txt +1 -0
  213. package/templates/vault/leiloeiro-mercado/scripts/governance.py +106 -0
  214. package/templates/vault/leiloeiro-mercado/scripts/requirements.txt +1 -0
  215. package/templates/vault/leiloeiro-risco/scripts/governance.py +106 -0
  216. package/templates/vault/leiloeiro-risco/scripts/requirements.txt +1 -0
  217. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/database.ts +24 -0
  218. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/db.ts +35 -0
  219. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/index.ts +2 -0
  220. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/migrations.ts +31 -0
  221. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/db/schema.sql +8 -0
  222. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/index.ts +44 -0
  223. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/routes/todos.ts +155 -0
  224. package/templates/vault/loki-mode/examples/todo-app-generated/backend/src/types/index.ts +35 -0
  225. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/App.css +384 -0
  226. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/App.tsx +81 -0
  227. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/api/todos.ts +57 -0
  228. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/ConfirmDialog.tsx +26 -0
  229. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/EmptyState.tsx +8 -0
  230. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/TodoForm.tsx +43 -0
  231. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/TodoItem.tsx +36 -0
  232. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/components/TodoList.tsx +27 -0
  233. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/hooks/useTodos.ts +81 -0
  234. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/index.css +48 -0
  235. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/main.tsx +10 -0
  236. package/templates/vault/loki-mode/examples/todo-app-generated/frontend/src/vite-env.d.ts +1 -0
  237. package/templates/vault/loki-mode/scripts/export-to-vibe-kanban.sh +178 -0
  238. package/templates/vault/loki-mode/scripts/loki-wrapper.sh +281 -0
  239. package/templates/vault/loki-mode/scripts/take-screenshots.js +55 -0
  240. package/templates/vault/matematico-tao/scripts/complexity_analyzer.py +544 -0
  241. package/templates/vault/matematico-tao/scripts/dependency_graph.py +538 -0
  242. package/templates/vault/mcp-builder/scripts/connections.py +151 -0
  243. package/templates/vault/mcp-builder/scripts/evaluation.py +373 -0
  244. package/templates/vault/mcp-builder/scripts/example_evaluation.xml +22 -0
  245. package/templates/vault/mcp-builder/scripts/requirements.txt +2 -0
  246. package/templates/vault/mobile-design/scripts/mobile_audit.py +670 -0
  247. package/templates/vault/notebooklm/scripts/__init__.py +81 -0
  248. package/templates/vault/notebooklm/scripts/ask_question.py +256 -0
  249. package/templates/vault/notebooklm/scripts/auth_manager.py +358 -0
  250. package/templates/vault/notebooklm/scripts/browser_session.py +255 -0
  251. package/templates/vault/notebooklm/scripts/browser_utils.py +107 -0
  252. package/templates/vault/notebooklm/scripts/cleanup_manager.py +302 -0
  253. package/templates/vault/notebooklm/scripts/config.py +44 -0
  254. package/templates/vault/notebooklm/scripts/notebook_manager.py +410 -0
  255. package/templates/vault/notebooklm/scripts/run.py +102 -0
  256. package/templates/vault/notebooklm/scripts/setup_environment.py +204 -0
  257. package/templates/vault/pdf/scripts/check_bounding_boxes.py +70 -0
  258. package/templates/vault/pdf/scripts/check_bounding_boxes_test.py +226 -0
  259. package/templates/vault/pdf/scripts/check_fillable_fields.py +12 -0
  260. package/templates/vault/pdf/scripts/convert_pdf_to_images.py +35 -0
  261. package/templates/vault/pdf/scripts/create_validation_image.py +41 -0
  262. package/templates/vault/pdf/scripts/extract_form_field_info.py +152 -0
  263. package/templates/vault/pdf/scripts/fill_fillable_fields.py +114 -0
  264. package/templates/vault/pdf/scripts/fill_pdf_form_with_annotations.py +108 -0
  265. package/templates/vault/pdf-official/scripts/check_bounding_boxes.py +70 -0
  266. package/templates/vault/pdf-official/scripts/check_bounding_boxes_test.py +226 -0
  267. package/templates/vault/pdf-official/scripts/check_fillable_fields.py +12 -0
  268. package/templates/vault/pdf-official/scripts/convert_pdf_to_images.py +35 -0
  269. package/templates/vault/pdf-official/scripts/create_validation_image.py +41 -0
  270. package/templates/vault/pdf-official/scripts/extract_form_field_info.py +152 -0
  271. package/templates/vault/pdf-official/scripts/fill_fillable_fields.py +114 -0
  272. package/templates/vault/pdf-official/scripts/fill_pdf_form_with_annotations.py +108 -0
  273. package/templates/vault/planning-with-files/scripts/check-complete.sh +44 -0
  274. package/templates/vault/planning-with-files/scripts/init-session.sh +120 -0
  275. package/templates/vault/pptx/ooxml/scripts/pack.py +159 -0
  276. package/templates/vault/pptx/ooxml/scripts/unpack.py +29 -0
  277. package/templates/vault/pptx/ooxml/scripts/validate.py +69 -0
  278. package/templates/vault/pptx/ooxml/scripts/validation/__init__.py +15 -0
  279. package/templates/vault/pptx/ooxml/scripts/validation/base.py +951 -0
  280. package/templates/vault/pptx/ooxml/scripts/validation/docx.py +274 -0
  281. package/templates/vault/pptx/ooxml/scripts/validation/pptx.py +315 -0
  282. package/templates/vault/pptx/ooxml/scripts/validation/redlining.py +279 -0
  283. package/templates/vault/pptx/scripts/html2pptx.js +979 -0
  284. package/templates/vault/pptx/scripts/inventory.py +1020 -0
  285. package/templates/vault/pptx/scripts/rearrange.py +231 -0
  286. package/templates/vault/pptx/scripts/replace.py +385 -0
  287. package/templates/vault/pptx/scripts/thumbnail.py +450 -0
  288. package/templates/vault/pptx-official/ooxml/scripts/pack.py +159 -0
  289. package/templates/vault/pptx-official/ooxml/scripts/unpack.py +29 -0
  290. package/templates/vault/pptx-official/ooxml/scripts/validate.py +69 -0
  291. package/templates/vault/pptx-official/ooxml/scripts/validation/__init__.py +15 -0
  292. package/templates/vault/pptx-official/ooxml/scripts/validation/base.py +951 -0
  293. package/templates/vault/pptx-official/ooxml/scripts/validation/docx.py +274 -0
  294. package/templates/vault/pptx-official/ooxml/scripts/validation/pptx.py +315 -0
  295. package/templates/vault/pptx-official/ooxml/scripts/validation/redlining.py +279 -0
  296. package/templates/vault/pptx-official/scripts/html2pptx.js +979 -0
  297. package/templates/vault/pptx-official/scripts/inventory.py +1020 -0
  298. package/templates/vault/pptx-official/scripts/rearrange.py +231 -0
  299. package/templates/vault/pptx-official/scripts/replace.py +385 -0
  300. package/templates/vault/pptx-official/scripts/thumbnail.py +450 -0
  301. package/templates/vault/product-manager-toolkit/scripts/customer_interview_analyzer.py +441 -0
  302. package/templates/vault/product-manager-toolkit/scripts/rice_prioritizer.py +296 -0
  303. package/templates/vault/prompt-engineering-patterns/scripts/optimize-prompt.py +279 -0
  304. package/templates/vault/scripts/.skill_cache.json +7538 -0
  305. package/templates/vault/scripts/skill_search.py +228 -0
  306. package/templates/vault/senior-architect/scripts/architecture_diagram_generator.py +114 -0
  307. package/templates/vault/senior-architect/scripts/dependency_analyzer.py +114 -0
  308. package/templates/vault/senior-architect/scripts/project_architect.py +114 -0
  309. package/templates/vault/shopify-development/scripts/requirements.txt +19 -0
  310. package/templates/vault/shopify-development/scripts/shopify_graphql.py +428 -0
  311. package/templates/vault/shopify-development/scripts/shopify_init.py +441 -0
  312. package/templates/vault/shopify-development/scripts/tests/test_shopify_init.py +379 -0
  313. package/templates/vault/skill-creator/scripts/init_skill.py +303 -0
  314. package/templates/vault/skill-creator/scripts/package_skill.py +110 -0
  315. package/templates/vault/skill-creator/scripts/quick_validate.py +95 -0
  316. package/templates/vault/skill-installer/scripts/detect_skills.py +318 -0
  317. package/templates/vault/skill-installer/scripts/install_skill.py +1708 -0
  318. package/templates/vault/skill-installer/scripts/package_skill.py +417 -0
  319. package/templates/vault/skill-installer/scripts/requirements.txt +1 -0
  320. package/templates/vault/skill-installer/scripts/validate_skill.py +430 -0
  321. package/templates/vault/skill-sentinel/scripts/analyzers/__init__.py +13 -0
  322. package/templates/vault/skill-sentinel/scripts/analyzers/code_quality.py +247 -0
  323. package/templates/vault/skill-sentinel/scripts/analyzers/cross_skill.py +134 -0
  324. package/templates/vault/skill-sentinel/scripts/analyzers/dependencies.py +121 -0
  325. package/templates/vault/skill-sentinel/scripts/analyzers/documentation.py +189 -0
  326. package/templates/vault/skill-sentinel/scripts/analyzers/governance_audit.py +153 -0
  327. package/templates/vault/skill-sentinel/scripts/analyzers/performance.py +164 -0
  328. package/templates/vault/skill-sentinel/scripts/analyzers/security.py +189 -0
  329. package/templates/vault/skill-sentinel/scripts/config.py +158 -0
  330. package/templates/vault/skill-sentinel/scripts/cost_optimizer.py +146 -0
  331. package/templates/vault/skill-sentinel/scripts/db.py +354 -0
  332. package/templates/vault/skill-sentinel/scripts/governance.py +58 -0
  333. package/templates/vault/skill-sentinel/scripts/recommender.py +228 -0
  334. package/templates/vault/skill-sentinel/scripts/report_generator.py +224 -0
  335. package/templates/vault/skill-sentinel/scripts/requirements.txt +1 -0
  336. package/templates/vault/skill-sentinel/scripts/run_audit.py +290 -0
  337. package/templates/vault/skill-sentinel/scripts/scanner.py +271 -0
  338. package/templates/vault/stability-ai/scripts/config.py +266 -0
  339. package/templates/vault/stability-ai/scripts/generate.py +687 -0
  340. package/templates/vault/stability-ai/scripts/requirements.txt +4 -0
  341. package/templates/vault/stability-ai/scripts/styles.py +174 -0
  342. package/templates/vault/telegram/assets/boilerplate/nodejs/src/bot-client.ts +86 -0
  343. package/templates/vault/telegram/assets/boilerplate/nodejs/src/handlers.ts +79 -0
  344. package/templates/vault/telegram/assets/boilerplate/nodejs/src/index.ts +32 -0
  345. package/templates/vault/telegram/scripts/send_message.py +143 -0
  346. package/templates/vault/telegram/scripts/setup_project.py +103 -0
  347. package/templates/vault/telegram/scripts/test_bot.py +144 -0
  348. package/templates/vault/typescript-expert/scripts/ts_diagnostic.py +203 -0
  349. package/templates/vault/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
  350. package/templates/vault/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
  351. package/templates/vault/ui-ux-pro-max/scripts/core.py +257 -0
  352. package/templates/vault/ui-ux-pro-max/scripts/design_system.py +487 -0
  353. package/templates/vault/ui-ux-pro-max/scripts/search.py +76 -0
  354. package/templates/vault/videodb/scripts/ws_listener.py +204 -0
  355. package/templates/vault/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  356. package/templates/vault/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  357. package/templates/vault/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  358. package/templates/vault/webapp-testing/scripts/with_server.py +106 -0
  359. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/index.ts +125 -0
  360. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/template-manager.ts +67 -0
  361. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/types.ts +216 -0
  362. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/webhook-handler.ts +173 -0
  363. package/templates/vault/whatsapp-cloud-api/assets/boilerplate/nodejs/src/whatsapp-client.ts +193 -0
  364. package/templates/vault/whatsapp-cloud-api/scripts/send_test_message.py +137 -0
  365. package/templates/vault/whatsapp-cloud-api/scripts/setup_project.py +118 -0
  366. package/templates/vault/whatsapp-cloud-api/scripts/validate_config.py +190 -0
  367. package/templates/vault/youtube-summarizer/scripts/extract-transcript.py +65 -0
  368. package/templates/vault/youtube-summarizer/scripts/install-dependencies.sh +28 -0
@@ -0,0 +1,296 @@
1
+ ---
2
+ description: Plan and implement UI
3
+ ---
4
+
5
+ ---
6
+ description: AI-powered design intelligence with 50+ styles, 95+ color palettes, and automated design system generation
7
+ ---
8
+
9
+ # ui-ux-pro-max
10
+
11
+ Comprehensive design guide for web and mobile applications. Contains 50+ styles, 97 color palettes, 57 font pairings, 99 UX guidelines, and 25 chart types across 9 technology stacks. Searchable database with priority-based recommendations.
12
+
13
+ ## Prerequisites
14
+
15
+ Check if Python is installed:
16
+
17
+ ```bash
18
+ python3 --version || python --version
19
+ ```
20
+
21
+ If Python is not installed, install it based on user's OS:
22
+
23
+ **macOS:**
24
+ ```bash
25
+ brew install python3
26
+ ```
27
+
28
+ **Ubuntu/Debian:**
29
+ ```bash
30
+ sudo apt update && sudo apt install python3
31
+ ```
32
+
33
+ **Windows:**
34
+ ```powershell
35
+ winget install Python.Python.3.12
36
+ ```
37
+
38
+ ---
39
+
40
+ ## How to Use This Workflow
41
+
42
+ When user requests UI/UX work (design, build, create, implement, review, fix, improve), follow this workflow:
43
+
44
+ ### Step 1: Analyze User Requirements
45
+
46
+ Extract key information from user request:
47
+ - **Product type**: SaaS, e-commerce, portfolio, dashboard, landing page, etc.
48
+ - **Style keywords**: minimal, playful, professional, elegant, dark mode, etc.
49
+ - **Industry**: healthcare, fintech, gaming, education, etc.
50
+ - **Stack**: React, Vue, Next.js, or default to `html-tailwind`
51
+
52
+ ### Step 2: Generate Design System (REQUIRED)
53
+
54
+ **Always start with `--design-system`** to get comprehensive recommendations with reasoning:
55
+
56
+ ```bash
57
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "<product_type> <industry> <keywords>" --design-system [-p "Project Name"]
58
+ ```
59
+
60
+ This command:
61
+ 1. Searches 5 domains in parallel (product, style, color, landing, typography)
62
+ 2. Applies reasoning rules from `ui-reasoning.csv` to select best matches
63
+ 3. Returns complete design system: pattern, style, colors, typography, effects
64
+ 4. Includes anti-patterns to avoid
65
+
66
+ **Example:**
67
+ ```bash
68
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "beauty spa wellness service" --design-system -p "Serenity Spa"
69
+ ```
70
+
71
+ ### Step 2b: Persist Design System (Master + Overrides Pattern)
72
+
73
+ To save the design system for hierarchical retrieval across sessions, add `--persist`:
74
+
75
+ ```bash
76
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name"
77
+ ```
78
+
79
+ This creates:
80
+ - `design-system/MASTER.md` — Global Source of Truth with all design rules
81
+ - `design-system/pages/` — Folder for page-specific overrides
82
+
83
+ **With page-specific override:**
84
+ ```bash
85
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "<query>" --design-system --persist -p "Project Name" --page "dashboard"
86
+ ```
87
+
88
+ This also creates:
89
+ - `design-system/pages/dashboard.md` — Page-specific deviations from Master
90
+
91
+ **How hierarchical retrieval works:**
92
+ 1. When building a specific page (e.g., "Checkout"), first check `design-system/pages/checkout.md`
93
+ 2. If the page file exists, its rules **override** the Master file
94
+ 3. If not, use `design-system/MASTER.md` exclusively
95
+
96
+ ### Step 3: Supplement with Detailed Searches (as needed)
97
+
98
+ After getting the design system, use domain searches to get additional details:
99
+
100
+ ```bash
101
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "<keyword>" --domain <domain> [-n <max_results>]
102
+ ```
103
+
104
+ **When to use detailed searches:**
105
+
106
+ | Need | Domain | Example |
107
+ |------|--------|---------|
108
+ | More style options | `style` | `--domain style "glassmorphism dark"` |
109
+ | Chart recommendations | `chart` | `--domain chart "real-time dashboard"` |
110
+ | UX best practices | `ux` | `--domain ux "animation accessibility"` |
111
+ | Alternative fonts | `typography` | `--domain typography "elegant luxury"` |
112
+ | Landing structure | `landing` | `--domain landing "hero social-proof"` |
113
+
114
+ ### Step 4: Stack Guidelines (Default: html-tailwind)
115
+
116
+ Get implementation-specific best practices. If user doesn't specify a stack, **default to `html-tailwind`**.
117
+
118
+ ```bash
119
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "<keyword>" --stack html-tailwind
120
+ ```
121
+
122
+ Available stacks: `html-tailwind`, `react`, `nextjs`, `vue`, `svelte`, `swiftui`, `react-native`, `flutter`, `shadcn`, `jetpack-compose`
123
+ , `jetpack-compose`
124
+ ---
125
+
126
+ ## Search Reference
127
+
128
+ ### Available Domains
129
+
130
+ | Domain | Use For | Example Keywords |
131
+ |--------|---------|------------------|
132
+ | `product` | Product type recommendations | SaaS, e-commerce, portfolio, healthcare, beauty, service |
133
+ | `style` | UI styles, colors, effects | glassmorphism, minimalism, dark mode, brutalism |
134
+ | `typography` | Font pairings, Google Fonts | elegant, playful, professional, modern |
135
+ | `color` | Color palettes by product type | saas, ecommerce, healthcare, beauty, fintech, service |
136
+ | `landing` | Page structure, CTA strategies | hero, hero-centric, testimonial, pricing, social-proof |
137
+ | `chart` | Chart types, library recommendations | trend, comparison, timeline, funnel, pie |
138
+ | `ux` | Best practices, anti-patterns | animation, accessibility, z-index, loading |
139
+ | `react` | React/Next.js performance | waterfall, bundle, suspense, memo, rerender, cache |
140
+ | `web` | Web interface guidelines | aria, focus, keyboard, semantic, virtualize |
141
+ | `prompt` | AI prompts, CSS keywords | (style name) |
142
+
143
+ ### Available Stacks
144
+
145
+ | Stack | Focus |
146
+ |-------|-------|
147
+ | `html-tailwind` | Tailwind utilities, responsive, a11y (DEFAULT) |
148
+ | `react` | State, hooks, performance, patterns |
149
+ | `nextjs` | SSR, routing, images, API routes |
150
+ | `vue` | Composition API, Pinia, Vue Router |
151
+ | `svelte` | Runes, stores, SvelteKit |
152
+ | `swiftui` | Views, State, Navigation, Animation |
153
+ | `react-native` | Components, Navigation, Lists |
154
+ | `flutter` | Widgets, State, Layout, Theming |
155
+ | `shadcn` | shadcn/ui components, theming, forms, patterns |
156
+ | `jetpack-compose` | Composables, Modifiers, State Hoisting, Recomposition |
157
+
158
+ ---
159
+
160
+ ## Example Workflow
161
+
162
+ **User request:** "Làm landing page cho dịch vụ chăm sóc da chuyên nghiệp"
163
+
164
+ ### Step 1: Analyze Requirements
165
+ - Product type: Beauty/Spa service
166
+ - Style keywords: elegant, professional, soft
167
+ - Industry: Beauty/Wellness
168
+ - Stack: html-tailwind (default)
169
+
170
+ ### Step 2: Generate Design System (REQUIRED)
171
+
172
+ ```bash
173
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "beauty spa wellness service elegant" --design-system -p "Serenity Spa"
174
+ ```
175
+
176
+ **Output:** Complete design system with pattern, style, colors, typography, effects, and anti-patterns.
177
+
178
+ ### Step 3: Supplement with Detailed Searches (as needed)
179
+
180
+ ```bash
181
+ # Get UX guidelines for animation and accessibility
182
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "animation accessibility" --domain ux
183
+
184
+ # Get alternative typography options if needed
185
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "elegant luxury serif" --domain typography
186
+ ```
187
+
188
+ ### Step 4: Stack Guidelines
189
+
190
+ ```bash
191
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "layout responsive form" --stack html-tailwind
192
+ ```
193
+
194
+ **Then:** Synthesize design system + detailed searches and implement the design.
195
+
196
+ ---
197
+
198
+ ## Output Formats
199
+
200
+ The `--design-system` flag supports two output formats:
201
+
202
+ ```bash
203
+ # ASCII box (default) - best for terminal display
204
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "fintech crypto" --design-system
205
+
206
+ # Markdown - best for documentation
207
+ python3 .agents/.shared/ui-ux-pro-max/scripts/search.py "fintech crypto" --design-system -f markdown
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Tips for Better Results
213
+
214
+ 1. **Be specific with keywords** - "healthcare SaaS dashboard" > "app"
215
+ 2. **Search multiple times** - Different keywords reveal different insights
216
+ 3. **Combine domains** - Style + Typography + Color = Complete design system
217
+ 4. **Always check UX** - Search "animation", "z-index", "accessibility" for common issues
218
+ 5. **Use stack flag** - Get implementation-specific best practices
219
+ 6. **Iterate** - If first search doesn't match, try different keywords
220
+
221
+ ---
222
+
223
+ ## Common Rules for Professional UI
224
+
225
+ These are frequently overlooked issues that make UI look unprofessional:
226
+
227
+ ### Icons & Visual Elements
228
+
229
+ | Rule | Do | Don't |
230
+ |------|----|----- |
231
+ | **No emoji icons** | Use SVG icons (Heroicons, Lucide, Simple Icons) | Use emojis like 🎨 🚀 ⚙️ as UI icons |
232
+ | **Stable hover states** | Use color/opacity transitions on hover | Use scale transforms that shift layout |
233
+ | **Correct brand logos** | Research official SVG from Simple Icons | Guess or use incorrect logo paths |
234
+ | **Consistent icon sizing** | Use fixed viewBox (24x24) with w-6 h-6 | Mix different icon sizes randomly |
235
+
236
+ ### Interaction & Cursor
237
+
238
+ | Rule | Do | Don't |
239
+ |------|----|----- |
240
+ | **Cursor pointer** | Add `cursor-pointer` to all clickable/hoverable cards | Leave default cursor on interactive elements |
241
+ | **Hover feedback** | Provide visual feedback (color, shadow, border) | No indication element is interactive |
242
+ | **Smooth transitions** | Use `transition-colors duration-200` | Instant state changes or too slow (>500ms) |
243
+
244
+ ### Light/Dark Mode Contrast
245
+
246
+ | Rule | Do | Don't |
247
+ |------|----|----- |
248
+ | **Glass card light mode** | Use `bg-white/80` or higher opacity | Use `bg-white/10` (too transparent) |
249
+ | **Text contrast light** | Use `#0F172A` (slate-900) for text | Use `#94A3B8` (slate-400) for body text |
250
+ | **Muted text light** | Use `#475569` (slate-600) minimum | Use gray-400 or lighter |
251
+ | **Border visibility** | Use `border-gray-200` in light mode | Use `border-white/10` (invisible) |
252
+
253
+ ### Layout & Spacing
254
+
255
+ | Rule | Do | Don't |
256
+ |------|----|----- |
257
+ | **Floating navbar** | Add `top-4 left-4 right-4` spacing | Stick navbar to `top-0 left-0 right-0` |
258
+ | **Content padding** | Account for fixed navbar height | Let content hide behind fixed elements |
259
+ | **Consistent max-width** | Use same `max-w-6xl` or `max-w-7xl` | Mix different container widths |
260
+
261
+ ---
262
+
263
+ ## Pre-Delivery Checklist
264
+
265
+ Before delivering UI code, verify these items:
266
+
267
+ ### Visual Quality
268
+ - [ ] No emojis used as icons (use SVG instead)
269
+ - [ ] All icons from consistent icon set (Heroicons/Lucide)
270
+ - [ ] Brand logos are correct (verified from Simple Icons)
271
+ - [ ] Hover states don't cause layout shift
272
+ - [ ] Use theme colors directly (bg-primary) not var() wrapper
273
+
274
+ ### Interaction
275
+ - [ ] All clickable elements have `cursor-pointer`
276
+ - [ ] Hover states provide clear visual feedback
277
+ - [ ] Transitions are smooth (150-300ms)
278
+ - [ ] Focus states visible for keyboard navigation
279
+
280
+ ### Light/Dark Mode
281
+ - [ ] Light mode text has sufficient contrast (4.5:1 minimum)
282
+ - [ ] Glass/transparent elements visible in light mode
283
+ - [ ] Borders visible in both modes
284
+ - [ ] Test both modes before delivery
285
+
286
+ ### Layout
287
+ - [ ] Floating elements have proper spacing from edges
288
+ - [ ] No content hidden behind fixed navbars
289
+ - [ ] Responsive at 375px, 768px, 1024px, 1440px
290
+ - [ ] No horizontal scroll on mobile
291
+
292
+ ### Accessibility
293
+ - [ ] All images have alt text
294
+ - [ ] Form inputs have labels
295
+ - [ ] Color is not the only indicator
296
+ - [ ] `prefers-reduced-motion` respected
@@ -0,0 +1,211 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ API Validator - Checks API endpoints for best practices.
4
+ Validates OpenAPI specs, response formats, and common issues.
5
+ """
6
+ import sys
7
+ import json
8
+ import re
9
+ from pathlib import Path
10
+
11
+ # Fix Windows console encoding for Unicode output
12
+ try:
13
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
14
+ sys.stderr.reconfigure(encoding='utf-8', errors='replace')
15
+ except AttributeError:
16
+ pass # Python < 3.7
17
+
18
+ def find_api_files(project_path: Path) -> list:
19
+ """Find API-related files."""
20
+ patterns = [
21
+ "**/*api*.ts", "**/*api*.js", "**/*api*.py",
22
+ "**/routes/*.ts", "**/routes/*.js", "**/routes/*.py",
23
+ "**/controllers/*.ts", "**/controllers/*.js",
24
+ "**/endpoints/*.ts", "**/endpoints/*.py",
25
+ "**/*.openapi.json", "**/*.openapi.yaml",
26
+ "**/swagger.json", "**/swagger.yaml",
27
+ "**/openapi.json", "**/openapi.yaml"
28
+ ]
29
+
30
+ files = []
31
+ for pattern in patterns:
32
+ files.extend(project_path.glob(pattern))
33
+
34
+ # Exclude node_modules, etc.
35
+ return [f for f in files if not any(x in str(f) for x in ['node_modules', '.git', 'dist', 'build', '__pycache__'])]
36
+
37
+ def check_openapi_spec(file_path: Path) -> dict:
38
+ """Check OpenAPI/Swagger specification."""
39
+ issues = []
40
+ passed = []
41
+
42
+ try:
43
+ content = file_path.read_text(encoding='utf-8')
44
+
45
+ if file_path.suffix == '.json':
46
+ spec = json.loads(content)
47
+ else:
48
+ # Basic YAML check
49
+ if 'openapi:' in content or 'swagger:' in content:
50
+ passed.append("[OK] OpenAPI/Swagger version defined")
51
+ else:
52
+ issues.append("[X] No OpenAPI version found")
53
+
54
+ if 'paths:' in content:
55
+ passed.append("[OK] Paths section exists")
56
+ else:
57
+ issues.append("[X] No paths defined")
58
+
59
+ if 'components:' in content or 'definitions:' in content:
60
+ passed.append("[OK] Schema components defined")
61
+
62
+ return {'file': str(file_path), 'passed': passed, 'issues': issues, 'type': 'openapi'}
63
+
64
+ # JSON OpenAPI checks
65
+ if 'openapi' in spec or 'swagger' in spec:
66
+ passed.append("[OK] OpenAPI version defined")
67
+
68
+ if 'info' in spec:
69
+ if 'title' in spec['info']:
70
+ passed.append("[OK] API title defined")
71
+ if 'version' in spec['info']:
72
+ passed.append("[OK] API version defined")
73
+ if 'description' not in spec['info']:
74
+ issues.append("[!] API description missing")
75
+
76
+ if 'paths' in spec:
77
+ path_count = len(spec['paths'])
78
+ passed.append(f"[OK] {path_count} endpoints defined")
79
+
80
+ # Check each path
81
+ for path, methods in spec['paths'].items():
82
+ for method, details in methods.items():
83
+ if method in ['get', 'post', 'put', 'patch', 'delete']:
84
+ if 'responses' not in details:
85
+ issues.append(f"[X] {method.upper()} {path}: No responses defined")
86
+ if 'summary' not in details and 'description' not in details:
87
+ issues.append(f"[!] {method.upper()} {path}: No description")
88
+
89
+ except Exception as e:
90
+ issues.append(f"[X] Parse error: {e}")
91
+
92
+ return {'file': str(file_path), 'passed': passed, 'issues': issues, 'type': 'openapi'}
93
+
94
+ def check_api_code(file_path: Path) -> dict:
95
+ """Check API code for common issues."""
96
+ issues = []
97
+ passed = []
98
+
99
+ try:
100
+ content = file_path.read_text(encoding='utf-8')
101
+
102
+ # Check for error handling
103
+ error_patterns = [
104
+ r'try\s*{', r'try:', r'\.catch\(',
105
+ r'except\s+', r'catch\s*\('
106
+ ]
107
+ has_error_handling = any(re.search(p, content) for p in error_patterns)
108
+ if has_error_handling:
109
+ passed.append("[OK] Error handling present")
110
+ else:
111
+ issues.append("[X] No error handling found")
112
+
113
+ # Check for status codes
114
+ status_patterns = [
115
+ r'status\s*\(\s*\d{3}\s*\)', r'statusCode\s*[=:]\s*\d{3}',
116
+ r'HttpStatus\.', r'status_code\s*=\s*\d{3}',
117
+ r'\.status\(\d{3}\)', r'res\.status\('
118
+ ]
119
+ has_status = any(re.search(p, content) for p in status_patterns)
120
+ if has_status:
121
+ passed.append("[OK] HTTP status codes used")
122
+ else:
123
+ issues.append("[!] No explicit HTTP status codes")
124
+
125
+ # Check for validation
126
+ validation_patterns = [
127
+ r'validate', r'schema', r'zod', r'joi', r'yup',
128
+ r'pydantic', r'@Body\(', r'@Query\('
129
+ ]
130
+ has_validation = any(re.search(p, content, re.I) for p in validation_patterns)
131
+ if has_validation:
132
+ passed.append("[OK] Input validation present")
133
+ else:
134
+ issues.append("[!] No input validation detected")
135
+
136
+ # Check for auth middleware
137
+ auth_patterns = [
138
+ r'auth', r'jwt', r'bearer', r'token',
139
+ r'middleware', r'guard', r'@Authenticated'
140
+ ]
141
+ has_auth = any(re.search(p, content, re.I) for p in auth_patterns)
142
+ if has_auth:
143
+ passed.append("[OK] Authentication/authorization detected")
144
+
145
+ # Check for rate limiting
146
+ rate_patterns = [r'rateLimit', r'throttle', r'rate.?limit']
147
+ has_rate = any(re.search(p, content, re.I) for p in rate_patterns)
148
+ if has_rate:
149
+ passed.append("[OK] Rate limiting present")
150
+
151
+ # Check for logging
152
+ log_patterns = [r'console\.log', r'logger\.', r'logging\.', r'log\.']
153
+ has_logging = any(re.search(p, content) for p in log_patterns)
154
+ if has_logging:
155
+ passed.append("[OK] Logging present")
156
+
157
+ except Exception as e:
158
+ issues.append(f"[X] Read error: {e}")
159
+
160
+ return {'file': str(file_path), 'passed': passed, 'issues': issues, 'type': 'code'}
161
+
162
+ def main():
163
+ target = sys.argv[1] if len(sys.argv) > 1 else "."
164
+ project_path = Path(target)
165
+
166
+ print("\n" + "=" * 60)
167
+ print(" API VALIDATOR - Endpoint Best Practices Check")
168
+ print("=" * 60 + "\n")
169
+
170
+ api_files = find_api_files(project_path)
171
+
172
+ if not api_files:
173
+ print("[!] No API files found.")
174
+ print(" Looking for: routes/, controllers/, api/, openapi.json/yaml")
175
+ sys.exit(0)
176
+
177
+ results = []
178
+ for file_path in api_files[:15]: # Limit
179
+ if 'openapi' in file_path.name.lower() or 'swagger' in file_path.name.lower():
180
+ result = check_openapi_spec(file_path)
181
+ else:
182
+ result = check_api_code(file_path)
183
+ results.append(result)
184
+
185
+ # Print results
186
+ total_issues = 0
187
+ total_passed = 0
188
+
189
+ for result in results:
190
+ print(f"\n[FILE] {result['file']} [{result['type']}]")
191
+ for item in result['passed']:
192
+ print(f" {item}")
193
+ total_passed += 1
194
+ for item in result['issues']:
195
+ print(f" {item}")
196
+ if item.startswith("[X]"):
197
+ total_issues += 1
198
+
199
+ print("\n" + "=" * 60)
200
+ print(f"[RESULTS] {total_passed} passed, {total_issues} critical issues")
201
+ print("=" * 60)
202
+
203
+ if total_issues == 0:
204
+ print("[OK] API validation passed")
205
+ sys.exit(0)
206
+ else:
207
+ print("[X] Fix critical issues before deployment")
208
+ sys.exit(1)
209
+
210
+ if __name__ == "__main__":
211
+ main()
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Schema Validator - Database schema validation
4
+ Validates Prisma schemas and checks for common issues.
5
+
6
+ Usage:
7
+ python schema_validator.py <project_path>
8
+
9
+ Checks:
10
+ - Prisma schema syntax
11
+ - Missing relations
12
+ - Index recommendations
13
+ - Naming conventions
14
+ """
15
+
16
+ import sys
17
+ import json
18
+ import re
19
+ from pathlib import Path
20
+ from datetime import datetime
21
+
22
+ # Fix Windows console encoding
23
+ try:
24
+ sys.stdout.reconfigure(encoding='utf-8', errors='replace')
25
+ except:
26
+ pass
27
+
28
+
29
+ def find_schema_files(project_path: Path) -> list:
30
+ """Find database schema files."""
31
+ schemas = []
32
+
33
+ # Prisma schema
34
+ prisma_files = list(project_path.glob('**/prisma/schema.prisma'))
35
+ schemas.extend([('prisma', f) for f in prisma_files])
36
+
37
+ # Drizzle schema files
38
+ drizzle_files = list(project_path.glob('**/drizzle/*.ts'))
39
+ drizzle_files.extend(project_path.glob('**/schema/*.ts'))
40
+ for f in drizzle_files:
41
+ if 'schema' in f.name.lower() or 'table' in f.name.lower():
42
+ schemas.append(('drizzle', f))
43
+
44
+ return schemas[:10] # Limit
45
+
46
+
47
+ def validate_prisma_schema(file_path: Path) -> list:
48
+ """Validate Prisma schema file."""
49
+ issues = []
50
+
51
+ try:
52
+ content = file_path.read_text(encoding='utf-8', errors='ignore')
53
+
54
+ # Find all models
55
+ models = re.findall(r'model\s+(\w+)\s*{([^}]+)}', content, re.DOTALL)
56
+
57
+ for model_name, model_body in models:
58
+ # Check naming convention (PascalCase)
59
+ if not model_name[0].isupper():
60
+ issues.append(f"Model '{model_name}' should be PascalCase")
61
+
62
+ # Check for id field
63
+ if '@id' not in model_body and 'id' not in model_body.lower():
64
+ issues.append(f"Model '{model_name}' might be missing @id field")
65
+
66
+ # Check for createdAt/updatedAt
67
+ if 'createdAt' not in model_body and 'created_at' not in model_body:
68
+ issues.append(f"Model '{model_name}' missing createdAt field (recommended)")
69
+
70
+ # Check for @relation without fields
71
+ relations = re.findall(r'@relation\([^)]*\)', model_body)
72
+ for rel in relations:
73
+ if 'fields:' not in rel and 'references:' not in rel:
74
+ pass # Implicit relation, ok
75
+
76
+ # Check for @@index suggestions
77
+ foreign_keys = re.findall(r'(\w+Id)\s+\w+', model_body)
78
+ for fk in foreign_keys:
79
+ if f'@@index([{fk}])' not in content and f'@@index(["{fk}"])' not in content:
80
+ issues.append(f"Consider adding @@index([{fk}]) for better query performance in {model_name}")
81
+
82
+ # Check for enum definitions
83
+ enums = re.findall(r'enum\s+(\w+)\s*{', content)
84
+ for enum_name in enums:
85
+ if not enum_name[0].isupper():
86
+ issues.append(f"Enum '{enum_name}' should be PascalCase")
87
+
88
+ except Exception as e:
89
+ issues.append(f"Error reading schema: {str(e)[:50]}")
90
+
91
+ return issues
92
+
93
+
94
+ def main():
95
+ project_path = Path(sys.argv[1] if len(sys.argv) > 1 else ".").resolve()
96
+
97
+ print(f"\n{'='*60}")
98
+ print(f"[SCHEMA VALIDATOR] Database Schema Validation")
99
+ print(f"{'='*60}")
100
+ print(f"Project: {project_path}")
101
+ print(f"Time: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
102
+ print("-"*60)
103
+
104
+ # Find schema files
105
+ schemas = find_schema_files(project_path)
106
+ print(f"Found {len(schemas)} schema files")
107
+
108
+ if not schemas:
109
+ output = {
110
+ "script": "schema_validator",
111
+ "project": str(project_path),
112
+ "schemas_checked": 0,
113
+ "issues_found": 0,
114
+ "passed": True,
115
+ "message": "No schema files found"
116
+ }
117
+ print(json.dumps(output, indent=2))
118
+ sys.exit(0)
119
+
120
+ # Validate each schema
121
+ all_issues = []
122
+
123
+ for schema_type, file_path in schemas:
124
+ print(f"\nValidating: {file_path.name} ({schema_type})")
125
+
126
+ if schema_type == 'prisma':
127
+ issues = validate_prisma_schema(file_path)
128
+ else:
129
+ issues = [] # Drizzle validation could be added
130
+
131
+ if issues:
132
+ all_issues.append({
133
+ "file": str(file_path.name),
134
+ "type": schema_type,
135
+ "issues": issues
136
+ })
137
+
138
+ # Summary
139
+ print("\n" + "="*60)
140
+ print("SCHEMA ISSUES")
141
+ print("="*60)
142
+
143
+ if all_issues:
144
+ for item in all_issues:
145
+ print(f"\n{item['file']} ({item['type']}):")
146
+ for issue in item["issues"][:5]: # Limit per file
147
+ print(f" - {issue}")
148
+ if len(item["issues"]) > 5:
149
+ print(f" ... and {len(item['issues']) - 5} more issues")
150
+ else:
151
+ print("No schema issues found!")
152
+
153
+ total_issues = sum(len(item["issues"]) for item in all_issues)
154
+ # Schema issues are warnings, not failures
155
+ passed = True
156
+
157
+ output = {
158
+ "script": "schema_validator",
159
+ "project": str(project_path),
160
+ "schemas_checked": len(schemas),
161
+ "issues_found": total_issues,
162
+ "passed": passed,
163
+ "issues": all_issues
164
+ }
165
+
166
+ print("\n" + json.dumps(output, indent=2))
167
+
168
+ sys.exit(0)
169
+
170
+
171
+ if __name__ == "__main__":
172
+ main()