@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,116 @@
1
+ #!/bin/bash
2
+ #
3
+ # Build SQLite FTS5 index from knowledge.jsonl
4
+ #
5
+ # Usage: build-index.sh /path/to/knowledge.jsonl /path/to/output.db
6
+ #
7
+ # Creates a SQLite database with:
8
+ # - knowledge table with all fields
9
+ # - knowledge_fts FTS5 virtual table for full-text search
10
+ #
11
+
12
+ KNOWLEDGE_FILE="$1"
13
+ DB_FILE="$2"
14
+
15
+ if [[ -z "$KNOWLEDGE_FILE" ]] || [[ -z "$DB_FILE" ]]; then
16
+ echo "Usage: build-index.sh /path/to/knowledge.jsonl /path/to/output.db" >&2
17
+ exit 1
18
+ fi
19
+
20
+ if [[ ! -f "$KNOWLEDGE_FILE" ]]; then
21
+ echo "File not found: $KNOWLEDGE_FILE" >&2
22
+ exit 1
23
+ fi
24
+
25
+ if ! command -v python3 &>/dev/null; then
26
+ echo "Required: python3" >&2
27
+ exit 1
28
+ fi
29
+
30
+ # Remove existing db to start fresh
31
+ rm -f "$DB_FILE"
32
+
33
+ # Use Python for proper parameterized SQL (no escaping issues)
34
+ python3 - "$KNOWLEDGE_FILE" "$DB_FILE" <<'PYEOF'
35
+ import json
36
+ import sqlite3
37
+ import sys
38
+
39
+ knowledge_file = sys.argv[1]
40
+ db_file = sys.argv[2]
41
+
42
+ conn = sqlite3.connect(db_file)
43
+ cur = conn.cursor()
44
+
45
+ cur.executescript("""
46
+ CREATE TABLE knowledge(
47
+ key TEXT PRIMARY KEY,
48
+ type TEXT,
49
+ content TEXT,
50
+ source TEXT,
51
+ tags_text TEXT,
52
+ ts INTEGER,
53
+ bead TEXT
54
+ );
55
+
56
+ CREATE VIRTUAL TABLE knowledge_fts USING fts5(
57
+ content, tags_text, type, key,
58
+ content=knowledge,
59
+ content_rowid=rowid,
60
+ tokenize='porter unicode61'
61
+ );
62
+
63
+ CREATE TRIGGER knowledge_ai AFTER INSERT ON knowledge BEGIN
64
+ INSERT INTO knowledge_fts(rowid, content, tags_text, type, key)
65
+ VALUES (new.rowid, new.content, new.tags_text, new.type, new.key);
66
+ END;
67
+ """)
68
+
69
+ inserted = 0
70
+ skipped = 0
71
+
72
+ with open(knowledge_file, encoding="utf-8") as f:
73
+ for line in f:
74
+ line = line.strip()
75
+ if not line:
76
+ continue
77
+
78
+ try:
79
+ entry = json.loads(line)
80
+ except json.JSONDecodeError:
81
+ skipped += 1
82
+ continue
83
+
84
+ key = entry.get("key", "")
85
+ if not key:
86
+ skipped += 1
87
+ continue
88
+
89
+ tags = entry.get("tags", [])
90
+ tags_text = " ".join(tags) if isinstance(tags, list) else str(tags)
91
+
92
+ try:
93
+ cur.execute(
94
+ "INSERT OR IGNORE INTO knowledge(key, type, content, source, tags_text, ts, bead) VALUES(?, ?, ?, ?, ?, ?, ?)",
95
+ (
96
+ key,
97
+ entry.get("type", ""),
98
+ entry.get("content", ""),
99
+ entry.get("source", ""),
100
+ tags_text,
101
+ entry.get("ts", 0),
102
+ entry.get("bead", ""),
103
+ ),
104
+ )
105
+ inserted += 1
106
+ except Exception as e:
107
+ print(f" Warning: skipped {key}: {e}", file=sys.stderr)
108
+ skipped += 1
109
+
110
+ conn.commit()
111
+ conn.close()
112
+
113
+ print(f"Built FTS5 index: {db_file}")
114
+ print(f" Entries indexed: {inserted}")
115
+ print(f" Entries skipped: {skipped}")
116
+ PYEOF
@@ -0,0 +1,224 @@
1
+ #!/bin/bash
2
+ #
3
+ # Memory Recall Benchmark - compare grep vs FTS5 search quality
4
+ #
5
+ # Usage: recall-bench.sh /path/to/knowledge.jsonl
6
+ #
7
+ # Runs curated test queries against both grep and FTS5 backends,
8
+ # scores results against human-judged relevance labels, and outputs
9
+ # a comparison report with precision@5, recall@5, and MRR.
10
+ #
11
+
12
+ set -euo pipefail
13
+
14
+ KNOWLEDGE_FILE="$1"
15
+
16
+ if [[ -z "$KNOWLEDGE_FILE" ]]; then
17
+ echo "Usage: recall-bench.sh /path/to/knowledge.jsonl" >&2
18
+ exit 1
19
+ fi
20
+
21
+ if [[ ! -f "$KNOWLEDGE_FILE" ]]; then
22
+ echo "File not found: $KNOWLEDGE_FILE" >&2
23
+ exit 1
24
+ fi
25
+
26
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
27
+ TEST_QUERIES="$SCRIPT_DIR/test-queries.jsonl"
28
+ GREP_SEARCH="$SCRIPT_DIR/search-grep.sh"
29
+ FTS5_SEARCH="$SCRIPT_DIR/search-fts5.sh"
30
+ BUILD_INDEX="$SCRIPT_DIR/build-index.sh"
31
+
32
+ TOP_K=5
33
+ DB_FILE=$(mktemp /tmp/recall-bench-XXXXXX.db)
34
+ trap 'rm -f "$DB_FILE"' EXIT
35
+
36
+ # Verify dependencies
37
+ for FILE in "$TEST_QUERIES" "$GREP_SEARCH" "$FTS5_SEARCH" "$BUILD_INDEX"; do
38
+ if [[ ! -f "$FILE" ]]; then
39
+ echo "Missing: $FILE" >&2
40
+ exit 1
41
+ fi
42
+ done
43
+
44
+ for CMD in sqlite3 jq; do
45
+ if ! command -v "$CMD" &>/dev/null; then
46
+ echo "Required: $CMD" >&2
47
+ exit 1
48
+ fi
49
+ done
50
+
51
+ # Build FTS5 index
52
+ echo "Building FTS5 index..."
53
+ bash "$BUILD_INDEX" "$KNOWLEDGE_FILE" "$DB_FILE"
54
+ echo ""
55
+
56
+ # Scoring functions using awk for floating point
57
+ calc_precision() {
58
+ local hits="$1"
59
+ local returned="$2"
60
+ if [[ "$returned" -eq 0 ]]; then
61
+ echo "0.000"
62
+ else
63
+ awk "BEGIN { printf \"%.3f\", $hits / $returned }"
64
+ fi
65
+ }
66
+
67
+ calc_recall() {
68
+ local hits="$1"
69
+ local total_relevant="$2"
70
+ if [[ "$total_relevant" -eq 0 ]]; then
71
+ echo "1.000"
72
+ else
73
+ awk "BEGIN { printf \"%.3f\", $hits / $total_relevant }"
74
+ fi
75
+ }
76
+
77
+ calc_rr() {
78
+ # Reciprocal rank: 1/rank of first relevant result, 0 if none
79
+ local rank="$1"
80
+ if [[ "$rank" -eq 0 ]]; then
81
+ echo "0.000"
82
+ else
83
+ awk "BEGIN { printf \"%.3f\", 1.0 / $rank }"
84
+ fi
85
+ }
86
+
87
+ # Run benchmark
88
+ TOTAL_QUERIES=0
89
+ GREP_P_SUM=0
90
+ GREP_R_SUM=0
91
+ GREP_RR_SUM=0
92
+ FTS5_P_SUM=0
93
+ FTS5_R_SUM=0
94
+ FTS5_RR_SUM=0
95
+
96
+ # Header
97
+ printf "%-45s | %-17s | %-17s | %-17s\n" "" "Precision@$TOP_K" "Recall@$TOP_K" "MRR"
98
+ printf "%-45s | %-8s %-8s | %-8s %-8s | %-8s %-8s\n" "Query" "grep" "fts5" "grep" "fts5" "grep" "fts5"
99
+ printf "%s\n" "$(printf '%.0s-' {1..120})"
100
+
101
+ while IFS= read -r QUERY_LINE; do
102
+ [[ -z "$QUERY_LINE" ]] && continue
103
+
104
+ QUERY=$(echo "$QUERY_LINE" | jq -r '.query')
105
+ RELEVANT_KEYS=$(echo "$QUERY_LINE" | jq -r '.relevant_keys[]')
106
+ TOTAL_RELEVANT=$(echo "$QUERY_LINE" | jq -r '.relevant_keys | length')
107
+
108
+ # Run grep search
109
+ GREP_RESULTS=$(bash "$GREP_SEARCH" "$QUERY" "$KNOWLEDGE_FILE" "$TOP_K" 2>/dev/null || true)
110
+
111
+ # Run FTS5 search
112
+ FTS5_RESULTS=$(bash "$FTS5_SEARCH" "$QUERY" "$DB_FILE" "$TOP_K" 2>/dev/null || true)
113
+
114
+ # Score grep results
115
+ GREP_HITS=0
116
+ GREP_FIRST_RANK=0
117
+ GREP_RANK=0
118
+ GREP_RETURNED=0
119
+
120
+ while IFS= read -r RESULT_KEY; do
121
+ [[ -z "$RESULT_KEY" ]] && continue
122
+ GREP_RETURNED=$((GREP_RETURNED + 1))
123
+ GREP_RANK=$((GREP_RANK + 1))
124
+
125
+ IS_RELEVANT=false
126
+ while IFS= read -r REL_KEY; do
127
+ if [[ "$RESULT_KEY" == "$REL_KEY" ]]; then
128
+ IS_RELEVANT=true
129
+ break
130
+ fi
131
+ done <<< "$RELEVANT_KEYS"
132
+
133
+ if $IS_RELEVANT; then
134
+ GREP_HITS=$((GREP_HITS + 1))
135
+ if [[ "$GREP_FIRST_RANK" -eq 0 ]]; then
136
+ GREP_FIRST_RANK=$GREP_RANK
137
+ fi
138
+ fi
139
+ done <<< "$GREP_RESULTS"
140
+
141
+ # Score FTS5 results
142
+ FTS5_HITS=0
143
+ FTS5_FIRST_RANK=0
144
+ FTS5_RANK=0
145
+ FTS5_RETURNED=0
146
+
147
+ while IFS= read -r RESULT_KEY; do
148
+ [[ -z "$RESULT_KEY" ]] && continue
149
+ FTS5_RETURNED=$((FTS5_RETURNED + 1))
150
+ FTS5_RANK=$((FTS5_RANK + 1))
151
+
152
+ IS_RELEVANT=false
153
+ while IFS= read -r REL_KEY; do
154
+ if [[ "$RESULT_KEY" == "$REL_KEY" ]]; then
155
+ IS_RELEVANT=true
156
+ break
157
+ fi
158
+ done <<< "$RELEVANT_KEYS"
159
+
160
+ if $IS_RELEVANT; then
161
+ FTS5_HITS=$((FTS5_HITS + 1))
162
+ if [[ "$FTS5_FIRST_RANK" -eq 0 ]]; then
163
+ FTS5_FIRST_RANK=$FTS5_RANK
164
+ fi
165
+ fi
166
+ done <<< "$FTS5_RESULTS"
167
+
168
+ # Compute metrics
169
+ G_P=$(calc_precision $GREP_HITS $GREP_RETURNED)
170
+ G_R=$(calc_recall $GREP_HITS $TOTAL_RELEVANT)
171
+ G_RR=$(calc_rr $GREP_FIRST_RANK)
172
+
173
+ F_P=$(calc_precision $FTS5_HITS $FTS5_RETURNED)
174
+ F_R=$(calc_recall $FTS5_HITS $TOTAL_RELEVANT)
175
+ F_RR=$(calc_rr $FTS5_FIRST_RANK)
176
+
177
+ # Print row
178
+ QUERY_DISPLAY="$QUERY"
179
+ if [[ ${#QUERY_DISPLAY} -gt 43 ]]; then
180
+ QUERY_DISPLAY="${QUERY_DISPLAY:0:40}..."
181
+ fi
182
+ printf "%-45s | %-8s %-8s | %-8s %-8s | %-8s %-8s\n" "$QUERY_DISPLAY" "$G_P" "$F_P" "$G_R" "$F_R" "$G_RR" "$F_RR"
183
+
184
+ # Accumulate for averages
185
+ GREP_P_SUM=$(awk "BEGIN { print $GREP_P_SUM + $G_P }")
186
+ GREP_R_SUM=$(awk "BEGIN { print $GREP_R_SUM + $G_R }")
187
+ GREP_RR_SUM=$(awk "BEGIN { print $GREP_RR_SUM + $G_RR }")
188
+ FTS5_P_SUM=$(awk "BEGIN { print $FTS5_P_SUM + $F_P }")
189
+ FTS5_R_SUM=$(awk "BEGIN { print $FTS5_R_SUM + $F_R }")
190
+ FTS5_RR_SUM=$(awk "BEGIN { print $FTS5_RR_SUM + $F_RR }")
191
+ TOTAL_QUERIES=$((TOTAL_QUERIES + 1))
192
+
193
+ done < "$TEST_QUERIES"
194
+
195
+ # Summary
196
+ printf "%s\n" "$(printf '%.0s-' {1..120})"
197
+
198
+ if [[ $TOTAL_QUERIES -gt 0 ]]; then
199
+ AVG_GP=$(awk "BEGIN { printf \"%.3f\", $GREP_P_SUM / $TOTAL_QUERIES }")
200
+ AVG_GR=$(awk "BEGIN { printf \"%.3f\", $GREP_R_SUM / $TOTAL_QUERIES }")
201
+ AVG_GRR=$(awk "BEGIN { printf \"%.3f\", $GREP_RR_SUM / $TOTAL_QUERIES }")
202
+ AVG_FP=$(awk "BEGIN { printf \"%.3f\", $FTS5_P_SUM / $TOTAL_QUERIES }")
203
+ AVG_FR=$(awk "BEGIN { printf \"%.3f\", $FTS5_R_SUM / $TOTAL_QUERIES }")
204
+ AVG_FRR=$(awk "BEGIN { printf \"%.3f\", $FTS5_RR_SUM / $TOTAL_QUERIES }")
205
+
206
+ printf "%-45s | %-8s %-8s | %-8s %-8s | %-8s %-8s\n" "AVERAGE ($TOTAL_QUERIES queries)" "$AVG_GP" "$AVG_FP" "$AVG_GR" "$AVG_FR" "$AVG_GRR" "$AVG_FRR"
207
+
208
+ echo ""
209
+ echo "Legend:"
210
+ echo " Precision@$TOP_K = relevant results / returned results (higher = less noise)"
211
+ echo " Recall@$TOP_K = relevant results / total relevant (higher = more complete)"
212
+ echo " MRR = 1/rank of first relevant result (higher = faster to find)"
213
+
214
+ # Delta summary
215
+ DELTA_P=$(awk "BEGIN { printf \"%+.3f\", $AVG_FP - $AVG_GP }")
216
+ DELTA_R=$(awk "BEGIN { printf \"%+.3f\", $AVG_FR - $AVG_GR }")
217
+ DELTA_RR=$(awk "BEGIN { printf \"%+.3f\", $AVG_FRR - $AVG_GRR }")
218
+
219
+ echo ""
220
+ echo "FTS5 vs grep delta:"
221
+ echo " Precision: $DELTA_P"
222
+ echo " Recall: $DELTA_R"
223
+ echo " MRR: $DELTA_RR"
224
+ fi
@@ -0,0 +1,65 @@
1
+ #!/bin/bash
2
+ #
3
+ # FTS5 search backend - SQLite full-text search with BM25 ranking
4
+ #
5
+ # Usage: search-fts5.sh "query string" /path/to/knowledge.db [N]
6
+ #
7
+ # Runs FTS5 MATCH query with BM25 ranking, returns top N keys ordered by relevance.
8
+ #
9
+
10
+ QUERY="$1"
11
+ DB_FILE="$2"
12
+ TOP_N="${3:-5}"
13
+
14
+ if [[ -z "$QUERY" ]] || [[ -z "$DB_FILE" ]]; then
15
+ echo "Usage: search-fts5.sh \"query\" /path/to/knowledge.db [N]" >&2
16
+ exit 1
17
+ fi
18
+
19
+ if [[ ! -f "$DB_FILE" ]]; then
20
+ echo "Database not found: $DB_FILE" >&2
21
+ exit 1
22
+ fi
23
+
24
+ # Use Python for proper FTS5 query construction and parameterized execution
25
+ python3 - "$QUERY" "$DB_FILE" "$TOP_N" <<'PYEOF'
26
+ import sqlite3
27
+ import re
28
+ import sys
29
+
30
+ query = sys.argv[1]
31
+ db_file = sys.argv[2]
32
+ top_n = int(sys.argv[3])
33
+
34
+ # Extract terms (2+ alphanumeric chars)
35
+ terms = re.findall(r'\b[a-zA-Z0-9_.]{2,}\b', query.lower())
36
+
37
+ if not terms:
38
+ sys.exit(0)
39
+
40
+ # Build FTS5 query: join with OR
41
+ # Quote each term to handle special chars
42
+ fts_query = " OR ".join(f'"{t}"' for t in terms)
43
+
44
+ conn = sqlite3.connect(db_file)
45
+ cur = conn.cursor()
46
+
47
+ # BM25 weights: content=10, tags_text=5, type=2, key=1
48
+ try:
49
+ cur.execute("""
50
+ SELECT k.key
51
+ FROM knowledge_fts fts
52
+ JOIN knowledge k ON k.rowid = fts.rowid
53
+ WHERE knowledge_fts MATCH ?
54
+ ORDER BY bm25(knowledge_fts, -10.0, -5.0, -2.0, -1.0)
55
+ LIMIT ?
56
+ """, (fts_query, top_n))
57
+
58
+ for row in cur.fetchall():
59
+ print(row[0])
60
+
61
+ except Exception:
62
+ pass
63
+
64
+ conn.close()
65
+ PYEOF
@@ -0,0 +1,54 @@
1
+ #!/bin/bash
2
+ #
3
+ # Grep search backend - mirrors the current recall.sh/auto-recall.sh logic
4
+ #
5
+ # Usage: search-grep.sh "query string" /path/to/knowledge.jsonl [N]
6
+ #
7
+ # Splits query into terms, greps each, deduplicates by key, returns top N keys.
8
+ #
9
+
10
+ QUERY="$1"
11
+ KNOWLEDGE_FILE="$2"
12
+ TOP_N="${3:-5}"
13
+
14
+ if [[ -z "$QUERY" ]] || [[ -z "$KNOWLEDGE_FILE" ]]; then
15
+ echo "Usage: search-grep.sh \"query\" /path/to/knowledge.jsonl [N]" >&2
16
+ exit 1
17
+ fi
18
+
19
+ if [[ ! -f "$KNOWLEDGE_FILE" ]]; then
20
+ echo "File not found: $KNOWLEDGE_FILE" >&2
21
+ exit 1
22
+ fi
23
+
24
+ # Split query into terms (matching auto-recall.sh approach)
25
+ TERMS=$(echo "$QUERY" | tr '[:upper:]' '[:lower:]' | grep -oE '\b[a-zA-Z0-9_.]{2,}\b')
26
+
27
+ SEEN_KEYS=""
28
+ RESULT_KEYS=""
29
+ COUNT=0
30
+
31
+ for TERM in $TERMS; do
32
+ [[ $COUNT -ge $TOP_N ]] && break
33
+
34
+ # grep -i for case-insensitive matching (mirrors recall.sh line 96)
35
+ MATCHES=$(grep -i "$TERM" "$KNOWLEDGE_FILE" 2>/dev/null)
36
+
37
+ while IFS= read -r LINE; do
38
+ [[ -z "$LINE" ]] && continue
39
+ [[ $COUNT -ge $TOP_N ]] && break
40
+
41
+ KEY=$(echo "$LINE" | jq -r '.key // empty' 2>/dev/null)
42
+ [[ -z "$KEY" ]] && continue
43
+
44
+ # Deduplicate
45
+ if [[ "$SEEN_KEYS" != *"|$KEY|"* ]]; then
46
+ SEEN_KEYS="${SEEN_KEYS}|${KEY}|"
47
+ RESULT_KEYS="${RESULT_KEYS}${KEY}"$'\n'
48
+ COUNT=$((COUNT + 1))
49
+ fi
50
+ done <<< "$MATCHES"
51
+ done
52
+
53
+ # Output keys, one per line, trimming trailing newline
54
+ echo "$RESULT_KEYS" | sed '/^$/d'
@@ -0,0 +1,25 @@
1
+ {"query": "ViaCEP", "description": "Exact match - find entries about ViaCEP API", "relevant_keys": ["learned-fact-viacep-api-returns-400-bad-request-when-street-city-co", "fact-brasilapi-open-cep-service-does-not-return-ibge-city-codes"]}
2
+ {"query": "E0014", "description": "Exact match - government NFSe error code", "relevant_keys": ["learned-government-nfse-api-e0014-rejects-any-resubmission-of-same-d", "fact-nfse-government-api-error-e0014-rejects-any-dps-with-same-se"]}
3
+ {"query": "pynfse-nacional", "description": "Exact match - the NFSe library name", "relevant_keys": ["learned-pynfse-nacional-0-4-0-had-bug-xml-element-subst1-should-b", "decision-client-code-medsimples-generates-dps-numero-not-the-libra"]}
4
+ {"query": "db commit RLS reset", "description": "Partial terms - find entries about RLS context lost after commit", "relevant_keys": ["investigation-postgresql-set-session-variables-app-is-superadmin-app-org", "pattern-whenever-a-background-task-or-service-method-calls-db-commit", "learned-rls-session-variables-app-org-id-app-is-superadmin-reset", "pattern-in-substitute-nfse-use-db-flush-instead-of-db-commit-be", "pattern-in-routers-that-create-records-and-need-to-re-query-with-rel"]}
5
+ {"query": "payment methods Brazil", "description": "Partial terms - find Stripe/PIX/Boleto payment entries", "relevant_keys": ["decision-payment-method-priority-for-brazil-implementation-1-primary", "fact-stripe-connect-brazil-regulatory-restrictions-platforms-ou", "learned-stripe-payment-methods-in-brazil-require-proper-portuguese-a", "investigation-iof-tax-currency-considerations-iof-imposto-sobre-opera", "pattern-python-sdk-paymentintent-implementation-create-paymentinte"]}
6
+ {"query": "how to avoid data loss in phone migration", "description": "Conceptual - migration safety for phone number changes", "relevant_keys": ["fact-common-migration-pitfalls-1-data-loss-from-aggressive-no", "pattern-migration-from-single-field-to-country-code-split-1-add", "learned-always-analyze-production-data-before-writing-migration-stra", "decision-created-phone-migration-strategy-md-and-pre-migration-phone", "investigation-production-database-analysis-completed-results-1-country"]}
7
+ {"query": "query returns null after saving", "description": "Conceptual - cache/flush issues after database writes", "relevant_keys": ["investigation-root-cause-is-missing-clearapicache-call-after-cachedaxios", "pattern-in-routers-that-create-records-and-need-to-re-query-with-rel", "investigation-post-api-visits-rxvisits-returned-200-but-pydantic-serializ", "learned-pydantic-with-from-attributes-true-only-serializes-fields-ex"]}
8
+ {"query": "Stripe Brazil restrictions", "description": "Multi-word - Stripe platform limitations in Brazil", "relevant_keys": ["fact-stripe-connect-brazil-regulatory-restrictions-platforms-ou", "decision-payment-method-priority-for-brazil-implementation-1-primary", "learned-stripe-payment-methods-in-brazil-require-proper-portuguese-a", "investigation-iof-tax-currency-considerations-iof-imposto-sobre-opera"]}
9
+ {"query": "phone number validation", "description": "Multi-word - phone validation across frontend and backend", "relevant_keys": ["learned-backend-phone-validation-tests-now-comprehensive-added-tes", "learned-phoneinput-accessibility-requires-consistent-errorid-across", "learned-pydantic-field-validator-with-validationinfo-allows-accessin", "investigation-e-164-format-is-itu-t-international-phone-standard-structur", "fact-brazil-55-has-special-validation-rules-for-whatsapp-braz", "decision-added-phone-number-max-length-validation-in-format-phone-e16", "pattern-best-practices-for-e-164-normalization-before-whatsapp-api-c"]}
10
+ {"query": "RLS", "description": "Abbreviation - row level security entries", "relevant_keys": ["investigation-postgresql-set-session-variables-app-is-superadmin-app-org", "pattern-whenever-a-background-task-or-service-method-calls-db-commit", "learned-rls-session-variables-app-org-id-app-is-superadmin-reset", "fact-rls-policy-on-rx-visits-rx-visits-tenant-isolation-checks", "fact-rls-context-is-set-by-require-clinical-access-via-get-curren", "pattern-in-substitute-nfse-use-db-flush-instead-of-db-commit-be"]}
11
+ {"query": "NFSe fiscal invoice", "description": "Abbreviation + related terms - fiscal document issuance", "relevant_keys": ["investigation-nfse-error-e0240-cep-nao-existe-ou-nao-pertence-ao-municip", "learned-government-nfse-api-e0014-rejects-any-resubmission-of-same-d", "fact-nfse-substitution-has-35-day-limit-calculated-using-brazilia", "fact-nfse-government-api-error-e0014-rejects-any-dps-with-same-se", "fact-nfse-service-description-now-includes-visit-date-in-format", "decision-allow-retry-of-stuck-processing-issuances-by-removing-the-ha", "learned-pynfse-nacional-0-4-0-had-bug-xml-element-subst1-should-b"]}
12
+ {"query": "cursor pointer text selection", "description": "UI pattern - specific CSS interaction issue", "relevant_keys": ["pattern-cursor-pointer-on-tablerow-elements-prevents-text-selection"]}
13
+ {"query": "Portuguese accents i18n", "description": "UI pattern - accent/internationalization issues", "relevant_keys": ["pattern-portuguese-accents-missing-in-several-ui-strings-check-for", "learned-stripe-payment-methods-in-brazil-require-proper-portuguese-a"]}
14
+ {"query": "webhook secret authentication", "description": "Cross-domain - service-to-service auth", "relevant_keys": ["learned-cognitest-assignment-uses-x-webhook-secret-header-for-servic", "decision-unify-on-one-shared-secret-cognitest-webhook-secret-with-o", "pattern-service-to-service-webhook-pattern-graceful-degradation-on", "pattern-service-to-service-endpoints-post-api-cognitest-resource"]}
15
+ {"query": "security phone masking XSS", "description": "Cross-domain - security across different features", "relevant_keys": ["fact-security-considerations-phone-numbers-are-injection-vector", "learned-phone-masking-implementation-verified-with-unit-tests-all-r", "learned-security-through-defense-in-depth-is-more-practical-than-sin", "pattern-pii-in-audit-logs-requires-balancing-privacy-with-operationa"]}
16
+ {"query": "Pydantic serialization validation", "description": "Technical - Pydantic-specific issues", "relevant_keys": ["learned-pydantic-with-from-attributes-true-only-serializes-fields-ex", "investigation-post-api-visits-rxvisits-returned-200-but-pydantic-serializ", "learned-pydantic-field-validator-with-validationinfo-allows-accessin", "learned-pydantic-v2-field-validator-order-can-be-controlled-with-mod"]}
17
+ {"query": "flush instead of commit", "description": "Specific pattern - db.flush vs db.commit", "relevant_keys": ["pattern-in-substitute-nfse-use-db-flush-instead-of-db-commit-be", "pattern-in-routers-that-create-records-and-need-to-re-query-with-rel", "pattern-atomic-onboarding-transaction-pattern-use-db-flush-betwe", "learned-rls-session-variables-app-org-id-app-is-superadmin-reset"]}
18
+ {"query": "GDPR LGPD data retention", "description": "Compliance - privacy regulation entries", "relevant_keys": ["learned-gdpr-lgpd-medical-records-deletion-requires-1-response-wit", "fact-brazilian-lgpd-requires-20-year-minimum-retention-for-medica", "fact-gdpr-article-20-requires-data-portability-in-structured-com", "pattern-gdpr-compliance-requires-multi-phase-implementation-phase-1", "pattern-gdpr-audit-logs-must-contain-metadata-without-pii-log-requ", "investigation-no-deletion-endpoints-exist-currently-patients-and-doctors"]}
19
+ {"query": "CEP address lookup", "description": "Feature-specific - postal code validation", "relevant_keys": ["learned-fact-viacep-api-returns-400-bad-request-when-street-city-co", "investigation-nfse-error-e0240-cep-nao-existe-ou-nao-pertence-ao-municip", "fact-brasilapi-open-cep-service-does-not-return-ibge-city-codes", "pattern-cep-validation-uses-sync-wrapper-validate-cep-sync-that-ru"]}
20
+ {"query": "structured logging event names", "description": "Logging patterns - event naming conventions", "relevant_keys": ["pattern-event-names-use-snake-case-past-tense-domain-prefix-when-h", "pattern-migrate-logging-with-event-names-snake-case-past-tense-do", "pattern-use-logger-bind-for-request-scoped-context-with-entity-ids", "learned-structured-logging-epic-pattern-wave-1-deps-config-prin", "decision-downgrade-router-inclusion-and-static-file-discovery-logs-to"]}
21
+ {"query": "CogniTest credits free", "description": "Feature - credits system and free tier", "relevant_keys": ["fact-free-credits-system-is-broken-new-orgs-registered-via-meds", "learned-frontend-credits-widget-complete-created-creditswidget-svel", "learned-backend-integration-complete-modified-create-session-endpoi", "learned-cognitest-pricing-uses-lazy-initialization-call-post-api"]}
22
+ {"query": "environment variables production deploy", "description": "DevOps - env var configuration for deployment", "relevant_keys": ["fact-for-prod-builds-set-env-inline-vite-cognitest-api-url-http", "pattern-vite-bakes-vite-env-vars-into-the-js-bundle-at-build-time", "decision-used-env-production-as-single-source-of-truth-for-prod-fron", "learned-fastapi-s-pydantic-settings-are-loaded-at-startup-changing", "fact-vite-api-url-is-only-used-in-vite-config-ts-dev-proxy-not-i", "pattern-when-one-frontend-needs-to-call-another-service-s-api-both"]}
23
+ {"query": "React useCallback re-render", "description": "React-specific performance pattern", "relevant_keys": ["learned-functions-created-during-render-cause-unnecessary-re-renders", "learned-controlled-components-should-not-maintain-internal-state-for", "learned-react-keys-must-be-unique-across-all-items-in-a-list-not-ju"]}
24
+ {"query": "Alembic migration model columns", "description": "Database migration patterns", "relevant_keys": ["learned-when-adding-columns-via-alembic-migration-must-also-add-cor", "pattern-backend-schema-changes-require-1-model-update-2-alembic", "decision-added-phone-and-phone-country-columns-to-user-model-at-lines", "decision-converted-cognitest-from-varchar-36-to-native-postgresql-uu"]}
25
+ {"query": "WhatsApp E.164 format", "description": "Integration - WhatsApp phone formatting requirements", "relevant_keys": ["investigation-whatsapp-business-api-requires-e-164-format-for-all-phone-nu", "investigation-e-164-format-is-itu-t-international-phone-standard-structur", "fact-whatsapp-api-excludes-certain-countries-from-messaging-crim", "pattern-best-practices-for-e-164-normalization-before-whatsapp-api-c", "learned-e-164-formatting-should-happen-at-validation-time-not-at-ap"]}