@lavralabs/lavra 0.7.0

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 (452) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/bin/install.js +302 -0
  4. package/bin/plan-export.js +300 -0
  5. package/bin/plan-view.js +695 -0
  6. package/install.sh +136 -0
  7. package/package.json +28 -0
  8. package/plugins/lavra/.claude-plugin/plugin.json +22 -0
  9. package/plugins/lavra/.mcp.json +8 -0
  10. package/plugins/lavra/README.md +125 -0
  11. package/plugins/lavra/agents/design/design-implementation-reviewer.md +123 -0
  12. package/plugins/lavra/agents/design/design-iterator.md +219 -0
  13. package/plugins/lavra/agents/design/figma-design-sync.md +212 -0
  14. package/plugins/lavra/agents/docs/ankane-readme-writer.md +90 -0
  15. package/plugins/lavra/agents/research/best-practices-researcher.md +131 -0
  16. package/plugins/lavra/agents/research/framework-docs-researcher.md +111 -0
  17. package/plugins/lavra/agents/research/git-history-analyzer.md +73 -0
  18. package/plugins/lavra/agents/research/learnings-researcher.md +255 -0
  19. package/plugins/lavra/agents/research/repo-research-analyst.md +157 -0
  20. package/plugins/lavra/agents/review/agent-native-reviewer.md +274 -0
  21. package/plugins/lavra/agents/review/architecture-strategist.md +82 -0
  22. package/plugins/lavra/agents/review/code-simplicity-reviewer.md +109 -0
  23. package/plugins/lavra/agents/review/data-integrity-guardian.md +89 -0
  24. package/plugins/lavra/agents/review/data-migration-expert.md +118 -0
  25. package/plugins/lavra/agents/review/deployment-verification-agent.md +178 -0
  26. package/plugins/lavra/agents/review/dhh-rails-reviewer.md +94 -0
  27. package/plugins/lavra/agents/review/goal-verifier.md +109 -0
  28. package/plugins/lavra/agents/review/julik-frontend-races-reviewer.md +239 -0
  29. package/plugins/lavra/agents/review/kieran-python-reviewer.md +148 -0
  30. package/plugins/lavra/agents/review/kieran-rails-reviewer.md +130 -0
  31. package/plugins/lavra/agents/review/kieran-typescript-reviewer.md +139 -0
  32. package/plugins/lavra/agents/review/migration-drift-detector.md +307 -0
  33. package/plugins/lavra/agents/review/pattern-recognition-specialist.md +87 -0
  34. package/plugins/lavra/agents/review/performance-oracle.md +154 -0
  35. package/plugins/lavra/agents/review/security-sentinel.md +125 -0
  36. package/plugins/lavra/agents/workflow/bug-reproduction-validator.md +119 -0
  37. package/plugins/lavra/agents/workflow/every-style-editor.md +97 -0
  38. package/plugins/lavra/agents/workflow/lint.md +30 -0
  39. package/plugins/lavra/agents/workflow/pr-comment-resolver.md +95 -0
  40. package/plugins/lavra/agents/workflow/spec-flow-analyzer.md +156 -0
  41. package/plugins/lavra/commands/changelog.md +149 -0
  42. package/plugins/lavra/commands/heal-skill.md +130 -0
  43. package/plugins/lavra/commands/lavra-brainstorm.md +388 -0
  44. package/plugins/lavra/commands/lavra-ceo-review.md +388 -0
  45. package/plugins/lavra/commands/lavra-checkpoint.md +162 -0
  46. package/plugins/lavra/commands/lavra-design.md +621 -0
  47. package/plugins/lavra/commands/lavra-eng-review.md +262 -0
  48. package/plugins/lavra/commands/lavra-import.md +194 -0
  49. package/plugins/lavra/commands/lavra-learn.md +176 -0
  50. package/plugins/lavra/commands/lavra-plan.md +515 -0
  51. package/plugins/lavra/commands/lavra-qa.md +357 -0
  52. package/plugins/lavra/commands/lavra-quick.md +178 -0
  53. package/plugins/lavra/commands/lavra-recall.md +279 -0
  54. package/plugins/lavra/commands/lavra-research.md +267 -0
  55. package/plugins/lavra/commands/lavra-retro.md +400 -0
  56. package/plugins/lavra/commands/lavra-review.md +401 -0
  57. package/plugins/lavra/commands/lavra-ship.md +330 -0
  58. package/plugins/lavra/commands/lavra-triage.md +159 -0
  59. package/plugins/lavra/commands/lavra-work-ralph.md +521 -0
  60. package/plugins/lavra/commands/lavra-work-teams.md +504 -0
  61. package/plugins/lavra/commands/lavra-work.md +1019 -0
  62. package/plugins/lavra/commands/optional/agent-native-audit.md +282 -0
  63. package/plugins/lavra/commands/optional/feature-video.md +262 -0
  64. package/plugins/lavra/commands/optional/generate-command.md +146 -0
  65. package/plugins/lavra/commands/optional/reproduce-bug.md +97 -0
  66. package/plugins/lavra/commands/optional/xcode-test.md +287 -0
  67. package/plugins/lavra/commands/report-bug.md +155 -0
  68. package/plugins/lavra/commands/test-browser.md +305 -0
  69. package/plugins/lavra/cortex/agents/design/design-implementation-reviewer.md +127 -0
  70. package/plugins/lavra/cortex/agents/design/design-iterator.md +222 -0
  71. package/plugins/lavra/cortex/agents/design/figma-design-sync.md +215 -0
  72. package/plugins/lavra/cortex/agents/docs/ankane-readme-writer.md +93 -0
  73. package/plugins/lavra/cortex/agents/research/best-practices-researcher.md +135 -0
  74. package/plugins/lavra/cortex/agents/research/framework-docs-researcher.md +115 -0
  75. package/plugins/lavra/cortex/agents/research/git-history-analyzer.md +77 -0
  76. package/plugins/lavra/cortex/agents/research/learnings-researcher.md +259 -0
  77. package/plugins/lavra/cortex/agents/research/repo-research-analyst.md +161 -0
  78. package/plugins/lavra/cortex/agents/review/agent-native-reviewer.md +278 -0
  79. package/plugins/lavra/cortex/agents/review/architecture-strategist.md +86 -0
  80. package/plugins/lavra/cortex/agents/review/code-simplicity-reviewer.md +113 -0
  81. package/plugins/lavra/cortex/agents/review/data-integrity-guardian.md +93 -0
  82. package/plugins/lavra/cortex/agents/review/data-migration-expert.md +122 -0
  83. package/plugins/lavra/cortex/agents/review/deployment-verification-agent.md +182 -0
  84. package/plugins/lavra/cortex/agents/review/dhh-rails-reviewer.md +98 -0
  85. package/plugins/lavra/cortex/agents/review/goal-verifier.md +113 -0
  86. package/plugins/lavra/cortex/agents/review/julik-frontend-races-reviewer.md +243 -0
  87. package/plugins/lavra/cortex/agents/review/kieran-python-reviewer.md +152 -0
  88. package/plugins/lavra/cortex/agents/review/kieran-rails-reviewer.md +134 -0
  89. package/plugins/lavra/cortex/agents/review/kieran-typescript-reviewer.md +143 -0
  90. package/plugins/lavra/cortex/agents/review/migration-drift-detector.md +311 -0
  91. package/plugins/lavra/cortex/agents/review/pattern-recognition-specialist.md +91 -0
  92. package/plugins/lavra/cortex/agents/review/performance-oracle.md +158 -0
  93. package/plugins/lavra/cortex/agents/review/security-sentinel.md +129 -0
  94. package/plugins/lavra/cortex/agents/workflow/bug-reproduction-validator.md +123 -0
  95. package/plugins/lavra/cortex/agents/workflow/every-style-editor.md +101 -0
  96. package/plugins/lavra/cortex/agents/workflow/lint.md +33 -0
  97. package/plugins/lavra/cortex/agents/workflow/pr-comment-resolver.md +98 -0
  98. package/plugins/lavra/cortex/agents/workflow/spec-flow-analyzer.md +160 -0
  99. package/plugins/lavra/cortex/commands/agent-native-audit.md +286 -0
  100. package/plugins/lavra/cortex/commands/changelog.md +153 -0
  101. package/plugins/lavra/cortex/commands/create-agent-skill.md +21 -0
  102. package/plugins/lavra/cortex/commands/deploy-docs.md +69 -0
  103. package/plugins/lavra/cortex/commands/feature-video.md +266 -0
  104. package/plugins/lavra/cortex/commands/generate-command.md +150 -0
  105. package/plugins/lavra/cortex/commands/heal-skill.md +134 -0
  106. package/plugins/lavra/cortex/commands/lavra-brainstorm.md +392 -0
  107. package/plugins/lavra/cortex/commands/lavra-ceo-review.md +392 -0
  108. package/plugins/lavra/cortex/commands/lavra-checkpoint.md +166 -0
  109. package/plugins/lavra/cortex/commands/lavra-compound.md +168 -0
  110. package/plugins/lavra/cortex/commands/lavra-deepen.md +389 -0
  111. package/plugins/lavra/cortex/commands/lavra-design.md +625 -0
  112. package/plugins/lavra/cortex/commands/lavra-eng-review.md +266 -0
  113. package/plugins/lavra/cortex/commands/lavra-import.md +198 -0
  114. package/plugins/lavra/cortex/commands/lavra-learn.md +180 -0
  115. package/plugins/lavra/cortex/commands/lavra-parallel.md +910 -0
  116. package/plugins/lavra/cortex/commands/lavra-plan.md +519 -0
  117. package/plugins/lavra/cortex/commands/lavra-qa.md +361 -0
  118. package/plugins/lavra/cortex/commands/lavra-quick.md +182 -0
  119. package/plugins/lavra/cortex/commands/lavra-recall.md +283 -0
  120. package/plugins/lavra/cortex/commands/lavra-research.md +271 -0
  121. package/plugins/lavra/cortex/commands/lavra-retro.md +404 -0
  122. package/plugins/lavra/cortex/commands/lavra-review.md +405 -0
  123. package/plugins/lavra/cortex/commands/lavra-ship.md +334 -0
  124. package/plugins/lavra/cortex/commands/lavra-triage.md +163 -0
  125. package/plugins/lavra/cortex/commands/lavra-work-ralph.md +525 -0
  126. package/plugins/lavra/cortex/commands/lavra-work-teams.md +508 -0
  127. package/plugins/lavra/cortex/commands/lavra-work.md +1023 -0
  128. package/plugins/lavra/cortex/commands/lfg.md +30 -0
  129. package/plugins/lavra/cortex/commands/release-docs.md +148 -0
  130. package/plugins/lavra/cortex/commands/report-bug.md +159 -0
  131. package/plugins/lavra/cortex/commands/reproduce-bug.md +101 -0
  132. package/plugins/lavra/cortex/commands/resolve-pr-parallel.md +58 -0
  133. package/plugins/lavra/cortex/commands/resolve-todo-parallel.md +56 -0
  134. package/plugins/lavra/cortex/commands/test-browser.md +309 -0
  135. package/plugins/lavra/cortex/commands/xcode-test.md +291 -0
  136. package/plugins/lavra/cortex/skills/agent-browser/SKILL.md +227 -0
  137. package/plugins/lavra/cortex/skills/agent-native-architecture/SKILL.md +439 -0
  138. package/plugins/lavra/cortex/skills/andrew-kane-gem-writer/SKILL.md +188 -0
  139. package/plugins/lavra/cortex/skills/brainstorming/SKILL.md +197 -0
  140. package/plugins/lavra/cortex/skills/create-agent-skills/SKILL.md +304 -0
  141. package/plugins/lavra/cortex/skills/dhh-rails-style/SKILL.md +189 -0
  142. package/plugins/lavra/cortex/skills/dspy-ruby/SKILL.md +741 -0
  143. package/plugins/lavra/cortex/skills/every-style-editor/SKILL.md +138 -0
  144. package/plugins/lavra/cortex/skills/file-todos/SKILL.md +256 -0
  145. package/plugins/lavra/cortex/skills/frontend-design/SKILL.md +46 -0
  146. package/plugins/lavra/cortex/skills/gemini-imagegen/SKILL.md +242 -0
  147. package/plugins/lavra/cortex/skills/git-worktree/SKILL.md +307 -0
  148. package/plugins/lavra/cortex/skills/lavra-knowledge/SKILL.md +464 -0
  149. package/plugins/lavra/cortex/skills/project-setup/SKILL.md +418 -0
  150. package/plugins/lavra/cortex/skills/rclone/SKILL.md +155 -0
  151. package/plugins/lavra/docs/quickstart.md +267 -0
  152. package/plugins/lavra/examples/example-plan.md +197 -0
  153. package/plugins/lavra/gemini/agents/design/design-implementation-reviewer.md +130 -0
  154. package/plugins/lavra/gemini/agents/design/design-iterator.md +225 -0
  155. package/plugins/lavra/gemini/agents/design/figma-design-sync.md +218 -0
  156. package/plugins/lavra/gemini/agents/docs/ankane-readme-writer.md +96 -0
  157. package/plugins/lavra/gemini/agents/research/best-practices-researcher.md +138 -0
  158. package/plugins/lavra/gemini/agents/research/framework-docs-researcher.md +118 -0
  159. package/plugins/lavra/gemini/agents/research/git-history-analyzer.md +80 -0
  160. package/plugins/lavra/gemini/agents/research/learnings-researcher.md +262 -0
  161. package/plugins/lavra/gemini/agents/research/repo-research-analyst.md +164 -0
  162. package/plugins/lavra/gemini/agents/review/agent-native-reviewer.md +281 -0
  163. package/plugins/lavra/gemini/agents/review/architecture-strategist.md +89 -0
  164. package/plugins/lavra/gemini/agents/review/code-simplicity-reviewer.md +116 -0
  165. package/plugins/lavra/gemini/agents/review/data-integrity-guardian.md +96 -0
  166. package/plugins/lavra/gemini/agents/review/data-migration-expert.md +125 -0
  167. package/plugins/lavra/gemini/agents/review/deployment-verification-agent.md +185 -0
  168. package/plugins/lavra/gemini/agents/review/dhh-rails-reviewer.md +101 -0
  169. package/plugins/lavra/gemini/agents/review/goal-verifier.md +116 -0
  170. package/plugins/lavra/gemini/agents/review/julik-frontend-races-reviewer.md +246 -0
  171. package/plugins/lavra/gemini/agents/review/kieran-python-reviewer.md +155 -0
  172. package/plugins/lavra/gemini/agents/review/kieran-rails-reviewer.md +137 -0
  173. package/plugins/lavra/gemini/agents/review/kieran-typescript-reviewer.md +146 -0
  174. package/plugins/lavra/gemini/agents/review/migration-drift-detector.md +314 -0
  175. package/plugins/lavra/gemini/agents/review/pattern-recognition-specialist.md +94 -0
  176. package/plugins/lavra/gemini/agents/review/performance-oracle.md +161 -0
  177. package/plugins/lavra/gemini/agents/review/security-sentinel.md +132 -0
  178. package/plugins/lavra/gemini/agents/workflow/bug-reproduction-validator.md +126 -0
  179. package/plugins/lavra/gemini/agents/workflow/every-style-editor.md +103 -0
  180. package/plugins/lavra/gemini/agents/workflow/lint.md +36 -0
  181. package/plugins/lavra/gemini/agents/workflow/pr-comment-resolver.md +101 -0
  182. package/plugins/lavra/gemini/agents/workflow/spec-flow-analyzer.md +163 -0
  183. package/plugins/lavra/gemini/commands/agent-native-audit.toml +284 -0
  184. package/plugins/lavra/gemini/commands/beads-brainstorm.toml +292 -0
  185. package/plugins/lavra/gemini/commands/beads-checkpoint.toml +145 -0
  186. package/plugins/lavra/gemini/commands/beads-compound.toml +167 -0
  187. package/plugins/lavra/gemini/commands/beads-deepen.toml +388 -0
  188. package/plugins/lavra/gemini/commands/beads-design.toml +295 -0
  189. package/plugins/lavra/gemini/commands/beads-import.toml +197 -0
  190. package/plugins/lavra/gemini/commands/beads-parallel.toml +909 -0
  191. package/plugins/lavra/gemini/commands/beads-plan-review.toml +201 -0
  192. package/plugins/lavra/gemini/commands/beads-plan.toml +391 -0
  193. package/plugins/lavra/gemini/commands/beads-quick.toml +134 -0
  194. package/plugins/lavra/gemini/commands/beads-recall.toml +281 -0
  195. package/plugins/lavra/gemini/commands/beads-review.toml +338 -0
  196. package/plugins/lavra/gemini/commands/beads-triage.toml +161 -0
  197. package/plugins/lavra/gemini/commands/beads-work.toml +347 -0
  198. package/plugins/lavra/gemini/commands/changelog.toml +151 -0
  199. package/plugins/lavra/gemini/commands/create-agent-skill.toml +18 -0
  200. package/plugins/lavra/gemini/commands/deploy-docs.toml +68 -0
  201. package/plugins/lavra/gemini/commands/feature-video.toml +264 -0
  202. package/plugins/lavra/gemini/commands/generate-command.toml +148 -0
  203. package/plugins/lavra/gemini/commands/heal-skill.toml +131 -0
  204. package/plugins/lavra/gemini/commands/lavra-brainstorm.toml +391 -0
  205. package/plugins/lavra/gemini/commands/lavra-ceo-review.toml +391 -0
  206. package/plugins/lavra/gemini/commands/lavra-checkpoint.toml +165 -0
  207. package/plugins/lavra/gemini/commands/lavra-design.toml +624 -0
  208. package/plugins/lavra/gemini/commands/lavra-eng-review.toml +265 -0
  209. package/plugins/lavra/gemini/commands/lavra-import.toml +197 -0
  210. package/plugins/lavra/gemini/commands/lavra-learn.toml +179 -0
  211. package/plugins/lavra/gemini/commands/lavra-plan-review.toml +201 -0
  212. package/plugins/lavra/gemini/commands/lavra-plan.toml +518 -0
  213. package/plugins/lavra/gemini/commands/lavra-qa.toml +360 -0
  214. package/plugins/lavra/gemini/commands/lavra-quick.toml +181 -0
  215. package/plugins/lavra/gemini/commands/lavra-recall.toml +281 -0
  216. package/plugins/lavra/gemini/commands/lavra-research.toml +270 -0
  217. package/plugins/lavra/gemini/commands/lavra-retro.toml +403 -0
  218. package/plugins/lavra/gemini/commands/lavra-review.toml +404 -0
  219. package/plugins/lavra/gemini/commands/lavra-ship.toml +333 -0
  220. package/plugins/lavra/gemini/commands/lavra-triage.toml +161 -0
  221. package/plugins/lavra/gemini/commands/lavra-work-ralph.toml +523 -0
  222. package/plugins/lavra/gemini/commands/lavra-work-teams.toml +507 -0
  223. package/plugins/lavra/gemini/commands/lavra-work.toml +1022 -0
  224. package/plugins/lavra/gemini/commands/lfg.toml +28 -0
  225. package/plugins/lavra/gemini/commands/release-docs.toml +146 -0
  226. package/plugins/lavra/gemini/commands/report-bug.toml +157 -0
  227. package/plugins/lavra/gemini/commands/reproduce-bug.toml +99 -0
  228. package/plugins/lavra/gemini/commands/resolve-pr-parallel.toml +56 -0
  229. package/plugins/lavra/gemini/commands/resolve-todo-parallel.toml +54 -0
  230. package/plugins/lavra/gemini/commands/test-browser.toml +307 -0
  231. package/plugins/lavra/gemini/commands/xcode-test.toml +289 -0
  232. package/plugins/lavra/gemini/docs/MCP_SETUP.md +41 -0
  233. package/plugins/lavra/gemini/skills/agent-browser/SKILL.md +227 -0
  234. package/plugins/lavra/gemini/skills/agent-native-architecture/SKILL.md +439 -0
  235. package/plugins/lavra/gemini/skills/andrew-kane-gem-writer/SKILL.md +188 -0
  236. package/plugins/lavra/gemini/skills/beads-knowledge/SKILL.md +464 -0
  237. package/plugins/lavra/gemini/skills/brainstorming/SKILL.md +197 -0
  238. package/plugins/lavra/gemini/skills/create-agent-skills/SKILL.md +304 -0
  239. package/plugins/lavra/gemini/skills/dhh-rails-style/SKILL.md +189 -0
  240. package/plugins/lavra/gemini/skills/dspy-ruby/SKILL.md +741 -0
  241. package/plugins/lavra/gemini/skills/every-style-editor/SKILL.md +138 -0
  242. package/plugins/lavra/gemini/skills/file-todos/SKILL.md +256 -0
  243. package/plugins/lavra/gemini/skills/frontend-design/SKILL.md +46 -0
  244. package/plugins/lavra/gemini/skills/gemini-imagegen/SKILL.md +242 -0
  245. package/plugins/lavra/gemini/skills/git-worktree/SKILL.md +307 -0
  246. package/plugins/lavra/gemini/skills/lavra-knowledge/SKILL.md +464 -0
  247. package/plugins/lavra/gemini/skills/project-setup/SKILL.md +418 -0
  248. package/plugins/lavra/gemini/skills/rclone/SKILL.md +155 -0
  249. package/plugins/lavra/gemini-extension.json +50 -0
  250. package/plugins/lavra/gemini-src/settings.json +37 -0
  251. package/plugins/lavra/hooks/auto-recall.sh +210 -0
  252. package/plugins/lavra/hooks/check-memory.sh +169 -0
  253. package/plugins/lavra/hooks/hooks.json +47 -0
  254. package/plugins/lavra/hooks/knowledge-db.sh +255 -0
  255. package/plugins/lavra/hooks/memory-capture.sh +132 -0
  256. package/plugins/lavra/hooks/provision-memory.sh +144 -0
  257. package/plugins/lavra/hooks/recall.sh +152 -0
  258. package/plugins/lavra/hooks/subagent-wrapup.sh +44 -0
  259. package/plugins/lavra/hooks/teammate-idle-check.sh +29 -0
  260. package/plugins/lavra/opencode/agents/design/design-implementation-reviewer.md +127 -0
  261. package/plugins/lavra/opencode/agents/design/design-iterator.md +222 -0
  262. package/plugins/lavra/opencode/agents/design/figma-design-sync.md +215 -0
  263. package/plugins/lavra/opencode/agents/docs/ankane-readme-writer.md +93 -0
  264. package/plugins/lavra/opencode/agents/research/best-practices-researcher.md +135 -0
  265. package/plugins/lavra/opencode/agents/research/framework-docs-researcher.md +115 -0
  266. package/plugins/lavra/opencode/agents/research/git-history-analyzer.md +77 -0
  267. package/plugins/lavra/opencode/agents/research/learnings-researcher.md +259 -0
  268. package/plugins/lavra/opencode/agents/research/repo-research-analyst.md +161 -0
  269. package/plugins/lavra/opencode/agents/review/agent-native-reviewer.md +278 -0
  270. package/plugins/lavra/opencode/agents/review/architecture-strategist.md +86 -0
  271. package/plugins/lavra/opencode/agents/review/code-simplicity-reviewer.md +113 -0
  272. package/plugins/lavra/opencode/agents/review/data-integrity-guardian.md +93 -0
  273. package/plugins/lavra/opencode/agents/review/data-migration-expert.md +122 -0
  274. package/plugins/lavra/opencode/agents/review/deployment-verification-agent.md +182 -0
  275. package/plugins/lavra/opencode/agents/review/dhh-rails-reviewer.md +98 -0
  276. package/plugins/lavra/opencode/agents/review/goal-verifier.md +113 -0
  277. package/plugins/lavra/opencode/agents/review/julik-frontend-races-reviewer.md +243 -0
  278. package/plugins/lavra/opencode/agents/review/kieran-python-reviewer.md +152 -0
  279. package/plugins/lavra/opencode/agents/review/kieran-rails-reviewer.md +134 -0
  280. package/plugins/lavra/opencode/agents/review/kieran-typescript-reviewer.md +143 -0
  281. package/plugins/lavra/opencode/agents/review/migration-drift-detector.md +311 -0
  282. package/plugins/lavra/opencode/agents/review/pattern-recognition-specialist.md +91 -0
  283. package/plugins/lavra/opencode/agents/review/performance-oracle.md +158 -0
  284. package/plugins/lavra/opencode/agents/review/security-sentinel.md +129 -0
  285. package/plugins/lavra/opencode/agents/workflow/bug-reproduction-validator.md +123 -0
  286. package/plugins/lavra/opencode/agents/workflow/every-style-editor.md +100 -0
  287. package/plugins/lavra/opencode/agents/workflow/lint.md +33 -0
  288. package/plugins/lavra/opencode/agents/workflow/pr-comment-resolver.md +98 -0
  289. package/plugins/lavra/opencode/agents/workflow/spec-flow-analyzer.md +160 -0
  290. package/plugins/lavra/opencode/commands/agent-native-audit.md +286 -0
  291. package/plugins/lavra/opencode/commands/changelog.md +153 -0
  292. package/plugins/lavra/opencode/commands/create-agent-skill.md +21 -0
  293. package/plugins/lavra/opencode/commands/deploy-docs.md +69 -0
  294. package/plugins/lavra/opencode/commands/feature-video.md +266 -0
  295. package/plugins/lavra/opencode/commands/generate-command.md +150 -0
  296. package/plugins/lavra/opencode/commands/heal-skill.md +134 -0
  297. package/plugins/lavra/opencode/commands/lavra-brainstorm.md +392 -0
  298. package/plugins/lavra/opencode/commands/lavra-ceo-review.md +392 -0
  299. package/plugins/lavra/opencode/commands/lavra-checkpoint.md +166 -0
  300. package/plugins/lavra/opencode/commands/lavra-compound.md +168 -0
  301. package/plugins/lavra/opencode/commands/lavra-deepen.md +389 -0
  302. package/plugins/lavra/opencode/commands/lavra-design.md +625 -0
  303. package/plugins/lavra/opencode/commands/lavra-eng-review.md +266 -0
  304. package/plugins/lavra/opencode/commands/lavra-import.md +198 -0
  305. package/plugins/lavra/opencode/commands/lavra-learn.md +180 -0
  306. package/plugins/lavra/opencode/commands/lavra-parallel.md +910 -0
  307. package/plugins/lavra/opencode/commands/lavra-plan.md +519 -0
  308. package/plugins/lavra/opencode/commands/lavra-qa.md +361 -0
  309. package/plugins/lavra/opencode/commands/lavra-quick.md +182 -0
  310. package/plugins/lavra/opencode/commands/lavra-recall.md +283 -0
  311. package/plugins/lavra/opencode/commands/lavra-research.md +271 -0
  312. package/plugins/lavra/opencode/commands/lavra-retro.md +404 -0
  313. package/plugins/lavra/opencode/commands/lavra-review.md +405 -0
  314. package/plugins/lavra/opencode/commands/lavra-ship.md +334 -0
  315. package/plugins/lavra/opencode/commands/lavra-triage.md +163 -0
  316. package/plugins/lavra/opencode/commands/lavra-work-ralph.md +525 -0
  317. package/plugins/lavra/opencode/commands/lavra-work-teams.md +508 -0
  318. package/plugins/lavra/opencode/commands/lavra-work.md +1023 -0
  319. package/plugins/lavra/opencode/commands/lfg.md +30 -0
  320. package/plugins/lavra/opencode/commands/release-docs.md +148 -0
  321. package/plugins/lavra/opencode/commands/report-bug.md +159 -0
  322. package/plugins/lavra/opencode/commands/reproduce-bug.md +101 -0
  323. package/plugins/lavra/opencode/commands/resolve-pr-parallel.md +58 -0
  324. package/plugins/lavra/opencode/commands/resolve-todo-parallel.md +56 -0
  325. package/plugins/lavra/opencode/commands/test-browser.md +309 -0
  326. package/plugins/lavra/opencode/commands/xcode-test.md +291 -0
  327. package/plugins/lavra/opencode/docs/MCP_SETUP.md +48 -0
  328. package/plugins/lavra/opencode/skills/agent-browser/SKILL.md +227 -0
  329. package/plugins/lavra/opencode/skills/agent-native-architecture/SKILL.md +439 -0
  330. package/plugins/lavra/opencode/skills/andrew-kane-gem-writer/SKILL.md +188 -0
  331. package/plugins/lavra/opencode/skills/brainstorming/SKILL.md +197 -0
  332. package/plugins/lavra/opencode/skills/create-agent-skills/SKILL.md +304 -0
  333. package/plugins/lavra/opencode/skills/dhh-rails-style/SKILL.md +189 -0
  334. package/plugins/lavra/opencode/skills/dspy-ruby/SKILL.md +741 -0
  335. package/plugins/lavra/opencode/skills/every-style-editor/SKILL.md +138 -0
  336. package/plugins/lavra/opencode/skills/file-todos/SKILL.md +256 -0
  337. package/plugins/lavra/opencode/skills/frontend-design/SKILL.md +46 -0
  338. package/plugins/lavra/opencode/skills/gemini-imagegen/SKILL.md +242 -0
  339. package/plugins/lavra/opencode/skills/git-worktree/SKILL.md +307 -0
  340. package/plugins/lavra/opencode/skills/lavra-knowledge/SKILL.md +464 -0
  341. package/plugins/lavra/opencode/skills/project-setup/SKILL.md +418 -0
  342. package/plugins/lavra/opencode/skills/rclone/SKILL.md +155 -0
  343. package/plugins/lavra/opencode-src/package.json +13 -0
  344. package/plugins/lavra/opencode-src/plugin.ts +176 -0
  345. package/plugins/lavra/scripts/import-plan.sh +141 -0
  346. package/plugins/lavra/skills/agent-browser/SKILL.md +223 -0
  347. package/plugins/lavra/skills/agent-native-architecture/SKILL.md +435 -0
  348. package/plugins/lavra/skills/agent-native-architecture/references/action-parity-discipline.md +353 -0
  349. package/plugins/lavra/skills/agent-native-architecture/references/agent-execution-patterns.md +362 -0
  350. package/plugins/lavra/skills/agent-native-architecture/references/agent-native-testing.md +508 -0
  351. package/plugins/lavra/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
  352. package/plugins/lavra/skills/agent-native-architecture/references/dynamic-context-injection.md +281 -0
  353. package/plugins/lavra/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
  354. package/plugins/lavra/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +227 -0
  355. package/plugins/lavra/skills/agent-native-architecture/references/mcp-tool-design.md +427 -0
  356. package/plugins/lavra/skills/agent-native-architecture/references/mobile-patterns.md +410 -0
  357. package/plugins/lavra/skills/agent-native-architecture/references/product-implications.md +341 -0
  358. package/plugins/lavra/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
  359. package/plugins/lavra/skills/agent-native-architecture/references/self-modification.md +269 -0
  360. package/plugins/lavra/skills/agent-native-architecture/references/shared-workspace-architecture.md +517 -0
  361. package/plugins/lavra/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
  362. package/plugins/lavra/skills/brainstorming/SKILL.md +193 -0
  363. package/plugins/lavra/skills/create-agent-skills/SKILL.md +300 -0
  364. package/plugins/lavra/skills/create-agent-skills/references/api-security.md +60 -0
  365. package/plugins/lavra/skills/create-agent-skills/references/be-clear-and-direct.md +84 -0
  366. package/plugins/lavra/skills/create-agent-skills/references/best-practices.md +404 -0
  367. package/plugins/lavra/skills/create-agent-skills/references/common-patterns.md +121 -0
  368. package/plugins/lavra/skills/create-agent-skills/references/core-principles.md +103 -0
  369. package/plugins/lavra/skills/create-agent-skills/references/executable-code.md +92 -0
  370. package/plugins/lavra/skills/create-agent-skills/references/iteration-and-testing.md +164 -0
  371. package/plugins/lavra/skills/create-agent-skills/references/official-spec.md +185 -0
  372. package/plugins/lavra/skills/create-agent-skills/references/recommended-structure.md +168 -0
  373. package/plugins/lavra/skills/create-agent-skills/references/skill-structure.md +215 -0
  374. package/plugins/lavra/skills/create-agent-skills/references/using-scripts.md +113 -0
  375. package/plugins/lavra/skills/create-agent-skills/references/using-templates.md +112 -0
  376. package/plugins/lavra/skills/create-agent-skills/references/workflows-and-validation.md +122 -0
  377. package/plugins/lavra/skills/create-agent-skills/templates/router-skill.md +73 -0
  378. package/plugins/lavra/skills/create-agent-skills/templates/simple-skill.md +33 -0
  379. package/plugins/lavra/skills/create-agent-skills/workflows/add-reference.md +55 -0
  380. package/plugins/lavra/skills/create-agent-skills/workflows/add-script.md +59 -0
  381. package/plugins/lavra/skills/create-agent-skills/workflows/add-template.md +51 -0
  382. package/plugins/lavra/skills/create-agent-skills/workflows/add-workflow.md +54 -0
  383. package/plugins/lavra/skills/create-agent-skills/workflows/audit-skill.md +63 -0
  384. package/plugins/lavra/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +68 -0
  385. package/plugins/lavra/skills/create-agent-skills/workflows/create-new-skill.md +92 -0
  386. package/plugins/lavra/skills/create-agent-skills/workflows/get-guidance.md +70 -0
  387. package/plugins/lavra/skills/create-agent-skills/workflows/upgrade-to-router.md +68 -0
  388. package/plugins/lavra/skills/create-agent-skills/workflows/verify-skill.md +63 -0
  389. package/plugins/lavra/skills/file-todos/SKILL.md +252 -0
  390. package/plugins/lavra/skills/file-todos/assets/todo-template.md +155 -0
  391. package/plugins/lavra/skills/git-worktree/SKILL.md +303 -0
  392. package/plugins/lavra/skills/git-worktree/scripts/worktree-manager.sh +345 -0
  393. package/plugins/lavra/skills/lavra-knowledge/SKILL.md +460 -0
  394. package/plugins/lavra/skills/lavra-knowledge/references/jsonl-schema.md +104 -0
  395. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/SKILL.md +184 -0
  396. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/database-adapters.md +231 -0
  397. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/module-organization.md +121 -0
  398. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/rails-integration.md +183 -0
  399. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/resources.md +119 -0
  400. package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
  401. package/plugins/lavra/skills/optional/dhh-rails-style/SKILL.md +185 -0
  402. package/plugins/lavra/skills/optional/dhh-rails-style/references/architecture.md +653 -0
  403. package/plugins/lavra/skills/optional/dhh-rails-style/references/controllers.md +303 -0
  404. package/plugins/lavra/skills/optional/dhh-rails-style/references/frontend.md +510 -0
  405. package/plugins/lavra/skills/optional/dhh-rails-style/references/gems.md +266 -0
  406. package/plugins/lavra/skills/optional/dhh-rails-style/references/models.md +359 -0
  407. package/plugins/lavra/skills/optional/dhh-rails-style/references/testing.md +338 -0
  408. package/plugins/lavra/skills/optional/dspy-ruby/SKILL.md +737 -0
  409. package/plugins/lavra/skills/optional/dspy-ruby/assets/config-template.rb +187 -0
  410. package/plugins/lavra/skills/optional/dspy-ruby/assets/module-template.rb +300 -0
  411. package/plugins/lavra/skills/optional/dspy-ruby/assets/signature-template.rb +221 -0
  412. package/plugins/lavra/skills/optional/dspy-ruby/references/core-concepts.md +674 -0
  413. package/plugins/lavra/skills/optional/dspy-ruby/references/observability.md +366 -0
  414. package/plugins/lavra/skills/optional/dspy-ruby/references/optimization.md +603 -0
  415. package/plugins/lavra/skills/optional/dspy-ruby/references/providers.md +418 -0
  416. package/plugins/lavra/skills/optional/dspy-ruby/references/toolsets.md +502 -0
  417. package/plugins/lavra/skills/optional/every-style-editor/SKILL.md +134 -0
  418. package/plugins/lavra/skills/optional/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
  419. package/plugins/lavra/skills/optional/frontend-design/SKILL.md +42 -0
  420. package/plugins/lavra/skills/optional/gemini-imagegen/SKILL.md +238 -0
  421. package/plugins/lavra/skills/optional/gemini-imagegen/requirements.txt +2 -0
  422. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/compose_images.py +157 -0
  423. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/edit_image.py +144 -0
  424. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/gemini_images.py +263 -0
  425. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/generate_image.py +133 -0
  426. package/plugins/lavra/skills/optional/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
  427. package/plugins/lavra/skills/optional/rclone/SKILL.md +151 -0
  428. package/plugins/lavra/skills/optional/rclone/scripts/check_setup.sh +60 -0
  429. package/plugins/lavra/skills/project-setup/SKILL.md +414 -0
  430. package/plugins/lavra/tests/build-index.sh +116 -0
  431. package/plugins/lavra/tests/recall-bench.sh +224 -0
  432. package/plugins/lavra/tests/search-fts5.sh +65 -0
  433. package/plugins/lavra/tests/search-grep.sh +54 -0
  434. package/plugins/lavra/tests/test-queries.jsonl +25 -0
  435. package/scripts/apply-context-optimizations.py +345 -0
  436. package/scripts/convert-cortex.ts +257 -0
  437. package/scripts/convert-gemini.ts +369 -0
  438. package/scripts/convert-opencode.ts +313 -0
  439. package/scripts/package.json +27 -0
  440. package/scripts/pre-release-check.sh +176 -0
  441. package/scripts/select-opencode-models.sh +178 -0
  442. package/scripts/shared/model-config.json +17 -0
  443. package/scripts/shared/model-mapping.ts +129 -0
  444. package/scripts/shared/security.ts +97 -0
  445. package/scripts/shared/yaml-parser.ts +55 -0
  446. package/scripts/sqlite-to-jsonl.py +207 -0
  447. package/scripts/test-compatibility.ts +539 -0
  448. package/scripts/test-features.sh +342 -0
  449. package/scripts/test-installation.sh +514 -0
  450. package/scripts/test-security.ts +275 -0
  451. package/scripts/trim-agent-descriptions.py +177 -0
  452. package/uninstall.sh +133 -0
