@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,508 @@
1
+ <overview>
2
+ Testing agent-native apps requires different approaches than traditional unit testing. You're testing whether the agent achieves outcomes, not whether it calls specific functions. This guide provides concrete testing patterns for verifying your app is truly agent-native.
3
+ </overview>
4
+
5
+ <testing_philosophy>
6
+ ## Testing Philosophy
7
+
8
+ ### Test Outcomes, Not Procedures
9
+
10
+ **Traditional (procedure-focused):**
11
+ ```typescript
12
+ // Testing that a specific function was called with specific args
13
+ expect(mockProcessFeedback).toHaveBeenCalledWith({
14
+ message: "Great app!",
15
+ category: "praise",
16
+ priority: 2
17
+ });
18
+ ```
19
+
20
+ **Agent-native (outcome-focused):**
21
+ ```typescript
22
+ // Testing that the outcome was achieved
23
+ const result = await agent.process("Great app!");
24
+ const storedFeedback = await db.feedback.getLatest();
25
+
26
+ expect(storedFeedback.content).toContain("Great app");
27
+ expect(storedFeedback.importance).toBeGreaterThanOrEqual(1);
28
+ expect(storedFeedback.importance).toBeLessThanOrEqual(5);
29
+ // We don't care exactly how it categorized—just that it's reasonable
30
+ ```
31
+
32
+ ### Accept Variability
33
+
34
+ Agents may solve problems differently each time. Your tests should:
35
+ - Verify the end state, not the path
36
+ - Accept reasonable ranges, not exact values
37
+ - Check for presence of required elements, not exact format
38
+ </testing_philosophy>
39
+
40
+ <can_agent_do_it_test>
41
+ ## The "Can Agent Do It?" Test
42
+
43
+ For each UI feature, write a test prompt and verify the agent can accomplish it.
44
+
45
+ ### Template
46
+
47
+ ```typescript
48
+ describe('Agent Capability Tests', () => {
49
+ test('Agent can add a book to library', async () => {
50
+ const result = await agent.chat("Add 'Moby Dick' by Herman Melville to my library");
51
+
52
+ const library = await libraryService.getBooks();
53
+ const mobyDick = library.find(b => b.title.includes("Moby Dick"));
54
+
55
+ expect(mobyDick).toBeDefined();
56
+ expect(mobyDick.author).toContain("Melville");
57
+ });
58
+
59
+ test('Agent can publish to feed', async () => {
60
+ await libraryService.addBook({ id: "book_123", title: "1984" });
61
+
62
+ const result = await agent.chat("Write something about surveillance themes in my feed");
63
+
64
+ const feed = await feedService.getItems();
65
+ const newItem = feed.find(item => item.bookId === "book_123");
66
+
67
+ expect(newItem).toBeDefined();
68
+ expect(newItem.content.toLowerCase()).toMatch(/surveillance|watching|control/);
69
+ });
70
+ });
71
+ ```
72
+
73
+ ### The "Write to Location" Test
74
+
75
+ A key litmus test: can the agent create content in specific app locations?
76
+
77
+ ```typescript
78
+ describe('Location Awareness Tests', () => {
79
+ const locations = [
80
+ { userPhrase: "my reading feed", expectedTool: "publish_to_feed" },
81
+ { userPhrase: "my library", expectedTool: "add_book" },
82
+ { userPhrase: "my research folder", expectedTool: "write_file" },
83
+ { userPhrase: "my profile", expectedTool: "write_file" },
84
+ ];
85
+
86
+ for (const { userPhrase, expectedTool } of locations) {
87
+ test(`Agent knows how to write to "${userPhrase}"`, async () => {
88
+ const prompt = `Write a test note to ${userPhrase}`;
89
+ const result = await agent.chat(prompt);
90
+
91
+ expect(result.toolCalls).toContainEqual(
92
+ expect.objectContaining({ name: expectedTool })
93
+ );
94
+ });
95
+ }
96
+ });
97
+ ```
98
+ </can_agent_do_it_test>
99
+
100
+ <surprise_test>
101
+ ## The "Surprise Test"
102
+
103
+ A well-designed agent-native app lets the agent figure out creative approaches. Test this by giving open-ended requests.
104
+
105
+ ### The Test
106
+
107
+ ```typescript
108
+ describe('Agent Creativity Tests', () => {
109
+ test('Agent can handle open-ended requests', async () => {
110
+ await libraryService.addBook({ id: "1", title: "1984", author: "Orwell" });
111
+ await libraryService.addBook({ id: "2", title: "Brave New World", author: "Huxley" });
112
+
113
+ const result = await agent.chat("Help me organize my reading for next month");
114
+
115
+ expect(result.toolCalls.length).toBeGreaterThan(0);
116
+
117
+ const libraryTools = ["read_library", "write_file", "publish_to_feed"];
118
+ const usedLibraryTool = result.toolCalls.some(
119
+ call => libraryTools.includes(call.name)
120
+ );
121
+ expect(usedLibraryTool).toBe(true);
122
+ });
123
+
124
+ test('Agent finds creative solutions', async () => {
125
+ const result = await agent.chat(
126
+ "I want to understand the dystopian themes across my sci-fi books"
127
+ );
128
+
129
+ // We just verify it did something substantive
130
+ expect(result.response.length).toBeGreaterThan(100);
131
+ expect(result.toolCalls.length).toBeGreaterThan(0);
132
+ });
133
+ });
134
+ ```
135
+
136
+ ### What Failure Looks Like
137
+
138
+ ```typescript
139
+ // FAILURE: Agent can only say it can't do that
140
+ const result = await agent.chat("Help me prepare for a book club discussion");
141
+
142
+ // Bad outcome:
143
+ expect(result.response).not.toContain("I can't");
144
+ expect(result.response).not.toContain("I don't have a tool");
145
+ expect(result.response).not.toContain("Could you clarify");
146
+
147
+ // If the agent asks for clarification on something it should understand,
148
+ // you have a context injection or capability gap
149
+ ```
150
+ </surprise_test>
151
+
152
+ <parity_testing>
153
+ ## Automated Parity Testing
154
+
155
+ Ensure every UI action has an agent equivalent.
156
+
157
+ ### Capability Map Testing
158
+
159
+ ```typescript
160
+ // capability-map.ts
161
+ export const capabilityMap = {
162
+ "View library": "read_library",
163
+ "Add book": "add_book",
164
+ "Delete book": "delete_book",
165
+ "Publish insight": "publish_to_feed",
166
+ "Start research": "start_research",
167
+ "View highlights": "read_library",
168
+ "Edit profile": "write_file",
169
+ "Search web": "web_search",
170
+ "Export data": "N/A",
171
+ };
172
+
173
+ // parity.test.ts
174
+ import { capabilityMap } from './capability-map';
175
+ import { getAgentTools } from './agent-config';
176
+ import { getSystemPrompt } from './system-prompt';
177
+
178
+ describe('Action Parity', () => {
179
+ const agentTools = getAgentTools();
180
+ const systemPrompt = getSystemPrompt();
181
+
182
+ for (const [uiAction, toolName] of Object.entries(capabilityMap)) {
183
+ if (toolName === 'N/A') continue;
184
+
185
+ test(`"${uiAction}" has agent tool: ${toolName}`, () => {
186
+ const toolNames = agentTools.map(t => t.name);
187
+ expect(toolNames).toContain(toolName);
188
+ });
189
+
190
+ test(`${toolName} is documented in system prompt`, () => {
191
+ expect(systemPrompt).toContain(toolName);
192
+ });
193
+ }
194
+ });
195
+ ```
196
+
197
+ ### Context Parity Testing
198
+
199
+ ```typescript
200
+ describe('Context Parity', () => {
201
+ test('Agent sees all data that UI shows', async () => {
202
+ await libraryService.addBook({ id: "1", title: "Test Book" });
203
+ await feedService.addItem({ id: "f1", content: "Test insight" });
204
+
205
+ const systemPrompt = await buildSystemPrompt();
206
+
207
+ expect(systemPrompt).toContain("Test Book");
208
+ expect(systemPrompt).toContain("Test insight");
209
+ });
210
+ });
211
+ ```
212
+ </parity_testing>
213
+
214
+ <integration_testing>
215
+ ## Integration Testing
216
+
217
+ Test the full flow from user request to outcome.
218
+
219
+ ### End-to-End Flow Tests
220
+
221
+ ```typescript
222
+ describe('End-to-End Flows', () => {
223
+ test('Research flow: request → web search → file creation', async () => {
224
+ const bookId = "book_123";
225
+ await libraryService.addBook({ id: bookId, title: "Moby Dick" });
226
+
227
+ await agent.chat("Research the historical context of whaling in Moby Dick");
228
+
229
+ const searchCalls = mockWebSearch.mock.calls;
230
+ expect(searchCalls.length).toBeGreaterThan(0);
231
+
232
+ const researchFiles = await fileService.listFiles(`Research/${bookId}/`);
233
+ expect(researchFiles.length).toBeGreaterThan(0);
234
+
235
+ const content = await fileService.readFile(researchFiles[0]);
236
+ expect(content.toLowerCase()).toMatch(/whale|whaling|nantucket|melville/);
237
+ });
238
+
239
+ test('Publish flow: request → tool call → feed update', async () => {
240
+ await libraryService.addBook({ id: "book_1", title: "1984" });
241
+
242
+ const feedBefore = await feedService.getItems();
243
+
244
+ await agent.chat("Write something about Big Brother for my reading feed");
245
+
246
+ const feedAfter = await feedService.getItems();
247
+ expect(feedAfter.length).toBe(feedBefore.length + 1);
248
+
249
+ const newItem = feedAfter.find(item =>
250
+ !feedBefore.some(old => old.id === item.id)
251
+ );
252
+ expect(newItem).toBeDefined();
253
+ expect(newItem.content.toLowerCase()).toMatch(/big brother|surveillance|watching/);
254
+ });
255
+ });
256
+ ```
257
+
258
+ ### Failure Recovery Tests
259
+
260
+ ```typescript
261
+ describe('Failure Recovery', () => {
262
+ test('Agent handles missing book gracefully', async () => {
263
+ const result = await agent.chat("Tell me about 'Nonexistent Book'");
264
+
265
+ expect(result.error).toBeUndefined();
266
+ expect(result.response.toLowerCase()).toMatch(
267
+ /not found|don't see|can't find|library/
268
+ );
269
+ });
270
+
271
+ test('Agent recovers from API failure', async () => {
272
+ mockWebSearch.mockRejectedValueOnce(new Error("Network error"));
273
+
274
+ const result = await agent.chat("Research this topic");
275
+
276
+ expect(result.error).toBeUndefined();
277
+ expect(result.response).not.toContain("unhandled exception");
278
+ });
279
+ });
280
+ ```
281
+ </integration_testing>
282
+
283
+ <snapshot_testing>
284
+ ## Snapshot Testing for System Prompts
285
+
286
+ Track changes to system prompts and context injection over time.
287
+
288
+ ```typescript
289
+ describe('System Prompt Stability', () => {
290
+ test('System prompt structure matches snapshot', async () => {
291
+ const systemPrompt = await buildSystemPrompt();
292
+
293
+ const structure = systemPrompt
294
+ .replace(/id: \w+/g, 'id: [ID]')
295
+ .replace(/"[^"]+"/g, '"[TITLE]"')
296
+ .replace(/\d{4}-\d{2}-\d{2}/g, '[DATE]');
297
+
298
+ expect(structure).toMatchSnapshot();
299
+ });
300
+
301
+ test('All capability sections are present', async () => {
302
+ const systemPrompt = await buildSystemPrompt();
303
+
304
+ const requiredSections = [
305
+ "Your Capabilities",
306
+ "Available Books",
307
+ "Recent Activity",
308
+ ];
309
+
310
+ for (const section of requiredSections) {
311
+ expect(systemPrompt).toContain(section);
312
+ }
313
+ });
314
+ });
315
+ ```
316
+ </snapshot_testing>
317
+
318
+ <manual_testing>
319
+ ## Manual Testing Checklist
320
+
321
+ Some things are best tested manually during development:
322
+
323
+ ### Natural Language Variation Test
324
+
325
+ Try multiple phrasings for the same request:
326
+
327
+ ```
328
+ "Add this to my feed"
329
+ "Write something in my reading feed"
330
+ "Publish an insight about this"
331
+ "Put this in the feed"
332
+ "I want this in my feed"
333
+ ```
334
+
335
+ All should work if context injection is correct.
336
+
337
+ ### Edge Case Prompts
338
+
339
+ ```
340
+ "What can you do?"
341
+ → Agent should describe capabilities
342
+
343
+ "Help me with my books"
344
+ → Agent should engage with library, not ask what "books" means
345
+
346
+ "Write something"
347
+ → Agent should ask WHERE (feed, file, etc.) if not clear
348
+
349
+ "Delete everything"
350
+ → Agent should confirm before destructive actions
351
+ ```
352
+
353
+ ### Confusion Test
354
+
355
+ Ask about things that should exist but might not be properly connected:
356
+
357
+ ```
358
+ "What's in my research folder?"
359
+ → Should list files, not ask "what research folder?"
360
+
361
+ "Show me my recent reading"
362
+ → Should show activity, not ask "what do you mean?"
363
+
364
+ "Continue where I left off"
365
+ → Should reference recent activity if available
366
+ ```
367
+ </manual_testing>
368
+
369
+ <ci_integration>
370
+ ## CI/CD Integration
371
+
372
+ Add agent-native tests to your CI pipeline:
373
+
374
+ ```yaml
375
+ # .github/workflows/test.yml
376
+ name: Agent-Native Tests
377
+
378
+ on: [push, pull_request]
379
+
380
+ jobs:
381
+ agent-tests:
382
+ runs-on: ubuntu-latest
383
+ steps:
384
+ - uses: actions/checkout@v3
385
+
386
+ - name: Setup
387
+ run: npm install
388
+
389
+ - name: Run Parity Tests
390
+ run: npm run test:parity
391
+
392
+ - name: Run Capability Tests
393
+ run: npm run test:capabilities
394
+ env:
395
+ ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
396
+
397
+ - name: Check System Prompt Completeness
398
+ run: npm run test:system-prompt
399
+
400
+ - name: Verify Capability Map
401
+ run: |
402
+ npm run generate:capability-map
403
+ git diff --exit-code capability-map.ts
404
+ ```
405
+
406
+ ### Cost-Aware Testing
407
+
408
+ Agent tests cost API tokens. Strategies to manage:
409
+
410
+ ```typescript
411
+ // Use smaller models for basic tests
412
+ const testConfig = {
413
+ model: process.env.CI ? "claude-3-haiku" : "claude-3-opus",
414
+ maxTokens: 500,
415
+ };
416
+
417
+ // Cache responses for deterministic tests
418
+ const cachedAgent = new CachedAgent({
419
+ cacheDir: ".test-cache",
420
+ ttl: 24 * 60 * 60 * 1000, // 24 hours
421
+ });
422
+
423
+ // Run expensive tests only on main branch
424
+ if (process.env.GITHUB_REF === 'refs/heads/main') {
425
+ describe('Full Integration Tests', () => { ... });
426
+ }
427
+ ```
428
+ </ci_integration>
429
+
430
+ <test_utilities>
431
+ ## Test Utilities
432
+
433
+ ### Agent Test Harness
434
+
435
+ ```typescript
436
+ class AgentTestHarness {
437
+ private agent: Agent;
438
+ private mockServices: MockServices;
439
+
440
+ async setup() {
441
+ this.mockServices = createMockServices();
442
+ this.agent = await createAgent({
443
+ services: this.mockServices,
444
+ model: "claude-3-haiku",
445
+ });
446
+ }
447
+
448
+ async chat(message: string): Promise<AgentResponse> {
449
+ return this.agent.chat(message);
450
+ }
451
+
452
+ async expectToolCall(toolName: string) {
453
+ const lastResponse = this.agent.getLastResponse();
454
+ expect(lastResponse.toolCalls.map(t => t.name)).toContain(toolName);
455
+ }
456
+
457
+ async expectOutcome(check: () => Promise<boolean>) {
458
+ const result = await check();
459
+ expect(result).toBe(true);
460
+ }
461
+
462
+ getState() {
463
+ return {
464
+ library: this.mockServices.library.getBooks(),
465
+ feed: this.mockServices.feed.getItems(),
466
+ files: this.mockServices.files.listAll(),
467
+ };
468
+ }
469
+ }
470
+
471
+ // Usage
472
+ test('full flow', async () => {
473
+ const harness = new AgentTestHarness();
474
+ await harness.setup();
475
+
476
+ await harness.chat("Add 'Moby Dick' to my library");
477
+ await harness.expectToolCall("add_book");
478
+ await harness.expectOutcome(async () => {
479
+ const state = harness.getState();
480
+ return state.library.some(b => b.title.includes("Moby"));
481
+ });
482
+ });
483
+ ```
484
+ </test_utilities>
485
+
486
+ <checklist>
487
+ ## Testing Checklist
488
+
489
+ Automated Tests:
490
+ - [ ] "Can Agent Do It?" tests for each UI action
491
+ - [ ] Location awareness tests ("write to my feed")
492
+ - [ ] Parity tests (tool exists, documented in prompt)
493
+ - [ ] Context parity tests (agent sees what UI shows)
494
+ - [ ] End-to-end flow tests
495
+ - [ ] Failure recovery tests
496
+
497
+ Manual Tests:
498
+ - [ ] Natural language variation (multiple phrasings work)
499
+ - [ ] Edge case prompts (open-ended requests)
500
+ - [ ] Confusion test (agent knows app vocabulary)
501
+ - [ ] Surprise test (agent can be creative)
502
+
503
+ CI Integration:
504
+ - [ ] Parity tests run on every PR
505
+ - [ ] Capability tests run with API key
506
+ - [ ] System prompt completeness check
507
+ - [ ] Capability map drift detection
508
+ </checklist>