ma-agents 2.20.0 → 2.20.2

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 (566) hide show
  1. package/README.md +55 -1
  2. package/lib/agents.js +22 -11
  3. package/lib/bmad-cache/bmb/_git_preserved/HEAD +1 -0
  4. package/lib/bmad-cache/bmb/_git_preserved/config +13 -0
  5. package/lib/bmad-cache/bmb/_git_preserved/description +1 -0
  6. package/lib/bmad-cache/bmb/_git_preserved/hooks/applypatch-msg.sample +15 -0
  7. package/lib/bmad-cache/bmb/_git_preserved/hooks/commit-msg.sample +24 -0
  8. package/lib/bmad-cache/bmb/_git_preserved/hooks/fsmonitor-watchman.sample +174 -0
  9. package/lib/bmad-cache/bmb/_git_preserved/hooks/post-update.sample +8 -0
  10. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-applypatch.sample +14 -0
  11. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-commit.sample +49 -0
  12. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-merge-commit.sample +13 -0
  13. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-push.sample +53 -0
  14. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-rebase.sample +169 -0
  15. package/lib/bmad-cache/bmb/_git_preserved/hooks/pre-receive.sample +24 -0
  16. package/lib/bmad-cache/bmb/_git_preserved/hooks/prepare-commit-msg.sample +42 -0
  17. package/lib/bmad-cache/bmb/_git_preserved/hooks/push-to-checkout.sample +78 -0
  18. package/lib/bmad-cache/bmb/_git_preserved/hooks/sendemail-validate.sample +77 -0
  19. package/lib/bmad-cache/bmb/_git_preserved/hooks/update.sample +128 -0
  20. package/lib/bmad-cache/bmb/_git_preserved/index +0 -0
  21. package/lib/bmad-cache/bmb/_git_preserved/info/exclude +6 -0
  22. package/lib/bmad-cache/bmb/_git_preserved/logs/HEAD +1 -0
  23. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/heads/main +1 -0
  24. package/lib/bmad-cache/bmb/_git_preserved/logs/refs/remotes/origin/HEAD +1 -0
  25. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.idx +0 -0
  26. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.pack +0 -0
  27. package/lib/bmad-cache/bmb/_git_preserved/objects/pack/pack-c6e539e2308f8ed764c5b54b6ab68a67f8a3796b.rev +0 -0
  28. package/lib/bmad-cache/bmb/_git_preserved/packed-refs +2 -0
  29. package/lib/bmad-cache/bmb/_git_preserved/refs/heads/main +1 -0
  30. package/lib/bmad-cache/bmb/_git_preserved/refs/remotes/origin/HEAD +1 -0
  31. package/lib/bmad-cache/bmb/_git_preserved/shallow +1 -0
  32. package/lib/bmad-cache/cache-manifest.json +6 -6
  33. package/lib/bmad-cache/cis/_git_preserved/HEAD +1 -0
  34. package/lib/bmad-cache/cis/_git_preserved/config +13 -0
  35. package/lib/bmad-cache/cis/_git_preserved/description +1 -0
  36. package/lib/bmad-cache/cis/_git_preserved/hooks/applypatch-msg.sample +15 -0
  37. package/lib/bmad-cache/cis/_git_preserved/hooks/commit-msg.sample +24 -0
  38. package/lib/bmad-cache/cis/_git_preserved/hooks/fsmonitor-watchman.sample +174 -0
  39. package/lib/bmad-cache/cis/_git_preserved/hooks/post-update.sample +8 -0
  40. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-applypatch.sample +14 -0
  41. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-commit.sample +49 -0
  42. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-merge-commit.sample +13 -0
  43. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-push.sample +53 -0
  44. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-rebase.sample +169 -0
  45. package/lib/bmad-cache/cis/_git_preserved/hooks/pre-receive.sample +24 -0
  46. package/lib/bmad-cache/cis/_git_preserved/hooks/prepare-commit-msg.sample +42 -0
  47. package/lib/bmad-cache/cis/_git_preserved/hooks/push-to-checkout.sample +78 -0
  48. package/lib/bmad-cache/cis/_git_preserved/hooks/sendemail-validate.sample +77 -0
  49. package/lib/bmad-cache/cis/_git_preserved/hooks/update.sample +128 -0
  50. package/lib/bmad-cache/cis/_git_preserved/index +0 -0
  51. package/lib/bmad-cache/cis/_git_preserved/info/exclude +6 -0
  52. package/lib/bmad-cache/cis/_git_preserved/logs/HEAD +1 -0
  53. package/lib/bmad-cache/cis/_git_preserved/logs/refs/heads/main +1 -0
  54. package/lib/bmad-cache/cis/_git_preserved/logs/refs/remotes/origin/HEAD +1 -0
  55. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.idx +0 -0
  56. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.pack +0 -0
  57. package/lib/bmad-cache/cis/_git_preserved/objects/pack/pack-157d7eb8d527233a8607d926fc74ebf87f2ae0d3.rev +0 -0
  58. package/lib/bmad-cache/cis/_git_preserved/packed-refs +2 -0
  59. package/lib/bmad-cache/cis/_git_preserved/refs/heads/main +1 -0
  60. package/lib/bmad-cache/cis/_git_preserved/refs/remotes/origin/HEAD +1 -0
  61. package/lib/bmad-cache/cis/_git_preserved/shallow +1 -0
  62. package/lib/bmad-cache/gds/_git_preserved/HEAD +1 -0
  63. package/lib/bmad-cache/gds/_git_preserved/config +13 -0
  64. package/lib/bmad-cache/gds/_git_preserved/description +1 -0
  65. package/lib/bmad-cache/gds/_git_preserved/hooks/applypatch-msg.sample +15 -0
  66. package/lib/bmad-cache/gds/_git_preserved/hooks/commit-msg.sample +24 -0
  67. package/lib/bmad-cache/gds/_git_preserved/hooks/fsmonitor-watchman.sample +174 -0
  68. package/lib/bmad-cache/gds/_git_preserved/hooks/post-update.sample +8 -0
  69. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-applypatch.sample +14 -0
  70. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-commit.sample +49 -0
  71. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-merge-commit.sample +13 -0
  72. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-push.sample +53 -0
  73. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-rebase.sample +169 -0
  74. package/lib/bmad-cache/gds/_git_preserved/hooks/pre-receive.sample +24 -0
  75. package/lib/bmad-cache/gds/_git_preserved/hooks/prepare-commit-msg.sample +42 -0
  76. package/lib/bmad-cache/gds/_git_preserved/hooks/push-to-checkout.sample +78 -0
  77. package/lib/bmad-cache/gds/_git_preserved/hooks/sendemail-validate.sample +77 -0
  78. package/lib/bmad-cache/gds/_git_preserved/hooks/update.sample +128 -0
  79. package/lib/bmad-cache/gds/_git_preserved/index +0 -0
  80. package/lib/bmad-cache/gds/_git_preserved/info/exclude +6 -0
  81. package/lib/bmad-cache/gds/_git_preserved/logs/HEAD +1 -0
  82. package/lib/bmad-cache/gds/_git_preserved/logs/refs/heads/main +1 -0
  83. package/lib/bmad-cache/gds/_git_preserved/logs/refs/remotes/origin/HEAD +1 -0
  84. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.idx +0 -0
  85. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.pack +0 -0
  86. package/lib/bmad-cache/gds/_git_preserved/objects/pack/pack-44faafb9245b4ca17ad81bd6c9e6fc52fb5915a1.rev +0 -0
  87. package/lib/bmad-cache/gds/_git_preserved/packed-refs +2 -0
  88. package/lib/bmad-cache/gds/_git_preserved/refs/heads/main +1 -0
  89. package/lib/bmad-cache/gds/_git_preserved/refs/remotes/origin/HEAD +1 -0
  90. package/lib/bmad-cache/gds/_git_preserved/refs/tags/v0.2.2 +1 -0
  91. package/lib/bmad-cache/gds/_git_preserved/shallow +1 -0
  92. package/lib/bmad-cache/gds/package.json +2 -4
  93. package/lib/bmad-cache/gds/src/agents/gds-agent-game-architect/bmad-skill-manifest.yaml +11 -0
  94. package/lib/bmad-cache/gds/src/agents/gds-agent-game-designer/bmad-skill-manifest.yaml +11 -0
  95. package/lib/bmad-cache/gds/src/agents/gds-agent-game-dev/bmad-skill-manifest.yaml +11 -0
  96. package/lib/bmad-cache/gds/src/agents/gds-agent-game-qa/bmad-skill-manifest.yaml +11 -0
  97. package/lib/bmad-cache/gds/src/agents/gds-agent-game-scrum-master/bmad-skill-manifest.yaml +11 -0
  98. package/lib/bmad-cache/gds/src/agents/gds-agent-game-solo-dev/bmad-skill-manifest.yaml +11 -0
  99. package/lib/bmad-cache/gds/src/agents/gds-agent-tech-writer/bmad-skill-manifest.yaml +11 -0
  100. package/lib/bmad-cache/gds/src/module-help.csv +28 -28
  101. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-brainstorm-game/bmad-skill-manifest.yaml +1 -0
  102. package/lib/bmad-cache/gds/src/workflows/1-preproduction/gds-create-game-brief/bmad-skill-manifest.yaml +1 -0
  103. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-gdd/bmad-skill-manifest.yaml +1 -0
  104. package/lib/bmad-cache/gds/src/workflows/2-design/gds-create-narrative/bmad-skill-manifest.yaml +1 -0
  105. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-check-implementation-readiness/bmad-skill-manifest.yaml +1 -0
  106. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-create-epics-and-stories/bmad-skill-manifest.yaml +1 -0
  107. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-game-architecture/bmad-skill-manifest.yaml +1 -0
  108. package/lib/bmad-cache/gds/src/workflows/3-technical/gds-generate-project-context/bmad-skill-manifest.yaml +1 -0
  109. package/lib/bmad-cache/gds/src/workflows/4-production/gds-code-review/bmad-skill-manifest.yaml +1 -0
  110. package/lib/bmad-cache/gds/src/workflows/4-production/gds-correct-course/bmad-skill-manifest.yaml +1 -0
  111. package/lib/bmad-cache/gds/src/workflows/4-production/gds-retrospective/bmad-skill-manifest.yaml +1 -0
  112. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-planning/bmad-skill-manifest.yaml +1 -0
  113. package/lib/bmad-cache/gds/src/workflows/4-production/gds-sprint-status/bmad-skill-manifest.yaml +1 -0
  114. package/lib/bmad-cache/gds/src/workflows/gametest/gds-e2e-scaffold/bmad-skill-manifest.yaml +1 -0
  115. package/lib/bmad-cache/gds/src/workflows/gametest/gds-performance-test/bmad-skill-manifest.yaml +1 -0
  116. package/lib/bmad-cache/gds/src/workflows/gametest/gds-playtest-plan/bmad-skill-manifest.yaml +1 -0
  117. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-automate/bmad-skill-manifest.yaml +1 -0
  118. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-design/bmad-skill-manifest.yaml +1 -0
  119. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-framework/bmad-skill-manifest.yaml +1 -0
  120. package/lib/bmad-cache/gds/src/workflows/gametest/gds-test-review/bmad-skill-manifest.yaml +1 -0
  121. package/lib/bmad-cache/gds/src/workflows/gds-document-project/bmad-skill-manifest.yaml +1 -0
  122. package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev/bmad-skill-manifest.yaml +1 -4
  123. package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-dev-new-preview/bmad-skill-manifest.yaml +1 -4
  124. package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/gds-quick-spec/bmad-skill-manifest.yaml +1 -0
  125. package/lib/bmad-cache/tea/_git_preserved/HEAD +1 -0
  126. package/lib/bmad-cache/tea/_git_preserved/config +13 -0
  127. package/lib/bmad-cache/tea/_git_preserved/description +1 -0
  128. package/lib/bmad-cache/tea/_git_preserved/hooks/applypatch-msg.sample +15 -0
  129. package/lib/bmad-cache/tea/_git_preserved/hooks/commit-msg.sample +24 -0
  130. package/lib/bmad-cache/tea/_git_preserved/hooks/fsmonitor-watchman.sample +174 -0
  131. package/lib/bmad-cache/tea/_git_preserved/hooks/post-update.sample +8 -0
  132. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-applypatch.sample +14 -0
  133. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-commit.sample +49 -0
  134. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-merge-commit.sample +13 -0
  135. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-push.sample +53 -0
  136. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-rebase.sample +169 -0
  137. package/lib/bmad-cache/tea/_git_preserved/hooks/pre-receive.sample +24 -0
  138. package/lib/bmad-cache/tea/_git_preserved/hooks/prepare-commit-msg.sample +42 -0
  139. package/lib/bmad-cache/tea/_git_preserved/hooks/push-to-checkout.sample +78 -0
  140. package/lib/bmad-cache/tea/_git_preserved/hooks/sendemail-validate.sample +77 -0
  141. package/lib/bmad-cache/tea/_git_preserved/hooks/update.sample +128 -0
  142. package/lib/bmad-cache/tea/_git_preserved/index +0 -0
  143. package/lib/bmad-cache/tea/_git_preserved/info/exclude +6 -0
  144. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.idx +0 -0
  145. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.pack +0 -0
  146. package/lib/bmad-cache/tea/_git_preserved/objects/pack/pack-96ec1ce3a9ef4c891e00e060795b4434ba8f7163.rev +0 -0
  147. package/lib/bmad-cache/tea/_git_preserved/packed-refs +2 -0
  148. package/lib/bmad-cache/tea/_git_preserved/refs/heads/main +1 -0
  149. package/lib/bmad-cache/tea/_git_preserved/refs/remotes/origin/HEAD +1 -0
  150. package/lib/bmad-cache/tea/_git_preserved/refs/tags/v1.7.0 +1 -0
  151. package/lib/bmad-cache/tea/_git_preserved/shallow +1 -0
  152. package/lib/bmad.js +33 -0
  153. package/lib/installer.js +60 -3
  154. package/package.json +1 -1
  155. package/scripts/build-bmad-cache.js +6 -3
  156. package/test/agent-injection-strategy.test.js +123 -0
  157. package/test/instruction-injection.test.js +336 -0
  158. package/.cline/clinerules.md +0 -14
  159. package/.cline/skills/.ma-agents.json +0 -199
  160. package/.cline/skills/MANIFEST.yaml +0 -204
  161. package/.cline/skills/ai-audit-trail/SKILL.md +0 -23
  162. package/.cline/skills/cmake-best-practices/SKILL.md +0 -64
  163. package/.cline/skills/cmake-best-practices/examples/cmake.md +0 -59
  164. package/.cline/skills/code-documentation/SKILL.md +0 -57
  165. package/.cline/skills/code-documentation/examples/cpp.md +0 -29
  166. package/.cline/skills/code-documentation/examples/csharp.md +0 -28
  167. package/.cline/skills/code-documentation/examples/javascript_typescript.md +0 -28
  168. package/.cline/skills/code-documentation/examples/python.md +0 -57
  169. package/.cline/skills/code-review/SKILL.md +0 -59
  170. package/.cline/skills/commit-message/SKILL.md +0 -79
  171. package/.cline/skills/cpp-concurrency-safety/SKILL.md +0 -60
  172. package/.cline/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  173. package/.cline/skills/cpp-const-correctness/SKILL.md +0 -63
  174. package/.cline/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  175. package/.cline/skills/cpp-memory-handling/SKILL.md +0 -42
  176. package/.cline/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  177. package/.cline/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  178. package/.cline/skills/cpp-modern-composition/SKILL.md +0 -64
  179. package/.cline/skills/cpp-modern-composition/examples/composition.md +0 -51
  180. package/.cline/skills/cpp-robust-interfaces/SKILL.md +0 -55
  181. package/.cline/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  182. package/.cline/skills/create-hardened-docker-skill/SKILL.md +0 -637
  183. package/.cline/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  184. package/.cline/skills/docker-hardening-verification/SKILL.md +0 -28
  185. package/.cline/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  186. package/.cline/skills/docker-image-signing/SKILL.md +0 -28
  187. package/.cline/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  188. package/.cline/skills/document-revision-history/SKILL.md +0 -104
  189. package/.cline/skills/git-workflow-skill/SKILL.md +0 -194
  190. package/.cline/skills/git-workflow-skill/hooks/commit-msg +0 -61
  191. package/.cline/skills/git-workflow-skill/hooks/pre-commit +0 -38
  192. package/.cline/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  193. package/.cline/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  194. package/.cline/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  195. package/.cline/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  196. package/.cline/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  197. package/.cline/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  198. package/.cline/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  199. package/.cline/skills/js-ts-security-skill/SKILL.md +0 -64
  200. package/.cline/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  201. package/.cline/skills/logging-best-practices/SKILL.md +0 -50
  202. package/.cline/skills/logging-best-practices/docs/logging-standards.md +0 -29
  203. package/.cline/skills/logging-best-practices/examples/cpp.md +0 -36
  204. package/.cline/skills/logging-best-practices/examples/csharp.md +0 -49
  205. package/.cline/skills/logging-best-practices/examples/javascript.md +0 -77
  206. package/.cline/skills/logging-best-practices/examples/python.md +0 -57
  207. package/.cline/skills/opentelemetry-best-practices/SKILL.md +0 -34
  208. package/.cline/skills/opentelemetry-best-practices/docs/otel-standards.md +0 -37
  209. package/.cline/skills/opentelemetry-best-practices/examples/go.md +0 -32
  210. package/.cline/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  211. package/.cline/skills/opentelemetry-best-practices/examples/python.md +0 -37
  212. package/.cline/skills/python-dependency-mgmt/SKILL.md +0 -42
  213. package/.cline/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  214. package/.cline/skills/python-security-skill/SKILL.md +0 -56
  215. package/.cline/skills/python-security-skill/examples/security.md +0 -56
  216. package/.cline/skills/self-signed-cert/SKILL.md +0 -42
  217. package/.cline/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  218. package/.cline/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  219. package/.cline/skills/skill-creator/SKILL.md +0 -196
  220. package/.cline/skills/skill-creator/docs/output-patterns.md +0 -82
  221. package/.cline/skills/skill-creator/docs/workflows.md +0 -28
  222. package/.cline/skills/skill-creator/scripts/init_skill.py +0 -208
  223. package/.cline/skills/skill-creator/scripts/package_skill.py +0 -99
  224. package/.cline/skills/skill-creator/scripts/quick_validate.py +0 -113
  225. package/.cline/skills/test-accompanied-development/SKILL.md +0 -50
  226. package/.cline/skills/test-generator/SKILL.md +0 -73
  227. package/.cline/skills/vercel-react-best-practices/SKILL.md +0 -109
  228. package/.cline/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  229. package/.cline/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  230. package/.clinerules +0 -14
  231. package/.cursor/cursor.md +0 -14
  232. package/.cursor/skills/.ma-agents.json +0 -199
  233. package/.cursor/skills/MANIFEST.yaml +0 -204
  234. package/.cursor/skills/ai-audit-trail/SKILL.md +0 -23
  235. package/.cursor/skills/cmake-best-practices/SKILL.md +0 -64
  236. package/.cursor/skills/cmake-best-practices/examples/cmake.md +0 -59
  237. package/.cursor/skills/code-documentation/SKILL.md +0 -57
  238. package/.cursor/skills/code-documentation/examples/cpp.md +0 -29
  239. package/.cursor/skills/code-documentation/examples/csharp.md +0 -28
  240. package/.cursor/skills/code-documentation/examples/javascript_typescript.md +0 -28
  241. package/.cursor/skills/code-documentation/examples/python.md +0 -57
  242. package/.cursor/skills/code-review/SKILL.md +0 -43
  243. package/.cursor/skills/commit-message/SKILL.md +0 -79
  244. package/.cursor/skills/cpp-concurrency-safety/SKILL.md +0 -60
  245. package/.cursor/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  246. package/.cursor/skills/cpp-const-correctness/SKILL.md +0 -63
  247. package/.cursor/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  248. package/.cursor/skills/cpp-memory-handling/SKILL.md +0 -42
  249. package/.cursor/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  250. package/.cursor/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  251. package/.cursor/skills/cpp-modern-composition/SKILL.md +0 -64
  252. package/.cursor/skills/cpp-modern-composition/examples/composition.md +0 -51
  253. package/.cursor/skills/cpp-robust-interfaces/SKILL.md +0 -55
  254. package/.cursor/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  255. package/.cursor/skills/create-hardened-docker-skill/SKILL.md +0 -637
  256. package/.cursor/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  257. package/.cursor/skills/docker-hardening-verification/SKILL.md +0 -28
  258. package/.cursor/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  259. package/.cursor/skills/docker-image-signing/SKILL.md +0 -28
  260. package/.cursor/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  261. package/.cursor/skills/document-revision-history/SKILL.md +0 -104
  262. package/.cursor/skills/git-workflow-skill/SKILL.md +0 -194
  263. package/.cursor/skills/git-workflow-skill/hooks/commit-msg +0 -61
  264. package/.cursor/skills/git-workflow-skill/hooks/pre-commit +0 -38
  265. package/.cursor/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  266. package/.cursor/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  267. package/.cursor/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  268. package/.cursor/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  269. package/.cursor/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  270. package/.cursor/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  271. package/.cursor/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  272. package/.cursor/skills/js-ts-security-skill/SKILL.md +0 -64
  273. package/.cursor/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  274. package/.cursor/skills/logging-best-practices/SKILL.md +0 -50
  275. package/.cursor/skills/logging-best-practices/examples/cpp.md +0 -36
  276. package/.cursor/skills/logging-best-practices/examples/csharp.md +0 -49
  277. package/.cursor/skills/logging-best-practices/examples/javascript.md +0 -77
  278. package/.cursor/skills/logging-best-practices/examples/python.md +0 -57
  279. package/.cursor/skills/logging-best-practices/references/logging-standards.md +0 -29
  280. package/.cursor/skills/opentelemetry-best-practices/SKILL.md +0 -34
  281. package/.cursor/skills/opentelemetry-best-practices/examples/go.md +0 -32
  282. package/.cursor/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  283. package/.cursor/skills/opentelemetry-best-practices/examples/python.md +0 -37
  284. package/.cursor/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  285. package/.cursor/skills/python-dependency-mgmt/SKILL.md +0 -42
  286. package/.cursor/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  287. package/.cursor/skills/python-security-skill/SKILL.md +0 -56
  288. package/.cursor/skills/python-security-skill/examples/security.md +0 -56
  289. package/.cursor/skills/self-signed-cert/SKILL.md +0 -42
  290. package/.cursor/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  291. package/.cursor/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  292. package/.cursor/skills/skill-creator/SKILL.md +0 -196
  293. package/.cursor/skills/skill-creator/references/output-patterns.md +0 -82
  294. package/.cursor/skills/skill-creator/references/workflows.md +0 -28
  295. package/.cursor/skills/skill-creator/scripts/init_skill.py +0 -208
  296. package/.cursor/skills/skill-creator/scripts/package_skill.py +0 -99
  297. package/.cursor/skills/skill-creator/scripts/quick_validate.py +0 -113
  298. package/.cursor/skills/test-accompanied-development/SKILL.md +0 -50
  299. package/.cursor/skills/test-generator/SKILL.md +0 -65
  300. package/.cursor/skills/vercel-react-best-practices/SKILL.md +0 -109
  301. package/.cursor/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  302. package/.cursor/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  303. package/.gemini/gemini.md +0 -14
  304. package/.gemini/skills/.ma-agents.json +0 -199
  305. package/.gemini/skills/MANIFEST.yaml +0 -204
  306. package/.gemini/skills/ai-audit-trail/SKILL.md +0 -23
  307. package/.gemini/skills/cmake-best-practices/SKILL.md +0 -64
  308. package/.gemini/skills/cmake-best-practices/examples/cmake.md +0 -59
  309. package/.gemini/skills/code-documentation/SKILL.md +0 -57
  310. package/.gemini/skills/code-documentation/examples/cpp.md +0 -29
  311. package/.gemini/skills/code-documentation/examples/csharp.md +0 -28
  312. package/.gemini/skills/code-documentation/examples/javascript_typescript.md +0 -28
  313. package/.gemini/skills/code-documentation/examples/python.md +0 -57
  314. package/.gemini/skills/code-review/SKILL.md +0 -43
  315. package/.gemini/skills/commit-message/SKILL.md +0 -79
  316. package/.gemini/skills/cpp-concurrency-safety/SKILL.md +0 -60
  317. package/.gemini/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  318. package/.gemini/skills/cpp-const-correctness/SKILL.md +0 -63
  319. package/.gemini/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  320. package/.gemini/skills/cpp-memory-handling/SKILL.md +0 -42
  321. package/.gemini/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  322. package/.gemini/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  323. package/.gemini/skills/cpp-modern-composition/SKILL.md +0 -64
  324. package/.gemini/skills/cpp-modern-composition/examples/composition.md +0 -51
  325. package/.gemini/skills/cpp-robust-interfaces/SKILL.md +0 -55
  326. package/.gemini/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  327. package/.gemini/skills/create-hardened-docker-skill/SKILL.md +0 -637
  328. package/.gemini/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  329. package/.gemini/skills/docker-hardening-verification/SKILL.md +0 -28
  330. package/.gemini/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  331. package/.gemini/skills/docker-image-signing/SKILL.md +0 -28
  332. package/.gemini/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  333. package/.gemini/skills/document-revision-history/SKILL.md +0 -104
  334. package/.gemini/skills/git-workflow-skill/SKILL.md +0 -194
  335. package/.gemini/skills/git-workflow-skill/hooks/commit-msg +0 -61
  336. package/.gemini/skills/git-workflow-skill/hooks/pre-commit +0 -38
  337. package/.gemini/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  338. package/.gemini/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  339. package/.gemini/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  340. package/.gemini/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  341. package/.gemini/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  342. package/.gemini/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  343. package/.gemini/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  344. package/.gemini/skills/js-ts-security-skill/SKILL.md +0 -64
  345. package/.gemini/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  346. package/.gemini/skills/logging-best-practices/SKILL.md +0 -50
  347. package/.gemini/skills/logging-best-practices/examples/cpp.md +0 -36
  348. package/.gemini/skills/logging-best-practices/examples/csharp.md +0 -49
  349. package/.gemini/skills/logging-best-practices/examples/javascript.md +0 -77
  350. package/.gemini/skills/logging-best-practices/examples/python.md +0 -57
  351. package/.gemini/skills/logging-best-practices/references/logging-standards.md +0 -29
  352. package/.gemini/skills/opentelemetry-best-practices/SKILL.md +0 -34
  353. package/.gemini/skills/opentelemetry-best-practices/examples/go.md +0 -32
  354. package/.gemini/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  355. package/.gemini/skills/opentelemetry-best-practices/examples/python.md +0 -37
  356. package/.gemini/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  357. package/.gemini/skills/python-dependency-mgmt/SKILL.md +0 -42
  358. package/.gemini/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  359. package/.gemini/skills/python-security-skill/SKILL.md +0 -56
  360. package/.gemini/skills/python-security-skill/examples/security.md +0 -56
  361. package/.gemini/skills/self-signed-cert/SKILL.md +0 -42
  362. package/.gemini/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  363. package/.gemini/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  364. package/.gemini/skills/skill-creator/SKILL.md +0 -196
  365. package/.gemini/skills/skill-creator/references/output-patterns.md +0 -82
  366. package/.gemini/skills/skill-creator/references/workflows.md +0 -28
  367. package/.gemini/skills/skill-creator/scripts/init_skill.py +0 -208
  368. package/.gemini/skills/skill-creator/scripts/package_skill.py +0 -99
  369. package/.gemini/skills/skill-creator/scripts/quick_validate.py +0 -113
  370. package/.gemini/skills/test-accompanied-development/SKILL.md +0 -50
  371. package/.gemini/skills/test-generator/SKILL.md +0 -65
  372. package/.gemini/skills/vercel-react-best-practices/SKILL.md +0 -109
  373. package/.gemini/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  374. package/.gemini/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  375. package/.github/copilot/copilot.md +0 -14
  376. package/.github/copilot/skills/.ma-agents.json +0 -199
  377. package/.github/copilot/skills/MANIFEST.yaml +0 -204
  378. package/.github/copilot/skills/ai-audit-trail/SKILL.md +0 -23
  379. package/.github/copilot/skills/cmake-best-practices/SKILL.md +0 -64
  380. package/.github/copilot/skills/cmake-best-practices/examples/cmake.md +0 -59
  381. package/.github/copilot/skills/code-documentation/SKILL.md +0 -57
  382. package/.github/copilot/skills/code-documentation/examples/cpp.md +0 -29
  383. package/.github/copilot/skills/code-documentation/examples/csharp.md +0 -28
  384. package/.github/copilot/skills/code-documentation/examples/javascript_typescript.md +0 -28
  385. package/.github/copilot/skills/code-documentation/examples/python.md +0 -57
  386. package/.github/copilot/skills/code-review/SKILL.md +0 -43
  387. package/.github/copilot/skills/commit-message/SKILL.md +0 -79
  388. package/.github/copilot/skills/cpp-concurrency-safety/SKILL.md +0 -60
  389. package/.github/copilot/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  390. package/.github/copilot/skills/cpp-const-correctness/SKILL.md +0 -63
  391. package/.github/copilot/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  392. package/.github/copilot/skills/cpp-memory-handling/SKILL.md +0 -42
  393. package/.github/copilot/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  394. package/.github/copilot/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  395. package/.github/copilot/skills/cpp-modern-composition/SKILL.md +0 -64
  396. package/.github/copilot/skills/cpp-modern-composition/examples/composition.md +0 -51
  397. package/.github/copilot/skills/cpp-robust-interfaces/SKILL.md +0 -55
  398. package/.github/copilot/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  399. package/.github/copilot/skills/create-hardened-docker-skill/SKILL.md +0 -637
  400. package/.github/copilot/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  401. package/.github/copilot/skills/docker-hardening-verification/SKILL.md +0 -28
  402. package/.github/copilot/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  403. package/.github/copilot/skills/docker-image-signing/SKILL.md +0 -28
  404. package/.github/copilot/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  405. package/.github/copilot/skills/document-revision-history/SKILL.md +0 -104
  406. package/.github/copilot/skills/git-workflow-skill/SKILL.md +0 -194
  407. package/.github/copilot/skills/git-workflow-skill/hooks/commit-msg +0 -61
  408. package/.github/copilot/skills/git-workflow-skill/hooks/pre-commit +0 -38
  409. package/.github/copilot/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  410. package/.github/copilot/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  411. package/.github/copilot/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  412. package/.github/copilot/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  413. package/.github/copilot/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  414. package/.github/copilot/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  415. package/.github/copilot/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  416. package/.github/copilot/skills/js-ts-security-skill/SKILL.md +0 -64
  417. package/.github/copilot/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  418. package/.github/copilot/skills/logging-best-practices/SKILL.md +0 -50
  419. package/.github/copilot/skills/logging-best-practices/examples/cpp.md +0 -36
  420. package/.github/copilot/skills/logging-best-practices/examples/csharp.md +0 -49
  421. package/.github/copilot/skills/logging-best-practices/examples/javascript.md +0 -77
  422. package/.github/copilot/skills/logging-best-practices/examples/python.md +0 -57
  423. package/.github/copilot/skills/logging-best-practices/references/logging-standards.md +0 -29
  424. package/.github/copilot/skills/opentelemetry-best-practices/SKILL.md +0 -34
  425. package/.github/copilot/skills/opentelemetry-best-practices/examples/go.md +0 -32
  426. package/.github/copilot/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  427. package/.github/copilot/skills/opentelemetry-best-practices/examples/python.md +0 -37
  428. package/.github/copilot/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  429. package/.github/copilot/skills/python-dependency-mgmt/SKILL.md +0 -42
  430. package/.github/copilot/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  431. package/.github/copilot/skills/python-security-skill/SKILL.md +0 -56
  432. package/.github/copilot/skills/python-security-skill/examples/security.md +0 -56
  433. package/.github/copilot/skills/self-signed-cert/SKILL.md +0 -42
  434. package/.github/copilot/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  435. package/.github/copilot/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  436. package/.github/copilot/skills/skill-creator/SKILL.md +0 -196
  437. package/.github/copilot/skills/skill-creator/references/output-patterns.md +0 -82
  438. package/.github/copilot/skills/skill-creator/references/workflows.md +0 -28
  439. package/.github/copilot/skills/skill-creator/scripts/init_skill.py +0 -208
  440. package/.github/copilot/skills/skill-creator/scripts/package_skill.py +0 -99
  441. package/.github/copilot/skills/skill-creator/scripts/quick_validate.py +0 -113
  442. package/.github/copilot/skills/test-accompanied-development/SKILL.md +0 -50
  443. package/.github/copilot/skills/test-generator/SKILL.md +0 -65
  444. package/.github/copilot/skills/vercel-react-best-practices/SKILL.md +0 -109
  445. package/.github/copilot/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  446. package/.github/copilot/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  447. package/.kilocode/kilocode.md +0 -14
  448. package/.kilocode/skills/.ma-agents.json +0 -199
  449. package/.kilocode/skills/MANIFEST.yaml +0 -204
  450. package/.kilocode/skills/ai-audit-trail/SKILL.md +0 -23
  451. package/.kilocode/skills/cmake-best-practices/SKILL.md +0 -64
  452. package/.kilocode/skills/cmake-best-practices/examples/cmake.md +0 -59
  453. package/.kilocode/skills/code-documentation/SKILL.md +0 -57
  454. package/.kilocode/skills/code-documentation/examples/cpp.md +0 -29
  455. package/.kilocode/skills/code-documentation/examples/csharp.md +0 -28
  456. package/.kilocode/skills/code-documentation/examples/javascript_typescript.md +0 -28
  457. package/.kilocode/skills/code-documentation/examples/python.md +0 -57
  458. package/.kilocode/skills/code-review/SKILL.md +0 -43
  459. package/.kilocode/skills/commit-message/SKILL.md +0 -79
  460. package/.kilocode/skills/cpp-concurrency-safety/SKILL.md +0 -60
  461. package/.kilocode/skills/cpp-concurrency-safety/examples/concurrency.md +0 -73
  462. package/.kilocode/skills/cpp-const-correctness/SKILL.md +0 -63
  463. package/.kilocode/skills/cpp-const-correctness/examples/const_correctness.md +0 -54
  464. package/.kilocode/skills/cpp-memory-handling/SKILL.md +0 -42
  465. package/.kilocode/skills/cpp-memory-handling/examples/modern-cpp.md +0 -49
  466. package/.kilocode/skills/cpp-memory-handling/examples/smart-pointers.md +0 -46
  467. package/.kilocode/skills/cpp-modern-composition/SKILL.md +0 -64
  468. package/.kilocode/skills/cpp-modern-composition/examples/composition.md +0 -51
  469. package/.kilocode/skills/cpp-robust-interfaces/SKILL.md +0 -55
  470. package/.kilocode/skills/cpp-robust-interfaces/examples/interfaces.md +0 -56
  471. package/.kilocode/skills/create-hardened-docker-skill/SKILL.md +0 -637
  472. package/.kilocode/skills/create-hardened-docker-skill/scripts/create-all.sh +0 -489
  473. package/.kilocode/skills/docker-hardening-verification/SKILL.md +0 -28
  474. package/.kilocode/skills/docker-hardening-verification/scripts/verify-hardening.sh +0 -39
  475. package/.kilocode/skills/docker-image-signing/SKILL.md +0 -28
  476. package/.kilocode/skills/docker-image-signing/scripts/sign-image.sh +0 -33
  477. package/.kilocode/skills/document-revision-history/SKILL.md +0 -104
  478. package/.kilocode/skills/git-workflow-skill/SKILL.md +0 -194
  479. package/.kilocode/skills/git-workflow-skill/hooks/commit-msg +0 -61
  480. package/.kilocode/skills/git-workflow-skill/hooks/pre-commit +0 -38
  481. package/.kilocode/skills/git-workflow-skill/hooks/prepare-commit-msg +0 -56
  482. package/.kilocode/skills/git-workflow-skill/scripts/finish-feature.sh +0 -192
  483. package/.kilocode/skills/git-workflow-skill/scripts/install-hooks.sh +0 -55
  484. package/.kilocode/skills/git-workflow-skill/scripts/start-feature.sh +0 -110
  485. package/.kilocode/skills/git-workflow-skill/scripts/validate-workflow.sh +0 -229
  486. package/.kilocode/skills/js-ts-dependency-mgmt/SKILL.md +0 -49
  487. package/.kilocode/skills/js-ts-dependency-mgmt/examples/dependency_mgmt.md +0 -60
  488. package/.kilocode/skills/js-ts-security-skill/SKILL.md +0 -64
  489. package/.kilocode/skills/js-ts-security-skill/scripts/verify-security.sh +0 -136
  490. package/.kilocode/skills/logging-best-practices/SKILL.md +0 -50
  491. package/.kilocode/skills/logging-best-practices/examples/cpp.md +0 -36
  492. package/.kilocode/skills/logging-best-practices/examples/csharp.md +0 -49
  493. package/.kilocode/skills/logging-best-practices/examples/javascript.md +0 -77
  494. package/.kilocode/skills/logging-best-practices/examples/python.md +0 -57
  495. package/.kilocode/skills/logging-best-practices/references/logging-standards.md +0 -29
  496. package/.kilocode/skills/opentelemetry-best-practices/SKILL.md +0 -34
  497. package/.kilocode/skills/opentelemetry-best-practices/examples/go.md +0 -32
  498. package/.kilocode/skills/opentelemetry-best-practices/examples/javascript.md +0 -58
  499. package/.kilocode/skills/opentelemetry-best-practices/examples/python.md +0 -37
  500. package/.kilocode/skills/opentelemetry-best-practices/references/otel-standards.md +0 -37
  501. package/.kilocode/skills/python-dependency-mgmt/SKILL.md +0 -42
  502. package/.kilocode/skills/python-dependency-mgmt/examples/dependency_mgmt.md +0 -67
  503. package/.kilocode/skills/python-security-skill/SKILL.md +0 -56
  504. package/.kilocode/skills/python-security-skill/examples/security.md +0 -56
  505. package/.kilocode/skills/self-signed-cert/SKILL.md +0 -42
  506. package/.kilocode/skills/self-signed-cert/scripts/generate-cert.ps1 +0 -45
  507. package/.kilocode/skills/self-signed-cert/scripts/generate-cert.sh +0 -43
  508. package/.kilocode/skills/skill-creator/SKILL.md +0 -196
  509. package/.kilocode/skills/skill-creator/references/output-patterns.md +0 -82
  510. package/.kilocode/skills/skill-creator/references/workflows.md +0 -28
  511. package/.kilocode/skills/skill-creator/scripts/init_skill.py +0 -208
  512. package/.kilocode/skills/skill-creator/scripts/package_skill.py +0 -99
  513. package/.kilocode/skills/skill-creator/scripts/quick_validate.py +0 -113
  514. package/.kilocode/skills/test-accompanied-development/SKILL.md +0 -50
  515. package/.kilocode/skills/test-generator/SKILL.md +0 -65
  516. package/.kilocode/skills/vercel-react-best-practices/SKILL.md +0 -109
  517. package/.kilocode/skills/verify-hardened-docker-skill/SKILL.md +0 -442
  518. package/.kilocode/skills/verify-hardened-docker-skill/scripts/verify-docker-hardening.sh +0 -439
  519. package/lib/bmad-cache/gds/src/agents/game-architect.agent.yaml +0 -44
  520. package/lib/bmad-cache/gds/src/agents/game-designer.agent.yaml +0 -45
  521. package/lib/bmad-cache/gds/src/agents/game-dev.agent.yaml +0 -49
  522. package/lib/bmad-cache/gds/src/agents/game-qa.agent.yaml +0 -63
  523. package/lib/bmad-cache/gds/src/agents/game-scrum-master.agent.yaml +0 -52
  524. package/lib/bmad-cache/gds/src/agents/game-solo-dev.agent.yaml +0 -53
  525. package/lib/bmad-cache/gds/src/agents/tech-writer/tech-writer.agent.yaml +0 -45
  526. package/lib/bmad-cache/gds/src/teams/default-party.csv +0 -12
  527. package/lib/bmad-cache/gds/src/teams/team-gamedev.yaml +0 -29
  528. package/lib/bmad-cache/gds/src/workflows/1-preproduction/brainstorm-game/bmad-skill-manifest.yaml +0 -3
  529. package/lib/bmad-cache/gds/src/workflows/1-preproduction/game-brief/bmad-skill-manifest.yaml +0 -3
  530. package/lib/bmad-cache/gds/src/workflows/2-design/gdd/bmad-skill-manifest.yaml +0 -3
  531. package/lib/bmad-cache/gds/src/workflows/2-design/narrative/bmad-skill-manifest.yaml +0 -3
  532. package/lib/bmad-cache/gds/src/workflows/3-technical/check-implementation-readiness/bmad-skill-manifest.yaml +0 -3
  533. package/lib/bmad-cache/gds/src/workflows/3-technical/create-epics-and-stories/bmad-skill-manifest.yaml +0 -3
  534. package/lib/bmad-cache/gds/src/workflows/3-technical/game-architecture/bmad-skill-manifest.yaml +0 -3
  535. package/lib/bmad-cache/gds/src/workflows/3-technical/generate-project-context/bmad-skill-manifest.yaml +0 -3
  536. package/lib/bmad-cache/gds/src/workflows/4-production/code-review/bmad-skill-manifest.yaml +0 -3
  537. package/lib/bmad-cache/gds/src/workflows/4-production/correct-course/bmad-skill-manifest.yaml +0 -3
  538. package/lib/bmad-cache/gds/src/workflows/4-production/retrospective/bmad-skill-manifest.yaml +0 -3
  539. package/lib/bmad-cache/gds/src/workflows/4-production/sprint-planning/bmad-skill-manifest.yaml +0 -3
  540. package/lib/bmad-cache/gds/src/workflows/4-production/sprint-status/bmad-skill-manifest.yaml +0 -3
  541. package/lib/bmad-cache/gds/src/workflows/document-project/bmad-skill-manifest.yaml +0 -3
  542. package/lib/bmad-cache/gds/src/workflows/gametest/automate/bmad-skill-manifest.yaml +0 -3
  543. package/lib/bmad-cache/gds/src/workflows/gametest/e2e-scaffold/bmad-skill-manifest.yaml +0 -3
  544. package/lib/bmad-cache/gds/src/workflows/gametest/performance/bmad-skill-manifest.yaml +0 -3
  545. package/lib/bmad-cache/gds/src/workflows/gametest/playtest-plan/bmad-skill-manifest.yaml +0 -3
  546. package/lib/bmad-cache/gds/src/workflows/gametest/test-design/bmad-skill-manifest.yaml +0 -3
  547. package/lib/bmad-cache/gds/src/workflows/gametest/test-framework/bmad-skill-manifest.yaml +0 -3
  548. package/lib/bmad-cache/gds/src/workflows/gametest/test-review/bmad-skill-manifest.yaml +0 -3
  549. package/lib/bmad-cache/gds/src/workflows/gds-quick-flow/quick-spec/bmad-skill-manifest.yaml +0 -3
  550. package/lib/bmad-cache/tea/.github/CODE_OF_CONDUCT.md +0 -128
  551. package/lib/bmad-cache/tea/.github/FUNDING.yaml +0 -15
  552. package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/config.yaml +0 -11
  553. package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/feature_request.md +0 -70
  554. package/lib/bmad-cache/tea/.github/ISSUE_TEMPLATE/issue.md +0 -61
  555. package/lib/bmad-cache/tea/.github/workflows/docs.yaml +0 -66
  556. package/lib/bmad-cache/tea/.github/workflows/manual-release.yaml +0 -195
  557. package/lib/bmad-cache/tea/.github/workflows/quality.yaml +0 -114
  558. /package/lib/bmad-cache/gds/src/workflows/1-preproduction/{brainstorm-game → gds-brainstorm-game}/game-brain-methods.csv +0 -0
  559. /package/lib/bmad-cache/gds/src/workflows/2-design/{gdd → gds-create-gdd}/game-types.csv +0 -0
  560. /package/lib/bmad-cache/gds/src/workflows/3-technical/{game-architecture → gds-game-architecture}/architecture-patterns.yaml +0 -0
  561. /package/lib/bmad-cache/gds/src/workflows/3-technical/{game-architecture → gds-game-architecture}/decision-catalog.yaml +0 -0
  562. /package/lib/bmad-cache/gds/src/workflows/3-technical/{game-architecture → gds-game-architecture}/engine-mcps.yaml +0 -0
  563. /package/lib/bmad-cache/gds/src/workflows/3-technical/{game-architecture → gds-game-architecture}/pattern-categories.csv +0 -0
  564. /package/lib/bmad-cache/gds/src/workflows/4-production/{sprint-planning → gds-sprint-planning}/sprint-status-template.yaml +0 -0
  565. /package/lib/bmad-cache/gds/src/workflows/{document-project → gds-document-project}/documentation-requirements.csv +0 -0
  566. /package/lib/bmad-cache/gds/src/workflows/{document-project → gds-document-project}/templates/project-scan-report-schema.json +0 -0