@@ -0,0 +1,184 @@
1
+ ---
2
+ name: andrew-kane-gem-writer
3
+ description: This skill should be used when writing Ruby gems following Andrew Kane's proven patterns and philosophy. It applies when creating new Ruby gems, refactoring existing gems, designing gem APIs, or when clean, minimal, production-ready Ruby library code is needed. Triggers on requests like "create a gem", "write a Ruby library", "design a gem API", or mentions of Andrew Kane's style.
4
+ ---
5
+
6
+ # Andrew Kane Gem Writer
7
+
8
+ Write Ruby gems following Andrew Kane's battle-tested patterns from 100+ gems with 374M+ downloads (Searchkick, PgHero, Chartkick, Strong Migrations, Lockbox, Ahoy, Blazer, Groupdate, Neighbor, Blind Index).
9
+
10
+ ## Core Philosophy
11
+
12
+ **Simplicity over cleverness.** Zero or minimal dependencies. Explicit code over metaprogramming. Rails integration without Rails coupling. Every pattern serves production use cases.
13
+
14
+ ## Entry Point Structure
15
+
16
+ Every gem follows this exact pattern in `lib/gemname.rb`:
17
+
18
+ ```ruby
19
+ # 1. Dependencies (stdlib preferred)
20
+ require "forwardable"
21
+
22
+ # 2. Internal modules
23
+ require_relative "gemname/model"
24
+ require_relative "gemname/version"
25
+
26
+ # 3. Conditional Rails (CRITICAL - never require Rails directly)
27
+ require_relative "gemname/railtie" if defined?(Rails)
28
+
29
+ # 4. Module with config and errors
30
+ module GemName
31
+ class Error < StandardError; end
32
+ class InvalidConfigError < Error; end
33
+
34
+ class << self
35
+ attr_accessor :timeout, :logger
36
+ attr_writer :client
37
+ end
38
+
39
+ self.timeout = 10 # Defaults set immediately
40
+ end
41
+ ```
42
+
43
+ ## Class Macro DSL Pattern
44
+
45
+ The signature Kane pattern—single method call configures everything:
46
+
47
+ ```ruby
48
+ # Usage
49
+ class Product < ApplicationRecord
50
+ searchkick word_start: [:name]
51
+ end
52
+
53
+ # Implementation
54
+ module GemName
55
+ module Model
56
+ def gemname(**options)
57
+ unknown = options.keys - KNOWN_KEYWORDS
58
+ raise ArgumentError, "unknown keywords: #{unknown.join(", ")}" if unknown.any?
59
+
60
+ mod = Module.new
61
+ mod.module_eval do
62
+ define_method :some_method do
63
+ # implementation
64
+ end unless method_defined?(:some_method)
65
+ end
66
+ include mod
67
+
68
+ class_eval do
69
+ cattr_reader :gemname_options, instance_reader: false
70
+ class_variable_set :@@gemname_options, options.dup
71
+ end
72
+ end
73
+ end
74
+ end
75
+ ```
76
+
77
+ ## Rails Integration
78
+
79
+ **Always use `ActiveSupport.on_load`—never require Rails gems directly:**
80
+
81
+ ```ruby
82
+ # WRONG
83
+ require "active_record"
84
+ ActiveRecord::Base.include(MyGem::Model)
85
+
86
+ # CORRECT
87
+ ActiveSupport.on_load(:active_record) do
88
+ extend GemName::Model
89
+ end
90
+
91
+ # Use prepend for behavior modification
92
+ ActiveSupport.on_load(:active_record) do
93
+ ActiveRecord::Migration.prepend(GemName::Migration)
94
+ end
95
+ ```
96
+
97
+ ## Configuration Pattern
98
+
99
+ Use `class << self` with `attr_accessor`, not Configuration objects:
100
+
101
+ ```ruby
102
+ module GemName
103
+ class << self
104
+ attr_accessor :timeout, :logger
105
+ attr_writer :master_key
106
+ end
107
+
108
+ def self.master_key
109
+ @master_key ||= ENV["GEMNAME_MASTER_KEY"]
110
+ end
111
+
112
+ self.timeout = 10
113
+ self.logger = nil
114
+ end
115
+ ```
116
+
117
+ ## Error Handling
118
+
119
+ Simple hierarchy with informative messages:
120
+
121
+ ```ruby
122
+ module GemName
123
+ class Error < StandardError; end
124
+ class ConfigError < Error; end
125
+ class ValidationError < Error; end
126
+ end
127
+
128
+ # Validate early with ArgumentError
129
+ def initialize(key:)
130
+ raise ArgumentError, "Key must be 32 bytes" unless key&.bytesize == 32
131
+ end
132
+ ```
133
+
134
+ ## Testing (Minitest Only)
135
+
136
+ ```ruby
137
+ # test/test_helper.rb
138
+ require "bundler/setup"
139
+ Bundler.require(:default)
140
+ require "minitest/autorun"
141
+ require "minitest/pride"
142
+
143
+ # test/model_test.rb
144
+ class ModelTest < Minitest::Test
145
+ def test_basic_functionality
146
+ assert_equal expected, actual
147
+ end
148
+ end
149
+ ```
150
+
151
+ ## Gemspec Pattern
152
+
153
+ Zero runtime dependencies when possible:
154
+
155
+ ```ruby
156
+ Gem::Specification.new do |spec|
157
+ spec.name = "gemname"
158
+ spec.version = GemName::VERSION
159
+ spec.required_ruby_version = ">= 3.1"
160
+ spec.files = Dir["*.{md,txt}", "{lib}/**/*"]
161
+ spec.require_path = "lib"
162
+ # NO add_dependency lines - dev deps go in Gemfile
163
+ end
164
+ ```
165
+
166
+ ## Anti-Patterns to Avoid
167
+
168
+ - `method_missing` (use `define_method` instead)
169
+ - Configuration objects (use class accessors)
170
+ - `@@class_variables` (use `class << self`)
171
+ - Requiring Rails gems directly
172
+ - Many runtime dependencies
173
+ - Committing Gemfile.lock in gems
174
+ - RSpec (use Minitest)
175
+ - Heavy DSLs (prefer explicit Ruby)
176
+
177
+ ## Reference Files
178
+
179
+ For deeper patterns, see:
180
+ - **[references/module-organization.md](references/module-organization.md)** - Directory layouts, method decomposition
181
+ - **[references/rails-integration.md](references/rails-integration.md)** - Railtie, Engine, on_load patterns
182
+ - **[references/database-adapters.md](references/database-adapters.md)** - Multi-database support patterns
183
+ - **[references/testing-patterns.md](references/testing-patterns.md)** - Multi-version testing, CI setup
184
+ - **[references/resources.md](references/resources.md)** - Links to Kane's repos and articles
@@ -0,0 +1,231 @@
1
+ # Database Adapter Patterns
2
+
3
+ ## Abstract Base Class Pattern
4
+
5
+ ```ruby
6
+ # lib/strong_migrations/adapters/abstract_adapter.rb
7
+ module StrongMigrations
8
+ module Adapters
9
+ class AbstractAdapter
10
+ def initialize(checker)
11
+ @checker = checker
12
+ end
13
+
14
+ def min_version
15
+ nil
16
+ end
17
+
18
+ def set_statement_timeout(timeout)
19
+ # no-op by default
20
+ end
21
+
22
+ def check_lock_timeout
23
+ # no-op by default
24
+ end
25
+
26
+ private
27
+
28
+ def connection
29
+ @checker.send(:connection)
30
+ end
31
+
32
+ def quote(value)
33
+ connection.quote(value)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ ```
39
+
40
+ ## PostgreSQL Adapter
41
+
42
+ ```ruby
43
+ # lib/strong_migrations/adapters/postgresql_adapter.rb
44
+ module StrongMigrations
45
+ module Adapters
46
+ class PostgreSQLAdapter < AbstractAdapter
47
+ def min_version
48
+ "12"
49
+ end
50
+
51
+ def set_statement_timeout(timeout)
52
+ select_all("SET statement_timeout = #{timeout.to_i * 1000}")
53
+ end
54
+
55
+ def set_lock_timeout(timeout)
56
+ select_all("SET lock_timeout = #{timeout.to_i * 1000}")
57
+ end
58
+
59
+ def check_lock_timeout
60
+ lock_timeout = connection.select_value("SHOW lock_timeout")
61
+ lock_timeout_sec = timeout_to_sec(lock_timeout)
62
+ # validation logic
63
+ end
64
+
65
+ private
66
+
67
+ def select_all(sql)
68
+ connection.select_all(sql)
69
+ end
70
+
71
+ def timeout_to_sec(timeout)
72
+ units = {"us" => 1e-6, "ms" => 1e-3, "s" => 1, "min" => 60}
73
+ timeout.to_f * (units[timeout.gsub(/\d+/, "")] || 1e-3)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ ```
79
+
80
+ ## MySQL Adapter
81
+
82
+ ```ruby
83
+ # lib/strong_migrations/adapters/mysql_adapter.rb
84
+ module StrongMigrations
85
+ module Adapters
86
+ class MySQLAdapter < AbstractAdapter
87
+ def min_version
88
+ "8.0"
89
+ end
90
+
91
+ def set_statement_timeout(timeout)
92
+ select_all("SET max_execution_time = #{timeout.to_i * 1000}")
93
+ end
94
+
95
+ def check_lock_timeout
96
+ lock_timeout = connection.select_value("SELECT @@lock_wait_timeout")
97
+ # validation logic
98
+ end
99
+ end
100
+ end
101
+ end
102
+ ```
103
+
104
+ ## MariaDB Adapter (MySQL variant)
105
+
106
+ ```ruby
107
+ # lib/strong_migrations/adapters/mariadb_adapter.rb
108
+ module StrongMigrations
109
+ module Adapters
110
+ class MariaDBAdapter < MySQLAdapter
111
+ def min_version
112
+ "10.5"
113
+ end
114
+
115
+ # Override MySQL-specific behavior
116
+ def set_statement_timeout(timeout)
117
+ select_all("SET max_statement_time = #{timeout.to_i}")
118
+ end
119
+ end
120
+ end
121
+ end
122
+ ```
123
+
124
+ ## Adapter Detection Pattern
125
+
126
+ Use regex matching on adapter name:
127
+
128
+ ```ruby
129
+ def adapter
130
+ @adapter ||= case connection.adapter_name
131
+ when /postg/i
132
+ Adapters::PostgreSQLAdapter.new(self)
133
+ when /mysql|trilogy/i
134
+ if connection.try(:mariadb?)
135
+ Adapters::MariaDBAdapter.new(self)
136
+ else
137
+ Adapters::MySQLAdapter.new(self)
138
+ end
139
+ when /sqlite/i
140
+ Adapters::SQLiteAdapter.new(self)
141
+ else
142
+ Adapters::AbstractAdapter.new(self)
143
+ end
144
+ end
145
+ ```
146
+
147
+ ## Multi-Database Support (PgHero pattern)
148
+
149
+ ```ruby
150
+ module PgHero
151
+ class << self
152
+ attr_accessor :databases
153
+ end
154
+
155
+ self.databases = {}
156
+
157
+ def self.primary_database
158
+ databases.values.first
159
+ end
160
+
161
+ def self.capture_query_stats(database: nil)
162
+ db = database ? databases[database] : primary_database
163
+ db.capture_query_stats
164
+ end
165
+
166
+ class Database
167
+ attr_reader :id, :config
168
+
169
+ def initialize(id, config)
170
+ @id = id
171
+ @config = config
172
+ end
173
+
174
+ def connection_model
175
+ @connection_model ||= begin
176
+ Class.new(ActiveRecord::Base) do
177
+ self.abstract_class = true
178
+ end.tap do |model|
179
+ model.establish_connection(config)
180
+ end
181
+ end
182
+ end
183
+
184
+ def connection
185
+ connection_model.connection
186
+ end
187
+ end
188
+ end
189
+ ```
190
+
191
+ ## Connection Switching
192
+
193
+ ```ruby
194
+ def with_connection(database_name)
195
+ db = databases[database_name.to_s]
196
+ raise Error, "Unknown database: #{database_name}" unless db
197
+
198
+ yield db.connection
199
+ end
200
+
201
+ # Usage
202
+ PgHero.with_connection(:replica) do |conn|
203
+ conn.execute("SELECT * FROM users")
204
+ end
205
+ ```
206
+
207
+ ## SQL Dialect Handling
208
+
209
+ ```ruby
210
+ def quote_column(column)
211
+ case adapter_name
212
+ when /postg/i
213
+ %("#{column}")
214
+ when /mysql/i
215
+ "`#{column}`"
216
+ else
217
+ column
218
+ end
219
+ end
220
+
221
+ def boolean_value(value)
222
+ case adapter_name
223
+ when /postg/i
224
+ value ? "true" : "false"
225
+ when /mysql/i
226
+ value ? "1" : "0"
227
+ else
228
+ value.to_s
229
+ end
230
+ end
231
+ ```
@@ -0,0 +1,121 @@
1
+ # Module Organization Patterns
2
+
3
+ ## Simple Gem Layout
4
+
5
+ ```
6
+ lib/
7
+ ├── gemname.rb # Entry point, config, errors
8
+ └── gemname/
9
+ ├── helper.rb # Core functionality
10
+ ├── engine.rb # Rails engine (if needed)
11
+ └── version.rb # VERSION constant only
12
+ ```
13
+
14
+ ## Complex Gem Layout (PgHero pattern)
15
+
16
+ ```
17
+ lib/
18
+ ├── pghero.rb
19
+ └── pghero/
20
+ ├── database.rb # Main class
21
+ ├── engine.rb # Rails engine
22
+ └── methods/ # Functional decomposition
23
+ ├── basic.rb
24
+ ├── connections.rb
25
+ ├── indexes.rb
26
+ ├── queries.rb
27
+ └── replication.rb
28
+ ```
29
+
30
+ ## Method Decomposition Pattern
31
+
32
+ Break large classes into includable modules by feature:
33
+
34
+ ```ruby
35
+ # lib/pghero/database.rb
36
+ module PgHero
37
+ class Database
38
+ include Methods::Basic
39
+ include Methods::Connections
40
+ include Methods::Indexes
41
+ include Methods::Queries
42
+ end
43
+ end
44
+
45
+ # lib/pghero/methods/indexes.rb
46
+ module PgHero
47
+ module Methods
48
+ module Indexes
49
+ def index_hit_rate
50
+ # implementation
51
+ end
52
+
53
+ def unused_indexes
54
+ # implementation
55
+ end
56
+ end
57
+ end
58
+ end
59
+ ```
60
+
61
+ ## Version File Pattern
62
+
63
+ Keep version.rb minimal:
64
+
65
+ ```ruby
66
+ # lib/gemname/version.rb
67
+ module GemName
68
+ VERSION = "2.0.0"
69
+ end
70
+ ```
71
+
72
+ ## Require Order in Entry Point
73
+
74
+ ```ruby
75
+ # lib/searchkick.rb
76
+
77
+ # 1. Standard library
78
+ require "forwardable"
79
+ require "json"
80
+
81
+ # 2. External dependencies (minimal)
82
+ require "active_support"
83
+
84
+ # 3. Internal files via require_relative
85
+ require_relative "searchkick/index"
86
+ require_relative "searchkick/model"
87
+ require_relative "searchkick/query"
88
+ require_relative "searchkick/version"
89
+
90
+ # 4. Conditional Rails loading (LAST)
91
+ require_relative "searchkick/railtie" if defined?(Rails)
92
+ ```
93
+
94
+ ## Autoload vs Require
95
+
96
+ Kane uses explicit `require_relative`, not autoload:
97
+
98
+ ```ruby
99
+ # CORRECT
100
+ require_relative "gemname/model"
101
+ require_relative "gemname/query"
102
+
103
+ # AVOID
104
+ autoload :Model, "gemname/model"
105
+ autoload :Query, "gemname/query"
106
+ ```
107
+
108
+ ## Comments Style
109
+
110
+ Minimal section headers only:
111
+
112
+ ```ruby
113
+ # dependencies
114
+ require "active_support"
115
+
116
+ # adapters
117
+ require_relative "adapters/postgresql_adapter"
118
+
119
+ # modules
120
+ require_relative "migration"
121
+ ```
@@ -0,0 +1,183 @@
1
+ # Rails Integration Patterns
2
+
3
+ ## The Golden Rule
4
+
5
+ **Never require Rails gems directly.** This causes loading order issues.
6
+
7
+ ```ruby
8
+ # WRONG - causes premature loading
9
+ require "active_record"
10
+ ActiveRecord::Base.include(MyGem::Model)
11
+
12
+ # CORRECT - lazy loading
13
+ ActiveSupport.on_load(:active_record) do
14
+ extend MyGem::Model
15
+ end
16
+ ```
17
+
18
+ ## ActiveSupport.on_load Hooks
19
+
20
+ Common hooks and their uses:
21
+
22
+ ```ruby
23
+ # Models
24
+ ActiveSupport.on_load(:active_record) do
25
+ extend GemName::Model # Add class methods (searchkick, has_encrypted)
26
+ include GemName::Callbacks # Add instance methods
27
+ end
28
+
29
+ # Controllers
30
+ ActiveSupport.on_load(:action_controller) do
31
+ include Ahoy::Controller
32
+ end
33
+
34
+ # Jobs
35
+ ActiveSupport.on_load(:active_job) do
36
+ include GemName::JobExtensions
37
+ end
38
+
39
+ # Mailers
40
+ ActiveSupport.on_load(:action_mailer) do
41
+ include GemName::MailerExtensions
42
+ end
43
+ ```
44
+
45
+ ## Prepend for Behavior Modification
46
+
47
+ When overriding existing Rails methods:
48
+
49
+ ```ruby
50
+ ActiveSupport.on_load(:active_record) do
51
+ ActiveRecord::Migration.prepend(StrongMigrations::Migration)
52
+ ActiveRecord::Migrator.prepend(StrongMigrations::Migrator)
53
+ end
54
+ ```
55
+
56
+ ## Railtie Pattern
57
+
58
+ Minimal Railtie for non-mountable gems:
59
+
60
+ ```ruby
61
+ # lib/gemname/railtie.rb
62
+ module GemName
63
+ class Railtie < Rails::Railtie
64
+ initializer "gemname.configure" do
65
+ ActiveSupport.on_load(:active_record) do
66
+ extend GemName::Model
67
+ end
68
+ end
69
+
70
+ # Optional: Add to controller runtime logging
71
+ initializer "gemname.log_runtime" do
72
+ require_relative "controller_runtime"
73
+ ActiveSupport.on_load(:action_controller) do
74
+ include GemName::ControllerRuntime
75
+ end
76
+ end
77
+
78
+ # Optional: Rake tasks
79
+ rake_tasks do
80
+ load "tasks/gemname.rake"
81
+ end
82
+ end
83
+ end
84
+ ```
85
+
86
+ ## Engine Pattern (Mountable Gems)
87
+
88
+ For gems with web interfaces (PgHero, Blazer, Ahoy):
89
+
90
+ ```ruby
91
+ # lib/pghero/engine.rb
92
+ module PgHero
93
+ class Engine < ::Rails::Engine
94
+ isolate_namespace PgHero
95
+
96
+ initializer "pghero.assets", group: :all do |app|
97
+ if app.config.respond_to?(:assets) && defined?(Sprockets)
98
+ app.config.assets.precompile << "pghero/application.js"
99
+ app.config.assets.precompile << "pghero/application.css"
100
+ end
101
+ end
102
+
103
+ initializer "pghero.config" do
104
+ PgHero.config = Rails.application.config_for(:pghero) rescue {}
105
+ end
106
+ end
107
+ end
108
+ ```
109
+
110
+ ## Routes for Engines
111
+
112
+ ```ruby
113
+ # config/routes.rb (in engine)
114
+ PgHero::Engine.routes.draw do
115
+ root to: "home#index"
116
+ resources :databases, only: [:show]
117
+ end
118
+ ```
119
+
120
+ Mount in app:
121
+
122
+ ```ruby
123
+ # config/routes.rb (in app)
124
+ mount PgHero::Engine, at: "pghero"
125
+ ```
126
+
127
+ ## YAML Configuration with ERB
128
+
129
+ For complex gems needing config files:
130
+
131
+ ```ruby
132
+ def self.settings
133
+ @settings ||= begin
134
+ path = Rails.root.join("config", "blazer.yml")
135
+ if path.exist?
136
+ YAML.safe_load(ERB.new(File.read(path)).result, aliases: true)
137
+ else
138
+ {}
139
+ end
140
+ end
141
+ end
142
+ ```
143
+
144
+ ## Generator Pattern
145
+
146
+ ```ruby
147
+ # lib/generators/gemname/install_generator.rb
148
+ module GemName
149
+ module Generators
150
+ class InstallGenerator < Rails::Generators::Base
151
+ source_root File.expand_path("templates", __dir__)
152
+
153
+ def copy_initializer
154
+ template "initializer.rb", "config/initializers/gemname.rb"
155
+ end
156
+
157
+ def copy_migration
158
+ migration_template "migration.rb", "db/migrate/create_gemname_tables.rb"
159
+ end
160
+ end
161
+ end
162
+ end
163
+ ```
164
+
165
+ ## Conditional Feature Detection
166
+
167
+ ```ruby
168
+ # Check for specific Rails versions
169
+ if ActiveRecord.version >= Gem::Version.new("7.0")
170
+ # Rails 7+ specific code
171
+ end
172
+
173
+ # Check for optional dependencies
174
+ def self.client
175
+ @client ||= if defined?(OpenSearch::Client)
176
+ OpenSearch::Client.new
177
+ elsif defined?(Elasticsearch::Client)
178
+ Elasticsearch::Client.new
179
+ else
180
+ raise Error, "Install elasticsearch or opensearch-ruby"
181
+ end
182
+ end
183
+ ```