@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.
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/bin/install.js +302 -0
- package/bin/plan-export.js +300 -0
- package/bin/plan-view.js +695 -0
- package/install.sh +136 -0
- package/package.json +28 -0
- package/plugins/lavra/.claude-plugin/plugin.json +22 -0
- package/plugins/lavra/.mcp.json +8 -0
- package/plugins/lavra/README.md +125 -0
- package/plugins/lavra/agents/design/design-implementation-reviewer.md +123 -0
- package/plugins/lavra/agents/design/design-iterator.md +219 -0
- package/plugins/lavra/agents/design/figma-design-sync.md +212 -0
- package/plugins/lavra/agents/docs/ankane-readme-writer.md +90 -0
- package/plugins/lavra/agents/research/best-practices-researcher.md +131 -0
- package/plugins/lavra/agents/research/framework-docs-researcher.md +111 -0
- package/plugins/lavra/agents/research/git-history-analyzer.md +73 -0
- package/plugins/lavra/agents/research/learnings-researcher.md +255 -0
- package/plugins/lavra/agents/research/repo-research-analyst.md +157 -0
- package/plugins/lavra/agents/review/agent-native-reviewer.md +274 -0
- package/plugins/lavra/agents/review/architecture-strategist.md +82 -0
- package/plugins/lavra/agents/review/code-simplicity-reviewer.md +109 -0
- package/plugins/lavra/agents/review/data-integrity-guardian.md +89 -0
- package/plugins/lavra/agents/review/data-migration-expert.md +118 -0
- package/plugins/lavra/agents/review/deployment-verification-agent.md +178 -0
- package/plugins/lavra/agents/review/dhh-rails-reviewer.md +94 -0
- package/plugins/lavra/agents/review/goal-verifier.md +109 -0
- package/plugins/lavra/agents/review/julik-frontend-races-reviewer.md +239 -0
- package/plugins/lavra/agents/review/kieran-python-reviewer.md +148 -0
- package/plugins/lavra/agents/review/kieran-rails-reviewer.md +130 -0
- package/plugins/lavra/agents/review/kieran-typescript-reviewer.md +139 -0
- package/plugins/lavra/agents/review/migration-drift-detector.md +307 -0
- package/plugins/lavra/agents/review/pattern-recognition-specialist.md +87 -0
- package/plugins/lavra/agents/review/performance-oracle.md +154 -0
- package/plugins/lavra/agents/review/security-sentinel.md +125 -0
- package/plugins/lavra/agents/workflow/bug-reproduction-validator.md +119 -0
- package/plugins/lavra/agents/workflow/every-style-editor.md +97 -0
- package/plugins/lavra/agents/workflow/lint.md +30 -0
- package/plugins/lavra/agents/workflow/pr-comment-resolver.md +95 -0
- package/plugins/lavra/agents/workflow/spec-flow-analyzer.md +156 -0
- package/plugins/lavra/commands/changelog.md +149 -0
- package/plugins/lavra/commands/heal-skill.md +130 -0
- package/plugins/lavra/commands/lavra-brainstorm.md +388 -0
- package/plugins/lavra/commands/lavra-ceo-review.md +388 -0
- package/plugins/lavra/commands/lavra-checkpoint.md +162 -0
- package/plugins/lavra/commands/lavra-design.md +621 -0
- package/plugins/lavra/commands/lavra-eng-review.md +262 -0
- package/plugins/lavra/commands/lavra-import.md +194 -0
- package/plugins/lavra/commands/lavra-learn.md +176 -0
- package/plugins/lavra/commands/lavra-plan.md +515 -0
- package/plugins/lavra/commands/lavra-qa.md +357 -0
- package/plugins/lavra/commands/lavra-quick.md +178 -0
- package/plugins/lavra/commands/lavra-recall.md +279 -0
- package/plugins/lavra/commands/lavra-research.md +267 -0
- package/plugins/lavra/commands/lavra-retro.md +400 -0
- package/plugins/lavra/commands/lavra-review.md +401 -0
- package/plugins/lavra/commands/lavra-ship.md +330 -0
- package/plugins/lavra/commands/lavra-triage.md +159 -0
- package/plugins/lavra/commands/lavra-work-ralph.md +521 -0
- package/plugins/lavra/commands/lavra-work-teams.md +504 -0
- package/plugins/lavra/commands/lavra-work.md +1019 -0
- package/plugins/lavra/commands/optional/agent-native-audit.md +282 -0
- package/plugins/lavra/commands/optional/feature-video.md +262 -0
- package/plugins/lavra/commands/optional/generate-command.md +146 -0
- package/plugins/lavra/commands/optional/reproduce-bug.md +97 -0
- package/plugins/lavra/commands/optional/xcode-test.md +287 -0
- package/plugins/lavra/commands/report-bug.md +155 -0
- package/plugins/lavra/commands/test-browser.md +305 -0
- package/plugins/lavra/cortex/agents/design/design-implementation-reviewer.md +127 -0
- package/plugins/lavra/cortex/agents/design/design-iterator.md +222 -0
- package/plugins/lavra/cortex/agents/design/figma-design-sync.md +215 -0
- package/plugins/lavra/cortex/agents/docs/ankane-readme-writer.md +93 -0
- package/plugins/lavra/cortex/agents/research/best-practices-researcher.md +135 -0
- package/plugins/lavra/cortex/agents/research/framework-docs-researcher.md +115 -0
- package/plugins/lavra/cortex/agents/research/git-history-analyzer.md +77 -0
- package/plugins/lavra/cortex/agents/research/learnings-researcher.md +259 -0
- package/plugins/lavra/cortex/agents/research/repo-research-analyst.md +161 -0
- package/plugins/lavra/cortex/agents/review/agent-native-reviewer.md +278 -0
- package/plugins/lavra/cortex/agents/review/architecture-strategist.md +86 -0
- package/plugins/lavra/cortex/agents/review/code-simplicity-reviewer.md +113 -0
- package/plugins/lavra/cortex/agents/review/data-integrity-guardian.md +93 -0
- package/plugins/lavra/cortex/agents/review/data-migration-expert.md +122 -0
- package/plugins/lavra/cortex/agents/review/deployment-verification-agent.md +182 -0
- package/plugins/lavra/cortex/agents/review/dhh-rails-reviewer.md +98 -0
- package/plugins/lavra/cortex/agents/review/goal-verifier.md +113 -0
- package/plugins/lavra/cortex/agents/review/julik-frontend-races-reviewer.md +243 -0
- package/plugins/lavra/cortex/agents/review/kieran-python-reviewer.md +152 -0
- package/plugins/lavra/cortex/agents/review/kieran-rails-reviewer.md +134 -0
- package/plugins/lavra/cortex/agents/review/kieran-typescript-reviewer.md +143 -0
- package/plugins/lavra/cortex/agents/review/migration-drift-detector.md +311 -0
- package/plugins/lavra/cortex/agents/review/pattern-recognition-specialist.md +91 -0
- package/plugins/lavra/cortex/agents/review/performance-oracle.md +158 -0
- package/plugins/lavra/cortex/agents/review/security-sentinel.md +129 -0
- package/plugins/lavra/cortex/agents/workflow/bug-reproduction-validator.md +123 -0
- package/plugins/lavra/cortex/agents/workflow/every-style-editor.md +101 -0
- package/plugins/lavra/cortex/agents/workflow/lint.md +33 -0
- package/plugins/lavra/cortex/agents/workflow/pr-comment-resolver.md +98 -0
- package/plugins/lavra/cortex/agents/workflow/spec-flow-analyzer.md +160 -0
- package/plugins/lavra/cortex/commands/agent-native-audit.md +286 -0
- package/plugins/lavra/cortex/commands/changelog.md +153 -0
- package/plugins/lavra/cortex/commands/create-agent-skill.md +21 -0
- package/plugins/lavra/cortex/commands/deploy-docs.md +69 -0
- package/plugins/lavra/cortex/commands/feature-video.md +266 -0
- package/plugins/lavra/cortex/commands/generate-command.md +150 -0
- package/plugins/lavra/cortex/commands/heal-skill.md +134 -0
- package/plugins/lavra/cortex/commands/lavra-brainstorm.md +392 -0
- package/plugins/lavra/cortex/commands/lavra-ceo-review.md +392 -0
- package/plugins/lavra/cortex/commands/lavra-checkpoint.md +166 -0
- package/plugins/lavra/cortex/commands/lavra-compound.md +168 -0
- package/plugins/lavra/cortex/commands/lavra-deepen.md +389 -0
- package/plugins/lavra/cortex/commands/lavra-design.md +625 -0
- package/plugins/lavra/cortex/commands/lavra-eng-review.md +266 -0
- package/plugins/lavra/cortex/commands/lavra-import.md +198 -0
- package/plugins/lavra/cortex/commands/lavra-learn.md +180 -0
- package/plugins/lavra/cortex/commands/lavra-parallel.md +910 -0
- package/plugins/lavra/cortex/commands/lavra-plan.md +519 -0
- package/plugins/lavra/cortex/commands/lavra-qa.md +361 -0
- package/plugins/lavra/cortex/commands/lavra-quick.md +182 -0
- package/plugins/lavra/cortex/commands/lavra-recall.md +283 -0
- package/plugins/lavra/cortex/commands/lavra-research.md +271 -0
- package/plugins/lavra/cortex/commands/lavra-retro.md +404 -0
- package/plugins/lavra/cortex/commands/lavra-review.md +405 -0
- package/plugins/lavra/cortex/commands/lavra-ship.md +334 -0
- package/plugins/lavra/cortex/commands/lavra-triage.md +163 -0
- package/plugins/lavra/cortex/commands/lavra-work-ralph.md +525 -0
- package/plugins/lavra/cortex/commands/lavra-work-teams.md +508 -0
- package/plugins/lavra/cortex/commands/lavra-work.md +1023 -0
- package/plugins/lavra/cortex/commands/lfg.md +30 -0
- package/plugins/lavra/cortex/commands/release-docs.md +148 -0
- package/plugins/lavra/cortex/commands/report-bug.md +159 -0
- package/plugins/lavra/cortex/commands/reproduce-bug.md +101 -0
- package/plugins/lavra/cortex/commands/resolve-pr-parallel.md +58 -0
- package/plugins/lavra/cortex/commands/resolve-todo-parallel.md +56 -0
- package/plugins/lavra/cortex/commands/test-browser.md +309 -0
- package/plugins/lavra/cortex/commands/xcode-test.md +291 -0
- package/plugins/lavra/cortex/skills/agent-browser/SKILL.md +227 -0
- package/plugins/lavra/cortex/skills/agent-native-architecture/SKILL.md +439 -0
- package/plugins/lavra/cortex/skills/andrew-kane-gem-writer/SKILL.md +188 -0
- package/plugins/lavra/cortex/skills/brainstorming/SKILL.md +197 -0
- package/plugins/lavra/cortex/skills/create-agent-skills/SKILL.md +304 -0
- package/plugins/lavra/cortex/skills/dhh-rails-style/SKILL.md +189 -0
- package/plugins/lavra/cortex/skills/dspy-ruby/SKILL.md +741 -0
- package/plugins/lavra/cortex/skills/every-style-editor/SKILL.md +138 -0
- package/plugins/lavra/cortex/skills/file-todos/SKILL.md +256 -0
- package/plugins/lavra/cortex/skills/frontend-design/SKILL.md +46 -0
- package/plugins/lavra/cortex/skills/gemini-imagegen/SKILL.md +242 -0
- package/plugins/lavra/cortex/skills/git-worktree/SKILL.md +307 -0
- package/plugins/lavra/cortex/skills/lavra-knowledge/SKILL.md +464 -0
- package/plugins/lavra/cortex/skills/project-setup/SKILL.md +418 -0
- package/plugins/lavra/cortex/skills/rclone/SKILL.md +155 -0
- package/plugins/lavra/docs/quickstart.md +267 -0
- package/plugins/lavra/examples/example-plan.md +197 -0
- package/plugins/lavra/gemini/agents/design/design-implementation-reviewer.md +130 -0
- package/plugins/lavra/gemini/agents/design/design-iterator.md +225 -0
- package/plugins/lavra/gemini/agents/design/figma-design-sync.md +218 -0
- package/plugins/lavra/gemini/agents/docs/ankane-readme-writer.md +96 -0
- package/plugins/lavra/gemini/agents/research/best-practices-researcher.md +138 -0
- package/plugins/lavra/gemini/agents/research/framework-docs-researcher.md +118 -0
- package/plugins/lavra/gemini/agents/research/git-history-analyzer.md +80 -0
- package/plugins/lavra/gemini/agents/research/learnings-researcher.md +262 -0
- package/plugins/lavra/gemini/agents/research/repo-research-analyst.md +164 -0
- package/plugins/lavra/gemini/agents/review/agent-native-reviewer.md +281 -0
- package/plugins/lavra/gemini/agents/review/architecture-strategist.md +89 -0
- package/plugins/lavra/gemini/agents/review/code-simplicity-reviewer.md +116 -0
- package/plugins/lavra/gemini/agents/review/data-integrity-guardian.md +96 -0
- package/plugins/lavra/gemini/agents/review/data-migration-expert.md +125 -0
- package/plugins/lavra/gemini/agents/review/deployment-verification-agent.md +185 -0
- package/plugins/lavra/gemini/agents/review/dhh-rails-reviewer.md +101 -0
- package/plugins/lavra/gemini/agents/review/goal-verifier.md +116 -0
- package/plugins/lavra/gemini/agents/review/julik-frontend-races-reviewer.md +246 -0
- package/plugins/lavra/gemini/agents/review/kieran-python-reviewer.md +155 -0
- package/plugins/lavra/gemini/agents/review/kieran-rails-reviewer.md +137 -0
- package/plugins/lavra/gemini/agents/review/kieran-typescript-reviewer.md +146 -0
- package/plugins/lavra/gemini/agents/review/migration-drift-detector.md +314 -0
- package/plugins/lavra/gemini/agents/review/pattern-recognition-specialist.md +94 -0
- package/plugins/lavra/gemini/agents/review/performance-oracle.md +161 -0
- package/plugins/lavra/gemini/agents/review/security-sentinel.md +132 -0
- package/plugins/lavra/gemini/agents/workflow/bug-reproduction-validator.md +126 -0
- package/plugins/lavra/gemini/agents/workflow/every-style-editor.md +103 -0
- package/plugins/lavra/gemini/agents/workflow/lint.md +36 -0
- package/plugins/lavra/gemini/agents/workflow/pr-comment-resolver.md +101 -0
- package/plugins/lavra/gemini/agents/workflow/spec-flow-analyzer.md +163 -0
- package/plugins/lavra/gemini/commands/agent-native-audit.toml +284 -0
- package/plugins/lavra/gemini/commands/beads-brainstorm.toml +292 -0
- package/plugins/lavra/gemini/commands/beads-checkpoint.toml +145 -0
- package/plugins/lavra/gemini/commands/beads-compound.toml +167 -0
- package/plugins/lavra/gemini/commands/beads-deepen.toml +388 -0
- package/plugins/lavra/gemini/commands/beads-design.toml +295 -0
- package/plugins/lavra/gemini/commands/beads-import.toml +197 -0
- package/plugins/lavra/gemini/commands/beads-parallel.toml +909 -0
- package/plugins/lavra/gemini/commands/beads-plan-review.toml +201 -0
- package/plugins/lavra/gemini/commands/beads-plan.toml +391 -0
- package/plugins/lavra/gemini/commands/beads-quick.toml +134 -0
- package/plugins/lavra/gemini/commands/beads-recall.toml +281 -0
- package/plugins/lavra/gemini/commands/beads-review.toml +338 -0
- package/plugins/lavra/gemini/commands/beads-triage.toml +161 -0
- package/plugins/lavra/gemini/commands/beads-work.toml +347 -0
- package/plugins/lavra/gemini/commands/changelog.toml +151 -0
- package/plugins/lavra/gemini/commands/create-agent-skill.toml +18 -0
- package/plugins/lavra/gemini/commands/deploy-docs.toml +68 -0
- package/plugins/lavra/gemini/commands/feature-video.toml +264 -0
- package/plugins/lavra/gemini/commands/generate-command.toml +148 -0
- package/plugins/lavra/gemini/commands/heal-skill.toml +131 -0
- package/plugins/lavra/gemini/commands/lavra-brainstorm.toml +391 -0
- package/plugins/lavra/gemini/commands/lavra-ceo-review.toml +391 -0
- package/plugins/lavra/gemini/commands/lavra-checkpoint.toml +165 -0
- package/plugins/lavra/gemini/commands/lavra-design.toml +624 -0
- package/plugins/lavra/gemini/commands/lavra-eng-review.toml +265 -0
- package/plugins/lavra/gemini/commands/lavra-import.toml +197 -0
- package/plugins/lavra/gemini/commands/lavra-learn.toml +179 -0
- package/plugins/lavra/gemini/commands/lavra-plan-review.toml +201 -0
- package/plugins/lavra/gemini/commands/lavra-plan.toml +518 -0
- package/plugins/lavra/gemini/commands/lavra-qa.toml +360 -0
- package/plugins/lavra/gemini/commands/lavra-quick.toml +181 -0
- package/plugins/lavra/gemini/commands/lavra-recall.toml +281 -0
- package/plugins/lavra/gemini/commands/lavra-research.toml +270 -0
- package/plugins/lavra/gemini/commands/lavra-retro.toml +403 -0
- package/plugins/lavra/gemini/commands/lavra-review.toml +404 -0
- package/plugins/lavra/gemini/commands/lavra-ship.toml +333 -0
- package/plugins/lavra/gemini/commands/lavra-triage.toml +161 -0
- package/plugins/lavra/gemini/commands/lavra-work-ralph.toml +523 -0
- package/plugins/lavra/gemini/commands/lavra-work-teams.toml +507 -0
- package/plugins/lavra/gemini/commands/lavra-work.toml +1022 -0
- package/plugins/lavra/gemini/commands/lfg.toml +28 -0
- package/plugins/lavra/gemini/commands/release-docs.toml +146 -0
- package/plugins/lavra/gemini/commands/report-bug.toml +157 -0
- package/plugins/lavra/gemini/commands/reproduce-bug.toml +99 -0
- package/plugins/lavra/gemini/commands/resolve-pr-parallel.toml +56 -0
- package/plugins/lavra/gemini/commands/resolve-todo-parallel.toml +54 -0
- package/plugins/lavra/gemini/commands/test-browser.toml +307 -0
- package/plugins/lavra/gemini/commands/xcode-test.toml +289 -0
- package/plugins/lavra/gemini/docs/MCP_SETUP.md +41 -0
- package/plugins/lavra/gemini/skills/agent-browser/SKILL.md +227 -0
- package/plugins/lavra/gemini/skills/agent-native-architecture/SKILL.md +439 -0
- package/plugins/lavra/gemini/skills/andrew-kane-gem-writer/SKILL.md +188 -0
- package/plugins/lavra/gemini/skills/beads-knowledge/SKILL.md +464 -0
- package/plugins/lavra/gemini/skills/brainstorming/SKILL.md +197 -0
- package/plugins/lavra/gemini/skills/create-agent-skills/SKILL.md +304 -0
- package/plugins/lavra/gemini/skills/dhh-rails-style/SKILL.md +189 -0
- package/plugins/lavra/gemini/skills/dspy-ruby/SKILL.md +741 -0
- package/plugins/lavra/gemini/skills/every-style-editor/SKILL.md +138 -0
- package/plugins/lavra/gemini/skills/file-todos/SKILL.md +256 -0
- package/plugins/lavra/gemini/skills/frontend-design/SKILL.md +46 -0
- package/plugins/lavra/gemini/skills/gemini-imagegen/SKILL.md +242 -0
- package/plugins/lavra/gemini/skills/git-worktree/SKILL.md +307 -0
- package/plugins/lavra/gemini/skills/lavra-knowledge/SKILL.md +464 -0
- package/plugins/lavra/gemini/skills/project-setup/SKILL.md +418 -0
- package/plugins/lavra/gemini/skills/rclone/SKILL.md +155 -0
- package/plugins/lavra/gemini-extension.json +50 -0
- package/plugins/lavra/gemini-src/settings.json +37 -0
- package/plugins/lavra/hooks/auto-recall.sh +210 -0
- package/plugins/lavra/hooks/check-memory.sh +169 -0
- package/plugins/lavra/hooks/hooks.json +47 -0
- package/plugins/lavra/hooks/knowledge-db.sh +255 -0
- package/plugins/lavra/hooks/memory-capture.sh +132 -0
- package/plugins/lavra/hooks/provision-memory.sh +144 -0
- package/plugins/lavra/hooks/recall.sh +152 -0
- package/plugins/lavra/hooks/subagent-wrapup.sh +44 -0
- package/plugins/lavra/hooks/teammate-idle-check.sh +29 -0
- package/plugins/lavra/opencode/agents/design/design-implementation-reviewer.md +127 -0
- package/plugins/lavra/opencode/agents/design/design-iterator.md +222 -0
- package/plugins/lavra/opencode/agents/design/figma-design-sync.md +215 -0
- package/plugins/lavra/opencode/agents/docs/ankane-readme-writer.md +93 -0
- package/plugins/lavra/opencode/agents/research/best-practices-researcher.md +135 -0
- package/plugins/lavra/opencode/agents/research/framework-docs-researcher.md +115 -0
- package/plugins/lavra/opencode/agents/research/git-history-analyzer.md +77 -0
- package/plugins/lavra/opencode/agents/research/learnings-researcher.md +259 -0
- package/plugins/lavra/opencode/agents/research/repo-research-analyst.md +161 -0
- package/plugins/lavra/opencode/agents/review/agent-native-reviewer.md +278 -0
- package/plugins/lavra/opencode/agents/review/architecture-strategist.md +86 -0
- package/plugins/lavra/opencode/agents/review/code-simplicity-reviewer.md +113 -0
- package/plugins/lavra/opencode/agents/review/data-integrity-guardian.md +93 -0
- package/plugins/lavra/opencode/agents/review/data-migration-expert.md +122 -0
- package/plugins/lavra/opencode/agents/review/deployment-verification-agent.md +182 -0
- package/plugins/lavra/opencode/agents/review/dhh-rails-reviewer.md +98 -0
- package/plugins/lavra/opencode/agents/review/goal-verifier.md +113 -0
- package/plugins/lavra/opencode/agents/review/julik-frontend-races-reviewer.md +243 -0
- package/plugins/lavra/opencode/agents/review/kieran-python-reviewer.md +152 -0
- package/plugins/lavra/opencode/agents/review/kieran-rails-reviewer.md +134 -0
- package/plugins/lavra/opencode/agents/review/kieran-typescript-reviewer.md +143 -0
- package/plugins/lavra/opencode/agents/review/migration-drift-detector.md +311 -0
- package/plugins/lavra/opencode/agents/review/pattern-recognition-specialist.md +91 -0
- package/plugins/lavra/opencode/agents/review/performance-oracle.md +158 -0
- package/plugins/lavra/opencode/agents/review/security-sentinel.md +129 -0
- package/plugins/lavra/opencode/agents/workflow/bug-reproduction-validator.md +123 -0
- package/plugins/lavra/opencode/agents/workflow/every-style-editor.md +100 -0
- package/plugins/lavra/opencode/agents/workflow/lint.md +33 -0
- package/plugins/lavra/opencode/agents/workflow/pr-comment-resolver.md +98 -0
- package/plugins/lavra/opencode/agents/workflow/spec-flow-analyzer.md +160 -0
- package/plugins/lavra/opencode/commands/agent-native-audit.md +286 -0
- package/plugins/lavra/opencode/commands/changelog.md +153 -0
- package/plugins/lavra/opencode/commands/create-agent-skill.md +21 -0
- package/plugins/lavra/opencode/commands/deploy-docs.md +69 -0
- package/plugins/lavra/opencode/commands/feature-video.md +266 -0
- package/plugins/lavra/opencode/commands/generate-command.md +150 -0
- package/plugins/lavra/opencode/commands/heal-skill.md +134 -0
- package/plugins/lavra/opencode/commands/lavra-brainstorm.md +392 -0
- package/plugins/lavra/opencode/commands/lavra-ceo-review.md +392 -0
- package/plugins/lavra/opencode/commands/lavra-checkpoint.md +166 -0
- package/plugins/lavra/opencode/commands/lavra-compound.md +168 -0
- package/plugins/lavra/opencode/commands/lavra-deepen.md +389 -0
- package/plugins/lavra/opencode/commands/lavra-design.md +625 -0
- package/plugins/lavra/opencode/commands/lavra-eng-review.md +266 -0
- package/plugins/lavra/opencode/commands/lavra-import.md +198 -0
- package/plugins/lavra/opencode/commands/lavra-learn.md +180 -0
- package/plugins/lavra/opencode/commands/lavra-parallel.md +910 -0
- package/plugins/lavra/opencode/commands/lavra-plan.md +519 -0
- package/plugins/lavra/opencode/commands/lavra-qa.md +361 -0
- package/plugins/lavra/opencode/commands/lavra-quick.md +182 -0
- package/plugins/lavra/opencode/commands/lavra-recall.md +283 -0
- package/plugins/lavra/opencode/commands/lavra-research.md +271 -0
- package/plugins/lavra/opencode/commands/lavra-retro.md +404 -0
- package/plugins/lavra/opencode/commands/lavra-review.md +405 -0
- package/plugins/lavra/opencode/commands/lavra-ship.md +334 -0
- package/plugins/lavra/opencode/commands/lavra-triage.md +163 -0
- package/plugins/lavra/opencode/commands/lavra-work-ralph.md +525 -0
- package/plugins/lavra/opencode/commands/lavra-work-teams.md +508 -0
- package/plugins/lavra/opencode/commands/lavra-work.md +1023 -0
- package/plugins/lavra/opencode/commands/lfg.md +30 -0
- package/plugins/lavra/opencode/commands/release-docs.md +148 -0
- package/plugins/lavra/opencode/commands/report-bug.md +159 -0
- package/plugins/lavra/opencode/commands/reproduce-bug.md +101 -0
- package/plugins/lavra/opencode/commands/resolve-pr-parallel.md +58 -0
- package/plugins/lavra/opencode/commands/resolve-todo-parallel.md +56 -0
- package/plugins/lavra/opencode/commands/test-browser.md +309 -0
- package/plugins/lavra/opencode/commands/xcode-test.md +291 -0
- package/plugins/lavra/opencode/docs/MCP_SETUP.md +48 -0
- package/plugins/lavra/opencode/skills/agent-browser/SKILL.md +227 -0
- package/plugins/lavra/opencode/skills/agent-native-architecture/SKILL.md +439 -0
- package/plugins/lavra/opencode/skills/andrew-kane-gem-writer/SKILL.md +188 -0
- package/plugins/lavra/opencode/skills/brainstorming/SKILL.md +197 -0
- package/plugins/lavra/opencode/skills/create-agent-skills/SKILL.md +304 -0
- package/plugins/lavra/opencode/skills/dhh-rails-style/SKILL.md +189 -0
- package/plugins/lavra/opencode/skills/dspy-ruby/SKILL.md +741 -0
- package/plugins/lavra/opencode/skills/every-style-editor/SKILL.md +138 -0
- package/plugins/lavra/opencode/skills/file-todos/SKILL.md +256 -0
- package/plugins/lavra/opencode/skills/frontend-design/SKILL.md +46 -0
- package/plugins/lavra/opencode/skills/gemini-imagegen/SKILL.md +242 -0
- package/plugins/lavra/opencode/skills/git-worktree/SKILL.md +307 -0
- package/plugins/lavra/opencode/skills/lavra-knowledge/SKILL.md +464 -0
- package/plugins/lavra/opencode/skills/project-setup/SKILL.md +418 -0
- package/plugins/lavra/opencode/skills/rclone/SKILL.md +155 -0
- package/plugins/lavra/opencode-src/package.json +13 -0
- package/plugins/lavra/opencode-src/plugin.ts +176 -0
- package/plugins/lavra/scripts/import-plan.sh +141 -0
- package/plugins/lavra/skills/agent-browser/SKILL.md +223 -0
- package/plugins/lavra/skills/agent-native-architecture/SKILL.md +435 -0
- package/plugins/lavra/skills/agent-native-architecture/references/action-parity-discipline.md +353 -0
- package/plugins/lavra/skills/agent-native-architecture/references/agent-execution-patterns.md +362 -0
- package/plugins/lavra/skills/agent-native-architecture/references/agent-native-testing.md +508 -0
- package/plugins/lavra/skills/agent-native-architecture/references/architecture-patterns.md +478 -0
- package/plugins/lavra/skills/agent-native-architecture/references/dynamic-context-injection.md +281 -0
- package/plugins/lavra/skills/agent-native-architecture/references/files-universal-interface.md +301 -0
- package/plugins/lavra/skills/agent-native-architecture/references/from-primitives-to-domain-tools.md +227 -0
- package/plugins/lavra/skills/agent-native-architecture/references/mcp-tool-design.md +427 -0
- package/plugins/lavra/skills/agent-native-architecture/references/mobile-patterns.md +410 -0
- package/plugins/lavra/skills/agent-native-architecture/references/product-implications.md +341 -0
- package/plugins/lavra/skills/agent-native-architecture/references/refactoring-to-prompt-native.md +317 -0
- package/plugins/lavra/skills/agent-native-architecture/references/self-modification.md +269 -0
- package/plugins/lavra/skills/agent-native-architecture/references/shared-workspace-architecture.md +517 -0
- package/plugins/lavra/skills/agent-native-architecture/references/system-prompt-design.md +250 -0
- package/plugins/lavra/skills/brainstorming/SKILL.md +193 -0
- package/plugins/lavra/skills/create-agent-skills/SKILL.md +300 -0
- package/plugins/lavra/skills/create-agent-skills/references/api-security.md +60 -0
- package/plugins/lavra/skills/create-agent-skills/references/be-clear-and-direct.md +84 -0
- package/plugins/lavra/skills/create-agent-skills/references/best-practices.md +404 -0
- package/plugins/lavra/skills/create-agent-skills/references/common-patterns.md +121 -0
- package/plugins/lavra/skills/create-agent-skills/references/core-principles.md +103 -0
- package/plugins/lavra/skills/create-agent-skills/references/executable-code.md +92 -0
- package/plugins/lavra/skills/create-agent-skills/references/iteration-and-testing.md +164 -0
- package/plugins/lavra/skills/create-agent-skills/references/official-spec.md +185 -0
- package/plugins/lavra/skills/create-agent-skills/references/recommended-structure.md +168 -0
- package/plugins/lavra/skills/create-agent-skills/references/skill-structure.md +215 -0
- package/plugins/lavra/skills/create-agent-skills/references/using-scripts.md +113 -0
- package/plugins/lavra/skills/create-agent-skills/references/using-templates.md +112 -0
- package/plugins/lavra/skills/create-agent-skills/references/workflows-and-validation.md +122 -0
- package/plugins/lavra/skills/create-agent-skills/templates/router-skill.md +73 -0
- package/plugins/lavra/skills/create-agent-skills/templates/simple-skill.md +33 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/add-reference.md +55 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/add-script.md +59 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/add-template.md +51 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/add-workflow.md +54 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/audit-skill.md +63 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/create-domain-expertise-skill.md +68 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/create-new-skill.md +92 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/get-guidance.md +70 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/upgrade-to-router.md +68 -0
- package/plugins/lavra/skills/create-agent-skills/workflows/verify-skill.md +63 -0
- package/plugins/lavra/skills/file-todos/SKILL.md +252 -0
- package/plugins/lavra/skills/file-todos/assets/todo-template.md +155 -0
- package/plugins/lavra/skills/git-worktree/SKILL.md +303 -0
- package/plugins/lavra/skills/git-worktree/scripts/worktree-manager.sh +345 -0
- package/plugins/lavra/skills/lavra-knowledge/SKILL.md +460 -0
- package/plugins/lavra/skills/lavra-knowledge/references/jsonl-schema.md +104 -0
- package/plugins/lavra/skills/optional/andrew-kane-gem-writer/SKILL.md +184 -0
- package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/database-adapters.md +231 -0
- package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/module-organization.md +121 -0
- package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/rails-integration.md +183 -0
- package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/resources.md +119 -0
- package/plugins/lavra/skills/optional/andrew-kane-gem-writer/references/testing-patterns.md +261 -0
- package/plugins/lavra/skills/optional/dhh-rails-style/SKILL.md +185 -0
- package/plugins/lavra/skills/optional/dhh-rails-style/references/architecture.md +653 -0
- package/plugins/lavra/skills/optional/dhh-rails-style/references/controllers.md +303 -0
- package/plugins/lavra/skills/optional/dhh-rails-style/references/frontend.md +510 -0
- package/plugins/lavra/skills/optional/dhh-rails-style/references/gems.md +266 -0
- package/plugins/lavra/skills/optional/dhh-rails-style/references/models.md +359 -0
- package/plugins/lavra/skills/optional/dhh-rails-style/references/testing.md +338 -0
- package/plugins/lavra/skills/optional/dspy-ruby/SKILL.md +737 -0
- package/plugins/lavra/skills/optional/dspy-ruby/assets/config-template.rb +187 -0
- package/plugins/lavra/skills/optional/dspy-ruby/assets/module-template.rb +300 -0
- package/plugins/lavra/skills/optional/dspy-ruby/assets/signature-template.rb +221 -0
- package/plugins/lavra/skills/optional/dspy-ruby/references/core-concepts.md +674 -0
- package/plugins/lavra/skills/optional/dspy-ruby/references/observability.md +366 -0
- package/plugins/lavra/skills/optional/dspy-ruby/references/optimization.md +603 -0
- package/plugins/lavra/skills/optional/dspy-ruby/references/providers.md +418 -0
- package/plugins/lavra/skills/optional/dspy-ruby/references/toolsets.md +502 -0
- package/plugins/lavra/skills/optional/every-style-editor/SKILL.md +134 -0
- package/plugins/lavra/skills/optional/every-style-editor/references/EVERY_WRITE_STYLE.md +529 -0
- package/plugins/lavra/skills/optional/frontend-design/SKILL.md +42 -0
- package/plugins/lavra/skills/optional/gemini-imagegen/SKILL.md +238 -0
- package/plugins/lavra/skills/optional/gemini-imagegen/requirements.txt +2 -0
- package/plugins/lavra/skills/optional/gemini-imagegen/scripts/compose_images.py +157 -0
- package/plugins/lavra/skills/optional/gemini-imagegen/scripts/edit_image.py +144 -0
- package/plugins/lavra/skills/optional/gemini-imagegen/scripts/gemini_images.py +263 -0
- package/plugins/lavra/skills/optional/gemini-imagegen/scripts/generate_image.py +133 -0
- package/plugins/lavra/skills/optional/gemini-imagegen/scripts/multi_turn_chat.py +216 -0
- package/plugins/lavra/skills/optional/rclone/SKILL.md +151 -0
- package/plugins/lavra/skills/optional/rclone/scripts/check_setup.sh +60 -0
- package/plugins/lavra/skills/project-setup/SKILL.md +414 -0
- package/plugins/lavra/tests/build-index.sh +116 -0
- package/plugins/lavra/tests/recall-bench.sh +224 -0
- package/plugins/lavra/tests/search-fts5.sh +65 -0
- package/plugins/lavra/tests/search-grep.sh +54 -0
- package/plugins/lavra/tests/test-queries.jsonl +25 -0
- package/scripts/apply-context-optimizations.py +345 -0
- package/scripts/convert-cortex.ts +257 -0
- package/scripts/convert-gemini.ts +369 -0
- package/scripts/convert-opencode.ts +313 -0
- package/scripts/package.json +27 -0
- package/scripts/pre-release-check.sh +176 -0
- package/scripts/select-opencode-models.sh +178 -0
- package/scripts/shared/model-config.json +17 -0
- package/scripts/shared/model-mapping.ts +129 -0
- package/scripts/shared/security.ts +97 -0
- package/scripts/shared/yaml-parser.ts +55 -0
- package/scripts/sqlite-to-jsonl.py +207 -0
- package/scripts/test-compatibility.ts +539 -0
- package/scripts/test-features.sh +342 -0
- package/scripts/test-installation.sh +514 -0
- package/scripts/test-security.ts +275 -0
- package/scripts/trim-agent-descriptions.py +177 -0
- 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
|