@thierrynakoa/fire-flow 12.2.2 → 13.0.1

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 (501) hide show
  1. package/CREDITS.md +25 -0
  2. package/DOMINION-FLOW-OVERVIEW.md +182 -38
  3. package/README.md +399 -690
  4. package/TROUBLESHOOTING.md +264 -367
  5. package/agents/fire-debugger.md +54 -0
  6. package/agents/fire-executor.md +1610 -1033
  7. package/agents/fire-fact-checker.md +1 -1
  8. package/agents/fire-planner.md +85 -17
  9. package/agents/fire-project-researcher.md +1 -1
  10. package/agents/fire-researcher.md +4 -22
  11. package/agents/{fire-phoenix-analyst.md → fire-resurrection-analyst.md} +394 -394
  12. package/agents/fire-reviewer.md +552 -499
  13. package/agents/fire-verifier.md +114 -19
  14. package/bin/cli.js +18 -101
  15. package/commands/fire-0-orient.md +2 -2
  16. package/commands/fire-1a-new.md +50 -15
  17. package/commands/fire-1c-setup.md +33 -5
  18. package/commands/fire-1d-discuss.md +87 -1
  19. package/commands/fire-2-plan.md +556 -527
  20. package/commands/fire-3-execute.md +2046 -1356
  21. package/commands/fire-4-verify.md +975 -906
  22. package/commands/fire-5-handoff.md +46 -5
  23. package/commands/fire-6-resume.md +2 -31
  24. package/commands/fire-add-new-skill.md +138 -19
  25. package/commands/fire-autonomous.md +14 -2
  26. package/commands/fire-complete-milestone.md +1 -1
  27. package/commands/fire-cost.md +179 -183
  28. package/commands/fire-debug.md +1 -6
  29. package/commands/fire-loop-resume.md +2 -2
  30. package/commands/fire-loop-stop.md +1 -1
  31. package/commands/fire-loop.md +2 -15
  32. package/commands/fire-map-codebase.md +1 -1
  33. package/commands/fire-migrate-database.md +548 -0
  34. package/commands/fire-new-milestone.md +1 -1
  35. package/commands/fire-reflect.md +1 -2
  36. package/commands/fire-research.md +142 -21
  37. package/commands/{fire-phoenix.md → fire-resurrect.md} +859 -603
  38. package/commands/fire-scaffold.md +297 -0
  39. package/commands/fire-search.md +1 -2
  40. package/commands/fire-security-scan.md +483 -484
  41. package/commands/fire-setup.md +359 -0
  42. package/commands/fire-skill.md +770 -0
  43. package/commands/fire-skills-diff.md +506 -506
  44. package/commands/fire-skills-history.md +388 -388
  45. package/commands/fire-skills-rollback.md +7 -7
  46. package/commands/fire-skills-sync.md +470 -470
  47. package/commands/fire-test.md +5 -5
  48. package/commands/fire-todos.md +1 -1
  49. package/commands/fire-update.md +5 -5
  50. package/commands/fire-validate-skills.md +282 -0
  51. package/commands/fire-verify-uat.md +9 -177
  52. package/commands/fire-vuln-scan.md +492 -493
  53. package/hooks/run-hook.sh +8 -8
  54. package/hooks/run-session-end.sh +7 -7
  55. package/hooks/session-end.sh +90 -90
  56. package/hooks/session-start.sh +1 -1
  57. package/package.json +4 -25
  58. package/plugin.json +7 -7
  59. package/references/autonomy-levels.md +235 -0
  60. package/references/behavioral-directives.md +95 -3
  61. package/references/blocker-tracking.md +1 -1
  62. package/references/circuit-breaker.md +93 -2
  63. package/references/context-engineering.md +227 -9
  64. package/references/honesty-protocols.md +70 -1
  65. package/references/issue-to-pr-pipeline.md +149 -150
  66. package/references/metrics-and-trends.md +1 -2
  67. package/references/research-improvements.md +4 -108
  68. package/references/sdlc-mapping.md +73 -0
  69. package/references/state-machine.md +151 -0
  70. package/skills-library/AVAILABLE_TOOLS_REFERENCE.md +333 -0
  71. package/skills-library/SKILLS-INDEX.md +57 -558
  72. package/skills-library/SKILLS_LIBRARY_INDEX.md +532 -0
  73. package/skills-library/_general/api-patterns/api-field-name-mismatch.md +107 -0
  74. package/skills-library/_general/api-patterns/streaming-command-timeout.md +122 -0
  75. package/skills-library/_general/api-patterns/streaming-proxy-cors-bypass.md +102 -0
  76. package/skills-library/_general/automation/settings-gui-generator.md +172 -0
  77. package/skills-library/_general/database-solutions/data-type-mapping-reference.md +181 -0
  78. package/skills-library/_general/database-solutions/mysql-limit-offset-string-coercion.md +102 -0
  79. package/skills-library/_general/database-solutions/mysql-to-pg-migration.md +195 -0
  80. package/skills-library/_general/database-solutions/orm-schema-portability.md +193 -0
  81. package/skills-library/_general/database-solutions/persistent-analysis-storage.md +207 -0
  82. package/skills-library/_general/database-solutions/pg-to-mysql-schema-migration-methodology.md +190 -0
  83. package/skills-library/_general/database-solutions/sql-dialect-compatibility-matrix.md +306 -0
  84. package/skills-library/_general/database-solutions/sqlite-to-pg-migration.md +219 -0
  85. package/skills-library/_general/frontend/canvas-bubble-animation-grouping.md +270 -0
  86. package/skills-library/_general/frontend/color-token-migration.md +112 -0
  87. package/skills-library/_general/frontend/framer-motion-layoutid-grouping.md +150 -0
  88. package/skills-library/_general/frontend/pyqt6-settings-dialog.md +191 -0
  89. package/skills-library/_general/frontend/react-flow-animated-layout-switching.md +101 -0
  90. package/skills-library/_general/frontend/react-hooks-order-debugging.md +141 -0
  91. package/skills-library/_general/frontend/redux-localstorage-auth-desync.md +126 -0
  92. package/skills-library/_general/frontend/safari-csp-theme-color-debugging.md +124 -0
  93. package/skills-library/_general/frontend/safari-sw-cache-poisoning.md +138 -0
  94. package/skills-library/_general/frontend/svg-sparkline-no-charting-library.md +131 -0
  95. package/skills-library/_general/growth-marketing/oss-daily-growth-intelligence.md +224 -0
  96. package/skills-library/_general/integrations/claude-code-local-mcp-integration.md +250 -0
  97. package/skills-library/_general/integrations/mcp-composite-tool-orchestration.md +200 -0
  98. package/skills-library/_general/methodology/AGENT_SDK_STANDALONE_TOOLING.md +181 -0
  99. package/skills-library/_general/methodology/AGENT_TEAMS_GUIDE.md +169 -0
  100. package/skills-library/_general/methodology/ALAS_STATEFUL_EXECUTION.md +207 -0
  101. package/skills-library/_general/methodology/AUTO_REVIEWER_SUBAGENT.md +211 -0
  102. package/skills-library/_general/methodology/CONSISTENCY_CHECK_AMBIGUITY_GATE.md +96 -0
  103. package/skills-library/_general/methodology/DEAD_ENDS_SHELF.md +4 -4
  104. package/skills-library/_general/methodology/DISTILL_NOT_DUMP.md +108 -0
  105. package/skills-library/_general/methodology/EXECUTION_PROGRESS_MONITOR.md +157 -0
  106. package/skills-library/_general/methodology/HIERARCHICAL_REVIEW_MARS.md +122 -0
  107. package/skills-library/_general/methodology/MCP_INTER_AGENT_BRIDGE.md +207 -0
  108. package/skills-library/_general/methodology/MERMAID_WIZARD_DIAGRAMS.md +77 -0
  109. package/skills-library/_general/methodology/MISSING_DIMENSION_DETECTOR.md +89 -0
  110. package/skills-library/_general/methodology/MULTI_AGENT_COORDINATION.md +397 -0
  111. package/skills-library/_general/methodology/OBSERVATION_MASKING.md +100 -0
  112. package/skills-library/_general/methodology/PHOENIX_REBUILD_METHODOLOGY.md +82 -11
  113. package/skills-library/_general/methodology/REVIEW_BACKTRACK_PANEL.md +140 -0
  114. package/skills-library/_general/methodology/REVIEW_FIX_LOOP.md +117 -0
  115. package/skills-library/_general/methodology/VOTING_VERDICT_ARBITRATION.md +155 -0
  116. package/skills-library/_general/methodology/ZERO_FRICTION_CLI_SETUP.md +2 -2
  117. package/skills-library/_general/methodology/dead-code-activation.md +123 -0
  118. package/skills-library/_general/methodology/debug-swarm-researcher-escape-hatch.md +240 -240
  119. package/skills-library/_general/methodology/shell-autonomous-loop-fixplan.md +1 -1
  120. package/skills-library/_general/patterns-standards/GOF_DESIGN_PATTERNS_FOR_AI_AGENTS.md +5 -5
  121. package/skills-library/_general/patterns-standards/cascading-failure-diagnosis.md +119 -0
  122. package/skills-library/_general/patterns-standards/domain-specific-layout-algorithms.md +209 -0
  123. package/skills-library/_general/patterns-standards/python-desktop-app-architecture.md +399 -0
  124. package/skills-library/_general/patterns-standards/realtime-monitoring-dashboard.md +457 -0
  125. package/skills-library/_general/patterns-standards/togglable-processing-pipeline.md +169 -0
  126. package/skills-library/_general/performance/liveclock-extraction.md +112 -0
  127. package/skills-library/_general/performance/ref-based-canvas-animation.md +117 -0
  128. package/skills-library/_general/performance/use-visible-interval.md +131 -0
  129. package/skills-library/_general/testing/playwright-firefox-withcredentials-auth-issue.md +104 -0
  130. package/skills-library/_quarantine/README.md +30 -0
  131. package/skills-library/api-patterns/BROADCAST_SCHEDULER_SHARED_EXECUTE_FUNCTION.md +150 -0
  132. package/skills-library/api-patterns/ERROR_RESPONSE_STANDARDS.md +145 -0
  133. package/skills-library/api-patterns/EXPRESS_ROUTE_ORDERING_MIDDLEWARE_INTERCEPTION.md +326 -0
  134. package/skills-library/api-patterns/PAGINATION_PATTERNS.md +137 -0
  135. package/skills-library/api-patterns/PODCAST_PROGRESS_TRACKING_THREE_ROOT_CAUSES.md +277 -0
  136. package/skills-library/api-patterns/RATE_LIMITING_TOGGLE.md +155 -0
  137. package/skills-library/api-patterns/graphql-content-queries.md +708 -0
  138. package/skills-library/appointment-scheduler-design.md +423 -0
  139. package/skills-library/automation/AUTO_POPULATE_COMPLETE_GUIDE.md +631 -0
  140. package/skills-library/automation/CC_WORKFLOW_STUDIO.md +83 -0
  141. package/skills-library/automation/CLAUDE_CODE_SWARM_MODE.md +95 -0
  142. package/skills-library/automation/DAEMON_TRIGGER_FILE_IPC.md +195 -0
  143. package/skills-library/automation/scheduled-content-publishing.md +608 -0
  144. package/skills-library/awesome-workflows/Blogging-Platform-Instructions/view_commands.md +25 -0
  145. package/skills-library/awesome-workflows/CREDENTIAL-SECURITY-WORKFLOW.md +109 -0
  146. package/skills-library/awesome-workflows/DEBUGGING-WORKFLOW.md +124 -0
  147. package/skills-library/awesome-workflows/Design-Review-Workflow/README.md +31 -0
  148. package/skills-library/awesome-workflows/Design-Review-Workflow/design-principles-example.md +129 -0
  149. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-agent.md +107 -0
  150. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-claude-md-snippet.md +24 -0
  151. package/skills-library/awesome-workflows/Design-Review-Workflow/design-review-slash-command.md +38 -0
  152. package/skills-library/awesome-workflows/PARALLEL-RESEARCH-WORKFLOW.md +89 -0
  153. package/skills-library/awesome-workflows/PHASE-EXECUTION-WORKFLOW.md +97 -0
  154. package/skills-library/awesome-workflows/SESSION-HANDOFF-WORKFLOW.md +116 -0
  155. package/skills-library/cms-patterns/content-branch-preview.md +515 -0
  156. package/skills-library/cms-patterns/inline-visual-editing.md +666 -0
  157. package/skills-library/cms-patterns/mdx-component-content.md +649 -0
  158. package/skills-library/cms-patterns/media-manager-abstraction.md +827 -0
  159. package/skills-library/cms-patterns/schema-driven-form-generator.md +838 -0
  160. package/skills-library/complexity-metrics/complexity-divider.md +707 -0
  161. package/skills-library/complexity-metrics/work-with-complexity.md +193 -0
  162. package/skills-library/creative-multimedia/animation-stack-guide.md +577 -0
  163. package/skills-library/creative-multimedia/audio-enhancement-pipeline.md +625 -0
  164. package/skills-library/creative-multimedia/content-repurposing-pipeline.md +1146 -0
  165. package/skills-library/creative-multimedia/data-visualization-generator.md +862 -0
  166. package/skills-library/creative-multimedia/doc-to-podcast-pipeline.md +2184 -0
  167. package/skills-library/creative-multimedia/ffmpeg-command-generator.md +405 -0
  168. package/skills-library/creative-multimedia/image-optimization-pipeline.md +605 -0
  169. package/skills-library/creative-multimedia/multi-format-content-generator.md +1759 -0
  170. package/skills-library/creative-multimedia/og-image-generator.md +635 -0
  171. package/skills-library/creative-multimedia/podcast-audio-composition.md +1355 -0
  172. package/skills-library/creative-multimedia/podcast-quality-evaluation.md +1452 -0
  173. package/skills-library/creative-multimedia/podcast-script-generation.md +1841 -0
  174. package/skills-library/creative-multimedia/svg-generation.md +750 -0
  175. package/skills-library/creative-multimedia/text-to-speech-provider-selector.md +1414 -0
  176. package/skills-library/creative-multimedia/transcription-pipeline-selector.md +677 -0
  177. package/skills-library/creative-multimedia/video-streaming-setup.md +559 -0
  178. package/skills-library/database-solutions/AI_RESPONSE_DATABASE_CACHING.md +520 -0
  179. package/skills-library/database-solutions/CONDITIONAL_SQL_MIGRATION_PATTERN.md +119 -0
  180. package/skills-library/database-solutions/DATABASE_COLUMN_NAME_MISMATCH.md +393 -0
  181. package/skills-library/database-solutions/DATABASE_SCHEMA.md +394 -0
  182. package/skills-library/database-solutions/DATABASE_SCHEMA_VERIFICATION_GUIDE.md +348 -0
  183. package/skills-library/database-solutions/DATABASE_STRATEGY.md +71 -0
  184. package/skills-library/database-solutions/ES_MODULE_SEED_SCRIPT_PATTERN.md +52 -0
  185. package/skills-library/database-solutions/MIGRATION_GUIDE.md +3 -0
  186. package/skills-library/database-solutions/PLPGSQL_VARIABLE_CONFLICT_FIX.md +208 -0
  187. package/skills-library/database-solutions/POSTGRESQL_JSONB_DOUBLE_STRINGIFY_FIX.md +245 -0
  188. package/skills-library/database-solutions/POSTGRESQL_LICENSE_TABLE_DESIGN.md +393 -0
  189. package/skills-library/database-solutions/POSTGRESQL_UUID_DOCUMENT_RAG_DUAL_SCOPE.md +732 -0
  190. package/skills-library/database-solutions/POSTGRES_SQL_TEMPLATE_BINDING_ERROR.md +240 -0
  191. package/skills-library/database-solutions/PRISMA_DB_PUSH_DATA_LOSS_PREVENTION.md +141 -0
  192. package/skills-library/database-solutions/PRODUCTION_QUERY_OPTIMIZATION_RESTART_FIX.md +389 -0
  193. package/skills-library/database-solutions/RLS_SECURITY_GUIDE.md +107 -0
  194. package/skills-library/database-solutions/SCHEMA_ENHANCEMENTS_GUIDE.md +373 -0
  195. package/skills-library/database-solutions/SCHEMA_MIGRATION_GUIDE.md +368 -0
  196. package/skills-library/database-solutions/SCHEMA_VERIFICATION_QUICK_REFERENCE.md +104 -0
  197. package/skills-library/database-solutions/ai-erd-generator.md +1213 -0
  198. package/skills-library/database-solutions/content-publishing-states.md +631 -0
  199. package/skills-library/database-solutions/database-schema-designer.md +522 -0
  200. package/skills-library/database-solutions/er-diagram-components.md +569 -0
  201. package/skills-library/database-solutions/er-to-ddl-mapping.md +1405 -0
  202. package/skills-library/database-solutions/erd-creator-textbook-research.md +433 -0
  203. package/skills-library/database-solutions/erd-react-flow-architecture.md +1965 -0
  204. package/skills-library/database-solutions/mariadb-aggregate-function-replacement.md +145 -0
  205. package/skills-library/database-solutions/normalization-validator.md +778 -0
  206. package/skills-library/database-solutions/postgres-full-text-search-content.md +494 -0
  207. package/skills-library/database-solutions/postgresql-to-mysql-runtime-translation.md +286 -0
  208. package/skills-library/database-solutions/regex-alternation-ordering-sql-types.md +92 -0
  209. package/skills-library/database-solutions/reserved-word-context-aware-quoting.md +142 -0
  210. package/skills-library/database-solutions/sql-ddl-generator.md +756 -0
  211. package/skills-library/database-solutions/supabase-connection-pooler-fix.md +102 -0
  212. package/skills-library/deployment-security/CPANEL_NODE_DEPLOYMENT.md +166 -0
  213. package/skills-library/deployment-security/DEPLOYMENT.md +275 -0
  214. package/skills-library/deployment-security/DEPLOYMENT_CHECKLIST.md +363 -0
  215. package/skills-library/deployment-security/DEPLOYMENT_PLAN.md +669 -0
  216. package/skills-library/deployment-security/KNEX_DATABASE_ABSTRACTION.md +444 -0
  217. package/skills-library/deployment-security/LICENSE_KEY_SYSTEM.md +206 -0
  218. package/skills-library/deployment-security/NODE18_DEPENDENCY_COMPATIBILITY.md +284 -0
  219. package/skills-library/deployment-security/PHP_INSTALLER_WIZARD_GUIDE.md +315 -0
  220. package/skills-library/deployment-security/PM2_ENVIRONMENT_VARIABLE_CACHING.md +256 -0
  221. package/skills-library/deployment-security/PM2_MEMORY_EXHAUSTION_FIX.md +370 -0
  222. package/skills-library/deployment-security/PRODUCTION_DEPLOYMENT_GUIDE.md +592 -0
  223. package/skills-library/deployment-security/PRODUCTION_HARDENING_DOCUMENTATION.md +307 -0
  224. package/skills-library/deployment-security/PRODUCTION_RECOVERY_CHERRY_PICK_PATTERN.md +202 -0
  225. package/skills-library/deployment-security/PYINSTALLER_CUDA_WHISPER_BUNDLING.md +236 -0
  226. package/skills-library/deployment-security/SECURITY.md +41 -0
  227. package/skills-library/deployment-security/SMTP_SSL_HOSTNAME_MISMATCH_SHARED_HOSTING.md +220 -0
  228. package/skills-library/deployment-security/SPA_SEO_OPTIMIZATION_CPANEL.md +200 -0
  229. package/skills-library/deployment-security/SUPABASE_EDGE_FUNCTIONS.md +338 -0
  230. package/skills-library/deployment-security/VERCEL_GITHUB_DEPLOYMENT_GUIDE.md +858 -0
  231. package/skills-library/deployment-security/VPS_DEPLOYMENT_READINESS.md +356 -0
  232. package/skills-library/deployment-security/deployment-changes-not-applying.md +241 -0
  233. package/skills-library/deployment-security/env-file-management-production-local.md +203 -0
  234. package/skills-library/deployment-security/express-secure-file-downloads.md +413 -0
  235. package/skills-library/deployment-security/react-production-deployment-desktop-guide.md +2011 -0
  236. package/skills-library/deployment-security/self-hosted-supabase-coolify-guide.md +1684 -0
  237. package/skills-library/deployment-security/unique-features-ai-strategy-plaid-security.md +1613 -0
  238. package/skills-library/deployment-security/vps-deployment.md +135 -0
  239. package/skills-library/document-processing/WORD_EXPORT_MARKDOWN_FORMATTING.md +482 -0
  240. package/skills-library/document-processing/document-ai-landingai-integration.md +677 -0
  241. package/skills-library/document-processing/express-secure-file-downloads-mern.md +413 -0
  242. package/skills-library/document-processing/express-secure-file-downloads.md +413 -0
  243. package/skills-library/document-processing/md-to-word-converter.md +318 -0
  244. package/skills-library/document-processing/pdf-forms-integration/README.md +101 -0
  245. package/skills-library/document-processing/pdf-forms-integration/SKILL.md +662 -0
  246. package/skills-library/ecommerce/ADMIN_PRODUCTS_GUIDE.md +428 -0
  247. package/skills-library/ecommerce/ECOMMERCE_API_REFERENCE.md +776 -0
  248. package/skills-library/ecommerce/ECOMMERCE_COMPLETION_SUMMARY.md +673 -0
  249. package/skills-library/ecommerce/ECOMMERCE_IMPLEMENTATION_GUIDE.md +729 -0
  250. package/skills-library/ecommerce/ECOMMERCE_QUICK_REFERENCE.md +521 -0
  251. package/skills-library/ecommerce/ECOMMERCE_TESTING_CHECKLIST.md +565 -0
  252. package/skills-library/ecommerce/ECOMMERCE_WORKFLOW_GUIDE.md +1059 -0
  253. package/skills-library/ecommerce/PRODUCT_CREATION_EXPANDED.md +522 -0
  254. package/skills-library/ecommerce/agentic-commerce-protocol.md +203 -0
  255. package/skills-library/ecommerce/cart-abandonment-recovery.md +236 -0
  256. package/skills-library/ecommerce/cart-architecture-patterns.md +300 -0
  257. package/skills-library/ecommerce/cart-item-count-indicator.md +264 -0
  258. package/skills-library/ecommerce/checkout-ux-conversion.md +227 -0
  259. package/skills-library/ecommerce/composable-commerce-selection.md +166 -0
  260. package/skills-library/ecommerce/ecommerce-analytics-patterns.md +167 -0
  261. package/skills-library/ecommerce/fraud-detection-patterns.md +179 -0
  262. package/skills-library/ecommerce/inventory-stock-management.md +270 -0
  263. package/skills-library/ecommerce/order-saga-state-machine.md +336 -0
  264. package/skills-library/ecommerce/payment-provider-abstraction.md +245 -0
  265. package/skills-library/ecommerce/pci-compliance-checklist.md +192 -0
  266. package/skills-library/ecommerce/refund-chargeback-handling.md +177 -0
  267. package/skills-library/ecommerce/shipping-carrier-integration.md +218 -0
  268. package/skills-library/ecommerce/webhook-idempotency-patterns.md +253 -0
  269. package/skills-library/excalidraw-diagrams/.github/workflows/ci.yml +558 -0
  270. package/skills-library/excalidraw-diagrams/.github/workflows/prompt-gallery.yml +448 -0
  271. package/skills-library/excalidraw-diagrams/.github/workflows/release.yml +42 -0
  272. package/skills-library/excalidraw-diagrams/.github/workflows/test-reusable-ci.yml +25 -0
  273. package/skills-library/excalidraw-diagrams/CLAUDE.md +57 -0
  274. package/skills-library/excalidraw-diagrams/LICENSE +21 -0
  275. package/skills-library/excalidraw-diagrams/README.md +178 -0
  276. package/skills-library/excalidraw-diagrams/SKILL.md +715 -0
  277. package/skills-library/form-solutions/BUTTON_TYPE_FORM_SUBMISSION.md +336 -0
  278. package/skills-library/form-solutions/FILLABLE_PDF_IMPLEMENTATION.md +226 -0
  279. package/skills-library/form-solutions/SURVEYJS_QUESTIONNAIRE_SYSTEM.md +367 -0
  280. package/skills-library/form-solutions/tiptap-minimal-setup.md +690 -0
  281. package/skills-library/frontend/scholarly-classification-bubble-map.md +149 -0
  282. package/skills-library/infrastructure/ci-cd-pipeline-builder.md +517 -0
  283. package/skills-library/infrastructure/observability-designer.md +264 -0
  284. package/skills-library/infrastructure/performance-profiler.md +621 -0
  285. package/skills-library/installer-wizard-patterns.md +249 -0
  286. package/skills-library/integrations/CLAUDE_CODE_TOKEN_ANALYTICS.md +160 -0
  287. package/skills-library/integrations/CONFIGURABLE_AI_PROVIDER_SELECTION.md +728 -0
  288. package/skills-library/integrations/SOCKET_IO_BROADCAST_ALL_VS_ROOM.md +141 -0
  289. package/skills-library/integrations/VIRTUAL_MEETINGS_IMPLEMENTATION.md +374 -0
  290. package/skills-library/integrations/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  291. package/skills-library/integrations/YOUTUBE_API_SETUP.md +141 -0
  292. package/skills-library/integrations/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  293. package/skills-library/integrations/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  294. package/skills-library/integrations/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  295. package/skills-library/integrations/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  296. package/skills-library/integrations/ai-ml/GEMINI_AI_RAG_PIPELINE_COMPLETE_GUIDE.md +195 -0
  297. package/skills-library/integrations/ai-ml/GEMINI_IMAGE_GENERATION_SETUP.md +64 -0
  298. package/skills-library/integrations/cloudflare/cloudflare-turnstile-debugging.md +202 -0
  299. package/skills-library/integrations/cloudflare/cloudflare-turnstile-implementation.md +476 -0
  300. package/skills-library/integrations/cloudflare-turnstile-debugging.md +202 -0
  301. package/skills-library/integrations/cloudflare-turnstile-implementation.md +476 -0
  302. package/skills-library/integrations/ghost-creator-monetization-pattern.md +454 -0
  303. package/skills-library/integrations/headless-cms-architecture.md +484 -0
  304. package/skills-library/integrations/headless-cms-stack-selection.md +183 -0
  305. package/skills-library/integrations/payload-cms-patterns.md +674 -0
  306. package/skills-library/integrations/realtimestt-openwakeword-cuda-windows.md +229 -0
  307. package/skills-library/integrations/rss-podcast-integration.md +300 -0
  308. package/skills-library/integrations/wordpress/WORDPRESS_LEARNDASH_DATA_RECOVERY.md +53 -0
  309. package/skills-library/integrations/youtube/YOUTUBE_API_SETUP.md +141 -0
  310. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_EXPLANATION.md +252 -0
  311. package/skills-library/integrations/youtube/YOUTUBE_BOOKMARKING_SOLUTION.md +268 -0
  312. package/skills-library/integrations/youtube/YOUTUBE_OAUTH_SETUP_GUIDE.md +200 -0
  313. package/skills-library/integrations/youtube/YOUTUBE_VIDEO_FIX_COMPLETE.md +192 -0
  314. package/skills-library/marketing/campaign-analytics.md +97 -0
  315. package/skills-library/marketing/content-creator.md +105 -0
  316. package/skills-library/marketing/marketing-strategy-pmm.md +94 -0
  317. package/skills-library/marketing/social-media-analyzer.md +81 -0
  318. package/skills-library/methodology/ADVANCED_ORCHESTRATION_PATTERNS.md +401 -0
  319. package/skills-library/methodology/AGENT_SELF_IMPROVEMENT_LOOP.md +179 -0
  320. package/skills-library/methodology/BREATH_BASED_PARALLEL_EXECUTION.md +1 -1
  321. package/skills-library/methodology/CLEANSING_CYCLE.md +358 -0
  322. package/skills-library/methodology/CONFIDENCE_ANNOTATION_PATTERN.md +143 -0
  323. package/skills-library/methodology/CRITICAL_PATTERNS_DOCUMENTATION_COMPLETE.md +204 -0
  324. package/skills-library/methodology/DELIVERABLES_SUMMARY.md +341 -0
  325. package/skills-library/methodology/DIFFICULTY_AWARE_AGENT_ROUTING.md +252 -0
  326. package/skills-library/methodology/EVOLUTIONARY_SKILL_SYNTHESIS.md +219 -0
  327. package/skills-library/methodology/GLOMERULUS_DECISION_GATE.md +223 -0
  328. package/skills-library/methodology/HIBERNATION_SYSTEM.md +231 -0
  329. package/skills-library/methodology/INSTRUMENTATION_OVER_RESTRICTION.md +192 -0
  330. package/skills-library/methodology/MASTER_COMPLETION_SUMMARY.md +444 -0
  331. package/skills-library/methodology/MASTER_SESSION_COMPLETION.md +743 -0
  332. package/skills-library/methodology/MERN_QUICK_REFERENCE.md +358 -0
  333. package/skills-library/methodology/ORGAN_AGENT_MAPPING.md +177 -0
  334. package/skills-library/methodology/PARALLEL_WAVE_BASED_REFACTORING.md +440 -0
  335. package/skills-library/methodology/QUICK_REFERENCE.md +358 -0
  336. package/skills-library/methodology/SDFT_ONPOLICY_SELF_DISTILLATION.md +186 -0
  337. package/skills-library/methodology/SELF_QUESTIONING_TASK_GENERATION.md +270 -0
  338. package/skills-library/methodology/SESSION_COMPLETION_SUMMARY.md +304 -0
  339. package/skills-library/methodology/SESSION_SUMMARY.md +432 -0
  340. package/skills-library/methodology/WARRIOR_WORKFLOW_DEBUGGING_PROTOCOL.md +252 -0
  341. package/skills-library/methodology/tech-debt-tracker.md +570 -0
  342. package/skills-library/parallel-debug/SKILL.md +60 -0
  343. package/skills-library/patterns-standards/API_PATTERN_FIX_SUMMARY.md +236 -0
  344. package/skills-library/patterns-standards/BATCH_OPERATIONS_WITH_PROGRESS_MODAL.md +362 -0
  345. package/skills-library/patterns-standards/CRITICAL_CODING_PATTERNS.md +639 -0
  346. package/skills-library/patterns-standards/DARK_MODE_MODAL_VISIBILITY.md +258 -0
  347. package/skills-library/patterns-standards/ERROR_RESILIENCE_IMPLEMENTATION.md +375 -0
  348. package/skills-library/patterns-standards/ES_MODULE_IMPORT_HOISTING_DOTENV.md +298 -0
  349. package/skills-library/patterns-standards/NESTED_BACKDROP_FILTER_CSS_ARTIFACT_FIX.md +76 -0
  350. package/skills-library/patterns-standards/ORDERED_DETECTOR_PIPELINE_GRACEFUL_FALLBACK.md +333 -0
  351. package/skills-library/patterns-standards/PHASE_IMPORT_ERROR_DEBUGGING.md +271 -0
  352. package/skills-library/patterns-standards/PYNPUT_GLOBAL_HOTKEY_VK_MATCHING.md +252 -0
  353. package/skills-library/patterns-standards/REACT_USEEFFECT_CASCADE_RESET_FIX.md +132 -0
  354. package/skills-library/patterns-standards/SUBMENU_HOVER_DROPDOWN_PATTERN.md +225 -0
  355. package/skills-library/patterns-standards/TAILWIND_TEXT_VISIBILITY_OVERRIDE.md +322 -0
  356. package/skills-library/patterns-standards/THEME_AWARE_CSS_VARIABLES_PATTERN.md +209 -0
  357. package/skills-library/patterns-standards/THEME_USER_OBJECT_PROPERTY_NAMING.md +194 -0
  358. package/skills-library/patterns-standards/TOOLTIP_BLOCKING_CLICKS_FIX.md +267 -0
  359. package/skills-library/patterns-standards/claude-code-plugin-structure.md +235 -0
  360. package/skills-library/patterns-standards/react-i18next-setup.md +429 -0
  361. package/skills-library/patterns-standards/thesys-c1-generative-ui-integration.md +967 -0
  362. package/skills-library/plugin-development/CLAUDE_CODE_COMMAND_REGISTRATION_SILENT_FAILURE.md +315 -0
  363. package/skills-library/plugin-development/plugin-command-namespace-vs-global.md +390 -0
  364. package/skills-library/plugin-development/plugin-doc-auto-generation.md +172 -0
  365. package/skills-library/security/GITHUB_REPO_SECURITY_AUDIT.md +115 -0
  366. package/skills-library/security/admin-deletion-safety.md +396 -0
  367. package/skills-library/security/application-vuln-patterns.md +477 -0
  368. package/skills-library/security/env-secrets-manager.md +686 -0
  369. package/skills-library/security/secure-ai-application-templates.md +347 -0
  370. package/skills-library/security/sql-injection-prevention-postgresjs.md +151 -0
  371. package/skills-library/supabase-connection-pooler-fix.md +102 -0
  372. package/skills-library/system-context/POWERSHELL_BASH_INTEROP.md +82 -0
  373. package/skills-library/system-context/SERVICE_LIFECYCLE_MANAGEMENT.md +119 -0
  374. package/skills-library/system-context/SKILL.md +40 -0
  375. package/skills-library/system-context/WINDOWS_DEV_ENVIRONMENT.md +73 -0
  376. package/skills-library/testing/E2E_PLAYWRIGHT_PATTERNS.md +99 -0
  377. package/skills-library/testing/INTEGRATION_TEST_STRATEGY.md +82 -0
  378. package/skills-library/testing/RED_GREEN_BUGFIX_GATE.md +203 -0
  379. package/skills-library/testing/TEST_DATA_MANAGEMENT.md +69 -0
  380. package/skills-library/testing/VITEST_UNIT_TEST_PATTERNS.md +75 -0
  381. package/skills-library/testing/playwright-api-security-tests.md +202 -0
  382. package/skills-library/toolbox/SKILL.md +84 -0
  383. package/skills-library/toolbox/code-graph-and-web-scraping-mcps.md +237 -0
  384. package/skills-library/ui-ux-pro-max/ACCESSIBILITY_ESSENTIALS.md +115 -0
  385. package/skills-library/ui-ux-pro-max/DESIGN_SYSTEM_SCAFFOLDING.md +133 -0
  386. package/skills-library/ui-ux-pro-max/RESPONSIVE_LAYOUT_PATTERNS.md +119 -0
  387. package/skills-library/ui-ux-pro-max/SKILL.md +386 -0
  388. package/skills-library/ui-ux-pro-max/data/charts.csv +26 -0
  389. package/skills-library/ui-ux-pro-max/data/colors.csv +97 -0
  390. package/skills-library/ui-ux-pro-max/data/icons.csv +101 -0
  391. package/skills-library/ui-ux-pro-max/data/landing.csv +31 -0
  392. package/skills-library/ui-ux-pro-max/data/products.csv +97 -0
  393. package/skills-library/ui-ux-pro-max/data/react-performance.csv +45 -0
  394. package/skills-library/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  395. package/skills-library/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  396. package/skills-library/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  397. package/skills-library/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  398. package/skills-library/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  399. package/skills-library/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  400. package/skills-library/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  401. package/skills-library/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  402. package/skills-library/ui-ux-pro-max/data/stacks/react.csv +54 -0
  403. package/skills-library/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  404. package/skills-library/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  405. package/skills-library/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  406. package/skills-library/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  407. package/skills-library/ui-ux-pro-max/data/styles.csv +68 -0
  408. package/skills-library/ui-ux-pro-max/data/typography.csv +58 -0
  409. package/skills-library/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  410. package/skills-library/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  411. package/skills-library/ui-ux-pro-max/data/web-interface.csv +31 -0
  412. package/skills-library/wordpress-style-theme-components.md +1526 -0
  413. package/templates/ASSUMPTIONS.md +1 -1
  414. package/templates/DECISION_LOG.md +0 -1
  415. package/templates/phase-prompt.md +1 -1
  416. package/templates/phoenix-comparison.md +6 -6
  417. package/templates/skill-api-integration.md +106 -0
  418. package/templates/skill-architecture-pattern.md +92 -0
  419. package/templates/skill-debug-pattern.md +98 -0
  420. package/templates/skill-devops-recipe.md +107 -0
  421. package/templates/skill-general.md +65 -0
  422. package/templates/skill-ui-component.md +113 -0
  423. package/version.json +7 -3
  424. package/workflows/handoff-session.md +2 -2
  425. package/workflows/new-project.md +2 -2
  426. package/workflows/plan-phase.md +1 -1
  427. package/.claude-plugin/plugin.json +0 -64
  428. package/skills-library/_general/methodology/LIVE_BREADCRUMB_PROTOCOL.md +0 -242
  429. package/skills-library/_general/methodology/llm-judge-memory-crud.md +0 -241
  430. package/skills-library/methodology/REFLEXION_MEMORY_PATTERN.md +0 -183
  431. package/skills-library/methodology/RESEARCH_BACKED_WORKFLOW_UPGRADE.md +0 -263
  432. package/skills-library/methodology/SABBATH_REST_PATTERN.md +0 -267
  433. package/skills-library/methodology/STONE_AND_SCAFFOLD.md +0 -220
  434. package/skills-library/specialists/api-architecture/api-designer.md +0 -49
  435. package/skills-library/specialists/api-architecture/graphql-architect.md +0 -49
  436. package/skills-library/specialists/api-architecture/mcp-developer.md +0 -51
  437. package/skills-library/specialists/api-architecture/microservices-architect.md +0 -50
  438. package/skills-library/specialists/api-architecture/websocket-engineer.md +0 -48
  439. package/skills-library/specialists/backend/django-expert.md +0 -52
  440. package/skills-library/specialists/backend/fastapi-expert.md +0 -52
  441. package/skills-library/specialists/backend/laravel-specialist.md +0 -52
  442. package/skills-library/specialists/backend/nestjs-expert.md +0 -51
  443. package/skills-library/specialists/backend/rails-expert.md +0 -53
  444. package/skills-library/specialists/backend/spring-boot-engineer.md +0 -56
  445. package/skills-library/specialists/data-ml/fine-tuning-expert.md +0 -48
  446. package/skills-library/specialists/data-ml/ml-pipeline.md +0 -47
  447. package/skills-library/specialists/data-ml/pandas-pro.md +0 -47
  448. package/skills-library/specialists/data-ml/rag-architect.md +0 -51
  449. package/skills-library/specialists/data-ml/spark-engineer.md +0 -47
  450. package/skills-library/specialists/frontend/angular-architect.md +0 -52
  451. package/skills-library/specialists/frontend/flutter-expert.md +0 -51
  452. package/skills-library/specialists/frontend/nextjs-developer.md +0 -54
  453. package/skills-library/specialists/frontend/react-native-expert.md +0 -50
  454. package/skills-library/specialists/frontend/vue-expert.md +0 -51
  455. package/skills-library/specialists/infrastructure/chaos-engineer.md +0 -74
  456. package/skills-library/specialists/infrastructure/cloud-architect.md +0 -70
  457. package/skills-library/specialists/infrastructure/database-optimizer.md +0 -64
  458. package/skills-library/specialists/infrastructure/devops-engineer.md +0 -70
  459. package/skills-library/specialists/infrastructure/kubernetes-specialist.md +0 -52
  460. package/skills-library/specialists/infrastructure/monitoring-expert.md +0 -70
  461. package/skills-library/specialists/infrastructure/sre-engineer.md +0 -70
  462. package/skills-library/specialists/infrastructure/terraform-engineer.md +0 -51
  463. package/skills-library/specialists/languages/cpp-pro.md +0 -74
  464. package/skills-library/specialists/languages/csharp-developer.md +0 -69
  465. package/skills-library/specialists/languages/dotnet-core-expert.md +0 -54
  466. package/skills-library/specialists/languages/golang-pro.md +0 -51
  467. package/skills-library/specialists/languages/java-architect.md +0 -49
  468. package/skills-library/specialists/languages/javascript-pro.md +0 -68
  469. package/skills-library/specialists/languages/kotlin-specialist.md +0 -68
  470. package/skills-library/specialists/languages/php-pro.md +0 -49
  471. package/skills-library/specialists/languages/python-pro.md +0 -52
  472. package/skills-library/specialists/languages/react-expert.md +0 -51
  473. package/skills-library/specialists/languages/rust-engineer.md +0 -50
  474. package/skills-library/specialists/languages/sql-pro.md +0 -56
  475. package/skills-library/specialists/languages/swift-expert.md +0 -69
  476. package/skills-library/specialists/languages/typescript-pro.md +0 -51
  477. package/skills-library/specialists/platform/atlassian-mcp.md +0 -52
  478. package/skills-library/specialists/platform/embedded-systems.md +0 -53
  479. package/skills-library/specialists/platform/game-developer.md +0 -53
  480. package/skills-library/specialists/platform/salesforce-developer.md +0 -53
  481. package/skills-library/specialists/platform/shopify-expert.md +0 -49
  482. package/skills-library/specialists/platform/wordpress-pro.md +0 -49
  483. package/skills-library/specialists/quality/browser-use-expert.md +0 -210
  484. package/skills-library/specialists/quality/code-documenter.md +0 -51
  485. package/skills-library/specialists/quality/code-reviewer.md +0 -67
  486. package/skills-library/specialists/quality/debugging-wizard.md +0 -51
  487. package/skills-library/specialists/quality/fullstack-guardian.md +0 -51
  488. package/skills-library/specialists/quality/legacy-modernizer.md +0 -50
  489. package/skills-library/specialists/quality/playwright-expert.md +0 -65
  490. package/skills-library/specialists/quality/spec-miner.md +0 -56
  491. package/skills-library/specialists/quality/test-master.md +0 -65
  492. package/skills-library/specialists/security/secure-code-guardian.md +0 -55
  493. package/skills-library/specialists/security/security-reviewer.md +0 -53
  494. package/skills-library/specialists/workflow/architecture-designer.md +0 -53
  495. package/skills-library/specialists/workflow/cli-developer.md +0 -70
  496. package/skills-library/specialists/workflow/feature-forge.md +0 -65
  497. package/skills-library/specialists/workflow/prompt-engineer.md +0 -54
  498. package/skills-library/specialists/workflow/the-fool.md +0 -62
  499. /package/skills-library/{performance → _general/performance}/cache-augmented-generation.md +0 -0
  500. /package/skills-library/{debugging → parallel-debug}/FAILURE_TAXONOMY_CLASSIFICATION.md +0 -0
  501. /package/skills-library/{debugging → parallel-debug}/THREE_AGENT_HYPOTHESIS_DEBUGGING.md +0 -0
