@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,514 @@
1
+ #!/usr/bin/env bash
2
+ set -e
3
+
4
+ # Installation Testing Suite
5
+ # Tests install.sh across all three platforms
6
+
7
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
+ PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
9
+ TEST_ROOT="/tmp/beads-install-test-$(date +%s)"
10
+
11
+ PASSED=0
12
+ FAILED=0
13
+
14
+ pass() {
15
+ ((PASSED++))
16
+ echo "[PASS] $1"
17
+ }
18
+
19
+ fail() {
20
+ ((FAILED++))
21
+ echo "[FAIL] $1: $2"
22
+ }
23
+
24
+ cleanup() {
25
+ rm -rf "$TEST_ROOT"
26
+ }
27
+
28
+ trap cleanup EXIT
29
+
30
+ echo " Installation Test Suite"
31
+ echo "Testing lavra installer across all platforms..."
32
+ echo
33
+
34
+ # ==============================================================================
35
+ # Test 1: Claude Code Installation
36
+ # ==============================================================================
37
+ echo " Test 1: Claude Code Installation"
38
+
39
+ CLAUDE_TEST="$TEST_ROOT/claude-test"
40
+ mkdir -p "$CLAUDE_TEST"
41
+ cd "$CLAUDE_TEST"
42
+
43
+ # Initialize beads and git
44
+ git init -q
45
+ bd init -q 2>/dev/null || true
46
+
47
+ # Run installer (default platform)
48
+ if bash "$PROJECT_ROOT/install.sh" "$CLAUDE_TEST" >/dev/null 2>&1; then
49
+ pass "Installer completed for Claude Code"
50
+ else
51
+ fail "Claude Code install" "Installer failed"
52
+ fi
53
+
54
+ # Verify directory structure (hooks are required, commands/agents/skills may be global)
55
+ if [[ -d ".claude/hooks" ]]; then
56
+ if [[ -d ".claude/commands" || -d "$HOME/.claude/commands" ]]; then
57
+ pass "Claude Code directory structure created"
58
+ else
59
+ pass "Claude Code hooks installed (commands/agents/skills are global)"
60
+ fi
61
+ else
62
+ fail "Claude Code structure" "Missing .claude/hooks directory"
63
+ fi
64
+
65
+ # Verify hook files
66
+ if [[ -f ".claude/hooks/auto-recall.sh" && -f ".claude/hooks/memory-capture.sh" && -f ".claude/hooks/subagent-wrapup.sh" ]]; then
67
+ pass "Claude Code hook files installed"
68
+ else
69
+ fail "Claude Code hooks" "Missing hook files"
70
+ fi
71
+
72
+ # Verify settings.json exists and has hooks
73
+ if [[ -f ".claude/settings.json" ]]; then
74
+ if grep -q "SessionStart" ".claude/settings.json" && \
75
+ grep -q "PostToolUse" ".claude/settings.json" && \
76
+ grep -q "SubagentStop" ".claude/settings.json"; then
77
+ pass "Claude Code hooks configured in settings.json"
78
+ else
79
+ fail "Claude Code settings" "Hooks not configured"
80
+ fi
81
+ else
82
+ fail "Claude Code settings" "settings.json not created"
83
+ fi
84
+
85
+ # Verify commands (should be 25+ in project OR global)
86
+ # Follow symlinks with -L flag
87
+ COMMAND_COUNT=$(find .claude/commands -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
88
+ GLOBAL_COMMAND_COUNT=$(find -L "$HOME/.claude/commands" -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
89
+
90
+ if [[ "$COMMAND_COUNT" -ge 25 ]]; then
91
+ pass "Claude Code commands installed locally ($COMMAND_COUNT files)"
92
+ elif [[ "$GLOBAL_COMMAND_COUNT" -ge 25 ]]; then
93
+ pass "Claude Code commands installed globally ($GLOBAL_COMMAND_COUNT files)"
94
+ else
95
+ fail "Claude Code commands" "Expected 25+, found $COMMAND_COUNT local, $GLOBAL_COMMAND_COUNT global"
96
+ fi
97
+
98
+ # Verify agents (should be 28+ in project OR global)
99
+ # Follow symlinks with -L flag
100
+ AGENT_COUNT=$(find .claude/agents -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
101
+ GLOBAL_AGENT_COUNT=$(find -L "$HOME/.claude/agents" -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
102
+
103
+ if [[ "$AGENT_COUNT" -ge 30 ]]; then
104
+ pass "Claude Code agents installed locally ($AGENT_COUNT files)"
105
+ elif [[ "$GLOBAL_AGENT_COUNT" -ge 28 ]]; then
106
+ pass "Claude Code agents installed globally ($GLOBAL_AGENT_COUNT files)"
107
+ else
108
+ fail "Claude Code agents" "Expected 30+, found $AGENT_COUNT local, $GLOBAL_AGENT_COUNT global"
109
+ fi
110
+
111
+ # Verify skills (should be 15+ in project OR global)
112
+ # Follow symlinks with -L flag
113
+ SKILL_COUNT=$(find .claude/skills -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
114
+ GLOBAL_SKILL_COUNT=$(find -L "$HOME/.claude/skills" -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
115
+
116
+ if [[ "$SKILL_COUNT" -ge 15 ]]; then
117
+ pass "Claude Code skills installed locally ($SKILL_COUNT files)"
118
+ elif [[ "$GLOBAL_SKILL_COUNT" -ge 15 ]]; then
119
+ pass "Claude Code skills installed globally ($GLOBAL_SKILL_COUNT files)"
120
+ else
121
+ fail "Claude Code skills" "Expected 15+, found $SKILL_COUNT local, $GLOBAL_SKILL_COUNT global"
122
+ fi
123
+
124
+ # Verify MCP server config (optional for project-specific installs)
125
+ if [[ -f ".mcp.json" ]]; then
126
+ if grep -q "context7" ".mcp.json"; then
127
+ pass "Claude Code MCP server configured"
128
+ else
129
+ fail "Claude Code MCP" "context7 not found in config"
130
+ fi
131
+ elif [[ -f "$HOME/.claude/.mcp.json" ]]; then
132
+ if grep -q "context7" "$HOME/.claude/.mcp.json"; then
133
+ pass "Claude Code MCP server configured globally"
134
+ else
135
+ pass "Claude Code MCP config exists but context7 not configured"
136
+ fi
137
+ else
138
+ pass "Claude Code MCP not configured (optional)"
139
+ fi
140
+
141
+ # ==============================================================================
142
+ # Test 2: OpenCode Installation
143
+ # ==============================================================================
144
+ echo
145
+ echo " Test 2: OpenCode Installation"
146
+
147
+ OPENCODE_TEST="$TEST_ROOT/opencode-test"
148
+ mkdir -p "$OPENCODE_TEST"
149
+ cd "$OPENCODE_TEST"
150
+
151
+ git init -q
152
+ bd init -q 2>/dev/null || true
153
+
154
+ # Run installer with --opencode flag (--yes skips interactive model selection)
155
+ if bash "$PROJECT_ROOT/install.sh" --opencode --yes "$OPENCODE_TEST" >/dev/null 2>&1; then
156
+ pass "Installer completed for OpenCode"
157
+ else
158
+ fail "OpenCode install" "Installer failed"
159
+ fi
160
+
161
+ # Verify directory structure (project install goes to .opencode/plugins/lavra)
162
+ if [[ -d ".opencode/plugins/lavra" ]]; then
163
+ pass "OpenCode directory structure created"
164
+ else
165
+ fail "OpenCode structure" "Missing plugin directory"
166
+ fi
167
+
168
+ # Verify plugin.ts exists
169
+ if [[ -f ".opencode/plugins/lavra/plugin.ts" ]]; then
170
+ pass "OpenCode plugin.ts installed"
171
+ else
172
+ fail "OpenCode plugin" "plugin.ts missing"
173
+ fi
174
+
175
+ # Verify package.json exists
176
+ if [[ -f ".opencode/plugins/lavra/package.json" ]]; then
177
+ pass "OpenCode package.json installed"
178
+ else
179
+ fail "OpenCode package" "package.json missing"
180
+ fi
181
+
182
+ # Verify hook files (project install: .opencode/hooks/)
183
+ if [[ -f ".opencode/hooks/auto-recall.sh" ]]; then
184
+ pass "OpenCode hook files installed"
185
+ else
186
+ fail "OpenCode hooks" "Hook files missing"
187
+ fi
188
+
189
+ # Verify AGENTS.md exists (OpenCode uses this for beads workflow)
190
+ if [[ -f "AGENTS.md" ]]; then
191
+ # Should contain beads workflow instructions
192
+ if grep -q "bd ready" "AGENTS.md"; then
193
+ pass "OpenCode AGENTS.md created with workflow instructions"
194
+ else
195
+ fail "OpenCode AGENTS" "AGENTS.md missing workflow content"
196
+ fi
197
+ else
198
+ fail "OpenCode AGENTS" "AGENTS.md not created"
199
+ fi
200
+
201
+ # ==============================================================================
202
+ # Test 3: Gemini Installation
203
+ # ==============================================================================
204
+ echo
205
+ echo " Test 3: Gemini Installation"
206
+
207
+ GEMINI_TEST="$TEST_ROOT/gemini-test"
208
+ mkdir -p "$GEMINI_TEST"
209
+ cd "$GEMINI_TEST"
210
+
211
+ git init -q
212
+ bd init -q 2>/dev/null || true
213
+
214
+ # Run installer with --gemini flag
215
+ if bash "$PROJECT_ROOT/install.sh" --gemini "$GEMINI_TEST" >/dev/null 2>&1; then
216
+ pass "Installer completed for Gemini"
217
+ else
218
+ fail "Gemini install" "Installer failed"
219
+ fi
220
+
221
+ # Verify directory structure (Gemini installs to project root)
222
+ if [[ -d "hooks" ]]; then
223
+ pass "Gemini directory structure created"
224
+ else
225
+ fail "Gemini structure" "Missing hooks directory"
226
+ fi
227
+
228
+ # Verify commands are .toml format (Gemini-specific)
229
+ TOML_COUNT=$(find commands -name "*.toml" 2>/dev/null | wc -l | tr -d ' ')
230
+ if [[ "$TOML_COUNT" -ge 25 ]]; then
231
+ pass "Gemini commands installed as .toml ($TOML_COUNT files)"
232
+ else
233
+ fail "Gemini commands" "Expected 25+ .toml files, found $TOML_COUNT"
234
+ fi
235
+
236
+ # Verify template syntax conversion ($ARGUMENTS → {{args}})
237
+ if grep -q "{{args}}" commands/*.toml 2>/dev/null; then
238
+ pass "Gemini template syntax converted"
239
+ else
240
+ fail "Gemini templates" "Template conversion not applied"
241
+ fi
242
+
243
+ # Verify agents (should be .md for Gemini)
244
+ GEMINI_AGENT_COUNT=$(find agents -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
245
+ if [[ "$GEMINI_AGENT_COUNT" -ge 30 ]]; then
246
+ pass "Gemini agents installed ($GEMINI_AGENT_COUNT files)"
247
+ else
248
+ fail "Gemini agents" "Expected 30+, found $GEMINI_AGENT_COUNT"
249
+ fi
250
+
251
+ # Verify skills
252
+ GEMINI_SKILL_COUNT=$(find skills -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
253
+ if [[ "$GEMINI_SKILL_COUNT" -ge 15 ]]; then
254
+ pass "Gemini skills installed ($GEMINI_SKILL_COUNT files)"
255
+ else
256
+ fail "Gemini skills" "Expected 15+, found $GEMINI_SKILL_COUNT"
257
+ fi
258
+
259
+ # ==============================================================================
260
+ # Test 4: Cortex Code Installation
261
+ # ==============================================================================
262
+ echo
263
+ echo " Test 4: Cortex Code Installation"
264
+
265
+ CORTEX_TEST="$TEST_ROOT/cortex-test"
266
+ mkdir -p "$CORTEX_TEST"
267
+ cd "$CORTEX_TEST"
268
+
269
+ git init -q
270
+ bd init -q 2>/dev/null || true
271
+
272
+ # Save and override HOME for test isolation
273
+ # The installer writes to ~/.snowflake/cortex/hooks.json (real global config)
274
+ REAL_HOME="$HOME"
275
+ export HOME="$TEST_ROOT/fake-home"
276
+ mkdir -p "$HOME/.snowflake/cortex"
277
+
278
+ # Run installer with --cortex flag
279
+ if bash "$PROJECT_ROOT/install.sh" --cortex "$CORTEX_TEST" >/dev/null 2>&1; then
280
+ pass "Installer completed for Cortex Code"
281
+ else
282
+ fail "Cortex Code install" "Installer failed"
283
+ fi
284
+
285
+ # Verify directory structure
286
+ if [[ -d ".cortex/hooks" ]]; then
287
+ pass "Cortex Code directory structure created"
288
+ else
289
+ fail "Cortex Code structure" "Missing .cortex/hooks directory"
290
+ fi
291
+
292
+ # Verify hook files
293
+ if [[ -f ".cortex/hooks/auto-recall.sh" && -f ".cortex/hooks/memory-capture.sh" && -f ".cortex/hooks/subagent-wrapup.sh" ]]; then
294
+ pass "Cortex Code hook files installed"
295
+ else
296
+ fail "Cortex Code hooks" "Missing hook files"
297
+ fi
298
+
299
+ # Verify teammate-idle-check.sh is NOT present (TeammateIdle not supported)
300
+ if [[ ! -f ".cortex/hooks/teammate-idle-check.sh" ]]; then
301
+ pass "Cortex Code correctly excludes teammate-idle-check.sh"
302
+ else
303
+ fail "Cortex Code hooks" "teammate-idle-check.sh should not be installed (TeammateIdle not supported)"
304
+ fi
305
+
306
+ # Verify hooks.json exists and has correct entries
307
+ if [[ -f "$HOME/.snowflake/cortex/hooks.json" ]]; then
308
+ if grep -q "SessionStart" "$HOME/.snowflake/cortex/hooks.json" && \
309
+ grep -q "PostToolUse" "$HOME/.snowflake/cortex/hooks.json" && \
310
+ grep -q "SubagentStop" "$HOME/.snowflake/cortex/hooks.json"; then
311
+ pass "Cortex Code hooks configured in hooks.json"
312
+ else
313
+ fail "Cortex Code hooks.json" "Missing SessionStart, PostToolUse, or SubagentStop entries"
314
+ fi
315
+ else
316
+ fail "Cortex Code hooks.json" "hooks.json not created at $HOME/.snowflake/cortex/hooks.json"
317
+ fi
318
+
319
+ # Verify commands (should be 25+)
320
+ CMD_COUNT=$(find .cortex/commands -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
321
+ if [[ "$CMD_COUNT" -ge 25 ]]; then
322
+ pass "Cortex Code commands installed ($CMD_COUNT files)"
323
+ else
324
+ fail "Cortex Code commands" "Expected 25+, found $CMD_COUNT"
325
+ fi
326
+
327
+ # Verify agents (should be 28+)
328
+ AGENT_COUNT=$(find .cortex/agents -name "*.md" 2>/dev/null | wc -l | tr -d ' ')
329
+ if [[ "$AGENT_COUNT" -ge 30 ]]; then
330
+ pass "Cortex Code agents installed ($AGENT_COUNT files)"
331
+ else
332
+ fail "Cortex Code agents" "Expected 30+, found $AGENT_COUNT"
333
+ fi
334
+
335
+ # Verify skills (should be 15+)
336
+ SKILL_COUNT=$(find .cortex/skills -name "SKILL.md" 2>/dev/null | wc -l | tr -d ' ')
337
+ if [[ "$SKILL_COUNT" -ge 15 ]]; then
338
+ pass "Cortex Code skills installed ($SKILL_COUNT files)"
339
+ else
340
+ fail "Cortex Code skills" "Expected 15+, found $SKILL_COUNT"
341
+ fi
342
+
343
+ # Verify MCP is NOT installed (skipped for Cortex)
344
+ if [[ ! -f ".mcp.json" ]]; then
345
+ pass "Cortex Code correctly skips MCP config"
346
+ else
347
+ fail "Cortex Code MCP" ".mcp.json should not exist for Cortex installs"
348
+ fi
349
+
350
+ # Verify generation headers
351
+ if grep -rl "Generated by lavra" .cortex/commands/ >/dev/null 2>&1; then
352
+ pass "Cortex Code generation headers present"
353
+ else
354
+ fail "Cortex Code headers" "No 'Generated by lavra' header found in commands"
355
+ fi
356
+
357
+ # Restore real HOME
358
+ export HOME="$REAL_HOME"
359
+
360
+ # ==============================================================================
361
+ # Test 5: New Feature Provisioning (v0.7.0)
362
+ # ==============================================================================
363
+ echo
364
+ echo " Test 5: New Feature Provisioning"
365
+
366
+ # Use the Claude test directory which already has a full install
367
+ cd "$CLAUDE_TEST"
368
+
369
+ # F6: lavra.json provisioned by installer
370
+ if [[ -f ".lavra/config/lavra.json" ]]; then
371
+ if grep -q '"goal_verification"' ".lavra/config/lavra.json" && \
372
+ grep -q '"max_parallel_agents"' ".lavra/config/lavra.json" && \
373
+ grep -q '"commit_granularity"' ".lavra/config/lavra.json"; then
374
+ pass "lavra.json provisioned with all expected keys"
375
+ else
376
+ fail "lavra.json content" "Missing expected configuration keys"
377
+ fi
378
+ else
379
+ fail "lavra.json" "Not created by installer"
380
+ fi
381
+
382
+ # F3: session-state.md in .lavra/.gitignore (folder-level, with memory/ prefix)
383
+ if [[ -f ".lavra/.gitignore" ]]; then
384
+ if grep -q "memory/session-state.md" ".lavra/.gitignore"; then
385
+ pass "session-state.md in .lavra/.gitignore"
386
+ else
387
+ fail "session-state gitignore" "memory/session-state.md not in .lavra/.gitignore"
388
+ fi
389
+ else
390
+ fail "memory .gitignore" ".lavra/.gitignore not found"
391
+ fi
392
+
393
+ # F1: goal-verifier agent exists
394
+ if [[ -f ".claude/agents/review/goal-verifier.md" ]]; then
395
+ pass "goal-verifier agent installed"
396
+ else
397
+ fail "goal-verifier" "Agent file not installed"
398
+ fi
399
+
400
+ # F6: lavra.json is valid JSON
401
+ if jq . ".lavra/config/lavra.json" >/dev/null 2>&1; then
402
+ pass "lavra.json is valid JSON"
403
+ else
404
+ fail "lavra.json validation" "File is not valid JSON"
405
+ fi
406
+
407
+ # F6: lavra.json idempotent (re-run installer, should not overwrite)
408
+ ORIGINAL_CONTENT=$(cat ".lavra/config/lavra.json")
409
+ bash "$PROJECT_ROOT/install.sh" "$CLAUDE_TEST" >/dev/null 2>&1
410
+ AFTER_CONTENT=$(cat ".lavra/config/lavra.json")
411
+ if [[ "$ORIGINAL_CONTENT" == "$AFTER_CONTENT" ]]; then
412
+ pass "lavra.json idempotent on re-install"
413
+ else
414
+ fail "lavra.json idempotency" "File was overwritten on re-install"
415
+ fi
416
+
417
+ # ==============================================================================
418
+ # Test 6: Migration (upgrade from .beads/ to .lavra/)
419
+ # ==============================================================================
420
+ echo
421
+ echo " Test 6: Migration (.beads/ → .lavra/)"
422
+
423
+ MIGRATE_TEST="$TEST_ROOT/migrate-test"
424
+ mkdir -p "$MIGRATE_TEST"
425
+ cd "$MIGRATE_TEST"
426
+ git init -q
427
+ bd init -q 2>/dev/null || true
428
+
429
+ # Simulate existing 0.7.0 Lavra data in .beads/
430
+ mkdir -p .beads/memory .beads/config .beads/retros
431
+ echo '{"key":"test-key","type":"learned","content":"Test migration knowledge","tags":["test"],"ts":1000000}' > .beads/memory/knowledge.jsonl
432
+ echo '{"workflow":{"research":true,"plan_review":true}}' > .beads/config/lavra.json
433
+ echo '{"date":"2026-01-01","items":[]}' > .beads/retros/2026-01-01.json
434
+ # Add a SQLite file that must NOT be migrated
435
+ touch .beads/memory/knowledge.db
436
+
437
+ LINES_BEFORE=$(wc -l < .beads/memory/knowledge.jsonl | tr -d ' ')
438
+
439
+ bash "$PROJECT_ROOT/install.sh" "$MIGRATE_TEST" >/dev/null 2>&1
440
+
441
+ # M1: knowledge.jsonl migrated with correct content
442
+ if [[ -f ".lavra/memory/knowledge.jsonl" ]]; then
443
+ LINES_AFTER=$(wc -l < .lavra/memory/knowledge.jsonl | tr -d ' ')
444
+ if [[ "$LINES_AFTER" -ge "$LINES_BEFORE" ]] && grep -q "test-key" .lavra/memory/knowledge.jsonl; then
445
+ pass "Migration: knowledge.jsonl copied with data intact"
446
+ else
447
+ fail "Migration: knowledge.jsonl content" "Line count mismatch or key not found (before=$LINES_BEFORE after=$LINES_AFTER)"
448
+ fi
449
+ else
450
+ fail "Migration: knowledge.jsonl" ".lavra/memory/knowledge.jsonl not created"
451
+ fi
452
+
453
+ # M2: config migrated
454
+ if [[ -f ".lavra/config/lavra.json" ]] && grep -q '"plan_review"' .lavra/config/lavra.json; then
455
+ pass "Migration: lavra.json config copied"
456
+ else
457
+ fail "Migration: config" ".lavra/config/lavra.json missing or wrong content"
458
+ fi
459
+
460
+ # M3: retros migrated
461
+ if [[ -f ".lavra/retros/2026-01-01.json" ]]; then
462
+ pass "Migration: retros copied"
463
+ else
464
+ fail "Migration: retros" ".lavra/retros/2026-01-01.json not found"
465
+ fi
466
+
467
+ # M4: .beads/ originals preserved (not deleted)
468
+ if [[ -f ".beads/memory/knowledge.jsonl" ]]; then
469
+ pass "Migration: .beads/ originals preserved"
470
+ else
471
+ fail "Migration: .beads/ preservation" ".beads/memory/knowledge.jsonl was deleted"
472
+ fi
473
+
474
+ # M5: SQLite cache NOT migrated
475
+ if [[ ! -f ".lavra/memory/knowledge.db" ]]; then
476
+ pass "Migration: SQLite cache not copied"
477
+ else
478
+ fail "Migration: SQLite exclusion" "knowledge.db was copied to .lavra/memory/"
479
+ fi
480
+
481
+ # M6: idempotency — second install skips migration, data unchanged
482
+ LINES_BEFORE_SECOND=$(wc -l < .lavra/memory/knowledge.jsonl | tr -d ' ')
483
+ bash "$PROJECT_ROOT/install.sh" "$MIGRATE_TEST" >/dev/null 2>&1
484
+ LINES_AFTER_SECOND=$(wc -l < .lavra/memory/knowledge.jsonl | tr -d ' ')
485
+ if [[ "$LINES_BEFORE_SECOND" -eq "$LINES_AFTER_SECOND" ]]; then
486
+ pass "Migration: idempotent (second install does not overwrite)"
487
+ else
488
+ fail "Migration: idempotency" "knowledge.jsonl changed on second install (before=$LINES_BEFORE_SECOND after=$LINES_AFTER_SECOND)"
489
+ fi
490
+
491
+ # ==============================================================================
492
+ # Test 7: Uninstallation (Optional - requires user confirmation)
493
+ # ==============================================================================
494
+ echo
495
+ echo " Test 7: Uninstallation (skipped - requires interactive confirmation)"
496
+ echo " [WARN] Uninstallers require confirmation prompt - test manually if needed"
497
+
498
+ # ==============================================================================
499
+ # Summary
500
+ # ==============================================================================
501
+ echo
502
+ echo "======================================================================"
503
+ echo "Passed: $PASSED"
504
+ echo "Failed: $FAILED"
505
+ echo "======================================================================"
506
+
507
+ if [[ "$FAILED" -gt 0 ]]; then
508
+ echo
509
+ echo " Some installation tests failed"
510
+ exit 1
511
+ else
512
+ echo
513
+ echo " All installation tests passed!"
514
+ fi