@hivehub/rulebook 5.3.3 → 5.4.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 (492) hide show
  1. package/.claude/commands/analysis.md +35 -35
  2. package/.claude/commands/continue.md +33 -33
  3. package/.claude/commands/ralph-config.md +112 -112
  4. package/.claude/commands/ralph-history.md +110 -110
  5. package/.claude/commands/ralph-init.md +72 -72
  6. package/.claude/commands/ralph-pause-resume.md +105 -105
  7. package/.claude/commands/ralph-run.md +101 -101
  8. package/.claude/commands/ralph-status.md +76 -76
  9. package/.claude/commands/rulebook-decision-create.md +55 -55
  10. package/.claude/commands/rulebook-decision-list.md +15 -15
  11. package/.claude/commands/rulebook-knowledge-add.md +41 -41
  12. package/.claude/commands/rulebook-knowledge-list.md +15 -15
  13. package/.claude/commands/rulebook-learn-capture.md +48 -48
  14. package/.claude/commands/rulebook-learn-list.md +13 -13
  15. package/.claude/commands/rulebook-memory-save.md +48 -48
  16. package/.claude/commands/rulebook-memory-search.md +47 -47
  17. package/.claude/commands/rulebook-task-apply.md +67 -67
  18. package/.claude/commands/rulebook-task-archive.md +94 -94
  19. package/.claude/commands/rulebook-task-create.md +93 -93
  20. package/.claude/commands/rulebook-task-list.md +42 -42
  21. package/.claude/commands/rulebook-task-show.md +52 -52
  22. package/.claude/commands/rulebook-task-validate.md +53 -53
  23. package/.claude-plugin/marketplace.json +28 -28
  24. package/.claude-plugin/plugin.json +8 -8
  25. package/LICENSE +191 -191
  26. package/README.md +42 -3
  27. package/dist/cli/commands/compress.d.ts +18 -0
  28. package/dist/cli/commands/compress.d.ts.map +1 -0
  29. package/dist/cli/commands/compress.js +100 -0
  30. package/dist/cli/commands/compress.js.map +1 -0
  31. package/dist/cli/commands/index.d.ts +1 -0
  32. package/dist/cli/commands/index.d.ts.map +1 -1
  33. package/dist/cli/commands/index.js +1 -0
  34. package/dist/cli/commands/index.js.map +1 -1
  35. package/dist/cli/commands/init.d.ts.map +1 -1
  36. package/dist/cli/commands/init.js +2 -0
  37. package/dist/cli/commands/init.js.map +1 -1
  38. package/dist/cli/commands/update.d.ts.map +1 -1
  39. package/dist/cli/commands/update.js +2 -0
  40. package/dist/cli/commands/update.js.map +1 -1
  41. package/dist/core/claude-settings-manager.d.ts +7 -0
  42. package/dist/core/claude-settings-manager.d.ts.map +1 -1
  43. package/dist/core/claude-settings-manager.js +31 -14
  44. package/dist/core/claude-settings-manager.js.map +1 -1
  45. package/dist/core/compress/compressor.d.ts +60 -0
  46. package/dist/core/compress/compressor.d.ts.map +1 -0
  47. package/dist/core/compress/compressor.js +232 -0
  48. package/dist/core/compress/compressor.js.map +1 -0
  49. package/dist/core/compress/discover.d.ts +19 -0
  50. package/dist/core/compress/discover.d.ts.map +1 -0
  51. package/dist/core/compress/discover.js +100 -0
  52. package/dist/core/compress/discover.js.map +1 -0
  53. package/dist/core/compress/validator.d.ts +47 -0
  54. package/dist/core/compress/validator.d.ts.map +1 -0
  55. package/dist/core/compress/validator.js +131 -0
  56. package/dist/core/compress/validator.js.map +1 -0
  57. package/dist/core/doctor.d.ts.map +1 -1
  58. package/dist/core/doctor.js +66 -0
  59. package/dist/core/doctor.js.map +1 -1
  60. package/dist/core/generator.d.ts +16 -0
  61. package/dist/core/generator.d.ts.map +1 -1
  62. package/dist/core/generator.js +36 -11
  63. package/dist/core/generator.js.map +1 -1
  64. package/dist/hooks/safe-flag-io.d.ts +77 -0
  65. package/dist/hooks/safe-flag-io.d.ts.map +1 -0
  66. package/dist/hooks/safe-flag-io.js +169 -0
  67. package/dist/hooks/safe-flag-io.js.map +1 -0
  68. package/dist/index.js +11 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/mcp/rulebook-server.d.ts.map +1 -1
  71. package/dist/mcp/rulebook-server.js +236 -0
  72. package/dist/mcp/rulebook-server.js.map +1 -1
  73. package/dist/types.d.ts +4 -0
  74. package/dist/types.d.ts.map +1 -1
  75. package/package.json +23 -21
  76. package/templates/agents/accessibility-reviewer.md +43 -43
  77. package/templates/agents/api-designer.md +42 -42
  78. package/templates/agents/architect.md +51 -51
  79. package/templates/agents/build-engineer.md +36 -36
  80. package/templates/agents/code-reviewer.md +47 -47
  81. package/templates/agents/compiler/codegen-debugger.md +34 -34
  82. package/templates/agents/compiler/stdlib-engineer.md +28 -28
  83. package/templates/agents/compiler/test-coverage-guardian.md +31 -31
  84. package/templates/agents/context-intelligence.md +52 -52
  85. package/templates/agents/database-architect.md +41 -41
  86. package/templates/agents/devops-engineer.md +42 -42
  87. package/templates/agents/docs-writer.md +38 -38
  88. package/templates/agents/game-engine/cpp-core-expert.md +35 -35
  89. package/templates/agents/game-engine/render-engineer.md +22 -22
  90. package/templates/agents/game-engine/shader-engineer.md +38 -38
  91. package/templates/agents/game-engine/systems-integration.md +43 -43
  92. package/templates/agents/generic/code-reviewer.md +41 -41
  93. package/templates/agents/generic/docs-writer.md +25 -25
  94. package/templates/agents/generic/project-manager.md +36 -36
  95. package/templates/agents/generic/researcher.md +34 -34
  96. package/templates/agents/generic/test-engineer.md +41 -41
  97. package/templates/agents/i18n-engineer.md +42 -42
  98. package/templates/agents/implementer.md +42 -42
  99. package/templates/agents/migration-engineer.md +42 -42
  100. package/templates/agents/mobile/platform-specialist.md +22 -22
  101. package/templates/agents/mobile/ui-engineer.md +22 -22
  102. package/templates/agents/performance-engineer.md +49 -49
  103. package/templates/agents/refactoring-agent.md +41 -41
  104. package/templates/agents/researcher.md +38 -38
  105. package/templates/agents/security-reviewer.md +40 -40
  106. package/templates/agents/team-lead.md +37 -37
  107. package/templates/agents/tester.md +48 -48
  108. package/templates/agents/ux-reviewer.md +43 -43
  109. package/templates/agents/web-app/api-designer.md +22 -22
  110. package/templates/agents/web-app/backend-engineer.md +30 -30
  111. package/templates/agents/web-app/database-engineer.md +22 -22
  112. package/templates/agents/web-app/frontend-engineer.md +29 -29
  113. package/templates/agents/web-app/security-reviewer.md +32 -32
  114. package/templates/ci/rulebook-review.yml +26 -26
  115. package/templates/cli/AIDER.md +49 -49
  116. package/templates/cli/AMAZON_Q.md +25 -25
  117. package/templates/cli/AUGGIE.md +32 -32
  118. package/templates/cli/CLAUDE.md +117 -117
  119. package/templates/cli/CLINE.md +99 -99
  120. package/templates/cli/CODEBUDDY.md +20 -20
  121. package/templates/cli/CODEIUM.md +20 -20
  122. package/templates/cli/CODEX.md +21 -21
  123. package/templates/cli/CONTINUE.md +34 -34
  124. package/templates/cli/CURSOR_CLI.md +62 -62
  125. package/templates/cli/FACTORY.md +18 -18
  126. package/templates/cli/GEMINI.md +35 -35
  127. package/templates/cli/KILOCODE.md +18 -18
  128. package/templates/cli/OPENCODE.md +18 -18
  129. package/templates/cli/_GENERIC_TEMPLATE.md +29 -29
  130. package/templates/cli/gemini-extension.json +77 -77
  131. package/templates/commands/rulebook-decision-create.md +55 -55
  132. package/templates/commands/rulebook-decision-list.md +15 -15
  133. package/templates/commands/rulebook-knowledge-add.md +41 -41
  134. package/templates/commands/rulebook-knowledge-list.md +15 -15
  135. package/templates/commands/rulebook-learn-capture.md +48 -48
  136. package/templates/commands/rulebook-learn-list.md +13 -13
  137. package/templates/commands/rulebook-memory-save.md +48 -48
  138. package/templates/commands/rulebook-memory-search.md +47 -47
  139. package/templates/commands/rulebook-task-apply.md +67 -67
  140. package/templates/commands/rulebook-task-archive.md +94 -94
  141. package/templates/commands/rulebook-task-create.md +93 -93
  142. package/templates/commands/rulebook-task-list.md +42 -42
  143. package/templates/commands/rulebook-task-show.md +52 -52
  144. package/templates/commands/rulebook-task-validate.md +53 -53
  145. package/templates/compact-context/_default.md +23 -23
  146. package/templates/compact-context/cpp.md +26 -26
  147. package/templates/compact-context/go.md +26 -26
  148. package/templates/compact-context/python.md +26 -26
  149. package/templates/compact-context/rust.md +28 -28
  150. package/templates/compact-context/typescript.md +29 -29
  151. package/templates/core/AGENTS_OVERRIDE.md +16 -16
  152. package/templates/core/AGENT_AUTOMATION.md +296 -296
  153. package/templates/core/CLAUDE_MD_v2.md +71 -71
  154. package/templates/core/DAG.md +304 -304
  155. package/templates/core/DECISIONS.md +38 -38
  156. package/templates/core/DOCUMENTATION_RULES.md +36 -36
  157. package/templates/core/KNOWLEDGE.md +49 -49
  158. package/templates/core/MULTI_AGENT.md +74 -74
  159. package/templates/core/PLANS.md +28 -28
  160. package/templates/core/QUALITY_ENFORCEMENT.md +68 -68
  161. package/templates/core/RALPH.md +471 -471
  162. package/templates/core/RULEBOOK.md +1947 -1947
  163. package/templates/core/TIER1_PROHIBITIONS.md +154 -154
  164. package/templates/core/TOKEN_OPTIMIZATION.md +49 -49
  165. package/templates/core/WORKSPACE.md +69 -69
  166. package/templates/frameworks/ANGULAR.md +36 -36
  167. package/templates/frameworks/DJANGO.md +83 -83
  168. package/templates/frameworks/ELECTRON.md +147 -147
  169. package/templates/frameworks/FLASK.md +38 -38
  170. package/templates/frameworks/FLUTTER.md +55 -55
  171. package/templates/frameworks/JQUERY.md +32 -32
  172. package/templates/frameworks/LARAVEL.md +38 -38
  173. package/templates/frameworks/NESTJS.md +43 -43
  174. package/templates/frameworks/NEXTJS.md +127 -127
  175. package/templates/frameworks/NUXT.md +40 -40
  176. package/templates/frameworks/RAILS.md +66 -66
  177. package/templates/frameworks/REACT.md +38 -38
  178. package/templates/frameworks/REACT_NATIVE.md +47 -47
  179. package/templates/frameworks/SPRING.md +39 -39
  180. package/templates/frameworks/SYMFONY.md +36 -36
  181. package/templates/frameworks/VUE.md +36 -36
  182. package/templates/frameworks/ZEND.md +35 -35
  183. package/templates/git/CI_CD_PATTERNS.md +661 -661
  184. package/templates/git/GITHUB_ACTIONS.md +728 -728
  185. package/templates/git/GITLAB_CI.md +730 -730
  186. package/templates/git/GIT_WORKFLOW.md +1192 -1192
  187. package/templates/git/SECRETS_MANAGEMENT.md +585 -585
  188. package/templates/hooks/COMMIT_MSG.md +530 -530
  189. package/templates/hooks/POST_CHECKOUT.md +546 -546
  190. package/templates/hooks/PREPARE_COMMIT_MSG.md +619 -619
  191. package/templates/hooks/PRE_COMMIT.md +414 -414
  192. package/templates/hooks/PRE_PUSH.md +601 -601
  193. package/templates/hooks/check-context-and-handoff.ps1 +58 -58
  194. package/templates/hooks/check-context-and-handoff.sh +76 -76
  195. package/templates/hooks/enforce-team-for-background-agents.ps1 +63 -63
  196. package/templates/hooks/enforce-team-for-background-agents.sh +55 -55
  197. package/templates/hooks/on-compact-reinject.sh +34 -34
  198. package/templates/hooks/resume-from-handoff.ps1 +40 -40
  199. package/templates/hooks/resume-from-handoff.sh +61 -61
  200. package/templates/hooks/terse-activate.ps1 +143 -0
  201. package/templates/hooks/terse-activate.sh +197 -0
  202. package/templates/hooks/terse-mode-tracker.ps1 +153 -0
  203. package/templates/hooks/terse-mode-tracker.sh +187 -0
  204. package/templates/ides/CONTINUE_RULES.md +16 -16
  205. package/templates/ides/COPILOT.md +37 -37
  206. package/templates/ides/COPILOT_INSTRUCTIONS.md +23 -23
  207. package/templates/ides/CURSOR.md +43 -43
  208. package/templates/ides/GEMINI_RULES.md +17 -17
  209. package/templates/ides/JETBRAINS_AI.md +35 -35
  210. package/templates/ides/REPLIT.md +36 -36
  211. package/templates/ides/TABNINE.md +29 -29
  212. package/templates/ides/VSCODE.md +40 -40
  213. package/templates/ides/WINDSURF.md +36 -36
  214. package/templates/ides/WINDSURF_RULES.md +14 -14
  215. package/templates/ides/ZED.md +32 -32
  216. package/templates/ides/cursor-mdc/go.mdc +24 -24
  217. package/templates/ides/cursor-mdc/python.mdc +24 -24
  218. package/templates/ides/cursor-mdc/quality.mdc +25 -25
  219. package/templates/ides/cursor-mdc/ralph.mdc +39 -39
  220. package/templates/ides/cursor-mdc/rulebook.mdc +38 -38
  221. package/templates/ides/cursor-mdc/rust.mdc +24 -24
  222. package/templates/ides/cursor-mdc/typescript.mdc +25 -25
  223. package/templates/languages/C.md +333 -333
  224. package/templates/languages/CPP.md +743 -743
  225. package/templates/languages/CSHARP.md +417 -417
  226. package/templates/languages/ELIXIR.md +454 -454
  227. package/templates/languages/ERLANG.md +361 -361
  228. package/templates/languages/GO.md +645 -645
  229. package/templates/languages/HASKELL.md +177 -177
  230. package/templates/languages/JAVA.md +607 -607
  231. package/templates/languages/JAVASCRIPT.md +631 -631
  232. package/templates/languages/JULIA.md +97 -97
  233. package/templates/languages/KOTLIN.md +511 -511
  234. package/templates/languages/LISP.md +100 -100
  235. package/templates/languages/LUA.md +74 -74
  236. package/templates/languages/OBJECTIVEC.md +90 -90
  237. package/templates/languages/PHP.md +416 -416
  238. package/templates/languages/PYTHON.md +682 -682
  239. package/templates/languages/RUBY.md +421 -421
  240. package/templates/languages/RUST.md +477 -477
  241. package/templates/languages/SAS.md +73 -73
  242. package/templates/languages/SCALA.md +348 -348
  243. package/templates/languages/SOLIDITY.md +580 -580
  244. package/templates/languages/SQL.md +137 -137
  245. package/templates/languages/SWIFT.md +466 -466
  246. package/templates/languages/TYPESCRIPT.md +591 -591
  247. package/templates/languages/ZIG.md +265 -265
  248. package/templates/modules/ATLASSIAN.md +255 -255
  249. package/templates/modules/CONTEXT7.md +54 -54
  250. package/templates/modules/FIGMA.md +267 -267
  251. package/templates/modules/GITHUB_MCP.md +64 -64
  252. package/templates/modules/GRAFANA.md +328 -328
  253. package/templates/modules/MEMORY.md +126 -126
  254. package/templates/modules/NOTION.md +247 -247
  255. package/templates/modules/PLAYWRIGHT.md +90 -90
  256. package/templates/modules/RULEBOOK_MCP.md +208 -156
  257. package/templates/modules/SERENA.md +337 -337
  258. package/templates/modules/SUPABASE.md +223 -223
  259. package/templates/modules/SYNAP.md +69 -69
  260. package/templates/modules/VECTORIZER.md +63 -63
  261. package/templates/modules/sequential-thinking.md +42 -42
  262. package/templates/ralph/ralph-history.bat +4 -4
  263. package/templates/ralph/ralph-history.sh +5 -5
  264. package/templates/ralph/ralph-init.bat +5 -5
  265. package/templates/ralph/ralph-init.sh +5 -5
  266. package/templates/ralph/ralph-pause.bat +5 -5
  267. package/templates/ralph/ralph-pause.sh +5 -5
  268. package/templates/ralph/ralph-run.bat +5 -5
  269. package/templates/ralph/ralph-run.sh +5 -5
  270. package/templates/ralph/ralph-status.bat +4 -4
  271. package/templates/ralph/ralph-status.sh +5 -5
  272. package/templates/rules/consult-analysis-before-implementing.md +23 -23
  273. package/templates/rules/cpp.md +46 -46
  274. package/templates/rules/csharp.md +44 -44
  275. package/templates/rules/diagnostic-first.md +39 -39
  276. package/templates/rules/fail-twice-escalate.md +46 -46
  277. package/templates/rules/follow-task-sequence.md +36 -36
  278. package/templates/rules/git-safety.md +29 -29
  279. package/templates/rules/go.md +40 -40
  280. package/templates/rules/incremental-implementation.md +56 -56
  281. package/templates/rules/incremental-tests.md +29 -29
  282. package/templates/rules/java.md +43 -43
  283. package/templates/rules/javascript.md +39 -39
  284. package/templates/rules/knowledge-base-usage.md +41 -41
  285. package/templates/rules/multi-agent-teams.md +75 -75
  286. package/templates/rules/no-deferred.md +31 -31
  287. package/templates/rules/no-shortcuts.md +30 -30
  288. package/templates/rules/python.md +43 -43
  289. package/templates/rules/research-first.md +30 -30
  290. package/templates/rules/respect-handoff-trigger.md +41 -41
  291. package/templates/rules/rust.md +40 -40
  292. package/templates/rules/sequential-editing.md +21 -21
  293. package/templates/rules/session-workflow.md +24 -24
  294. package/templates/rules/task-decomposition.md +32 -32
  295. package/templates/rules/typescript.md +40 -40
  296. package/templates/services/AZURE_BLOB.md +184 -184
  297. package/templates/services/CASSANDRA.md +239 -239
  298. package/templates/services/DATADOG.md +26 -26
  299. package/templates/services/DOCKER.md +124 -124
  300. package/templates/services/DOCKER_COMPOSE.md +168 -168
  301. package/templates/services/DYNAMODB.md +308 -308
  302. package/templates/services/ELASTICSEARCH.md +347 -347
  303. package/templates/services/GCS.md +178 -178
  304. package/templates/services/HELM.md +194 -194
  305. package/templates/services/INFLUXDB.md +265 -265
  306. package/templates/services/KAFKA.md +341 -341
  307. package/templates/services/KUBERNETES.md +208 -208
  308. package/templates/services/MARIADB.md +183 -183
  309. package/templates/services/MEMCACHED.md +242 -242
  310. package/templates/services/MINIO.md +201 -201
  311. package/templates/services/MONGODB.md +268 -268
  312. package/templates/services/MYSQL.md +358 -358
  313. package/templates/services/NEO4J.md +247 -247
  314. package/templates/services/OPENTELEMETRY.md +25 -25
  315. package/templates/services/ORACLE.md +290 -290
  316. package/templates/services/PINO.md +24 -24
  317. package/templates/services/POSTGRESQL.md +326 -326
  318. package/templates/services/PROMETHEUS.md +33 -33
  319. package/templates/services/RABBITMQ.md +286 -286
  320. package/templates/services/REDIS.md +292 -292
  321. package/templates/services/S3.md +298 -298
  322. package/templates/services/SENTRY.md +23 -23
  323. package/templates/services/SQLITE.md +294 -294
  324. package/templates/services/SQLSERVER.md +294 -294
  325. package/templates/services/WINSTON.md +30 -30
  326. package/templates/skills/cli/aider/SKILL.md +59 -59
  327. package/templates/skills/cli/amazon-q/SKILL.md +35 -35
  328. package/templates/skills/cli/auggie/SKILL.md +42 -42
  329. package/templates/skills/cli/claude/SKILL.md +42 -42
  330. package/templates/skills/cli/cline/SKILL.md +42 -42
  331. package/templates/skills/cli/codebuddy/SKILL.md +30 -30
  332. package/templates/skills/cli/codeium/SKILL.md +30 -30
  333. package/templates/skills/cli/codex/SKILL.md +31 -31
  334. package/templates/skills/cli/continue/SKILL.md +44 -44
  335. package/templates/skills/cli/cursor-cli/SKILL.md +38 -38
  336. package/templates/skills/cli/factory/SKILL.md +28 -28
  337. package/templates/skills/cli/gemini/SKILL.md +45 -45
  338. package/templates/skills/cli/kilocode/SKILL.md +28 -28
  339. package/templates/skills/cli/opencode/SKILL.md +28 -28
  340. package/templates/skills/core/agent-automation/SKILL.md +194 -194
  341. package/templates/skills/core/dag/SKILL.md +314 -314
  342. package/templates/skills/core/documentation-rules/SKILL.md +46 -46
  343. package/templates/skills/core/quality-enforcement/SKILL.md +78 -78
  344. package/templates/skills/core/rulebook/SKILL.md +176 -176
  345. package/templates/skills/core/rulebook-terse/SKILL.md +116 -0
  346. package/templates/skills/core/rulebook-terse-commit/SKILL.md +96 -0
  347. package/templates/skills/core/rulebook-terse-review/SKILL.md +112 -0
  348. package/templates/skills/dev/accessibility/SKILL.md +17 -17
  349. package/templates/skills/dev/analysis/SKILL.md +19 -19
  350. package/templates/skills/dev/api-design/SKILL.md +15 -15
  351. package/templates/skills/dev/architect/SKILL.md +17 -17
  352. package/templates/skills/dev/build-fix/SKILL.md +17 -17
  353. package/templates/skills/dev/db-design/SKILL.md +15 -15
  354. package/templates/skills/dev/debug/SKILL.md +16 -16
  355. package/templates/skills/dev/deploy/SKILL.md +17 -17
  356. package/templates/skills/dev/docs/SKILL.md +17 -17
  357. package/templates/skills/dev/handoff/SKILL.md +27 -27
  358. package/templates/skills/dev/migrate/SKILL.md +15 -15
  359. package/templates/skills/dev/perf/SKILL.md +17 -17
  360. package/templates/skills/dev/refactor/SKILL.md +17 -17
  361. package/templates/skills/dev/research/SKILL.md +14 -14
  362. package/templates/skills/dev/review/SKILL.md +18 -18
  363. package/templates/skills/dev/security-audit/SKILL.md +17 -17
  364. package/templates/skills/frameworks/angular/SKILL.md +46 -46
  365. package/templates/skills/frameworks/django/SKILL.md +93 -93
  366. package/templates/skills/frameworks/electron/SKILL.md +157 -157
  367. package/templates/skills/frameworks/flask/SKILL.md +48 -48
  368. package/templates/skills/frameworks/flutter/SKILL.md +65 -65
  369. package/templates/skills/frameworks/jquery/SKILL.md +42 -42
  370. package/templates/skills/frameworks/laravel/SKILL.md +48 -48
  371. package/templates/skills/frameworks/nestjs/SKILL.md +53 -53
  372. package/templates/skills/frameworks/nextjs/SKILL.md +137 -137
  373. package/templates/skills/frameworks/nuxt/SKILL.md +50 -50
  374. package/templates/skills/frameworks/rails/SKILL.md +76 -76
  375. package/templates/skills/frameworks/react/SKILL.md +48 -48
  376. package/templates/skills/frameworks/react-native/SKILL.md +57 -57
  377. package/templates/skills/frameworks/spring/SKILL.md +49 -49
  378. package/templates/skills/frameworks/symfony/SKILL.md +46 -46
  379. package/templates/skills/frameworks/vue/SKILL.md +46 -46
  380. package/templates/skills/frameworks/zend/SKILL.md +45 -45
  381. package/templates/skills/ides/copilot/SKILL.md +47 -47
  382. package/templates/skills/ides/cursor/SKILL.md +53 -53
  383. package/templates/skills/ides/jetbrains-ai/SKILL.md +45 -45
  384. package/templates/skills/ides/replit/SKILL.md +46 -46
  385. package/templates/skills/ides/tabnine/SKILL.md +39 -39
  386. package/templates/skills/ides/vscode/SKILL.md +50 -50
  387. package/templates/skills/ides/windsurf/SKILL.md +46 -46
  388. package/templates/skills/ides/zed/SKILL.md +42 -42
  389. package/templates/skills/languages/c/SKILL.md +343 -343
  390. package/templates/skills/languages/cpp/SKILL.md +753 -753
  391. package/templates/skills/languages/csharp/SKILL.md +427 -427
  392. package/templates/skills/languages/elixir/SKILL.md +464 -464
  393. package/templates/skills/languages/erlang/SKILL.md +371 -371
  394. package/templates/skills/languages/go/SKILL.md +655 -655
  395. package/templates/skills/languages/haskell/SKILL.md +187 -187
  396. package/templates/skills/languages/java/SKILL.md +617 -617
  397. package/templates/skills/languages/javascript/SKILL.md +641 -641
  398. package/templates/skills/languages/julia/SKILL.md +107 -107
  399. package/templates/skills/languages/kotlin/SKILL.md +521 -521
  400. package/templates/skills/languages/lisp/SKILL.md +110 -110
  401. package/templates/skills/languages/lua/SKILL.md +84 -84
  402. package/templates/skills/languages/objectivec/SKILL.md +100 -100
  403. package/templates/skills/languages/php/SKILL.md +426 -426
  404. package/templates/skills/languages/python/SKILL.md +692 -692
  405. package/templates/skills/languages/ruby/SKILL.md +431 -431
  406. package/templates/skills/languages/rust/SKILL.md +487 -487
  407. package/templates/skills/languages/sas/SKILL.md +83 -83
  408. package/templates/skills/languages/scala/SKILL.md +358 -358
  409. package/templates/skills/languages/solidity/SKILL.md +590 -590
  410. package/templates/skills/languages/sql/SKILL.md +147 -147
  411. package/templates/skills/languages/swift/SKILL.md +476 -476
  412. package/templates/skills/languages/typescript/SKILL.md +302 -302
  413. package/templates/skills/languages/zig/SKILL.md +275 -275
  414. package/templates/skills/modules/atlassian/SKILL.md +265 -265
  415. package/templates/skills/modules/context7/SKILL.md +64 -64
  416. package/templates/skills/modules/figma/SKILL.md +277 -277
  417. package/templates/skills/modules/github-mcp/SKILL.md +74 -74
  418. package/templates/skills/modules/grafana/SKILL.md +338 -338
  419. package/templates/skills/modules/memory/SKILL.md +73 -73
  420. package/templates/skills/modules/notion/SKILL.md +257 -257
  421. package/templates/skills/modules/playwright/SKILL.md +100 -100
  422. package/templates/skills/modules/rulebook-mcp/SKILL.md +166 -166
  423. package/templates/skills/modules/serena/SKILL.md +347 -347
  424. package/templates/skills/modules/supabase/SKILL.md +233 -233
  425. package/templates/skills/modules/synap/SKILL.md +79 -79
  426. package/templates/skills/modules/vectorizer/SKILL.md +73 -73
  427. package/templates/skills/services/azure-blob/SKILL.md +194 -194
  428. package/templates/skills/services/cassandra/SKILL.md +249 -249
  429. package/templates/skills/services/dynamodb/SKILL.md +318 -318
  430. package/templates/skills/services/elasticsearch/SKILL.md +357 -357
  431. package/templates/skills/services/gcs/SKILL.md +188 -188
  432. package/templates/skills/services/influxdb/SKILL.md +275 -275
  433. package/templates/skills/services/kafka/SKILL.md +351 -351
  434. package/templates/skills/services/mariadb/SKILL.md +193 -193
  435. package/templates/skills/services/memcached/SKILL.md +252 -252
  436. package/templates/skills/services/minio/SKILL.md +211 -211
  437. package/templates/skills/services/mongodb/SKILL.md +278 -278
  438. package/templates/skills/services/mysql/SKILL.md +368 -368
  439. package/templates/skills/services/neo4j/SKILL.md +257 -257
  440. package/templates/skills/services/oracle/SKILL.md +300 -300
  441. package/templates/skills/services/postgresql/SKILL.md +336 -336
  442. package/templates/skills/services/rabbitmq/SKILL.md +296 -296
  443. package/templates/skills/services/redis/SKILL.md +302 -302
  444. package/templates/skills/services/s3/SKILL.md +308 -308
  445. package/templates/skills/services/sqlite/SKILL.md +304 -304
  446. package/templates/skills/services/sqlserver/SKILL.md +304 -304
  447. package/templates/skills/workflows/ralph/SKILL.md +309 -309
  448. package/templates/skills/workflows/ralph/install.sh +87 -87
  449. package/templates/skills/workflows/ralph/manifest.json +158 -158
  450. package/templates/workflows/codespell.yml +31 -31
  451. package/templates/workflows/cpp-lint.yml +47 -47
  452. package/templates/workflows/cpp-publish.yml +119 -119
  453. package/templates/workflows/cpp-test.yml +77 -77
  454. package/templates/workflows/dotnet-lint.yml +29 -29
  455. package/templates/workflows/dotnet-publish.yml +40 -40
  456. package/templates/workflows/dotnet-test.yml +41 -41
  457. package/templates/workflows/elixir-lint.yml +45 -45
  458. package/templates/workflows/elixir-publish.yml +49 -49
  459. package/templates/workflows/elixir-test.yml +54 -54
  460. package/templates/workflows/erlang-lint.yml +47 -47
  461. package/templates/workflows/erlang-test.yml +62 -62
  462. package/templates/workflows/go-lint.yml +39 -39
  463. package/templates/workflows/go-publish.yml +95 -95
  464. package/templates/workflows/go-test.yml +59 -59
  465. package/templates/workflows/java-lint.yml +60 -60
  466. package/templates/workflows/java-publish.yml +120 -120
  467. package/templates/workflows/java-test.yml +85 -85
  468. package/templates/workflows/kotlin-lint.yml +34 -34
  469. package/templates/workflows/kotlin-publish.yml +56 -56
  470. package/templates/workflows/kotlin-test.yml +48 -48
  471. package/templates/workflows/php-lint.yml +39 -39
  472. package/templates/workflows/php-publish.yml +50 -50
  473. package/templates/workflows/php-test.yml +54 -54
  474. package/templates/workflows/python-lint.yml +47 -47
  475. package/templates/workflows/python-publish.yml +91 -91
  476. package/templates/workflows/python-test.yml +59 -59
  477. package/templates/workflows/rust-lint.yml +54 -54
  478. package/templates/workflows/rust-publish.yml +66 -66
  479. package/templates/workflows/rust-test.yml +75 -75
  480. package/templates/workflows/solidity-lint.yml +41 -41
  481. package/templates/workflows/solidity-test.yml +47 -47
  482. package/templates/workflows/swift-lint.yml +32 -32
  483. package/templates/workflows/swift-publish.yml +58 -58
  484. package/templates/workflows/swift-test.yml +44 -44
  485. package/templates/workflows/typescript-publish.yml +60 -60
  486. package/templates/workflows/typescript-test.yml +73 -73
  487. package/templates/workflows/zig-lint.yml +27 -27
  488. package/templates/workflows/zig-test.yml +40 -40
  489. package/dist/cli/commands.d.ts +0 -225
  490. package/dist/cli/commands.d.ts.map +0 -1
  491. package/dist/cli/commands.js +0 -3984
  492. package/dist/cli/commands.js.map +0 -1