@@ -0,0 +1,444 @@
1
+ # Knex.js Database Abstraction Layer for Multi-DB Support
2
+
3
+ ## Overview
4
+ A database abstraction layer using Knex.js that supports both PostgreSQL and MySQL with a unified API. Uses the adapter pattern for database-specific operations.
5
+
6
+ ## Architecture
7
+
8
+ ### Directory Structure
9
+ ```
10
+ server/database/
11
+ ├── index.js # Factory and singleton export
12
+ ├── config.js # Database configuration with auto-detection
13
+ ├── cli.js # Migration CLI tool
14
+ ├── migrations/ # SQL migration files
15
+ │ ├── 001_users.sql
16
+ │ ├── 002_courses.sql
17
+ │ └── ...
18
+ └── adapters/
19
+ ├── BaseAdapter.js # Abstract base with common operations
20
+ ├── PostgresAdapter.js # PostgreSQL-specific features
21
+ └── MySQLAdapter.js # MySQL-specific features
22
+ ```
23
+
24
+ ## Configuration (config.js)
25
+
26
+ ```javascript
27
+ import 'dotenv/config';
28
+
29
+ const dbType = process.env.DB_TYPE || 'pg';
30
+ const isSupabase = process.env.DATABASE_URL?.includes('supabase');
31
+
32
+ // Parse DATABASE_URL if provided (Supabase, Heroku, etc.)
33
+ function parseConnectionUrl(url) {
34
+ if (!url) return null;
35
+ const parsed = new URL(url);
36
+ return {
37
+ host: parsed.hostname,
38
+ port: parseInt(parsed.port),
39
+ database: parsed.pathname.slice(1),
40
+ user: parsed.username,
41
+ password: parsed.password
42
+ };
43
+ }
44
+
45
+ export function getConfig() {
46
+ const urlConfig = parseConnectionUrl(process.env.DATABASE_URL);
47
+
48
+ const connection = urlConfig || {
49
+ host: process.env.DB_HOST || 'localhost',
50
+ port: parseInt(process.env.DB_PORT) || (dbType === 'mysql' ? 3306 : 5432),
51
+ database: process.env.DB_NAME || 'lms_db',
52
+ user: process.env.DB_USER || 'postgres',
53
+ password: process.env.DB_PASS || ''
54
+ };
55
+
56
+ // SSL for Supabase and cloud providers
57
+ if (isSupabase || process.env.DB_SSL === 'true') {
58
+ connection.ssl = { rejectUnauthorized: false };
59
+ }
60
+
61
+ return {
62
+ client: dbType === 'mysql' ? 'mysql2' : 'pg',
63
+ connection,
64
+ pool: { min: 2, max: 10 },
65
+ acquireConnectionTimeout: 10000
66
+ };
67
+ }
68
+
69
+ export { dbType, isSupabase };
70
+ ```
71
+
72
+ ## Base Adapter (BaseAdapter.js)
73
+
74
+ ```javascript
75
+ export default class BaseAdapter {
76
+ constructor(knex) {
77
+ this.db = knex;
78
+ }
79
+
80
+ // Standard CRUD operations
81
+ async findAll(table, options = {}) {
82
+ let query = this.db(table);
83
+ if (options.where) query = query.where(options.where);
84
+ if (options.orderBy) query = query.orderBy(options.orderBy);
85
+ if (options.limit) query = query.limit(options.limit);
86
+ if (options.offset) query = query.offset(options.offset);
87
+ return query;
88
+ }
89
+
90
+ async findById(table, id) {
91
+ return this.db(table).where('id', id).first();
92
+ }
93
+
94
+ async findOne(table, where) {
95
+ return this.db(table).where(where).first();
96
+ }
97
+
98
+ async create(table, data) {
99
+ const [result] = await this.db(table).insert(data).returning('*');
100
+ return result;
101
+ }
102
+
103
+ async update(table, id, data) {
104
+ const [result] = await this.db(table)
105
+ .where('id', id)
106
+ .update({ ...data, updated_at: new Date() })
107
+ .returning('*');
108
+ return result;
109
+ }
110
+
111
+ async delete(table, id) {
112
+ return this.db(table).where('id', id).del();
113
+ }
114
+
115
+ async count(table, where = {}) {
116
+ const [{ count }] = await this.db(table).where(where).count('* as count');
117
+ return parseInt(count);
118
+ }
119
+
120
+ async exists(table, where) {
121
+ const result = await this.db(table).where(where).first();
122
+ return !!result;
123
+ }
124
+
125
+ // Transaction support
126
+ async transaction(callback) {
127
+ return this.db.transaction(callback);
128
+ }
129
+
130
+ // Raw query
131
+ async raw(sql, bindings = []) {
132
+ return this.db.raw(sql, bindings);
133
+ }
134
+
135
+ // Abstract methods - must be implemented by subclasses
136
+ async search(table, column, query) {
137
+ throw new Error('search() must be implemented by subclass');
138
+ }
139
+
140
+ async upsert(table, data, conflictColumns) {
141
+ throw new Error('upsert() must be implemented by subclass');
142
+ }
143
+
144
+ getJsonColumn(column) {
145
+ throw new Error('getJsonColumn() must be implemented by subclass');
146
+ }
147
+ }
148
+ ```
149
+
150
+ ## PostgreSQL Adapter (PostgresAdapter.js)
151
+
152
+ ```javascript
153
+ import BaseAdapter from './BaseAdapter.js';
154
+
155
+ export default class PostgresAdapter extends BaseAdapter {
156
+ // Case-insensitive search using ILIKE
157
+ async search(table, column, query) {
158
+ return this.db(table).where(column, 'ilike', `%${query}%`);
159
+ }
160
+
161
+ // Full-text search
162
+ async fullTextSearch(table, columns, query) {
163
+ const tsVector = columns.map(c => `coalesce(${c}, '')`).join(" || ' ' || ");
164
+ return this.db(table)
165
+ .whereRaw(`to_tsvector('english', ${tsVector}) @@ plainto_tsquery('english', ?)`, [query]);
166
+ }
167
+
168
+ // Upsert with ON CONFLICT
169
+ async upsert(table, data, conflictColumns = ['id']) {
170
+ const conflict = conflictColumns.join(', ');
171
+ return this.db(table)
172
+ .insert(data)
173
+ .onConflict(this.db.raw(conflict))
174
+ .merge()
175
+ .returning('*');
176
+ }
177
+
178
+ // JSONB column operations
179
+ getJsonColumn(column) {
180
+ return this.db.raw(`?? ::jsonb`, [column]);
181
+ }
182
+
183
+ async jsonContains(table, column, value) {
184
+ return this.db(table).whereRaw(`?? @> ?::jsonb`, [column, JSON.stringify(value)]);
185
+ }
186
+
187
+ async jsonArrayAppend(table, id, column, value) {
188
+ return this.db(table)
189
+ .where('id', id)
190
+ .update({
191
+ [column]: this.db.raw(`?? || ?::jsonb`, [column, JSON.stringify([value])])
192
+ });
193
+ }
194
+
195
+ // Array operations (PostgreSQL native arrays)
196
+ async arrayContains(table, column, value) {
197
+ return this.db(table).whereRaw(`? = ANY(??)`, [value, column]);
198
+ }
199
+
200
+ // Bulk insert with RETURNING
201
+ async bulkInsert(table, rows) {
202
+ return this.db(table).insert(rows).returning('*');
203
+ }
204
+ }
205
+ ```
206
+
207
+ ## MySQL Adapter (MySQLAdapter.js)
208
+
209
+ ```javascript
210
+ import BaseAdapter from './BaseAdapter.js';
211
+
212
+ export default class MySQLAdapter extends BaseAdapter {
213
+ // Case-insensitive search using LIKE (MySQL is case-insensitive by default)
214
+ async search(table, column, query) {
215
+ return this.db(table).where(column, 'like', `%${query}%`);
216
+ }
217
+
218
+ // Full-text search (requires FULLTEXT index)
219
+ async fullTextSearch(table, columns, query) {
220
+ const columnList = columns.join(', ');
221
+ return this.db(table)
222
+ .whereRaw(`MATCH(${columnList}) AGAINST(? IN NATURAL LANGUAGE MODE)`, [query]);
223
+ }
224
+
225
+ // Upsert with INSERT ... ON DUPLICATE KEY UPDATE
226
+ async upsert(table, data, conflictColumns = ['id']) {
227
+ const updateColumns = Object.keys(data)
228
+ .filter(k => !conflictColumns.includes(k))
229
+ .map(k => `${k} = VALUES(${k})`)
230
+ .join(', ');
231
+
232
+ const insertQuery = this.db(table).insert(data).toString();
233
+ return this.db.raw(`${insertQuery} ON DUPLICATE KEY UPDATE ${updateColumns}`);
234
+ }
235
+
236
+ // JSON column operations
237
+ getJsonColumn(column) {
238
+ return this.db.raw(`JSON_UNQUOTE(??)`, [column]);
239
+ }
240
+
241
+ async jsonContains(table, column, value) {
242
+ return this.db(table)
243
+ .whereRaw(`JSON_CONTAINS(??, ?, '$')`, [column, JSON.stringify(value)]);
244
+ }
245
+
246
+ async jsonArrayAppend(table, id, column, value) {
247
+ return this.db(table)
248
+ .where('id', id)
249
+ .update({
250
+ [column]: this.db.raw(`JSON_ARRAY_APPEND(??, '$', ?)`, [column, JSON.stringify(value)])
251
+ });
252
+ }
253
+
254
+ // Simulated array contains using JSON
255
+ async arrayContains(table, column, value) {
256
+ return this.db(table)
257
+ .whereRaw(`JSON_CONTAINS(??, ?)`, [column, JSON.stringify(value)]);
258
+ }
259
+
260
+ // Bulk insert - MySQL doesn't support RETURNING, so fetch after
261
+ async bulkInsert(table, rows) {
262
+ await this.db(table).insert(rows);
263
+ const ids = rows.map((_, i) => this.db.raw('LAST_INSERT_ID() + ?', [i]));
264
+ return this.db(table).whereIn('id', ids);
265
+ }
266
+
267
+ // MySQL-specific: GROUP_CONCAT
268
+ async groupConcat(table, groupBy, concatColumn, separator = ',') {
269
+ return this.db(table)
270
+ .select(groupBy)
271
+ .select(this.db.raw(`GROUP_CONCAT(?? SEPARATOR ?) as items`, [concatColumn, separator]))
272
+ .groupBy(groupBy);
273
+ }
274
+ }
275
+ ```
276
+
277
+ ## Factory (index.js)
278
+
279
+ ```javascript
280
+ import knex from 'knex';
281
+ import { getConfig, dbType } from './config.js';
282
+ import PostgresAdapter from './adapters/PostgresAdapter.js';
283
+ import MySQLAdapter from './adapters/MySQLAdapter.js';
284
+
285
+ let dbInstance = null;
286
+ let adapterInstance = null;
287
+
288
+ export function getDatabase() {
289
+ if (!dbInstance) {
290
+ dbInstance = knex(getConfig());
291
+ }
292
+ return dbInstance;
293
+ }
294
+
295
+ export function getAdapter() {
296
+ if (!adapterInstance) {
297
+ const db = getDatabase();
298
+ adapterInstance = dbType === 'mysql'
299
+ ? new MySQLAdapter(db)
300
+ : new PostgresAdapter(db);
301
+ }
302
+ return adapterInstance;
303
+ }
304
+
305
+ export async function closeDatabase() {
306
+ if (dbInstance) {
307
+ await dbInstance.destroy();
308
+ dbInstance = null;
309
+ adapterInstance = null;
310
+ }
311
+ }
312
+
313
+ // Named exports for convenience
314
+ export { dbType };
315
+ export const db = getDatabase();
316
+ export const adapter = getAdapter();
317
+ ```
318
+
319
+ ## CLI Tool (cli.js)
320
+
321
+ ```javascript
322
+ #!/usr/bin/env node
323
+ import 'dotenv/config';
324
+ import { getDatabase, closeDatabase, dbType } from './index.js';
325
+ import fs from 'fs';
326
+ import path from 'path';
327
+
328
+ const db = getDatabase();
329
+ const migrationsDir = path.join(process.cwd(), 'server/database/migrations');
330
+
331
+ async function ensureMigrationTable() {
332
+ const exists = await db.schema.hasTable('migrations');
333
+ if (!exists) {
334
+ await db.schema.createTable('migrations', (table) => {
335
+ table.increments('id');
336
+ table.string('name').notNullable();
337
+ table.timestamp('executed_at').defaultTo(db.fn.now());
338
+ });
339
+ }
340
+ }
341
+
342
+ async function getExecutedMigrations() {
343
+ await ensureMigrationTable();
344
+ const rows = await db('migrations').select('name').orderBy('id');
345
+ return rows.map(r => r.name);
346
+ }
347
+
348
+ async function runMigrations() {
349
+ const executed = await getExecutedMigrations();
350
+ const files = fs.readdirSync(migrationsDir)
351
+ .filter(f => f.endsWith('.sql'))
352
+ .sort();
353
+
354
+ let count = 0;
355
+ for (const file of files) {
356
+ if (!executed.includes(file)) {
357
+ console.log(`Running: ${file}`);
358
+ const sql = fs.readFileSync(path.join(migrationsDir, file), 'utf8');
359
+ await db.raw(sql);
360
+ await db('migrations').insert({ name: file });
361
+ count++;
362
+ }
363
+ }
364
+
365
+ console.log(`Executed ${count} migration(s)`);
366
+ }
367
+
368
+ async function showStatus() {
369
+ const executed = await getExecutedMigrations();
370
+ const files = fs.readdirSync(migrationsDir)
371
+ .filter(f => f.endsWith('.sql'))
372
+ .sort();
373
+
374
+ console.log(`\nDatabase: ${dbType.toUpperCase()}\n`);
375
+ for (const file of files) {
376
+ const status = executed.includes(file) ? '✓' : '○';
377
+ console.log(` ${status} ${file}`);
378
+ }
379
+ }
380
+
381
+ // Command dispatch
382
+ const command = process.argv[2];
383
+ switch (command) {
384
+ case 'migrate':
385
+ runMigrations().then(() => closeDatabase());
386
+ break;
387
+ case 'status':
388
+ showStatus().then(() => closeDatabase());
389
+ break;
390
+ default:
391
+ console.log('Usage: node cli.js [migrate|status]');
392
+ }
393
+ ```
394
+
395
+ ## Usage Examples
396
+
397
+ ```javascript
398
+ import { adapter } from './database/index.js';
399
+
400
+ // Find all active users
401
+ const users = await adapter.findAll('users', {
402
+ where: { active: true },
403
+ orderBy: 'created_at',
404
+ limit: 10
405
+ });
406
+
407
+ // Search courses (uses ILIKE for PG, LIKE for MySQL)
408
+ const courses = await adapter.search('courses', 'title', 'javascript');
409
+
410
+ // Upsert setting
411
+ await adapter.upsert('settings', {
412
+ key: 'site_name',
413
+ value: 'My LMS'
414
+ }, ['key']);
415
+
416
+ // Transaction
417
+ await adapter.transaction(async (trx) => {
418
+ await trx('users').insert({ name: 'John' });
419
+ await trx('enrollments').insert({ user_id: 1, course_id: 1 });
420
+ });
421
+ ```
422
+
423
+ ## Environment Variables
424
+
425
+ ```env
426
+ # PostgreSQL
427
+ DB_TYPE=pg
428
+ DB_HOST=localhost
429
+ DB_PORT=5432
430
+ DB_NAME=lms_db
431
+ DB_USER=postgres
432
+ DB_PASS=password
433
+
434
+ # MySQL
435
+ DB_TYPE=mysql
436
+ DB_HOST=localhost
437
+ DB_PORT=3306
438
+ DB_NAME=lms_db
439
+ DB_USER=root
440
+ DB_PASS=password
441
+
442
+ # Supabase (auto-detected)
443
+ DATABASE_URL=postgres://user:pass@db.supabase.co:5432/postgres
444
+ ```
@@ -0,0 +1,206 @@
1
+ # License Key System for SaaS Applications
2
+
3
+ ## Overview
4
+ A tiered license key system that gates features based on subscription level. Keys are validated server-side with optional offline capability.
5
+
6
+ ## Key Format
7
+ ```
8
+ XXXX-XXXX-XXXX-XXXX
9
+ ```
10
+ - 16 alphanumeric characters in 4 groups
11
+ - First character encodes tier (S=Starter, P=Professional, E=Enterprise, U=Ultimate)
12
+ - Includes checksum for basic validation
13
+
14
+ ## Implementation
15
+
16
+ ### Key Generation (server/utils/license.js)
17
+ ```javascript
18
+ const crypto = require('crypto');
19
+
20
+ const TIERS = {
21
+ STARTER: { prefix: 'S', features: ['basic_courses', 'max_users_50'] },
22
+ PROFESSIONAL: { prefix: 'P', features: ['all_courses', 'max_users_500', 'analytics'] },
23
+ ENTERPRISE: { prefix: 'E', features: ['all_courses', 'unlimited_users', 'api_access'] },
24
+ ULTIMATE: { prefix: 'U', features: ['everything', 'white_label', 'priority_support'] }
25
+ };
26
+
27
+ function generateLicenseKey(tier, metadata = {}) {
28
+ const tierInfo = TIERS[tier.toUpperCase()];
29
+ const prefix = tierInfo.prefix;
30
+
31
+ // Generate random parts
32
+ const part1 = prefix + crypto.randomBytes(2).toString('hex').toUpperCase().slice(0, 3);
33
+ const part2 = crypto.randomBytes(2).toString('hex').toUpperCase();
34
+ const part3 = crypto.randomBytes(2).toString('hex').toUpperCase();
35
+
36
+ // Checksum for last part
37
+ const checksum = calculateChecksum(part1 + part2 + part3);
38
+ const part4 = checksum.slice(0, 4);
39
+
40
+ return `${part1}-${part2}-${part3}-${part4}`;
41
+ }
42
+
43
+ function validateLicenseKey(key) {
44
+ const parts = key.split('-');
45
+ if (parts.length !== 4) return { valid: false, error: 'Invalid format' };
46
+
47
+ const tierPrefix = parts[0][0];
48
+ const tier = Object.entries(TIERS).find(([, v]) => v.prefix === tierPrefix);
49
+
50
+ if (!tier) return { valid: false, error: 'Invalid tier' };
51
+
52
+ // Verify checksum
53
+ const baseString = parts.slice(0, 3).join('');
54
+ const expectedChecksum = calculateChecksum(baseString).slice(0, 4);
55
+
56
+ if (parts[3] !== expectedChecksum) {
57
+ return { valid: false, error: 'Invalid checksum' };
58
+ }
59
+
60
+ return {
61
+ valid: true,
62
+ tier: tier[0],
63
+ features: tier[1].features
64
+ };
65
+ }
66
+ ```
67
+
68
+ ### Feature Gating (server/utils/licenseFeatures.js)
69
+ ```javascript
70
+ const FEATURE_REQUIREMENTS = {
71
+ 'video_hosting': ['PROFESSIONAL', 'ENTERPRISE', 'ULTIMATE'],
72
+ 'api_access': ['ENTERPRISE', 'ULTIMATE'],
73
+ 'white_label': ['ULTIMATE'],
74
+ 'analytics_dashboard': ['PROFESSIONAL', 'ENTERPRISE', 'ULTIMATE'],
75
+ 'bulk_enrollment': ['ENTERPRISE', 'ULTIMATE'],
76
+ 'custom_certificates': ['PROFESSIONAL', 'ENTERPRISE', 'ULTIMATE'],
77
+ 'multi_instructor': ['ENTERPRISE', 'ULTIMATE']
78
+ };
79
+
80
+ function hasFeature(tier, feature) {
81
+ const requiredTiers = FEATURE_REQUIREMENTS[feature];
82
+ if (!requiredTiers) return true; // Feature not gated
83
+ return requiredTiers.includes(tier);
84
+ }
85
+
86
+ function getEnabledFeatures(tier) {
87
+ return Object.entries(FEATURE_REQUIREMENTS)
88
+ .filter(([, tiers]) => tiers.includes(tier))
89
+ .map(([feature]) => feature);
90
+ }
91
+ ```
92
+
93
+ ### Middleware (server/middleware/licenseCheck.js)
94
+ ```javascript
95
+ const { validateLicenseKey, hasFeature } = require('../utils/license');
96
+
97
+ function requireLicense(requiredFeature = null) {
98
+ return async (req, res, next) => {
99
+ const settings = await getSettings();
100
+ const licenseKey = settings.license_key;
101
+
102
+ if (!licenseKey) {
103
+ return res.status(403).json({
104
+ error: 'License required',
105
+ code: 'NO_LICENSE'
106
+ });
107
+ }
108
+
109
+ const validation = validateLicenseKey(licenseKey);
110
+
111
+ if (!validation.valid) {
112
+ return res.status(403).json({
113
+ error: 'Invalid license',
114
+ code: 'INVALID_LICENSE'
115
+ });
116
+ }
117
+
118
+ if (requiredFeature && !hasFeature(validation.tier, requiredFeature)) {
119
+ return res.status(403).json({
120
+ error: `Feature requires ${requiredFeature}`,
121
+ code: 'FEATURE_NOT_AVAILABLE',
122
+ currentTier: validation.tier
123
+ });
124
+ }
125
+
126
+ req.license = validation;
127
+ next();
128
+ };
129
+ }
130
+ ```
131
+
132
+ ### API Routes (server/routes/licenseRoutes.js)
133
+ ```javascript
134
+ router.post('/validate', async (req, res) => {
135
+ const { licenseKey } = req.body;
136
+ const result = validateLicenseKey(licenseKey);
137
+
138
+ if (result.valid) {
139
+ // Store in settings
140
+ await updateSetting('license_key', licenseKey);
141
+ await updateSetting('license_tier', result.tier);
142
+ }
143
+
144
+ res.json(result);
145
+ });
146
+
147
+ router.get('/features', requireLicense(), (req, res) => {
148
+ res.json({
149
+ tier: req.license.tier,
150
+ features: req.license.features,
151
+ enabled: getEnabledFeatures(req.license.tier)
152
+ });
153
+ });
154
+ ```
155
+
156
+ ## Usage in Installer
157
+
158
+ ### Step 3: License Validation
159
+ ```php
160
+ <div class="license-input">
161
+ <input type="text" name="license_key" id="license_key"
162
+ placeholder="XXXX-XXXX-XXXX-XXXX"
163
+ pattern="[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}">
164
+ <button type="button" onclick="validateLicense()">Validate</button>
165
+ </div>
166
+
167
+ <script>
168
+ async function validateLicense() {
169
+ const key = document.getElementById('license_key').value;
170
+ const response = await fetch('/api/license/validate', {
171
+ method: 'POST',
172
+ headers: { 'Content-Type': 'application/json' },
173
+ body: JSON.stringify({ licenseKey: key })
174
+ });
175
+ const result = await response.json();
176
+
177
+ if (result.valid) {
178
+ showSuccess(`License valid! Tier: ${result.tier}`);
179
+ enableContinue();
180
+ } else {
181
+ showError(result.error);
182
+ }
183
+ }
184
+ </script>
185
+ ```
186
+
187
+ ## Tier Comparison
188
+
189
+ | Feature | Starter | Pro | Enterprise | Ultimate |
190
+ |---------|---------|-----|------------|----------|
191
+ | Max Users | 50 | 500 | Unlimited | Unlimited |
192
+ | Courses | 10 | 100 | Unlimited | Unlimited |
193
+ | Video Hosting | No | Yes | Yes | Yes |
194
+ | Analytics | Basic | Full | Full | Full |
195
+ | API Access | No | No | Yes | Yes |
196
+ | White Label | No | No | No | Yes |
197
+ | Custom Domain | No | Yes | Yes | Yes |
198
+ | Priority Support | No | No | Yes | Yes |
199
+
200
+ ## Security Considerations
201
+
202
+ 1. **Server-side validation** - Never trust client-only validation
203
+ 2. **Rate limiting** - Prevent brute-force key guessing
204
+ 3. **Key rotation** - Allow key updates without reinstall
205
+ 4. **Offline grace period** - Allow temporary offline operation
206
+ 5. **Audit logging** - Track license validation attempts