@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,345 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Apply context optimizations from compound-engineering-plugin PR #161.
4
+ Phase 1: Trim agent descriptions and move examples to body.
5
+ Phase 2: Add disable-model-invocation to manual commands.
6
+ Phase 3: Add disable-model-invocation to manual skills.
7
+ """
8
+ import re
9
+ from pathlib import Path
10
+ from typing import Dict, Tuple
11
+
12
+ BASE = Path("/Users/rbm/Documents/projects/lavra/plugins/lavra")
13
+
14
+ # Phase 1: Agent descriptions (based on compound-engineering patterns)
15
+ AGENT_DESCRIPTIONS = {
16
+ # Review agents (14)
17
+ "kieran-rails-reviewer": "Reviews Rails code with an extremely high quality bar for conventions, clarity, and maintainability. Use after implementing features, modifying code, or creating new Rails components.",
18
+ "agent-native-reviewer": "Reviews code for agent-native compliance - ensuring user actions have agent equivalents and agents see what users see. Checks action parity, context parity, and shared workspace design.",
19
+ "architecture-strategist": "Analyzes code changes from an architectural perspective - evaluating system design, component boundaries, SOLID compliance, and dependency analysis. Use for structural changes, new services, or refactorings.",
20
+ "code-simplicity-reviewer": "Final review ensuring code is as simple and minimal as possible. Identifies unnecessary complexity, challenges premature abstractions, applies YAGNI rigorously. Use after implementation.",
21
+ "data-integrity-guardian": "Reviews database migrations, data models, and persistent data manipulation. Checks migration safety, validates constraints, verifies referential integrity, audits privacy compliance.",
22
+ "data-migration-expert": "Reviews PRs touching database migrations, data backfills, or production data transformations. Validates ID mappings, checks for swapped values, verifies rollback safety.",
23
+ "deployment-verification-agent": "Produces pre/post-deploy checklists with SQL verification queries, rollback procedures, and monitoring plans. Use when PRs touch production data, migrations, or behavior that could silently fail.",
24
+ "dhh-rails-reviewer": "Brutally honest Rails code review from DHH's perspective. Identifies anti-patterns, JavaScript framework contamination, unnecessary abstractions, and Rails convention violations.",
25
+ "julik-frontend-races-reviewer": "Reviews JavaScript and Stimulus code for race conditions, timing issues, and DOM irregularities. Checks Hotwire/Turbo compatibility, event handler cleanup, timer cancellation. Use after JavaScript changes.",
26
+ "kieran-python-reviewer": "Python code review enforcing strict conventions: mandatory type hints (modern 3.10+ syntax), Pythonic patterns, proper module organization, testability, naming clarity. Use after Python changes.",
27
+ "kieran-typescript-reviewer": "TypeScript code review enforcing strict conventions: no-any policy, proper type safety, modern TS 5+ patterns, import organization, testability, naming clarity. Use after TypeScript changes.",
28
+ "pattern-recognition-specialist": "Analyzes code for design patterns, anti-patterns, naming conventions, code duplication, and architectural boundary violations. Produces structured reports with actionable refactoring recommendations.",
29
+ "performance-oracle": "Analyzes code for performance bottlenecks, algorithmic complexity, N+1 queries, memory leaks, caching opportunities, and scalability concerns. Projects performance at 10x/100x/1000x volumes.",
30
+ "security-sentinel": "Performs security audits covering input validation, SQL injection, XSS, authentication/authorization, hardcoded secrets, and OWASP Top 10 compliance. Use for code handling user input, auth, payments, or sensitive data.",
31
+
32
+ # Research agents (5)
33
+ "best-practices-researcher": "Researches external best practices, documentation, and examples for any technology, framework, or development practice. Checks available skills first, then official docs and community standards.",
34
+ "framework-docs-researcher": "Gathers comprehensive documentation and best practices for frameworks, libraries, or project dependencies. Fetches official docs via Context7, explores source code, checks for API deprecations.",
35
+ "git-history-analyzer": "Analyzes git history to understand code evolution, trace origins of specific code patterns, identify key contributors and their expertise areas, and extract development patterns from commit history.",
36
+ "learnings-researcher": "Searches institutional learnings in .lavra/memory/knowledge.jsonl for relevant past solutions. Finds applicable patterns, gotchas, and lessons learned to prevent repeated mistakes.",
37
+ "repo-research-analyst": "Conducts thorough research on repository structure, documentation, and patterns. Analyzes architecture files, examines GitHub issues, reviews contribution guidelines, discovers templates.",
38
+
39
+ # Design agents (3)
40
+ "design-implementation-reviewer": "Verifies UI implementations match Figma design specifications. Use after HTML/CSS/React components are created or modified to compare implementation against Figma and identify discrepancies.",
41
+ "design-iterator": "Iteratively refines UI design through N screenshot-analyze-improve cycles. Use PROACTIVELY when design changes aren't coming together after 1-2 attempts, or when user requests iterative refinement.",
42
+ "figma-design-sync": "Detects and fixes visual differences between web implementation and Figma design. Use iteratively when syncing implementation to match Figma specs.",
43
+
44
+ # Workflow agents (5)
45
+ "bug-reproduction-validator": "Systematically attempts to reproduce reported bugs, validates steps to reproduce, and confirms whether behavior deviates from expected functionality. Classifies issues appropriately.",
46
+ "every-style-editor": "Reviews and edits text content to conform to Every's house style guide - checking headline casing, company usage, adverbs, active voice, number formatting, and punctuation rules.",
47
+ "lint": "Runs linting and code quality checks on Ruby and ERB files. Use before pushing to origin to catch style violations, syntax errors, and code quality issues.",
48
+ "pr-comment-resolver": "Addresses pull request review comments by implementing requested changes and reporting back. Handles understanding the comment, implementing fixes, verifying correctness, and providing resolution summary.",
49
+ "spec-flow-analyzer": "Analyzes specifications, plans, and feature descriptions to map all possible user flows, identify gaps and ambiguities, and surface critical questions. Use when reviewing feature specs or validating implementation plans.",
50
+
51
+ # Docs agents (1)
52
+ "ankane-readme-writer": "Creates or updates README files following Ankane-style template for Ruby gems. Enforces imperative voice, sentences under 15 words, proper section ordering, and single-purpose code fences.",
53
+ }
54
+
55
+ # Phase 2: Commands that should have disable-model-invocation: true
56
+ # (Manual commands with side effects that shouldn't be auto-suggested)
57
+ DISABLE_COMMANDS = [
58
+ "lfg",
59
+ "lavra-checkpoint",
60
+ "deploy-docs",
61
+ "release-docs",
62
+ "changelog",
63
+ "lavra-triage",
64
+ "test-browser",
65
+ "xcode-test",
66
+ "report-bug",
67
+ "reproduce-bug",
68
+ "resolve-pr-parallel",
69
+ "resolve-todo-parallel",
70
+ "generate-command",
71
+ "heal-skill",
72
+ "feature-video",
73
+ "agent-native-audit",
74
+ "create-agent-skill",
75
+ "session-start",
76
+ "session-end",
77
+ "cleanproject",
78
+ "cleanup-types",
79
+ "context-cache",
80
+ "find-todos",
81
+ ]
82
+
83
+ # Phase 3: Skills that should have disable-model-invocation: true
84
+ DISABLE_SKILLS = [
85
+ "lavra-knowledge", # compound-docs equivalent
86
+ "create-agent-skills", # matches their pattern
87
+ "file-todos", # matches their pattern
88
+ "skill-creator", # matches their pattern
89
+ ]
90
+
91
+ def extract_frontmatter_and_body(content: str) -> Tuple[str, str]:
92
+ """Extract YAML frontmatter and body from markdown file."""
93
+ match = re.match(r'^---\n(.*?)\n---\n(.*)$', content, re.DOTALL)
94
+ if not match:
95
+ raise ValueError("Could not parse frontmatter")
96
+ return match.group(1), match.group(2)
97
+
98
+ def parse_frontmatter(frontmatter: str) -> Dict[str, str]:
99
+ """Parse YAML frontmatter into dict, handling quoted multiline strings."""
100
+ fields = {}
101
+ current_key = None
102
+ current_value = []
103
+ in_quotes = False
104
+
105
+ for line in frontmatter.split('\n'):
106
+ # Check if this is a new key
107
+ if ':' in line and not line.startswith(' ') and not in_quotes:
108
+ # Save previous key if exists
109
+ if current_key:
110
+ value = '\n'.join(current_value).strip()
111
+ # Remove surrounding quotes if present
112
+ if value.startswith('"') and value.endswith('"'):
113
+ value = value[1:-1]
114
+ fields[current_key] = value
115
+
116
+ # Start new key
117
+ key, value = line.split(':', 1)
118
+ current_key = key.strip()
119
+ value = value.strip()
120
+
121
+ # Check if value starts with a quote
122
+ if value.startswith('"'):
123
+ in_quotes = True
124
+ if value.endswith('"') and len(value) > 1:
125
+ # Single-line quoted value
126
+ in_quotes = False
127
+ current_value = [value]
128
+ else:
129
+ current_value = [value]
130
+ else:
131
+ current_value = [value] if value else []
132
+ elif current_key:
133
+ # Continuation of current value
134
+ current_value.append(line)
135
+ if in_quotes and line.rstrip().endswith('"'):
136
+ in_quotes = False
137
+
138
+ # Save last key
139
+ if current_key:
140
+ value = '\n'.join(current_value).strip()
141
+ if value.startswith('"') and value.endswith('"'):
142
+ value = value[1:-1]
143
+ fields[current_key] = value
144
+
145
+ return fields
146
+
147
+ def build_frontmatter(fields: Dict[str, str]) -> str:
148
+ """Build YAML frontmatter from dict."""
149
+ lines = ['---']
150
+ for key, value in fields.items():
151
+ if not value:
152
+ lines.append(f'{key}:')
153
+ elif '\n' in value or len(value) > 80 or '"' in value:
154
+ # Multiline or long string - use quoted format
155
+ escaped = value.replace('"', '\\"')
156
+ lines.append(f'{key}: "{escaped}"')
157
+ else:
158
+ lines.append(f'{key}: {value}')
159
+ lines.append('---')
160
+ return '\n'.join(lines)
161
+
162
+ def remove_delegation_examples_section(body: str) -> str:
163
+ """Remove ## Delegation Examples section from body."""
164
+ # Remove the section header and all examples under it until next ## or end
165
+ pattern = r'## Delegation Examples\s*\n\n(?:<example>.*?</example>\s*\n*)*'
166
+ return re.sub(pattern, '', body, flags=re.DOTALL)
167
+
168
+ def extract_examples_from_body(body: str) -> list:
169
+ """Extract all <example> blocks from body."""
170
+ pattern = r'<example>.*?</example>'
171
+ return re.findall(pattern, body, re.DOTALL)
172
+
173
+ def process_agent(file_path: Path, new_description: str) -> None:
174
+ """Process a single agent file."""
175
+ print(f" Processing {file_path.relative_to(BASE)}...")
176
+
177
+ content = file_path.read_text()
178
+ frontmatter, body = extract_frontmatter_and_body(content)
179
+ fields = parse_frontmatter(frontmatter)
180
+
181
+ # Extract examples from body if they exist
182
+ examples = extract_examples_from_body(body)
183
+
184
+ # Update description
185
+ old_desc_len = len(fields.get('description', ''))
186
+ fields['description'] = new_description
187
+
188
+ # Remove ## Delegation Examples section from body
189
+ body = remove_delegation_examples_section(body)
190
+
191
+ # Add examples section to body if examples exist
192
+ if examples:
193
+ examples_section = '<examples>\n' + '\n\n'.join(examples) + '\n</examples>\n\n'
194
+ body = examples_section + body
195
+
196
+ # Rebuild file
197
+ new_frontmatter = build_frontmatter(fields)
198
+ new_content = f"{new_frontmatter}\n{body}"
199
+
200
+ file_path.write_text(new_content)
201
+ print(f" ✓ {old_desc_len} chars → {len(new_description)} chars")
202
+
203
+ def add_disable_to_command(file_path: Path) -> None:
204
+ """Add disable-model-invocation: true to a command file."""
205
+ print(f" Processing {file_path.relative_to(BASE)}...")
206
+
207
+ content = file_path.read_text()
208
+ frontmatter, body = extract_frontmatter_and_body(content)
209
+ fields = parse_frontmatter(frontmatter)
210
+
211
+ # Add disable-model-invocation if not present
212
+ if 'disable-model-invocation' not in fields:
213
+ fields['disable-model-invocation'] = 'true'
214
+
215
+ # Rebuild file
216
+ new_frontmatter = build_frontmatter(fields)
217
+ new_content = f"{new_frontmatter}\n{body}"
218
+
219
+ file_path.write_text(new_content)
220
+ print(f" ✓ Added disable-model-invocation: true")
221
+ else:
222
+ print(f" - Already has disable-model-invocation")
223
+
224
+ def add_disable_to_skill(file_path: Path) -> None:
225
+ """Add disable-model-invocation: true to a skill SKILL.md file."""
226
+ print(f" Processing {file_path.relative_to(BASE)}...")
227
+
228
+ content = file_path.read_text()
229
+ frontmatter, body = extract_frontmatter_and_body(content)
230
+ fields = parse_frontmatter(frontmatter)
231
+
232
+ # Add disable-model-invocation if not present
233
+ if 'disable-model-invocation' not in fields:
234
+ fields['disable-model-invocation'] = 'true'
235
+
236
+ # Rebuild file
237
+ new_frontmatter = build_frontmatter(fields)
238
+ new_content = f"{new_frontmatter}\n{body}"
239
+
240
+ file_path.write_text(new_content)
241
+ print(f" ✓ Added disable-model-invocation: true")
242
+ else:
243
+ print(f" - Already has disable-model-invocation")
244
+
245
+ def main():
246
+ print("=" * 80)
247
+ print("PHASE 1: Trimming agent descriptions")
248
+ print("=" * 80)
249
+
250
+ agents_processed = 0
251
+ agents_errors = 0
252
+ old_total = 0
253
+ new_total = 0
254
+
255
+ for agent_name, description in AGENT_DESCRIPTIONS.items():
256
+ matches = list(BASE.glob(f"agents/**/{agent_name}.md"))
257
+ if not matches:
258
+ print(f" ERROR: Could not find {agent_name}.md")
259
+ agents_errors += 1
260
+ continue
261
+
262
+ if len(matches) > 1:
263
+ print(f" ERROR: Found multiple files for {agent_name}")
264
+ agents_errors += 1
265
+ continue
266
+
267
+ try:
268
+ # Calculate old length
269
+ content = matches[0].read_text()
270
+ fm, _ = extract_frontmatter_and_body(content)
271
+ fields = parse_frontmatter(fm)
272
+ old_total += len(fields.get('description', ''))
273
+ new_total += len(description)
274
+
275
+ process_agent(matches[0], description)
276
+ agents_processed += 1
277
+ except Exception as e:
278
+ print(f" ERROR processing {agent_name}: {e}")
279
+ agents_errors += 1
280
+
281
+ print(f"\n✓ Processed {agents_processed} agents")
282
+ print(f" Total: {old_total:,} chars → {new_total:,} chars ({100*(old_total-new_total)/old_total:.1f}% reduction)")
283
+ if agents_errors:
284
+ print(f"✗ {agents_errors} errors")
285
+
286
+ print("\n" + "=" * 80)
287
+ print("PHASE 2: Adding disable-model-invocation to manual commands")
288
+ print("=" * 80)
289
+
290
+ commands_processed = 0
291
+ commands_errors = 0
292
+
293
+ for command_name in DISABLE_COMMANDS:
294
+ matches = list(BASE.glob(f"commands/{command_name}.md"))
295
+ if not matches:
296
+ print(f" WARNING: Could not find commands/{command_name}.md")
297
+ continue
298
+
299
+ try:
300
+ add_disable_to_command(matches[0])
301
+ commands_processed += 1
302
+ except Exception as e:
303
+ print(f" ERROR processing {command_name}: {e}")
304
+ commands_errors += 1
305
+
306
+ print(f"\n✓ Processed {commands_processed} commands")
307
+ if commands_errors:
308
+ print(f"✗ {commands_errors} errors")
309
+
310
+ print("\n" + "=" * 80)
311
+ print("PHASE 3: Adding disable-model-invocation to manual skills")
312
+ print("=" * 80)
313
+
314
+ skills_processed = 0
315
+ skills_errors = 0
316
+
317
+ for skill_name in DISABLE_SKILLS:
318
+ matches = list(BASE.glob(f"skills/{skill_name}/SKILL.md"))
319
+ if not matches:
320
+ print(f" WARNING: Could not find skills/{skill_name}/SKILL.md")
321
+ continue
322
+
323
+ try:
324
+ add_disable_to_skill(matches[0])
325
+ skills_processed += 1
326
+ except Exception as e:
327
+ print(f" ERROR processing {skill_name}: {e}")
328
+ skills_errors += 1
329
+
330
+ print(f"\n✓ Processed {skills_processed} skills")
331
+ if skills_errors:
332
+ print(f"✗ {skills_errors} errors")
333
+
334
+ print("\n" + "=" * 80)
335
+ print("SUMMARY")
336
+ print("=" * 80)
337
+ print(f"Agents: {agents_processed} processed, {agents_errors} errors")
338
+ print(f"Commands: {commands_processed} processed, {commands_errors} errors")
339
+ print(f"Skills: {skills_processed} processed, {skills_errors} errors")
340
+ print(f"\nAgent descriptions: {old_total:,} → {new_total:,} chars ({100*(old_total-new_total)/old_total:.1f}% reduction)")
341
+
342
+ return 0 if (agents_errors + commands_errors + skills_errors) == 0 else 1
343
+
344
+ if __name__ == "__main__":
345
+ exit(main())
@@ -0,0 +1,257 @@
1
+ #!/usr/bin/env bun
2
+
3
+ /**
4
+ * convert-cortex.ts
5
+ * Converts lavra plugin files from Claude Code format to Cortex Code format
6
+ *
7
+ * Security controls:
8
+ * - Path traversal protection
9
+ * - File size limits (10MB)
10
+ * - YAML SAFE_SCHEMA parsing
11
+ * - Model name validation
12
+ * - Explicit file permissions (644)
13
+ */
14
+
15
+ import { readdir, mkdir } from "node:fs/promises";
16
+ import { join } from "node:path";
17
+ import {
18
+ validatePath,
19
+ sanitizeFilename,
20
+ readFileSafe,
21
+ writeFileSafe,
22
+ validateModelName,
23
+ validateFilename,
24
+ } from "./shared/security";
25
+ import {
26
+ parseFrontmatter,
27
+ extractBody,
28
+ buildMarkdown,
29
+ } from "./shared/yaml-parser";
30
+ import { mapToCortex } from "./shared/model-mapping";
31
+
32
+ const PLUGIN_VERSION = "0.6.0";
33
+ const SOURCE_DIR = join(import.meta.dir, "../plugins/lavra");
34
+ const OUTPUT_DIR = join(import.meta.dir, "../plugins/lavra/cortex");
35
+
36
+ /**
37
+ * Converts commands (direct copy - formats are identical)
38
+ */
39
+ async function convertCommands() {
40
+ console.log("Converting commands...");
41
+
42
+ const commandsDir = validatePath(SOURCE_DIR, "commands");
43
+ const outputDir = validatePath(OUTPUT_DIR, "commands");
44
+
45
+ await mkdir(outputDir, { recursive: true, mode: 0o755 });
46
+
47
+ const files = await readdir(commandsDir);
48
+ const mdFiles = files.filter((f) => f.endsWith(".md"));
49
+
50
+ // Parallel processing for performance
51
+ await Promise.all(
52
+ mdFiles.map(async (file) => {
53
+ if (!validateFilename(file)) {
54
+ console.warn(` ⚠️ Skipping invalid filename: ${file}`);
55
+ return;
56
+ }
57
+
58
+ const sourcePath = validatePath(commandsDir, file);
59
+ const outputPath = validatePath(outputDir, sanitizeFilename(file));
60
+
61
+ const content = await readFileSafe(sourcePath);
62
+
63
+ // Add generation header
64
+ const withHeader = `<!-- Generated by lavra v${PLUGIN_VERSION} -->
65
+ <!-- Source: ${file} -->
66
+ <!-- DO NOT EDIT - changes will be overwritten on next install -->
67
+
68
+ ${content}`;
69
+
70
+ await writeFileSafe(outputPath, withHeader, 0o644);
71
+ console.log(` ✓ ${file}`);
72
+ })
73
+ );
74
+
75
+ console.log(` Converted ${mdFiles.length} commands\n`);
76
+ }
77
+
78
+ /**
79
+ * Converts agents (field mapping required)
80
+ */
81
+ async function convertAgents() {
82
+ console.log("Converting agents...");
83
+
84
+ const categories = ["review", "research", "design", "workflow", "docs"];
85
+ let totalConverted = 0;
86
+
87
+ // Create all category directories upfront
88
+ await Promise.all(
89
+ categories.map((category) =>
90
+ mkdir(join(OUTPUT_DIR, "agents", category), {
91
+ recursive: true,
92
+ mode: 0o755,
93
+ })
94
+ )
95
+ );
96
+
97
+ // Process each category in parallel
98
+ await Promise.all(
99
+ categories.map(async (category) => {
100
+ const categoryDir = validatePath(SOURCE_DIR, `agents/${category}`);
101
+ const outputCategoryDir = validatePath(OUTPUT_DIR, `agents/${category}`);
102
+
103
+ const files = await readdir(categoryDir);
104
+ const mdFiles = files.filter((f) => f.endsWith(".md"));
105
+
106
+ // Process files in parallel
107
+ await Promise.all(
108
+ mdFiles.map(async (file) => {
109
+ if (!validateFilename(file)) {
110
+ console.warn(` ⚠️ Skipping invalid filename: ${file}`);
111
+ return;
112
+ }
113
+
114
+ const sourcePath = validatePath(categoryDir, file);
115
+ const outputPath = validatePath(outputCategoryDir, sanitizeFilename(file));
116
+
117
+ const content = await readFileSafe(sourcePath);
118
+ const frontmatter = parseFrontmatter(content);
119
+ const body = extractBody(content);
120
+
121
+ // Transform frontmatter for Cortex Code
122
+ const cortexFrontmatter: Record<string, any> = {};
123
+
124
+ // Preserve name if present
125
+ if (frontmatter.name) {
126
+ cortexFrontmatter.name = frontmatter.name;
127
+ }
128
+
129
+ // Preserve description
130
+ if (frontmatter.description) {
131
+ cortexFrontmatter.description = frontmatter.description;
132
+ }
133
+
134
+ // Map model if present and not inherit
135
+ if (frontmatter.model && frontmatter.model !== "inherit") {
136
+ const mappedModel = mapToCortex(frontmatter.model);
137
+ validateModelName(mappedModel);
138
+ cortexFrontmatter.model = mappedModel;
139
+ } else {
140
+ cortexFrontmatter.model = "inherit";
141
+ }
142
+
143
+ // Preserve tools if present
144
+ if (frontmatter.tools) {
145
+ cortexFrontmatter.tools = frontmatter.tools;
146
+ }
147
+
148
+ // Build output
149
+ const output = buildMarkdown(cortexFrontmatter, body);
150
+
151
+ // Add generation header
152
+ const withHeader = `<!-- Generated by lavra v${PLUGIN_VERSION} -->
153
+ <!-- Source: ${category}/${file} -->
154
+ <!-- DO NOT EDIT - changes will be overwritten on next install -->
155
+
156
+ ${output}`;
157
+
158
+ await writeFileSafe(outputPath, withHeader, 0o644);
159
+ console.log(` ✓ ${category}/${file}`);
160
+ })
161
+ );
162
+
163
+ totalConverted += mdFiles.length;
164
+ })
165
+ );
166
+
167
+ console.log(` Converted ${totalConverted} agents\n`);
168
+ }
169
+
170
+ /**
171
+ * Converts skills (direct copy)
172
+ */
173
+ async function convertSkills() {
174
+ console.log("Converting skills...");
175
+
176
+ const skillsDir = validatePath(SOURCE_DIR, "skills");
177
+ const outputDir = validatePath(OUTPUT_DIR, "skills");
178
+
179
+ await mkdir(outputDir, { recursive: true, mode: 0o755 });
180
+
181
+ const skillDirs = await readdir(skillsDir, { withFileTypes: true });
182
+ const skills = skillDirs.filter((d) => d.isDirectory() && d.name !== "optional").map((d) => d.name);
183
+
184
+ // Process each skill directory in parallel
185
+ await Promise.all(
186
+ skills.map(async (skill) => {
187
+ const skillDir = validatePath(skillsDir, skill);
188
+ const outputSkillDir = validatePath(outputDir, sanitizeFilename(skill));
189
+
190
+ await mkdir(outputSkillDir, { recursive: true, mode: 0o755 });
191
+
192
+ // Copy SKILL.md
193
+ const skillMd = join(skillDir, "SKILL.md");
194
+ const outputSkillMd = join(outputSkillDir, "SKILL.md");
195
+
196
+ try {
197
+ const content = await readFileSafe(skillMd);
198
+
199
+ // Add generation header
200
+ const withHeader = `<!-- Generated by lavra v${PLUGIN_VERSION} -->
201
+ <!-- Source: ${skill}/SKILL.md -->
202
+ <!-- DO NOT EDIT - changes will be overwritten on next install -->
203
+
204
+ ${content}`;
205
+
206
+ await writeFileSafe(outputSkillMd, withHeader, 0o644);
207
+ console.log(` ✓ ${skill}/SKILL.md`);
208
+ } catch (err) {
209
+ console.warn(` ⚠️ Skipping ${skill} (no SKILL.md found): ${err}`);
210
+ }
211
+ })
212
+ );
213
+
214
+ console.log(` Converted ${skills.length} skills\n`);
215
+ }
216
+
217
+ /**
218
+ * Main conversion function
219
+ */
220
+ async function main() {
221
+ console.log("🔄 Converting lavra to Cortex Code format\n");
222
+ console.log(`Source: ${SOURCE_DIR}`);
223
+ console.log(`Output: ${OUTPUT_DIR}\n`);
224
+
225
+ try {
226
+ // Create root output directory
227
+ await mkdir(OUTPUT_DIR, { recursive: true, mode: 0o755 });
228
+
229
+ // Run all conversions in parallel (no MCP docs for Cortex)
230
+ await Promise.all([
231
+ convertCommands(),
232
+ convertAgents(),
233
+ convertSkills(),
234
+ ]);
235
+
236
+ console.log("✅ Conversion complete!");
237
+ console.log(`\nGenerated files in: ${OUTPUT_DIR}`);
238
+
239
+ // Only show manual copy instructions if running standalone (not during install)
240
+ if (!process.env.LAVRA_INSTALLING) {
241
+ console.log("\nNext steps:");
242
+ console.log("1. Review the generated files");
243
+ console.log("2. Copy to your Cortex Code project:");
244
+ console.log(` cp -r ${OUTPUT_DIR}/* <project>/.cortex/`);
245
+ }
246
+ } catch (err: any) {
247
+ console.error("❌ Conversion failed:", err.message);
248
+ process.exit(1);
249
+ }
250
+ }
251
+
252
+ // Run if executed directly
253
+ if (import.meta.main) {
254
+ main();
255
+ }
256
+
257
+ export { convertCommands, convertAgents, convertSkills };