@@ -1,368 +1,368 @@
1
- ---
2
- name: "MySQL"
3
- description: "Use MySQL for relational data storage with high performance, replication, and wide ecosystem support."
4
- version: "1.0.0"
5
- category: "services"
6
- author: "Rulebook"
7
- tags: ["services", "database"]
8
- dependencies: []
9
- conflicts: []
10
- ---
11
- <!-- MYSQL:START -->
12
- # MySQL Database Instructions
13
-
14
- **CRITICAL**: Use MySQL for relational data storage with high performance, replication, and wide ecosystem support.
15
-
16
- ## Core Features
17
-
18
- ### Connection
19
- ```typescript
20
- // Using mysql2 (Node.js)
21
- import mysql from 'mysql2/promise'
22
-
23
- const pool = mysql.createPool({
24
- host: process.env.DB_HOST,
25
- port: parseInt(process.env.DB_PORT || '3306'),
26
- database: process.env.DB_NAME,
27
- user: process.env.DB_USER,
28
- password: process.env.DB_PASSWORD,
29
- waitForConnections: true,
30
- connectionLimit: 10,
31
- queueLimit: 0,
32
- enableKeepAlive: true,
33
- keepAliveInitialDelay: 0,
34
- })
35
-
36
- // Using Prisma
37
- import { PrismaClient } from '@prisma/client'
38
- const prisma = new PrismaClient()
39
- ```
40
-
41
- ### Basic Queries
42
- ```typescript
43
- // SELECT
44
- const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [userId])
45
- const users = rows as User[]
46
-
47
- // INSERT
48
- const [result] = await pool.execute(
49
- 'INSERT INTO users (name, email) VALUES (?, ?)',
50
- ['John Doe', 'john@example.com']
51
- )
52
- const insertId = (result as any).insertId
53
-
54
- // UPDATE
55
- const [result] = await pool.execute(
56
- 'UPDATE users SET name = ? WHERE id = ?',
57
- ['Jane Doe', userId]
58
- )
59
- const affectedRows = (result as any).affectedRows
60
-
61
- // DELETE
62
- const [result] = await pool.execute('DELETE FROM users WHERE id = ?', [userId])
63
- ```
64
-
65
- ### Transactions
66
- ```typescript
67
- const connection = await pool.getConnection()
68
- try {
69
- await connection.beginTransaction()
70
-
71
- await connection.execute('INSERT INTO accounts (user_id, balance) VALUES (?, ?)', [userId, 1000])
72
- await connection.execute('INSERT INTO transactions (account_id, amount) VALUES (?, ?)', [accountId, 1000])
73
-
74
- await connection.commit()
75
- } catch (error) {
76
- await connection.rollback()
77
- throw error
78
- } finally {
79
- connection.release()
80
- }
81
- ```
82
-
83
- ### Advanced Features
84
- ```typescript
85
- // JSON queries (MySQL 5.7+)
86
- const [rows] = await pool.execute(
87
- "SELECT * FROM products WHERE JSON_EXTRACT(metadata, '$.category') = ?",
88
- ['electronics']
89
- )
90
-
91
- // Full-text search
92
- const [rows] = await pool.execute(
93
- "SELECT * FROM articles WHERE MATCH(title, content) AGAINST(? IN NATURAL LANGUAGE MODE)",
94
- ['search term']
95
- )
96
-
97
- // Window functions (MySQL 8.0+)
98
- const [rows] = await pool.execute(`
99
- SELECT
100
- name,
101
- salary,
102
- ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) as rank
103
- FROM employees
104
- `)
105
-
106
- // Common Table Expressions (CTE) (MySQL 8.0+)
107
- const [rows] = await pool.execute(`
108
- WITH RECURSIVE cte AS (
109
- SELECT id, name, parent_id FROM categories WHERE parent_id IS NULL
110
- UNION ALL
111
- SELECT c.id, c.name, c.parent_id FROM categories c
112
- INNER JOIN cte ON c.parent_id = cte.id
113
- )
114
- SELECT * FROM cte
115
- `)
116
- ```
117
-
118
- ## Common Patterns
119
-
120
- ### Connection Pooling
121
- ```typescript
122
- // Reuse connection pool
123
- let pool: mysql.Pool | null = null
124
-
125
- export function getPool(): mysql.Pool {
126
- if (!pool) {
127
- pool = mysql.createPool({
128
- // ... config
129
- })
130
-
131
- pool.on('connection', (connection) => {
132
- connection.query('SET SESSION sql_mode = "STRICT_TRANS_TABLES"')
133
- })
134
- }
135
- return pool
136
- }
137
-
138
- // Graceful shutdown
139
- process.on('SIGINT', async () => {
140
- if (pool) {
141
- await pool.end()
142
- }
143
- process.exit(0)
144
- })
145
- ```
146
-
147
- ### Prepared Statements
148
- ```typescript
149
- // Always use parameterized queries (?) to prevent SQL injection
150
- // ❌ WRONG
151
- await pool.execute(`SELECT * FROM users WHERE email = '${email}'`)
152
-
153
- // ✅ CORRECT
154
- await pool.execute('SELECT * FROM users WHERE email = ?', [email])
155
- ```
156
-
157
- ### Error Handling
158
- ```typescript
159
- try {
160
- const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [userId])
161
- if ((rows as any[]).length === 0) {
162
- throw new Error('User not found')
163
- }
164
- return rows[0]
165
- } catch (error: any) {
166
- if (error.code === 'ER_DUP_ENTRY') {
167
- throw new Error('Duplicate entry')
168
- }
169
- if (error.code === 'ER_NO_REFERENCED_ROW_2') {
170
- throw new Error('Referenced record does not exist')
171
- }
172
- throw error
173
- }
174
- ```
175
-
176
- ### Migrations
177
- ```typescript
178
- // Using db-migrate
179
- import { migrate } from 'db-migrate'
180
-
181
- await migrate({
182
- config: {
183
- dev: {
184
- driver: 'mysql',
185
- database: process.env.DB_NAME,
186
- user: process.env.DB_USER,
187
- password: process.env.DB_PASSWORD,
188
- host: process.env.DB_HOST,
189
- }
190
- },
191
- env: 'dev',
192
- })
193
- ```
194
-
195
- ## Best Practices
196
-
197
- ✅ **DO:**
198
- - Use connection pooling (10-20 connections typically)
199
- - Always use parameterized queries (? placeholders)
200
- - Use transactions for multi-step operations
201
- - Create indexes on frequently queried columns
202
- - Use EXPLAIN to optimize queries
203
- - Enable query caching for read-heavy workloads
204
- - Use InnoDB engine (ACID compliance)
205
- - Set appropriate charset (utf8mb4 for full Unicode)
206
- - Monitor slow query log
207
- - Use prepared statements for repeated queries
208
-
209
- ❌ **DON'T:**
210
- - Use string concatenation for queries (SQL injection risk)
211
- - Create too many connections (exhaust pool)
212
- - Skip error handling
213
- - Ignore connection pool limits
214
- - Use SELECT * in production (specify columns)
215
- - Skip indexes on foreign keys
216
- - Hardcode connection strings
217
- - Use MyISAM engine (no transactions)
218
- - Ignore query performance
219
- - Use synchronous queries
220
-
221
- ## Configuration
222
-
223
- ### Environment Variables
224
- ```bash
225
- DB_HOST=localhost
226
- DB_PORT=3306
227
- DB_NAME=myapp
228
- DB_USER=myuser
229
- DB_PASSWORD=securepassword
230
- DATABASE_URL=mysql://user:password@host:port/database
231
- ```
232
-
233
- ### Docker Compose
234
- ```yaml
235
- services:
236
- mysql:
237
- image: mysql:8.0
238
- environment:
239
- MYSQL_DATABASE: myapp
240
- MYSQL_USER: myuser
241
- MYSQL_PASSWORD: securepassword
242
- MYSQL_ROOT_PASSWORD: rootpassword
243
- ports:
244
- - "3306:3306"
245
- volumes:
246
- - mysql_data:/var/lib/mysql
247
- command: --default-authentication-plugin=mysql_native_password
248
- healthcheck:
249
- test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
250
- interval: 10s
251
- timeout: 5s
252
- retries: 5
253
-
254
- volumes:
255
- mysql_data:
256
- ```
257
-
258
- ### Prisma Schema
259
- ```prisma
260
- datasource db {
261
- provider = "mysql"
262
- url = env("DATABASE_URL")
263
- }
264
-
265
- model User {
266
- id Int @id @default(autoincrement())
267
- email String @unique @db.VarChar(255)
268
- name String? @db.VarChar(255)
269
- createdAt DateTime @default(now()) @db.Timestamp(6)
270
- posts Post[]
271
- }
272
-
273
- model Post {
274
- id Int @id @default(autoincrement())
275
- title String @db.VarChar(255)
276
- content String? @db.Text
277
- authorId Int
278
- author User @relation(fields: [authorId], references: [id])
279
- createdAt DateTime @default(now()) @db.Timestamp(6)
280
-
281
- @@index([authorId, createdAt(sort: Desc)])
282
- }
283
- ```
284
-
285
- ## Performance Optimization
286
-
287
- ### Indexing
288
- ```sql
289
- -- Single column index
290
- CREATE INDEX idx_users_email ON users(email);
291
-
292
- -- Composite index
293
- CREATE INDEX idx_posts_author_created ON posts(author_id, created_at DESC);
294
-
295
- -- Full-text index
296
- CREATE FULLTEXT INDEX idx_articles_content ON articles(title, content);
297
-
298
- -- Prefix index (for long strings)
299
- CREATE INDEX idx_users_name_prefix ON users(name(10));
300
- ```
301
-
302
- ### Query Optimization
303
- ```typescript
304
- // Use LIMIT for pagination
305
- const [rows] = await pool.execute(
306
- 'SELECT * FROM posts ORDER BY created_at DESC LIMIT ? OFFSET ?',
307
- [limit, offset]
308
- )
309
-
310
- // Use EXISTS instead of COUNT
311
- const [rows] = await pool.execute(
312
- 'SELECT EXISTS(SELECT 1 FROM users WHERE email = ?) as exists',
313
- [email]
314
- )
315
-
316
- // Use JOIN instead of subqueries when possible
317
- const [rows] = await pool.execute(`
318
- SELECT u.*, COUNT(p.id) as post_count
319
- FROM users u
320
- LEFT JOIN posts p ON u.id = p.author_id
321
- GROUP BY u.id
322
- `)
323
- ```
324
-
325
- ## Integration with Development
326
-
327
- ### Testing
328
- ```typescript
329
- // Use test database
330
- const testPool = mysql.createPool({
331
- database: 'myapp_test',
332
- // ... config
333
- })
334
-
335
- // Clean up after tests
336
- afterEach(async () => {
337
- await testPool.execute('SET FOREIGN_KEY_CHECKS = 0')
338
- await testPool.execute('TRUNCATE TABLE users')
339
- await testPool.execute('TRUNCATE TABLE posts')
340
- await testPool.execute('SET FOREIGN_KEY_CHECKS = 1')
341
- })
342
-
343
- // Use transactions for test isolation
344
- beforeEach(async () => {
345
- const connection = await testPool.getConnection()
346
- await connection.beginTransaction()
347
- // Store connection for rollback
348
- })
349
-
350
- afterEach(async () => {
351
- // Rollback transaction
352
- })
353
- ```
354
-
355
- ### Health Checks
356
- ```typescript
357
- async function checkDatabaseHealth(): Promise<boolean> {
358
- try {
359
- const [rows] = await pool.execute('SELECT 1 as health')
360
- return (rows as any[]).length > 0
361
- } catch {
362
- return false
363
- }
364
- }
365
- ```
366
-
367
- <!-- MYSQL:END -->
368
-
1
+ ---
2
+ name: "MySQL"
3
+ description: "Use MySQL for relational data storage with high performance, replication, and wide ecosystem support."
4
+ version: "1.0.0"
5
+ category: "services"
6
+ author: "Rulebook"
7
+ tags: ["services", "database"]
8
+ dependencies: []
9
+ conflicts: []
10
+ ---
11
+ <!-- MYSQL:START -->
12
+ # MySQL Database Instructions
13
+
14
+ **CRITICAL**: Use MySQL for relational data storage with high performance, replication, and wide ecosystem support.
15
+
16
+ ## Core Features
17
+
18
+ ### Connection
19
+ ```typescript
20
+ // Using mysql2 (Node.js)
21
+ import mysql from 'mysql2/promise'
22
+
23
+ const pool = mysql.createPool({
24
+ host: process.env.DB_HOST,
25
+ port: parseInt(process.env.DB_PORT || '3306'),
26
+ database: process.env.DB_NAME,
27
+ user: process.env.DB_USER,
28
+ password: process.env.DB_PASSWORD,
29
+ waitForConnections: true,
30
+ connectionLimit: 10,
31
+ queueLimit: 0,
32
+ enableKeepAlive: true,
33
+ keepAliveInitialDelay: 0,
34
+ })
35
+
36
+ // Using Prisma
37
+ import { PrismaClient } from '@prisma/client'
38
+ const prisma = new PrismaClient()
39
+ ```
40
+
41
+ ### Basic Queries
42
+ ```typescript
43
+ // SELECT
44
+ const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [userId])
45
+ const users = rows as User[]
46
+
47
+ // INSERT
48
+ const [result] = await pool.execute(
49
+ 'INSERT INTO users (name, email) VALUES (?, ?)',
50
+ ['John Doe', 'john@example.com']
51
+ )
52
+ const insertId = (result as any).insertId
53
+
54
+ // UPDATE
55
+ const [result] = await pool.execute(
56
+ 'UPDATE users SET name = ? WHERE id = ?',
57
+ ['Jane Doe', userId]
58
+ )
59
+ const affectedRows = (result as any).affectedRows
60
+
61
+ // DELETE
62
+ const [result] = await pool.execute('DELETE FROM users WHERE id = ?', [userId])
63
+ ```
64
+
65
+ ### Transactions
66
+ ```typescript
67
+ const connection = await pool.getConnection()
68
+ try {
69
+ await connection.beginTransaction()
70
+
71
+ await connection.execute('INSERT INTO accounts (user_id, balance) VALUES (?, ?)', [userId, 1000])
72
+ await connection.execute('INSERT INTO transactions (account_id, amount) VALUES (?, ?)', [accountId, 1000])
73
+
74
+ await connection.commit()
75
+ } catch (error) {
76
+ await connection.rollback()
77
+ throw error
78
+ } finally {
79
+ connection.release()
80
+ }
81
+ ```
82
+
83
+ ### Advanced Features
84
+ ```typescript
85
+ // JSON queries (MySQL 5.7+)
86
+ const [rows] = await pool.execute(
87
+ "SELECT * FROM products WHERE JSON_EXTRACT(metadata, '$.category') = ?",
88
+ ['electronics']
89
+ )
90
+
91
+ // Full-text search
92
+ const [rows] = await pool.execute(
93
+ "SELECT * FROM articles WHERE MATCH(title, content) AGAINST(? IN NATURAL LANGUAGE MODE)",
94
+ ['search term']
95
+ )
96
+
97
+ // Window functions (MySQL 8.0+)
98
+ const [rows] = await pool.execute(`
99
+ SELECT
100
+ name,
101
+ salary,
102
+ ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) as rank
103
+ FROM employees
104
+ `)
105
+
106
+ // Common Table Expressions (CTE) (MySQL 8.0+)
107
+ const [rows] = await pool.execute(`
108
+ WITH RECURSIVE cte AS (
109
+ SELECT id, name, parent_id FROM categories WHERE parent_id IS NULL
110
+ UNION ALL
111
+ SELECT c.id, c.name, c.parent_id FROM categories c
112
+ INNER JOIN cte ON c.parent_id = cte.id
113
+ )
114
+ SELECT * FROM cte
115
+ `)
116
+ ```
117
+
118
+ ## Common Patterns
119
+
120
+ ### Connection Pooling
121
+ ```typescript
122
+ // Reuse connection pool
123
+ let pool: mysql.Pool | null = null
124
+
125
+ export function getPool(): mysql.Pool {
126
+ if (!pool) {
127
+ pool = mysql.createPool({
128
+ // ... config
129
+ })
130
+
131
+ pool.on('connection', (connection) => {
132
+ connection.query('SET SESSION sql_mode = "STRICT_TRANS_TABLES"')
133
+ })
134
+ }
135
+ return pool
136
+ }
137
+
138
+ // Graceful shutdown
139
+ process.on('SIGINT', async () => {
140
+ if (pool) {
141
+ await pool.end()
142
+ }
143
+ process.exit(0)
144
+ })
145
+ ```
146
+
147
+ ### Prepared Statements
148
+ ```typescript
149
+ // Always use parameterized queries (?) to prevent SQL injection
150
+ // ❌ WRONG
151
+ await pool.execute(`SELECT * FROM users WHERE email = '${email}'`)
152
+
153
+ // ✅ CORRECT
154
+ await pool.execute('SELECT * FROM users WHERE email = ?', [email])
155
+ ```
156
+
157
+ ### Error Handling
158
+ ```typescript
159
+ try {
160
+ const [rows] = await pool.execute('SELECT * FROM users WHERE id = ?', [userId])
161
+ if ((rows as any[]).length === 0) {
162
+ throw new Error('User not found')
163
+ }
164
+ return rows[0]
165
+ } catch (error: any) {
166
+ if (error.code === 'ER_DUP_ENTRY') {
167
+ throw new Error('Duplicate entry')
168
+ }
169
+ if (error.code === 'ER_NO_REFERENCED_ROW_2') {
170
+ throw new Error('Referenced record does not exist')
171
+ }
172
+ throw error
173
+ }
174
+ ```
175
+
176
+ ### Migrations
177
+ ```typescript
178
+ // Using db-migrate
179
+ import { migrate } from 'db-migrate'
180
+
181
+ await migrate({
182
+ config: {
183
+ dev: {
184
+ driver: 'mysql',
185
+ database: process.env.DB_NAME,
186
+ user: process.env.DB_USER,
187
+ password: process.env.DB_PASSWORD,
188
+ host: process.env.DB_HOST,
189
+ }
190
+ },
191
+ env: 'dev',
192
+ })
193
+ ```
194
+
195
+ ## Best Practices
196
+
197
+ ✅ **DO:**
198
+ - Use connection pooling (10-20 connections typically)
199
+ - Always use parameterized queries (? placeholders)
200
+ - Use transactions for multi-step operations
201
+ - Create indexes on frequently queried columns
202
+ - Use EXPLAIN to optimize queries
203
+ - Enable query caching for read-heavy workloads
204
+ - Use InnoDB engine (ACID compliance)
205
+ - Set appropriate charset (utf8mb4 for full Unicode)
206
+ - Monitor slow query log
207
+ - Use prepared statements for repeated queries
208
+
209
+ ❌ **DON'T:**
210
+ - Use string concatenation for queries (SQL injection risk)
211
+ - Create too many connections (exhaust pool)
212
+ - Skip error handling
213
+ - Ignore connection pool limits
214
+ - Use SELECT * in production (specify columns)
215
+ - Skip indexes on foreign keys
216
+ - Hardcode connection strings
217
+ - Use MyISAM engine (no transactions)
218
+ - Ignore query performance
219
+ - Use synchronous queries
220
+
221
+ ## Configuration
222
+
223
+ ### Environment Variables
224
+ ```bash
225
+ DB_HOST=localhost
226
+ DB_PORT=3306
227
+ DB_NAME=myapp
228
+ DB_USER=myuser
229
+ DB_PASSWORD=securepassword
230
+ DATABASE_URL=mysql://user:password@host:port/database
231
+ ```
232
+
233
+ ### Docker Compose
234
+ ```yaml
235
+ services:
236
+ mysql:
237
+ image: mysql:8.0
238
+ environment:
239
+ MYSQL_DATABASE: myapp
240
+ MYSQL_USER: myuser
241
+ MYSQL_PASSWORD: securepassword
242
+ MYSQL_ROOT_PASSWORD: rootpassword
243
+ ports:
244
+ - "3306:3306"
245
+ volumes:
246
+ - mysql_data:/var/lib/mysql
247
+ command: --default-authentication-plugin=mysql_native_password
248
+ healthcheck:
249
+ test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
250
+ interval: 10s
251
+ timeout: 5s
252
+ retries: 5
253
+
254
+ volumes:
255
+ mysql_data:
256
+ ```
257
+
258
+ ### Prisma Schema
259
+ ```prisma
260
+ datasource db {
261
+ provider = "mysql"
262
+ url = env("DATABASE_URL")
263
+ }
264
+
265
+ model User {
266
+ id Int @id @default(autoincrement())
267
+ email String @unique @db.VarChar(255)
268
+ name String? @db.VarChar(255)
269
+ createdAt DateTime @default(now()) @db.Timestamp(6)
270
+ posts Post[]
271
+ }
272
+
273
+ model Post {
274
+ id Int @id @default(autoincrement())
275
+ title String @db.VarChar(255)
276
+ content String? @db.Text
277
+ authorId Int
278
+ author User @relation(fields: [authorId], references: [id])
279
+ createdAt DateTime @default(now()) @db.Timestamp(6)
280
+
281
+ @@index([authorId, createdAt(sort: Desc)])
282
+ }
283
+ ```
284
+
285
+ ## Performance Optimization
286
+
287
+ ### Indexing
288
+ ```sql
289
+ -- Single column index
290
+ CREATE INDEX idx_users_email ON users(email);
291
+
292
+ -- Composite index
293
+ CREATE INDEX idx_posts_author_created ON posts(author_id, created_at DESC);
294
+
295
+ -- Full-text index
296
+ CREATE FULLTEXT INDEX idx_articles_content ON articles(title, content);
297
+
298
+ -- Prefix index (for long strings)
299
+ CREATE INDEX idx_users_name_prefix ON users(name(10));
300
+ ```
301
+
302
+ ### Query Optimization
303
+ ```typescript
304
+ // Use LIMIT for pagination
305
+ const [rows] = await pool.execute(
306
+ 'SELECT * FROM posts ORDER BY created_at DESC LIMIT ? OFFSET ?',
307
+ [limit, offset]
308
+ )
309
+
310
+ // Use EXISTS instead of COUNT
311
+ const [rows] = await pool.execute(
312
+ 'SELECT EXISTS(SELECT 1 FROM users WHERE email = ?) as exists',
313
+ [email]
314
+ )
315
+
316
+ // Use JOIN instead of subqueries when possible
317
+ const [rows] = await pool.execute(`
318
+ SELECT u.*, COUNT(p.id) as post_count
319
+ FROM users u
320
+ LEFT JOIN posts p ON u.id = p.author_id
321
+ GROUP BY u.id
322
+ `)
323
+ ```
324
+
325
+ ## Integration with Development
326
+
327
+ ### Testing
328
+ ```typescript
329
+ // Use test database
330
+ const testPool = mysql.createPool({
331
+ database: 'myapp_test',
332
+ // ... config
333
+ })
334
+
335
+ // Clean up after tests
336
+ afterEach(async () => {
337
+ await testPool.execute('SET FOREIGN_KEY_CHECKS = 0')
338
+ await testPool.execute('TRUNCATE TABLE users')
339
+ await testPool.execute('TRUNCATE TABLE posts')
340
+ await testPool.execute('SET FOREIGN_KEY_CHECKS = 1')
341
+ })
342
+
343
+ // Use transactions for test isolation
344
+ beforeEach(async () => {
345
+ const connection = await testPool.getConnection()
346
+ await connection.beginTransaction()
347
+ // Store connection for rollback
348
+ })
349
+
350
+ afterEach(async () => {
351
+ // Rollback transaction
352
+ })
353
+ ```
354
+
355
+ ### Health Checks
356
+ ```typescript
357
+ async function checkDatabaseHealth(): Promise<boolean> {
358
+ try {
359
+ const [rows] = await pool.execute('SELECT 1 as health')
360
+ return (rows as any[]).length > 0
361
+ } catch {
362
+ return false
363
+ }
364
+ }
365
+ ```
366
+
367
+ <!-- MYSQL:END -->
368
+