package/lib/installer.js CHANGED
@@ -107,6 +107,56 @@ async function generateSkillsManifest(installPath) {
107
107
  console.log(chalk.cyan(` + Generated ${manifestYamlPath}`));
108
108
  }
109
109
 
110
+ /**
111
+ * Find the insertion point in content after all skipped headers.
112
+ * For '---' pattern, skips YAML frontmatter block (opening --- on first line through closing ---).
113
+ * @param {string} content - File content
114
+ * @param {string[]} [skipPatterns] - Patterns to skip (currently supports '---' for YAML frontmatter)
115
+ * @returns {number} Character index where injection should be inserted
116
+ */
117
+ function findInsertionPoint(content, skipPatterns) {
118
+ if (!content || !skipPatterns || skipPatterns.length === 0) {
119
+ return 0;
120
+ }
121
+
122
+ let idx = 0;
123
+
124
+ for (const pattern of skipPatterns) {
125
+ if (pattern === '---') {
126
+ // YAML frontmatter: must start at position 0 (or after leading whitespace)
127
+ const trimmedStart = content.slice(idx).trimStart();
128
+ const leadingWhitespace = content.length - idx - trimmedStart.length;
129
+
130
+ if (!trimmedStart.startsWith('---')) {
131
+ continue;
132
+ }
133
+
134
+ // Find the opening ---
135
+ const openIdx = idx + leadingWhitespace;
136
+ const afterOpen = content.indexOf('\n', openIdx);
137
+ if (afterOpen === -1) {
138
+ continue;
139
+ }
140
+
141
+ // Find the closing ---
142
+ const closeIdx = content.indexOf('\n---', afterOpen);
143
+ if (closeIdx === -1) {
144
+ continue;
145
+ }
146
+
147
+ // Move past the closing --- line
148
+ const afterClose = content.indexOf('\n', closeIdx + 1);
149
+ if (afterClose === -1) {
150
+ idx = content.length;
151
+ } else {
152
+ idx = afterClose + 1;
153
+ }
154
+ }
155
+ }
156
+
157
+ return idx;
158
+ }
159
+
110
160
  async function updateAgentInstructions(agent, projectRoot) {
111
161
  if (!agent.instructionFiles || agent.instructionFiles.length === 0) return;
112
162
 
@@ -129,7 +179,7 @@ Do not load skills that are not relevant to the current task.
129
179
 
130
180
  const markerStart = '<!-- MA-AGENTS-START -->';
131
181
  const markerEnd = '<!-- MA-AGENTS-END -->';
132
- const wrappedInstruction = `\n${markerStart}${planningInstruction}${markerEnd}\n`;
182
+ const wrappedInstruction = `${markerStart}${planningInstruction}${markerEnd}\n`;
133
183
 
134
184
  for (const fileName of agent.instructionFiles) {
135
185
  const filePath = path.join(projectRoot, fileName);
@@ -140,9 +190,13 @@ Do not load skills that are not relevant to the current task.
140
190
 
141
191
  const regex = new RegExp(`${markerStart}[\\s\\S]*?${markerEnd}`, 'g');
142
192
  if (regex.test(content)) {
193
+ // Replace existing block in-place (AC #2)
143
194
  content = content.replace(regex, wrappedInstruction.trim());
144
195
  } else {
145
- content += wrappedInstruction;
196
+ // Top-insert: place after skipped headers (AC #1, #3)
197
+ const strategy = agent.injectionStrategy || { position: 'top', skipPatterns: [] };
198
+ const insertIdx = findInsertionPoint(content, strategy.skipPatterns);
199
+ content = content.slice(0, insertIdx) + wrappedInstruction + '\n' + content.slice(insertIdx);
146
200
  }
147
201
  } else if (agent.category === 'bmad') {
148
202
  // BMAD agent instruction files ARE the agent definitions (persona, menu, activation).
@@ -152,6 +206,7 @@ Do not load skills that are not relevant to the current task.
152
206
  console.log(chalk.gray(` Skipped ${fileName} (BMAD agent file not yet deployed)`));
153
207
  continue;
154
208
  } else {
209
+ // New non-BMAD file: block is sole content (AC #1, #3)
155
210
  content = wrappedInstruction;
156
211
  }
157
212
 
@@ -609,5 +664,7 @@ module.exports = {
609
664
  readManifest,
610
665
  getInstalledSkillInfo,
611
666
  getManifestAgents,
612
- compareSemver
667
+ compareSemver,
668
+ findInsertionPoint,
669
+ _testUpdateAgentInstructions: updateAgentInstructions
613
670
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ma-agents",
3
- "version": "2.20.0",
3
+ "version": "2.20.2",
4
4
  "description": "NPX tool to install skills for AI coding agents (Claude Code, Gemini, Copilot, Kilocode, Cline, Cursor)",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -187,11 +187,14 @@ function processModule(mod, manifest) {
187
187
  console.log(` 📦 ${mod.code}: no package.json, skipping npm install`);
188
188
  }
189
189
 
190
- // Remove .git directory (AC #3)
190
+ // Rename .git _git_preserved so it survives npm pack (npm always strips .git/).
191
+ // prePopulateBmadCache() restores it and sets origin to a local file:// URL so that
192
+ // bmad-method's "git fetch origin" succeeds without network access.
191
193
  const gitDir = path.join(moduleDir, '.git');
194
+ const preservedDir = path.join(moduleDir, '_git_preserved');
192
195
  if (fs.existsSync(gitDir)) {
193
- fs.removeSync(gitDir);
194
- console.log(` 🗑 ${mod.code}: removed .git directory`);
196
+ fs.renameSync(gitDir, preservedDir);
197
+ console.log(` 📦 ${mod.code}: preserved .git as _git_preserved`);
195
198
  }
196
199
 
197
200
  return {
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tests for Story 8.2: Add Agent-Aware Injection Strategy to Registry
4
+ *
5
+ * Validates injectionStrategy is present on all agents and that installer.js
6
+ * reads it without hardcoding agent-specific logic.
7
+ */
8
+ 'use strict';
9
+
10
+ const assert = require('assert');
11
+ const fs = require('fs');
12
+ const path = require('path');
13
+
14
+ let passed = 0;
15
+ let failed = 0;
16
+ const errors = [];
17
+
18
+ function test(name, fn) {
19
+ try {
20
+ fn();
21
+ console.log(` ✓ ${name}`);
22
+ passed++;
23
+ } catch (err) {
24
+ console.error(` ✗ ${name}: ${err.message}`);
25
+ failed++;
26
+ errors.push({ name, error: err.message });
27
+ }
28
+ }
29
+
30
+ const { getAllAgents, getAgent } = require('../lib/agents');
31
+ const allAgents = getAllAgents();
32
+
33
+ // ─── Task 3: Verify installer.js reads injectionStrategy ────────────────────
34
+
35
+ console.log('\nTask 3 — installer.js reads injectionStrategy');
36
+
37
+ test('3.1: updateAgentInstructions reads agent.injectionStrategy', () => {
38
+ const installerSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'installer.js'), 'utf-8');
39
+ assert.ok(installerSrc.includes('agent.injectionStrategy'),
40
+ 'installer.js should reference agent.injectionStrategy');
41
+ });
42
+
43
+ test('3.2: default fallback exists for undefined injectionStrategy', () => {
44
+ const installerSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'installer.js'), 'utf-8');
45
+ assert.ok(
46
+ installerSrc.includes("agent.injectionStrategy || { position: 'top', skipPatterns: [] }"),
47
+ 'installer.js should have default fallback for missing injectionStrategy'
48
+ );
49
+ });
50
+
51
+ test('3.3: installer.js contains NO agent-name-specific logic', () => {
52
+ const installerSrc = fs.readFileSync(path.join(__dirname, '..', 'lib', 'installer.js'), 'utf-8');
53
+ const agentIds = allAgents.map(a => a.id);
54
+ for (const id of agentIds) {
55
+ // Use regex to check for conditional logic on agent IDs, not just string presence
56
+ const idCheckPattern = new RegExp(`agent\\.id\\s*===\\s*['"\`]${id.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}['"\`]`);
57
+ assert.ok(
58
+ !idCheckPattern.test(installerSrc),
59
+ `installer.js should not contain conditional check for agent id '${id}'`
60
+ );
61
+ }
62
+ });
63
+
64
+ // ─── Task 4: Validate registry completeness ─────────────────────────────────
65
+
66
+ console.log('\nTask 4 — Registry completeness');
67
+
68
+ const EXPECTED_IDE = ['claude-code', 'gemini', 'copilot', 'kilocode', 'cline', 'cursor', 'antigravity'];
69
+ const EXPECTED_BMAD = ['bmm-sre', 'bmm-devops', 'bmm-cyber', 'bmm-mil498'];
70
+ const EXPECTED_ALL = [...EXPECTED_IDE, ...EXPECTED_BMAD];
71
+
72
+ test('4.1: registry has exactly 11 agents (7 IDE + 4 BMAD)', () => {
73
+ assert.strictEqual(allAgents.length, 11, `Expected 11 agents, got ${allAgents.length}`);
74
+ const ideCount = allAgents.filter(a => a.category === 'ide').length;
75
+ const bmadCount = allAgents.filter(a => a.category === 'bmad').length;
76
+ assert.strictEqual(ideCount, 7, `Expected 7 IDE agents, got ${ideCount}`);
77
+ assert.strictEqual(bmadCount, 4, `Expected 4 BMAD agents, got ${bmadCount}`);
78
+ });
79
+
80
+ test('4.2: every agent has well-shaped injectionStrategy property', () => {
81
+ for (const agent of allAgents) {
82
+ assert.ok(agent.injectionStrategy,
83
+ `Agent '${agent.id}' is missing injectionStrategy`);
84
+ assert.strictEqual(typeof agent.injectionStrategy.position, 'string',
85
+ `Agent '${agent.id}' injectionStrategy.position should be a string`);
86
+ assert.ok(Array.isArray(agent.injectionStrategy.skipPatterns),
87
+ `Agent '${agent.id}' injectionStrategy.skipPatterns should be an array, got ${typeof agent.injectionStrategy.skipPatterns}`);
88
+ }
89
+ });
90
+
91
+ test('4.3: all agents with .md instruction files have skipPatterns: [---]', () => {
92
+ for (const agent of allAgents) {
93
+ const hasMdFiles = agent.instructionFiles.some(f => f.endsWith('.md'));
94
+ if (hasMdFiles) {
95
+ assert.ok(agent.injectionStrategy.skipPatterns,
96
+ `Agent '${agent.id}' should have skipPatterns`);
97
+ assert.ok(agent.injectionStrategy.skipPatterns.includes('---'),
98
+ `Agent '${agent.id}' should have '---' in skipPatterns`);
99
+ }
100
+ }
101
+ });
102
+
103
+ test('4.3b: all agents have position: top', () => {
104
+ for (const agent of allAgents) {
105
+ assert.strictEqual(agent.injectionStrategy.position, 'top',
106
+ `Agent '${agent.id}' should have position: 'top'`);
107
+ }
108
+ });
109
+
110
+ test('4.4: all expected agent IDs are present', () => {
111
+ const ids = allAgents.map(a => a.id);
112
+ for (const expectedId of EXPECTED_ALL) {
113
+ assert.ok(ids.includes(expectedId), `Missing expected agent: ${expectedId}`);
114
+ }
115
+ });
116
+
117
+ // Print summary
118
+ console.log(`\n${passed} passed, ${failed} failed`);
119
+ if (errors.length > 0) {
120
+ console.log('\nFailed tests:');
121
+ errors.forEach(e => console.log(` - ${e.name}: ${e.error}`));
122
+ }
123
+ if (failed > 0) process.exit(1);
@@ -0,0 +1,336 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Tests for Story 8.1: Move Instruction Injection to TOP Priority Position
4
+ *
5
+ * Tests findInsertionPoint() helper and top-insertion behavior in updateAgentInstructions().
6
+ */
7
+ 'use strict';
8
+
9
+ const assert = require('assert');
10
+ const fs = require('fs-extra');
11
+ const path = require('path');
12
+ const os = require('os');
13
+
14
+ let passed = 0;
15
+ let failed = 0;
16
+ const errors = [];
17
+
18
+ function test(name, fn) {
19
+ try {
20
+ fn();
21
+ console.log(` ✓ ${name}`);
22
+ passed++;
23
+ } catch (err) {
24
+ console.error(` ✗ ${name}: ${err.message}`);
25
+ failed++;
26
+ errors.push({ name, error: err.message });
27
+ }
28
+ }
29
+
30
+ async function asyncTest(name, fn) {
31
+ try {
32
+ await fn();
33
+ console.log(` ✓ ${name}`);
34
+ passed++;
35
+ } catch (err) {
36
+ console.error(` ✗ ${name}: ${err.message}`);
37
+ failed++;
38
+ errors.push({ name, error: err.message });
39
+ }
40
+ }
41
+
42
+ // Load functions under test
43
+ const { findInsertionPoint, _testUpdateAgentInstructions: updateFn } = require('../lib/installer');
44
+
45
+ // ─── Task 1: findInsertionPoint() unit tests ────────────────────────────────
46
+
47
+ console.log('\nTask 1 — findInsertionPoint() with skipPatterns');
48
+
49
+ test('1.1: returns 0 for empty content with no skip patterns', () => {
50
+ assert.strictEqual(findInsertionPoint('', []), 0);
51
+ });
52
+
53
+ test('1.2: returns 0 for content with no skip patterns', () => {
54
+ const content = '# Hello World\nSome content here.\n';
55
+ assert.strictEqual(findInsertionPoint(content, []), 0);
56
+ });
57
+
58
+ test('1.3: skips YAML frontmatter with --- pattern', () => {
59
+ const content = '---\ntitle: Test\ndate: 2026-01-01\n---\n# Hello\nContent here.\n';
60
+ const idx = findInsertionPoint(content, ['---']);
61
+ assert.strictEqual(idx, content.indexOf('# Hello'));
62
+ });
63
+
64
+ test('1.4: skips YAML frontmatter at very start of file', () => {
65
+ const content = '---\nkey: value\n---\nBody text';
66
+ const idx = findInsertionPoint(content, ['---']);
67
+ assert.strictEqual(idx, content.indexOf('Body text'));
68
+ });
69
+
70
+ test('1.5: does not skip --- that is not at the beginning of the file', () => {
71
+ const content = '# Title\nSome text\n---\nMore text\n';
72
+ const idx = findInsertionPoint(content, ['---']);
73
+ assert.strictEqual(idx, 0);
74
+ });
75
+
76
+ test('1.6: handles frontmatter with trailing newline correctly', () => {
77
+ const content = '---\ntitle: Test\n---\n\n# Content\n';
78
+ const idx = findInsertionPoint(content, ['---']);
79
+ const expected = content.indexOf('\n# Content');
80
+ assert.strictEqual(idx, expected);
81
+ });
82
+
83
+ test('1.7: returns 0 for empty content with --- pattern', () => {
84
+ assert.strictEqual(findInsertionPoint('', ['---']), 0);
85
+ });
86
+
87
+ test('1.8: handles file with only frontmatter (no body)', () => {
88
+ const content = '---\ntitle: Only FM\n---\n';
89
+ const idx = findInsertionPoint(content, ['---']);
90
+ assert.strictEqual(idx, content.length);
91
+ });
92
+
93
+ test('1.9: handles multiple --- later in file (horizontal rules) — only skips frontmatter pair', () => {
94
+ const content = '---\ntitle: Test\n---\n# Heading\n\n---\n\nMore content\n';
95
+ const idx = findInsertionPoint(content, ['---']);
96
+ assert.strictEqual(idx, content.indexOf('# Heading'));
97
+ });
98
+
99
+ test('1.10: empty skipPatterns array returns 0', () => {
100
+ const content = '---\ntitle: Test\n---\nContent';
101
+ assert.strictEqual(findInsertionPoint(content, []), 0);
102
+ });
103
+
104
+ test('1.11: undefined skipPatterns defaults to empty and returns 0', () => {
105
+ const content = '---\ntitle: Test\n---\nContent';
106
+ assert.strictEqual(findInsertionPoint(content, undefined), 0);
107
+ });
108
+
109
+ // ─── Task 2 & 3: Integration tests — top-insertion behavior ─────────────────
110
+
111
+ console.log('\nTask 2 & 3 — updateAgentInstructions() top-insertion');
112
+
113
+ const MARKER_START = '<!-- MA-AGENTS-START -->';
114
+ const MARKER_END = '<!-- MA-AGENTS-END -->';
115
+
116
+ async function withTempDir(fn) {
117
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ma-agents-test-'));
118
+ try {
119
+ await fn(tmpDir);
120
+ } finally {
121
+ await fs.remove(tmpDir);
122
+ }
123
+ }
124
+
125
+ function createMockAgent(instructionFiles, opts = {}) {
126
+ return {
127
+ instructionFiles,
128
+ category: opts.category || 'ide',
129
+ getProjectPath: () => '/mock/path',
130
+ ...(opts.injectionStrategy ? { injectionStrategy: opts.injectionStrategy } : {})
131
+ };
132
+ }
133
+
134
+ (async () => {
135
+ await asyncTest('2.1: new file without frontmatter — block starts at position 0, no leading blank line', async () => {
136
+ await withTempDir(async (tmpDir) => {
137
+ const filePath = path.join(tmpDir, 'test-instructions.md');
138
+ const agent = createMockAgent(['test-instructions.md']);
139
+ await updateFn(agent, tmpDir);
140
+ const content = await fs.readFile(filePath, 'utf-8');
141
+ assert.ok(content.startsWith(MARKER_START),
142
+ `File should start with marker, got: "${content.slice(0, 40)}..."`);
143
+ });
144
+ });
145
+
146
+ await asyncTest('2.2: existing file without frontmatter — block inserted at top, no leading blank line', async () => {
147
+ await withTempDir(async (tmpDir) => {
148
+ const filePath = path.join(tmpDir, 'test-instructions.md');
149
+ await fs.writeFile(filePath, '# Existing Content\nSome text.\n');
150
+ const agent = createMockAgent(['test-instructions.md']);
151
+ await updateFn(agent, tmpDir);
152
+ const content = await fs.readFile(filePath, 'utf-8');
153
+ assert.ok(content.startsWith(MARKER_START),
154
+ `File should start with marker, got: "${content.slice(0, 40)}..."`);
155
+ const contentIdx = content.indexOf('# Existing Content');
156
+ assert.ok(contentIdx > 0, 'Original content should still exist');
157
+ });
158
+ });
159
+
160
+ await asyncTest('2.3: existing file with YAML frontmatter — block after frontmatter, before content', async () => {
161
+ await withTempDir(async (tmpDir) => {
162
+ const filePath = path.join(tmpDir, 'test-instructions.md');
163
+ await fs.writeFile(filePath, '---\ntitle: Test\n---\n# Content\nBody text.\n');
164
+ const agent = createMockAgent(['test-instructions.md'], {
165
+ injectionStrategy: { position: 'top', skipPatterns: ['---'] }
166
+ });
167
+ await updateFn(agent, tmpDir);
168
+ const content = await fs.readFile(filePath, 'utf-8');
169
+ const fmEnd = content.indexOf('---\n', 4) + 4;
170
+ const blockIdx = content.indexOf(MARKER_START);
171
+ const bodyIdx = content.indexOf('# Content');
172
+ assert.ok(blockIdx >= fmEnd, `Block (${blockIdx}) should be at or after frontmatter end (${fmEnd})`);
173
+ assert.ok(blockIdx < bodyIdx, `Block (${blockIdx}) should be before body content (${bodyIdx})`);
174
+ });
175
+ });
176
+
177
+ await asyncTest('2.4: replace-in-place — second run replaces block, no duplicates', async () => {
178
+ await withTempDir(async (tmpDir) => {
179
+ const filePath = path.join(tmpDir, 'test-instructions.md');
180
+ await fs.writeFile(filePath, '# Content\nBody.\n');
181
+ const agent = createMockAgent(['test-instructions.md']);
182
+ await updateFn(agent, tmpDir);
183
+ await updateFn(agent, tmpDir);
184
+ const content = await fs.readFile(filePath, 'utf-8');
185
+ const count = (content.match(new RegExp(MARKER_START, 'g')) || []).length;
186
+ assert.strictEqual(count, 1, `Should have exactly 1 marker block, found ${count}`);
187
+ });
188
+ });
189
+
190
+ await asyncTest('2.5: exactly one blank line separates block from subsequent content', async () => {
191
+ await withTempDir(async (tmpDir) => {
192
+ const filePath = path.join(tmpDir, 'test-instructions.md');
193
+ await fs.writeFile(filePath, '# Content\nBody.\n');
194
+ const agent = createMockAgent(['test-instructions.md']);
195
+ await updateFn(agent, tmpDir);
196
+ const content = await fs.readFile(filePath, 'utf-8');
197
+ const endIdx = content.indexOf(MARKER_END) + MARKER_END.length;
198
+ const between = content.slice(endIdx, content.indexOf('# Content'));
199
+ // Exactly two newlines: one closing the marker line, one blank separator
200
+ assert.strictEqual(between, '\n\n',
201
+ `Expected exactly "\\n\\n" between block and content, got: ${JSON.stringify(between)}`);
202
+ });
203
+ });
204
+
205
+ // ─── Task 4: Edge case tests ─────────────────────────────────────────────
206
+
207
+ console.log('\nTask 4 — Edge cases');
208
+
209
+ await asyncTest('4.1: empty file — block is sole content', async () => {
210
+ await withTempDir(async (tmpDir) => {
211
+ const filePath = path.join(tmpDir, 'test-instructions.md');
212
+ await fs.writeFile(filePath, '');
213
+ const agent = createMockAgent(['test-instructions.md']);
214
+ await updateFn(agent, tmpDir);
215
+ const content = await fs.readFile(filePath, 'utf-8');
216
+ assert.ok(content.startsWith(MARKER_START), 'Should start with marker block');
217
+ assert.ok(content.includes(MARKER_END), 'Should contain end marker');
218
+ });
219
+ });
220
+
221
+ await asyncTest('4.2: file with only YAML frontmatter — block after frontmatter', async () => {
222
+ await withTempDir(async (tmpDir) => {
223
+ const filePath = path.join(tmpDir, 'test-instructions.md');
224
+ await fs.writeFile(filePath, '---\ntitle: Only FM\n---\n');
225
+ const agent = createMockAgent(['test-instructions.md'], {
226
+ injectionStrategy: { position: 'top', skipPatterns: ['---'] }
227
+ });
228
+ await updateFn(agent, tmpDir);
229
+ const content = await fs.readFile(filePath, 'utf-8');
230
+ const blockIdx = content.indexOf(MARKER_START);
231
+ assert.ok(blockIdx > content.lastIndexOf('---\n', blockIdx - 1),
232
+ 'Block should be after frontmatter');
233
+ });
234
+ });
235
+
236
+ await asyncTest('4.3: file with no frontmatter — block at position 0', async () => {
237
+ await withTempDir(async (tmpDir) => {
238
+ const filePath = path.join(tmpDir, 'test-instructions.md');
239
+ await fs.writeFile(filePath, '# Just a heading\nSome text\n');
240
+ const agent = createMockAgent(['test-instructions.md']);
241
+ await updateFn(agent, tmpDir);
242
+ const content = await fs.readFile(filePath, 'utf-8');
243
+ assert.ok(content.startsWith(MARKER_START),
244
+ `File should start with marker, got: "${content.slice(0, 40)}..."`);
245
+ assert.ok(content.includes('# Just a heading'), 'Original content preserved');
246
+ });
247
+ });
248
+
249
+ await asyncTest('4.4: multiple --- (horizontal rules) — only skip frontmatter pair', async () => {
250
+ await withTempDir(async (tmpDir) => {
251
+ const filePath = path.join(tmpDir, 'test-instructions.md');
252
+ await fs.writeFile(filePath, '---\ntitle: Test\n---\n# Heading\n\n---\n\nMore content\n');
253
+ const agent = createMockAgent(['test-instructions.md'], {
254
+ injectionStrategy: { position: 'top', skipPatterns: ['---'] }
255
+ });
256
+ await updateFn(agent, tmpDir);
257
+ const content = await fs.readFile(filePath, 'utf-8');
258
+ const blockIdx = content.indexOf(MARKER_START);
259
+ const headingIdx = content.indexOf('# Heading');
260
+ assert.ok(blockIdx < headingIdx, 'Block should be between frontmatter and heading, not after horizontal rule');
261
+ });
262
+ });
263
+
264
+ await asyncTest('4.5: BMAD agent with existing file — receives top-insert same as IDE agents', async () => {
265
+ await withTempDir(async (tmpDir) => {
266
+ const filePath = path.join(tmpDir, 'bmad-agent.md');
267
+ // BMAD file exists (deployed by applyCustomizations), so it should get injection
268
+ await fs.writeFile(filePath, '---\nname: SRE Agent\n---\n# Agent Definition\nContent.\n');
269
+ const agent = createMockAgent(['bmad-agent.md'], {
270
+ category: 'bmad',
271
+ injectionStrategy: { position: 'top', skipPatterns: ['---'] }
272
+ });
273
+ await updateFn(agent, tmpDir);
274
+ const content = await fs.readFile(filePath, 'utf-8');
275
+ assert.ok(content.includes(MARKER_START), 'Existing BMAD file should receive injection');
276
+ const blockIdx = content.indexOf(MARKER_START);
277
+ const defIdx = content.indexOf('# Agent Definition');
278
+ assert.ok(blockIdx < defIdx, 'Block should be before agent definition content');
279
+ });
280
+ });
281
+
282
+ await asyncTest('4.5b: BMAD agent with non-existent file — skipped (not created)', async () => {
283
+ await withTempDir(async (tmpDir) => {
284
+ const filePath = path.join(tmpDir, 'bmad-missing.md');
285
+ const agent = createMockAgent(['bmad-missing.md'], { category: 'bmad' });
286
+ await updateFn(agent, tmpDir);
287
+ const exists = await fs.pathExists(filePath);
288
+ assert.strictEqual(exists, false, 'Non-existent BMAD file should NOT be created');
289
+ });
290
+ });
291
+
292
+ await asyncTest('4.6: Cline dual instruction files — both receive top-insertion', async () => {
293
+ await withTempDir(async (tmpDir) => {
294
+ const mdPath = path.join(tmpDir, 'clinerules.md');
295
+ const noExtPath = path.join(tmpDir, 'clinerules');
296
+ await fs.writeFile(mdPath, '# Cline Rules MD\nContent.\n');
297
+ await fs.writeFile(noExtPath, '# Cline Rules NoExt\nContent.\n');
298
+ const agent = createMockAgent(['clinerules.md', 'clinerules']);
299
+ await updateFn(agent, tmpDir);
300
+ const contentMd = await fs.readFile(mdPath, 'utf-8');
301
+ const contentNoExt = await fs.readFile(noExtPath, 'utf-8');
302
+ assert.ok(contentMd.includes(MARKER_START), '.md file should have block');
303
+ assert.ok(contentNoExt.includes(MARKER_START), 'no-ext file should have block');
304
+ assert.ok(contentMd.startsWith(MARKER_START),
305
+ `.md file should start with marker, got: "${contentMd.slice(0, 40)}..."`);
306
+ assert.ok(contentNoExt.startsWith(MARKER_START),
307
+ `no-ext file should start with marker, got: "${contentNoExt.slice(0, 40)}..."`);
308
+ });
309
+ });
310
+
311
+ // ─── L1: skipPatterns: ['---'] on file without frontmatter (integration) ──
312
+
313
+ console.log('\nExtra coverage — integration edge cases');
314
+
315
+ await asyncTest('L1: skipPatterns [---] on file without frontmatter — block at position 0', async () => {
316
+ await withTempDir(async (tmpDir) => {
317
+ const filePath = path.join(tmpDir, 'no-fm.md');
318
+ await fs.writeFile(filePath, '# No Frontmatter\nJust content.\n');
319
+ const agent = createMockAgent(['no-fm.md'], {
320
+ injectionStrategy: { position: 'top', skipPatterns: ['---'] }
321
+ });
322
+ await updateFn(agent, tmpDir);
323
+ const content = await fs.readFile(filePath, 'utf-8');
324
+ assert.ok(content.startsWith(MARKER_START),
325
+ `Should start with marker even with skipPatterns set, got: "${content.slice(0, 40)}..."`);
326
+ });
327
+ });
328
+
329
+ // Print summary
330
+ console.log(`\n${passed} passed, ${failed} failed`);
331
+ if (errors.length > 0) {
332
+ console.log('\nFailed tests:');
333
+ errors.forEach(e => console.log(` - ${e.name}: ${e.error}`));
334
+ }
335
+ if (failed > 0) process.exit(1);
336
+ })();
@@ -1,14 +0,0 @@
1
-
2
- <!-- MA-AGENTS-START -->
3
- # AI Agent Skills - Planning Instruction
4
-
5
- You have access to a library of skills in your skills directory. Before starting any task:
6
-
7
- 1. Read the skill manifest at .cline/skills/MANIFEST.yaml
8
- 2. Based on the task description, select which skills are relevant
9
- 3. Read only the selected skill files
10
- 4. Then proceed with the task
11
-
12
- Always load skills marked with always_load: true.
13
- Do not load skills that are not relevant to the current task.
14
- <!-- MA-AGENTS-END -->