specweave 0.4.0 → 0.6.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 (411) hide show
  1. package/.claude-plugin/README.md +325 -0
  2. package/.claude-plugin/marketplace.json +210 -0
  3. package/CLAUDE.md +1000 -252
  4. package/README.md +273 -180
  5. package/bin/install-agents.sh +1 -1
  6. package/bin/install-commands.sh +66 -14
  7. package/bin/install-hooks.sh +1 -1
  8. package/bin/install-skills.sh +1 -1
  9. package/bin/specweave.js +18 -0
  10. package/dist/adapters/adapter-base.d.ts +21 -0
  11. package/dist/adapters/adapter-base.d.ts.map +1 -1
  12. package/dist/adapters/adapter-base.js +28 -0
  13. package/dist/adapters/adapter-base.js.map +1 -1
  14. package/dist/adapters/adapter-interface.d.ts +41 -0
  15. package/dist/adapters/adapter-interface.d.ts.map +1 -1
  16. package/dist/adapters/claude/adapter.d.ts +85 -11
  17. package/dist/adapters/claude/adapter.d.ts.map +1 -1
  18. package/dist/adapters/claude/adapter.js +305 -37
  19. package/dist/adapters/claude/adapter.js.map +1 -1
  20. package/dist/adapters/copilot/adapter.d.ts +45 -2
  21. package/dist/adapters/copilot/adapter.d.ts.map +1 -1
  22. package/dist/adapters/copilot/adapter.js +226 -4
  23. package/dist/adapters/copilot/adapter.js.map +1 -1
  24. package/dist/adapters/cursor/adapter.d.ts +54 -0
  25. package/dist/adapters/cursor/adapter.d.ts.map +1 -1
  26. package/dist/adapters/cursor/adapter.js +192 -0
  27. package/dist/adapters/cursor/adapter.js.map +1 -1
  28. package/dist/adapters/generic/adapter.d.ts +43 -0
  29. package/dist/adapters/generic/adapter.d.ts.map +1 -1
  30. package/dist/adapters/generic/adapter.js +163 -0
  31. package/dist/adapters/generic/adapter.js.map +1 -1
  32. package/dist/cli/commands/init.d.ts +1 -0
  33. package/dist/cli/commands/init.d.ts.map +1 -1
  34. package/dist/cli/commands/init.js +392 -123
  35. package/dist/cli/commands/init.js.map +1 -1
  36. package/dist/cli/commands/install.d.ts +2 -0
  37. package/dist/cli/commands/install.d.ts.map +1 -1
  38. package/dist/cli/commands/install.js +28 -25
  39. package/dist/cli/commands/install.js.map +1 -1
  40. package/dist/cli/commands/list.d.ts +2 -0
  41. package/dist/cli/commands/list.d.ts.map +1 -1
  42. package/dist/cli/commands/list.js +26 -24
  43. package/dist/cli/commands/list.js.map +1 -1
  44. package/dist/cli/commands/plugin.d.ts +43 -0
  45. package/dist/cli/commands/plugin.d.ts.map +1 -0
  46. package/dist/cli/commands/plugin.js +307 -0
  47. package/dist/cli/commands/plugin.js.map +1 -0
  48. package/dist/core/i18n/language-detector.d.ts +29 -0
  49. package/dist/core/i18n/language-detector.d.ts.map +1 -0
  50. package/dist/core/i18n/language-detector.js +143 -0
  51. package/dist/core/i18n/language-detector.js.map +1 -0
  52. package/dist/core/i18n/language-manager.d.ts +101 -0
  53. package/dist/core/i18n/language-manager.d.ts.map +1 -0
  54. package/dist/core/i18n/language-manager.js +232 -0
  55. package/dist/core/i18n/language-manager.js.map +1 -0
  56. package/dist/core/i18n/language-registry.d.ts +44 -0
  57. package/dist/core/i18n/language-registry.d.ts.map +1 -0
  58. package/dist/core/i18n/language-registry.js +234 -0
  59. package/dist/core/i18n/language-registry.js.map +1 -0
  60. package/dist/core/i18n/locale-manager.d.ts +62 -0
  61. package/dist/core/i18n/locale-manager.d.ts.map +1 -0
  62. package/dist/core/i18n/locale-manager.js +137 -0
  63. package/dist/core/i18n/locale-manager.js.map +1 -0
  64. package/dist/core/i18n/system-prompt-injector.d.ts +33 -0
  65. package/dist/core/i18n/system-prompt-injector.d.ts.map +1 -0
  66. package/dist/core/i18n/system-prompt-injector.js +131 -0
  67. package/dist/core/i18n/system-prompt-injector.js.map +1 -0
  68. package/dist/core/i18n/types.d.ts +151 -0
  69. package/dist/core/i18n/types.d.ts.map +1 -0
  70. package/dist/core/i18n/types.js +11 -0
  71. package/dist/core/i18n/types.js.map +1 -0
  72. package/dist/core/increment-status.d.ts +72 -0
  73. package/dist/core/increment-status.d.ts.map +1 -0
  74. package/dist/core/increment-status.js +227 -0
  75. package/dist/core/increment-status.js.map +1 -0
  76. package/dist/core/plugin-detector.d.ts +96 -0
  77. package/dist/core/plugin-detector.d.ts.map +1 -0
  78. package/dist/core/plugin-detector.js +349 -0
  79. package/dist/core/plugin-detector.js.map +1 -0
  80. package/dist/core/plugin-loader.d.ts +131 -0
  81. package/dist/core/plugin-loader.d.ts.map +1 -0
  82. package/dist/core/plugin-loader.js +421 -0
  83. package/dist/core/plugin-loader.js.map +1 -0
  84. package/dist/core/plugin-manager.d.ts +144 -0
  85. package/dist/core/plugin-manager.d.ts.map +1 -0
  86. package/dist/core/plugin-manager.js +393 -0
  87. package/dist/core/plugin-manager.js.map +1 -0
  88. package/dist/core/schemas/plugin-manifest.schema.json +253 -0
  89. package/dist/core/types/config.d.ts +51 -0
  90. package/dist/core/types/config.d.ts.map +1 -0
  91. package/dist/core/types/config.js +21 -0
  92. package/dist/core/types/config.js.map +1 -0
  93. package/dist/core/types/plugin.d.ts +283 -0
  94. package/dist/core/types/plugin.d.ts.map +1 -0
  95. package/dist/core/types/plugin.js +49 -0
  96. package/dist/core/types/plugin.js.map +1 -0
  97. package/dist/hooks/lib/sync-living-docs.d.ts +27 -0
  98. package/dist/hooks/lib/sync-living-docs.d.ts.map +1 -0
  99. package/dist/hooks/lib/sync-living-docs.js +116 -0
  100. package/dist/hooks/lib/sync-living-docs.js.map +1 -0
  101. package/dist/hooks/lib/translate-living-docs.d.ts +13 -0
  102. package/dist/hooks/lib/translate-living-docs.d.ts.map +1 -0
  103. package/dist/hooks/lib/translate-living-docs.js +166 -0
  104. package/dist/hooks/lib/translate-living-docs.js.map +1 -0
  105. package/dist/hooks/lib/update-tasks-md.d.ts +29 -0
  106. package/dist/hooks/lib/update-tasks-md.d.ts.map +1 -0
  107. package/dist/hooks/lib/update-tasks-md.js +203 -0
  108. package/dist/hooks/lib/update-tasks-md.js.map +1 -0
  109. package/dist/integrations/jira/jira-incremental-mapper.js.map +1 -1
  110. package/dist/integrations/jira/jira-mapper.d.ts +2 -2
  111. package/dist/integrations/jira/jira-mapper.js +2 -2
  112. package/dist/integrations/jira/jira-mapper.js.map +1 -1
  113. package/dist/locales/de/.gitkeep +0 -0
  114. package/dist/locales/de/cli.json +108 -0
  115. package/dist/locales/en/cli.json +269 -0
  116. package/dist/locales/en/errors.json +7 -0
  117. package/dist/locales/en/templates.json +6 -0
  118. package/dist/locales/es/.gitkeep +0 -0
  119. package/dist/locales/es/cli.json +41 -0
  120. package/dist/locales/fr/.gitkeep +0 -0
  121. package/dist/locales/fr/cli.json +108 -0
  122. package/dist/locales/ja/.gitkeep +0 -0
  123. package/dist/locales/ja/cli.json +108 -0
  124. package/dist/locales/ko/.gitkeep +0 -0
  125. package/dist/locales/ko/cli.json +108 -0
  126. package/dist/locales/pt/.gitkeep +0 -0
  127. package/dist/locales/pt/cli.json +108 -0
  128. package/dist/locales/ru/.gitkeep +0 -0
  129. package/dist/locales/ru/cli.json +269 -0
  130. package/dist/locales/zh/.gitkeep +0 -0
  131. package/dist/locales/zh/cli.json +108 -0
  132. package/dist/plugins/specweave-github/lib/github-client.d.ts +86 -0
  133. package/dist/plugins/specweave-github/lib/github-client.d.ts.map +1 -0
  134. package/dist/plugins/specweave-github/lib/github-client.js +275 -0
  135. package/dist/plugins/specweave-github/lib/github-client.js.map +1 -0
  136. package/dist/plugins/specweave-github/lib/index.d.ts +10 -0
  137. package/dist/plugins/specweave-github/lib/index.d.ts.map +1 -0
  138. package/dist/plugins/specweave-github/lib/index.js +10 -0
  139. package/dist/plugins/specweave-github/lib/index.js.map +1 -0
  140. package/dist/plugins/specweave-github/lib/subtask-sync.d.ts +51 -0
  141. package/dist/plugins/specweave-github/lib/subtask-sync.d.ts.map +1 -0
  142. package/dist/plugins/specweave-github/lib/subtask-sync.js +147 -0
  143. package/dist/plugins/specweave-github/lib/subtask-sync.js.map +1 -0
  144. package/dist/plugins/specweave-github/lib/task-parser.d.ts +37 -0
  145. package/dist/plugins/specweave-github/lib/task-parser.d.ts.map +1 -0
  146. package/dist/plugins/specweave-github/lib/task-parser.js +211 -0
  147. package/dist/plugins/specweave-github/lib/task-parser.js.map +1 -0
  148. package/dist/plugins/specweave-github/lib/task-sync.d.ts +51 -0
  149. package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -0
  150. package/dist/plugins/specweave-github/lib/task-sync.js +332 -0
  151. package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -0
  152. package/dist/plugins/specweave-github/lib/types.d.ts +80 -0
  153. package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -0
  154. package/dist/plugins/specweave-github/lib/types.js +5 -0
  155. package/dist/plugins/specweave-github/lib/types.js.map +1 -0
  156. package/dist/utils/agents-md-compiler.d.ts +68 -0
  157. package/dist/utils/agents-md-compiler.d.ts.map +1 -0
  158. package/dist/utils/agents-md-compiler.js +420 -0
  159. package/dist/utils/agents-md-compiler.js.map +1 -0
  160. package/dist/utils/generate-skills-index.js +4 -4
  161. package/dist/utils/generate-skills-index.js.map +1 -1
  162. package/package.json +24 -21
  163. package/plugins/specweave-ado/.claude-plugin/plugin.json +8 -0
  164. package/plugins/specweave-alternatives/.claude-plugin/plugin.json +8 -0
  165. package/plugins/specweave-alternatives/skills/bmad-method-expert/SKILL.md +626 -0
  166. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/analyze-project.js +318 -0
  167. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/check-setup.js +208 -0
  168. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/generate-template.js +1149 -0
  169. package/plugins/specweave-alternatives/skills/bmad-method-expert/scripts/validate-documents.js +340 -0
  170. package/plugins/specweave-alternatives/skills/spec-kit-expert/SKILL.md +1010 -0
  171. package/plugins/specweave-backend/.claude-plugin/plugin.json +8 -0
  172. package/plugins/specweave-core/.claude-plugin/plugin.json +25 -0
  173. package/{src → plugins/specweave-core}/agents/pm/AGENT.md +80 -0
  174. package/plugins/specweave-core/agents/translator/AGENT.md +282 -0
  175. package/{src → plugins/specweave-core}/commands/README.md +11 -11
  176. package/{src → plugins/specweave-core}/commands/specweave.costs.md +7 -7
  177. package/{src → plugins/specweave-core}/commands/specweave.do.md +34 -7
  178. package/{src → plugins/specweave-core}/commands/specweave.increment.md +131 -22
  179. package/{src → plugins/specweave-core}/commands/specweave.md +49 -17
  180. package/{src → plugins/specweave-core}/commands/specweave.sync-docs.md +5 -5
  181. package/plugins/specweave-core/commands/specweave.translate.md +425 -0
  182. package/{src → plugins/specweave-core}/commands/specweave.validate.md +1 -1
  183. package/plugins/specweave-core/hooks/hooks.json +13 -0
  184. package/plugins/specweave-core/hooks/post-increment-plugin-detect.sh +142 -0
  185. package/plugins/specweave-core/hooks/post-task-completion.sh +265 -0
  186. package/plugins/specweave-core/hooks/pre-task-plugin-detect.sh +96 -0
  187. package/plugins/specweave-core/skills/SKILLS-INDEX.md +229 -0
  188. package/{src → plugins/specweave-core}/skills/brownfield-analyzer/SKILL.md +66 -24
  189. package/{src → plugins/specweave-core}/skills/context-loader/SKILL.md +1 -1
  190. package/plugins/specweave-core/skills/context-optimizer/SKILL.md +588 -0
  191. package/plugins/specweave-core/skills/docs-updater/SKILL.md +0 -0
  192. package/{src → plugins/specweave-core}/skills/increment-planner/SKILL.md +81 -4
  193. package/plugins/specweave-core/skills/plugin-detector/SKILL.md +211 -0
  194. package/{src → plugins/specweave-core}/skills/project-kickstarter/SKILL.md +7 -7
  195. package/plugins/specweave-core/skills/rfc-generator/SKILL.md +369 -0
  196. package/{src → plugins/specweave-core}/skills/specweave-detector/SKILL.md +2 -2
  197. package/plugins/specweave-core/skills/specweave-framework/SKILL.md +498 -0
  198. package/plugins/specweave-core/skills/specweave-framework/test-cases/test-1-increment-naming.yaml +11 -0
  199. package/plugins/specweave-core/skills/specweave-framework/test-cases/test-2-source-of-truth.yaml +11 -0
  200. package/plugins/specweave-core/skills/specweave-framework/test-cases/test-3-increment-discipline.yaml +12 -0
  201. package/plugins/specweave-core/skills/specweave-framework/test-cases/test-4-file-placement.yaml +11 -0
  202. package/{src → plugins/specweave-core}/skills/tdd-workflow/SKILL.md +20 -20
  203. package/plugins/specweave-core/skills/translator/SKILL.md +172 -0
  204. package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +8 -0
  205. package/plugins/specweave-diagrams/.claude-plugin/plugin.json +8 -0
  206. package/plugins/specweave-docs/.claude-plugin/plugin.json +8 -0
  207. package/plugins/specweave-docs/skills/docusaurus/SKILL.md +526 -0
  208. package/plugins/specweave-figma/.claude-plugin/.mcp.json +12 -0
  209. package/plugins/specweave-figma/.claude-plugin/plugin.json +8 -0
  210. package/plugins/specweave-figma/ARCHITECTURE.md +453 -0
  211. package/plugins/specweave-figma/README.md +728 -0
  212. package/plugins/specweave-figma/skills/figma-to-code/SKILL.md +632 -0
  213. package/plugins/specweave-figma/skills/figma-to-code/test-1-token-generation.yaml +29 -0
  214. package/plugins/specweave-figma/skills/figma-to-code/test-2-component-generation.yaml +27 -0
  215. package/plugins/specweave-figma/skills/figma-to-code/test-3-typescript-generation.yaml +28 -0
  216. package/plugins/specweave-frontend/.claude-plugin/plugin.json +8 -0
  217. package/plugins/specweave-github/.claude-plugin/plugin.json +8 -0
  218. package/plugins/specweave-github/agents/github-manager/AGENT.md +651 -0
  219. package/plugins/specweave-github/commands/github-close-issue.md +418 -0
  220. package/plugins/specweave-github/commands/github-create-issue.md +307 -0
  221. package/plugins/specweave-github/commands/github-status.md +533 -0
  222. package/plugins/specweave-github/commands/github-sync-tasks.md +530 -0
  223. package/plugins/specweave-github/commands/github-sync.md +443 -0
  224. package/plugins/specweave-github/lib/github-client.ts +330 -0
  225. package/plugins/specweave-github/lib/index.ts +10 -0
  226. package/plugins/specweave-github/lib/subtask-sync.ts +225 -0
  227. package/plugins/specweave-github/lib/task-parser.ts +246 -0
  228. package/plugins/specweave-github/lib/task-sync.ts +402 -0
  229. package/plugins/specweave-github/lib/types.ts +86 -0
  230. package/plugins/specweave-github/skills/github-issue-tracker/SKILL.md +497 -0
  231. package/plugins/specweave-github/skills/github-sync/SKILL.md +461 -0
  232. package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +8 -0
  233. package/plugins/specweave-jira/.claude-plugin/plugin.json +8 -0
  234. package/{src → plugins/specweave-jira}/commands/specweave.sync-jira.md +18 -18
  235. package/plugins/specweave-kubernetes/.claude-plugin/plugin.json +8 -0
  236. package/plugins/specweave-ml/.claude-plugin/plugin.json +39 -0
  237. package/plugins/specweave-ml/README.md +885 -0
  238. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +402 -0
  239. package/plugins/specweave-ml/commands/ml-deploy.md +116 -0
  240. package/plugins/specweave-ml/commands/ml-evaluate.md +87 -0
  241. package/plugins/specweave-ml/commands/ml-explain.md +83 -0
  242. package/plugins/specweave-ml/skills/anomaly-detector/SKILL.md +559 -0
  243. package/plugins/specweave-ml/skills/automl-optimizer/SKILL.md +485 -0
  244. package/plugins/specweave-ml/skills/cv-pipeline-builder/SKILL.md +157 -0
  245. package/plugins/specweave-ml/skills/data-visualizer/SKILL.md +521 -0
  246. package/plugins/specweave-ml/skills/experiment-tracker/SKILL.md +535 -0
  247. package/plugins/specweave-ml/skills/feature-engineer/SKILL.md +566 -0
  248. package/plugins/specweave-ml/skills/ml-deployment-helper/SKILL.md +345 -0
  249. package/plugins/specweave-ml/skills/ml-pipeline-orchestrator/SKILL.md +518 -0
  250. package/plugins/specweave-ml/skills/model-evaluator/SKILL.md +155 -0
  251. package/plugins/specweave-ml/skills/model-explainer/SKILL.md +227 -0
  252. package/plugins/specweave-ml/skills/model-registry/SKILL.md +541 -0
  253. package/plugins/specweave-ml/skills/nlp-pipeline-builder/SKILL.md +180 -0
  254. package/plugins/specweave-ml/skills/time-series-forecaster/SKILL.md +569 -0
  255. package/plugins/specweave-payments/.claude-plugin/plugin.json +8 -0
  256. package/plugins/specweave-testing/.claude-plugin/plugin.json +8 -0
  257. package/plugins/specweave-tooling/.claude-plugin/plugin.json +8 -0
  258. package/plugins/specweave-ui/.claude-plugin/plugin.json +106 -0
  259. package/plugins/specweave-ui/.mcp.json +14 -0
  260. package/plugins/specweave-ui/README.md +386 -0
  261. package/src/adapters/adapter-base.ts +33 -0
  262. package/src/adapters/adapter-interface.ts +46 -0
  263. package/src/adapters/claude/adapter.ts +350 -39
  264. package/src/adapters/copilot/adapter.ts +267 -4
  265. package/src/adapters/cursor/adapter.ts +229 -0
  266. package/src/adapters/generic/adapter.ts +196 -0
  267. package/src/templates/AGENTS.md.template +170 -1
  268. package/src/templates/CLAUDE.md.template +122 -24
  269. package/src/templates/tasks.md.template +261 -0
  270. package/src/agents/ml-engineer/AGENT.md +0 -150
  271. package/src/commands/specweave.sync-github.md +0 -269
  272. package/src/hooks/post-task-completion.sh +0 -79
  273. package/src/skills/SKILLS-INDEX.md +0 -444
  274. package/src/skills/github-sync/SKILL.md +0 -234
  275. /package/{src → plugins/specweave-ado}/skills/ado-sync/README.md +0 -0
  276. /package/{src → plugins/specweave-ado}/skills/ado-sync/SKILL.md +0 -0
  277. /package/{src → plugins/specweave-ado}/skills/specweave-ado-mapper/SKILL.md +0 -0
  278. /package/{src → plugins/specweave-backend}/agents/database-optimizer/AGENT.md +0 -0
  279. /package/{src → plugins/specweave-backend}/skills/dotnet-backend/SKILL.md +0 -0
  280. /package/{src → plugins/specweave-backend}/skills/nodejs-backend/SKILL.md +0 -0
  281. /package/{src → plugins/specweave-backend}/skills/python-backend/SKILL.md +0 -0
  282. /package/{src → plugins/specweave-core}/agents/architect/AGENT.md +0 -0
  283. /package/{src → plugins/specweave-core}/agents/code-reviewer.md +0 -0
  284. /package/{src → plugins/specweave-core}/agents/docs-writer/AGENT.md +0 -0
  285. /package/{src → plugins/specweave-core}/agents/performance/AGENT.md +0 -0
  286. /package/{src → plugins/specweave-core}/agents/qa-lead/AGENT.md +0 -0
  287. /package/{src → plugins/specweave-core}/agents/security/AGENT.md +0 -0
  288. /package/{src → plugins/specweave-core}/agents/tdd-orchestrator/AGENT.md +0 -0
  289. /package/{src → plugins/specweave-core}/agents/tech-lead/AGENT.md +0 -0
  290. /package/{src → plugins/specweave-core}/commands/specweave.done.md +0 -0
  291. /package/{src → plugins/specweave-core}/commands/specweave.inc.md +0 -0
  292. /package/{src → plugins/specweave-core}/commands/specweave.list-increments.md +0 -0
  293. /package/{src → plugins/specweave-core}/commands/specweave.next.md +0 -0
  294. /package/{src → plugins/specweave-core}/commands/specweave.progress.md +0 -0
  295. /package/{src → plugins/specweave-core}/commands/specweave.tdd-cycle.md +0 -0
  296. /package/{src → plugins/specweave-core}/commands/specweave.tdd-green.md +0 -0
  297. /package/{src → plugins/specweave-core}/commands/specweave.tdd-red.md +0 -0
  298. /package/{src → plugins/specweave-core}/commands/specweave.tdd-refactor.md +0 -0
  299. /package/{src → plugins/specweave-core}/hooks/README.md +0 -0
  300. /package/{src → plugins/specweave-core}/hooks/docs-changed.sh +0 -0
  301. /package/{src → plugins/specweave-core}/hooks/human-input-required.sh +0 -0
  302. /package/{src → plugins/specweave-core}/hooks/pre-implementation.sh +0 -0
  303. /package/{src → plugins/specweave-core}/skills/brownfield-onboarder/SKILL.md +0 -0
  304. /package/{src → plugins/specweave-core}/skills/docs-updater/README.md +0 -0
  305. /package/{src → plugins/specweave-core}/skills/increment-planner/scripts/feature-utils.js +0 -0
  306. /package/{src → plugins/specweave-core}/skills/increment-quality-judge/SKILL.md +0 -0
  307. /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-1-high-confidence-full-product.yaml +0 -0
  308. /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-2-medium-confidence-partial.yaml +0 -0
  309. /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-3-low-confidence-technical-question.yaml +0 -0
  310. /package/{src → plugins/specweave-core}/skills/project-kickstarter/test-cases/test-4-opt-out-explicit.yaml +0 -0
  311. /package/{src → plugins/specweave-core}/skills/role-orchestrator/README.md +0 -0
  312. /package/{src → plugins/specweave-core}/skills/role-orchestrator/SKILL.md +0 -0
  313. /package/{src → plugins/specweave-core}/skills/task-builder/README.md +0 -0
  314. /package/{src → plugins/specweave-cost-optimizer}/skills/cost-optimizer/SKILL.md +0 -0
  315. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/AGENT.md +0 -0
  316. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/c4-component-template.mmd +0 -0
  317. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/c4-container-template.mmd +0 -0
  318. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/c4-context-template.mmd +0 -0
  319. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/deployment-template.mmd +0 -0
  320. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/er-diagram-template.mmd +0 -0
  321. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/templates/sequence-template.mmd +0 -0
  322. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/test-cases/test-1-c4-context.yaml +0 -0
  323. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/test-cases/test-2-sequence.yaml +0 -0
  324. /package/{src → plugins/specweave-diagrams}/agents/diagrams-architect/test-cases/test-3-er-diagram.yaml +0 -0
  325. /package/{src → plugins/specweave-diagrams}/skills/diagrams-architect/SKILL.md +0 -0
  326. /package/{src → plugins/specweave-diagrams}/skills/diagrams-generator/SKILL.md +0 -0
  327. /package/{src → plugins/specweave-docs}/skills/spec-driven-brainstorming/README.md +0 -0
  328. /package/{src → plugins/specweave-docs}/skills/spec-driven-brainstorming/SKILL.md +0 -0
  329. /package/{src → plugins/specweave-docs}/skills/spec-driven-debugging/README.md +0 -0
  330. /package/{src → plugins/specweave-docs}/skills/spec-driven-debugging/SKILL.md +0 -0
  331. /package/{src → plugins/specweave-frontend}/skills/design-system-architect/SKILL.md +0 -0
  332. /package/{src → plugins/specweave-frontend}/skills/frontend/SKILL.md +0 -0
  333. /package/{src → plugins/specweave-frontend}/skills/nextjs/SKILL.md +0 -0
  334. /package/{src → plugins/specweave-infrastructure}/agents/devops/AGENT.md +0 -0
  335. /package/{src → plugins/specweave-infrastructure}/agents/network-engineer/AGENT.md +0 -0
  336. /package/{src → plugins/specweave-infrastructure}/agents/observability-engineer/AGENT.md +0 -0
  337. /package/{src → plugins/specweave-infrastructure}/agents/performance-engineer/AGENT.md +0 -0
  338. /package/{src → plugins/specweave-infrastructure}/agents/sre/AGENT.md +0 -0
  339. /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/backend-diagnostics.md +0 -0
  340. /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/database-diagnostics.md +0 -0
  341. /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/infrastructure.md +0 -0
  342. /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/monitoring.md +0 -0
  343. /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/security-incidents.md +0 -0
  344. /package/{src → plugins/specweave-infrastructure}/agents/sre/modules/ui-diagnostics.md +0 -0
  345. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/01-high-cpu-usage.md +0 -0
  346. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/02-database-deadlock.md +0 -0
  347. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/03-memory-leak.md +0 -0
  348. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/04-slow-api-response.md +0 -0
  349. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/05-ddos-attack.md +0 -0
  350. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/06-disk-full.md +0 -0
  351. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/07-service-down.md +0 -0
  352. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/08-data-corruption.md +0 -0
  353. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/09-cascade-failure.md +0 -0
  354. /package/{src → plugins/specweave-infrastructure}/agents/sre/playbooks/10-rate-limit-exceeded.md +0 -0
  355. /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/health-check.sh +0 -0
  356. /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/log-analyzer.py +0 -0
  357. /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/metrics-collector.sh +0 -0
  358. /package/{src → plugins/specweave-infrastructure}/agents/sre/scripts/trace-analyzer.js +0 -0
  359. /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/incident-report.md +0 -0
  360. /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/mitigation-plan.md +0 -0
  361. /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/post-mortem.md +0 -0
  362. /package/{src → plugins/specweave-infrastructure}/agents/sre/templates/runbook-template.md +0 -0
  363. /package/{src → plugins/specweave-infrastructure}/commands/specweave.monitor-setup.md +0 -0
  364. /package/{src → plugins/specweave-infrastructure}/commands/specweave.slo-implement.md +0 -0
  365. /package/{src → plugins/specweave-infrastructure}/skills/distributed-tracing/SKILL.md +0 -0
  366. /package/{src → plugins/specweave-infrastructure}/skills/grafana-dashboards/SKILL.md +0 -0
  367. /package/{src → plugins/specweave-infrastructure}/skills/hetzner-provisioner/README.md +0 -0
  368. /package/{src → plugins/specweave-infrastructure}/skills/hetzner-provisioner/SKILL.md +0 -0
  369. /package/{src → plugins/specweave-infrastructure}/skills/prometheus-configuration/SKILL.md +0 -0
  370. /package/{src → plugins/specweave-infrastructure}/skills/slo-implementation/SKILL.md +0 -0
  371. /package/{src → plugins/specweave-jira}/skills/jira-sync/README.md +0 -0
  372. /package/{src → plugins/specweave-jira}/skills/jira-sync/SKILL.md +0 -0
  373. /package/{src → plugins/specweave-jira}/skills/specweave-jira-mapper/SKILL.md +0 -0
  374. /package/{src → plugins/specweave-kubernetes}/agents/kubernetes-architect/AGENT.md +0 -0
  375. /package/{src → plugins/specweave-kubernetes}/skills/gitops-workflow/SKILL.md +0 -0
  376. /package/{src → plugins/specweave-kubernetes}/skills/gitops-workflow/references/argocd-setup.md +0 -0
  377. /package/{src → plugins/specweave-kubernetes}/skills/gitops-workflow/references/sync-policies.md +0 -0
  378. /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/SKILL.md +0 -0
  379. /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/assets/Chart.yaml.template +0 -0
  380. /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/assets/values.yaml.template +0 -0
  381. /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/references/chart-structure.md +0 -0
  382. /package/{src → plugins/specweave-kubernetes}/skills/helm-chart-scaffolding/scripts/validate-chart.sh +0 -0
  383. /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/SKILL.md +0 -0
  384. /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/assets/configmap-template.yaml +0 -0
  385. /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/assets/deployment-template.yaml +0 -0
  386. /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/assets/service-template.yaml +0 -0
  387. /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/references/deployment-spec.md +0 -0
  388. /package/{src → plugins/specweave-kubernetes}/skills/k8s-manifest-generator/references/service-spec.md +0 -0
  389. /package/{src → plugins/specweave-kubernetes}/skills/k8s-security-policies/SKILL.md +0 -0
  390. /package/{src → plugins/specweave-kubernetes}/skills/k8s-security-policies/assets/network-policy-template.yaml +0 -0
  391. /package/{src → plugins/specweave-kubernetes}/skills/k8s-security-policies/references/rbac-patterns.md +0 -0
  392. /package/{src → plugins/specweave-ml}/agents/data-scientist/AGENT.md +0 -0
  393. /package/{src → plugins/specweave-ml}/agents/mlops-engineer/AGENT.md +0 -0
  394. /package/{src → plugins/specweave-ml}/commands/specweave.ml-pipeline.md +0 -0
  395. /package/{src → plugins/specweave-ml}/skills/ml-pipeline-workflow/SKILL.md +0 -0
  396. /package/{src → plugins/specweave-payments}/agents/payment-integration/AGENT.md +0 -0
  397. /package/{src → plugins/specweave-payments}/skills/billing-automation/SKILL.md +0 -0
  398. /package/{src → plugins/specweave-payments}/skills/paypal-integration/SKILL.md +0 -0
  399. /package/{src → plugins/specweave-payments}/skills/pci-compliance/SKILL.md +0 -0
  400. /package/{src → plugins/specweave-payments}/skills/stripe-integration/SKILL.md +0 -0
  401. /package/{src → plugins/specweave-testing}/skills/e2e-playwright/README.md +0 -0
  402. /package/{src → plugins/specweave-testing}/skills/e2e-playwright/SKILL.md +0 -0
  403. /package/{src → plugins/specweave-testing}/skills/e2e-playwright/execute.js +0 -0
  404. /package/{src → plugins/specweave-testing}/skills/e2e-playwright/lib/utils.js +0 -0
  405. /package/{src → plugins/specweave-testing}/skills/e2e-playwright/package.json +0 -0
  406. /package/{src → plugins/specweave-tooling}/skills/skill-creator/LICENSE.txt +0 -0
  407. /package/{src → plugins/specweave-tooling}/skills/skill-creator/SKILL.md +0 -0
  408. /package/{src → plugins/specweave-tooling}/skills/skill-creator/scripts/init_skill.py +0 -0
  409. /package/{src → plugins/specweave-tooling}/skills/skill-creator/scripts/package_skill.py +0 -0
  410. /package/{src → plugins/specweave-tooling}/skills/skill-creator/scripts/quick_validate.py +0 -0
  411. /package/{src → plugins/specweave-tooling}/skills/skill-router/SKILL.md +0 -0
@@ -2,15 +2,19 @@
2
2
  * GitHub Copilot Adapter
3
3
  *
4
4
  * Basic automation adapter for GitHub Copilot.
5
- * Copilot automatically reads AGENTS.md (universal standard) for context and suggestions.
5
+ * Compiles SpecWeave plugins to AGENTS.md (universal standard) for context and suggestions.
6
6
  *
7
- * This adapter requires no additional files - Copilot reads AGENTS.md automatically.
7
+ * This adapter compiles skills, agents, and commands into AGENTS.md format.
8
8
  */
9
9
 
10
10
  import * as path from 'path';
11
11
  import fs from 'fs-extra';
12
12
  import { AdapterBase } from '../adapter-base.js';
13
13
  import { AdapterOptions, AdapterFile } from '../adapter-interface.js';
14
+ import type { Plugin } from '../../core/types/plugin.js';
15
+ import { compileToAgentsMd, getSpecweaveInstallPath } from '../../utils/agents-md-compiler.js';
16
+ import { LanguageManager, getSystemPromptForLanguage } from '../../core/i18n/language-manager.js';
17
+ import type { SupportedLanguage } from '../../core/i18n/types.js';
14
18
 
15
19
  export class CopilotAdapter extends AdapterBase {
16
20
  name = 'copilot';
@@ -46,8 +50,73 @@ export class CopilotAdapter extends AdapterBase {
46
50
  async install(options: AdapterOptions): Promise<void> {
47
51
  console.log('\nšŸ“¦ Configuring GitHub Copilot (Basic Automation)\n');
48
52
 
49
- // No files to install - Copilot reads AGENTS.md automatically
50
- console.log('āœ… Copilot will automatically read AGENTS.md');
53
+ // 1. Create .specweave/ structure
54
+ const specweaveDir = path.join(options.projectPath, '.specweave');
55
+ await fs.ensureDir(specweaveDir);
56
+ await fs.ensureDir(path.join(specweaveDir, 'increments'));
57
+ await fs.ensureDir(path.join(specweaveDir, 'increments', '_backlog'));
58
+ await fs.ensureDir(path.join(specweaveDir, 'docs', 'internal', 'strategy'));
59
+ await fs.ensureDir(path.join(specweaveDir, 'docs', 'internal', 'architecture', 'adr'));
60
+ await fs.ensureDir(path.join(specweaveDir, 'docs', 'internal', 'architecture', 'rfc'));
61
+ await fs.ensureDir(path.join(specweaveDir, 'docs', 'internal', 'architecture', 'diagrams'));
62
+ await fs.ensureDir(path.join(specweaveDir, 'docs', 'internal', 'delivery'));
63
+ await fs.ensureDir(path.join(specweaveDir, 'docs', 'public', 'guides'));
64
+ await fs.ensureDir(path.join(specweaveDir, 'logs'));
65
+
66
+ console.log('āœ… Created .specweave/ structure');
67
+
68
+ // 2. Find SpecWeave installation
69
+ let specweavePath: string;
70
+ try {
71
+ specweavePath = getSpecweaveInstallPath();
72
+ console.log(`āœ… Found SpecWeave installation at: ${specweavePath}`);
73
+ } catch (error) {
74
+ console.error('āŒ Could not find SpecWeave installation');
75
+ console.error(' Make sure SpecWeave is installed: npm install -g specweave');
76
+ return;
77
+ }
78
+
79
+ // 3. Compile plugins to AGENTS.md
80
+ console.log('šŸ“ Compiling plugins to AGENTS.md...');
81
+ const result = await compileToAgentsMd(specweavePath);
82
+
83
+ // 4. Write AGENTS.md
84
+ const agentsMdPath = path.join(options.projectPath, 'AGENTS.md');
85
+ await fs.writeFile(agentsMdPath, result.agentsMd, 'utf-8');
86
+
87
+ console.log('āœ… Created AGENTS.md with:');
88
+ console.log(` - ${result.skills.length} skills`);
89
+ console.log(` - ${result.agents.length} agents`);
90
+ console.log(` - ${result.commands.length} commands`);
91
+
92
+ // 5. Create .github/copilot/instructions.md (optional)
93
+ const copilotDir = path.join(options.projectPath, '.github', 'copilot');
94
+ await fs.ensureDir(copilotDir);
95
+
96
+ const instructionsContent = `# GitHub Copilot Instructions
97
+
98
+ This project uses SpecWeave for spec-driven development.
99
+
100
+ ## Important Context
101
+
102
+ - **AGENTS.md**: Complete workflow guide (read this first!)
103
+ - **Structure**: All work happens in \`.specweave/increments/\`
104
+ - **Workflow**: spec.md → plan.md → tasks.md → tests.md
105
+
106
+ ## When Suggesting Code
107
+
108
+ - Follow patterns in AGENTS.md
109
+ - Create files in increment folders, not project root
110
+ - Reference existing specs and plans
111
+ - Follow naming conventions (kebab-case for increments)
112
+
113
+ See AGENTS.md for complete details.
114
+ `;
115
+
116
+ await fs.writeFile(path.join(copilotDir, 'instructions.md'), instructionsContent, 'utf-8');
117
+ console.log('āœ… Created .github/copilot/instructions.md');
118
+
119
+ console.log('\nāœ… Copilot will automatically read AGENTS.md');
51
120
  }
52
121
 
53
122
  /**
@@ -178,4 +247,198 @@ Note: For better automation, consider Claude Code (full) or Cursor (semi).
178
247
  Copilot is best for simple projects or when already using VS Code + Copilot.
179
248
  `;
180
249
  }
250
+
251
+ /**
252
+ * Check if Copilot adapter supports plugins
253
+ *
254
+ * Copilot has plugin support via AGENTS.md compilation (same as Cursor)
255
+ *
256
+ * @returns boolean True for Copilot
257
+ */
258
+ supportsPlugins(): boolean {
259
+ return true;
260
+ }
261
+
262
+ /**
263
+ * Read language configuration from project config
264
+ *
265
+ * @returns Language setting from config, defaults to 'en'
266
+ */
267
+ private async getLanguageConfig(): Promise<SupportedLanguage> {
268
+ const projectPath = process.cwd();
269
+ const configPath = path.join(projectPath, '.specweave', 'config.json');
270
+
271
+ if (!(await fs.pathExists(configPath))) {
272
+ return 'en'; // Default to English if no config
273
+ }
274
+
275
+ try {
276
+ const config = await fs.readJson(configPath);
277
+ return (config.language as SupportedLanguage) || 'en';
278
+ } catch (error) {
279
+ console.warn('āš ļø Could not read language from config, defaulting to English');
280
+ return 'en';
281
+ }
282
+ }
283
+
284
+ /**
285
+ * Inject system prompt for non-English languages
286
+ *
287
+ * Prepends language instruction to markdown content if language !== 'en'
288
+ *
289
+ * @param content Original markdown content
290
+ * @param language Target language
291
+ * @returns Modified content with system prompt (or unchanged if English)
292
+ */
293
+ private injectSystemPrompt(content: string, language: SupportedLanguage): string {
294
+ if (language === 'en') {
295
+ return content; // No changes for English - preserve default behavior
296
+ }
297
+
298
+ // Get system prompt for target language
299
+ const systemPrompt = getSystemPromptForLanguage(language);
300
+
301
+ // For AGENTS.md compilation, inject at the beginning of the content
302
+ return `${systemPrompt}\n\n${content}`;
303
+ }
304
+
305
+ /**
306
+ * Compile and install a plugin for Copilot
307
+ *
308
+ * Copilot uses AGENTS.md compilation (same as Cursor)
309
+ *
310
+ * NEW: Injects system prompts for non-English languages
311
+ *
312
+ * @param plugin Plugin to install
313
+ */
314
+ async compilePlugin(plugin: Plugin): Promise<void> {
315
+ const projectPath = process.cwd();
316
+ const agentsMdPath = path.join(projectPath, 'AGENTS.md');
317
+
318
+ console.log(`\nšŸ“¦ Compiling plugin for Copilot: ${plugin.manifest.name}`);
319
+
320
+ // Get language configuration for system prompt injection
321
+ const language = await this.getLanguageConfig();
322
+ if (language !== 'en') {
323
+ console.log(` 🌐 Language: ${language} (system prompts will be injected)`);
324
+ }
325
+
326
+ if (!(await fs.pathExists(agentsMdPath))) {
327
+ throw new Error('AGENTS.md not found. Run specweave init first.');
328
+ }
329
+
330
+ let agentsMd = await fs.readFile(agentsMdPath, 'utf-8');
331
+
332
+ const pluginMarker = `<!-- Plugin: ${plugin.manifest.name} -->`;
333
+ if (agentsMd.includes(pluginMarker)) {
334
+ console.log(` ā„¹ļø Plugin ${plugin.manifest.name} already compiled to AGENTS.md`);
335
+ return;
336
+ }
337
+
338
+ let pluginSection = `\n\n${pluginMarker}\n\n`;
339
+ pluginSection += `# Plugin: ${plugin.manifest.name}\n\n`;
340
+ pluginSection += `${plugin.manifest.description}\n\n`;
341
+
342
+ if (plugin.skills.length > 0) {
343
+ pluginSection += `## Skills\n\n`;
344
+ for (const skill of plugin.skills) {
345
+ const skillContent = await fs.readFile(path.join(skill.path, 'SKILL.md'), 'utf-8');
346
+ const contentWithoutFrontmatter = skillContent.replace(/^---\n[\s\S]+?\n---\n/, '');
347
+ // Inject system prompt if needed
348
+ const modifiedContent = this.injectSystemPrompt(contentWithoutFrontmatter, language);
349
+ pluginSection += `### ${skill.name}\n\n${modifiedContent}\n\n`;
350
+ }
351
+ }
352
+
353
+ if (plugin.agents.length > 0) {
354
+ pluginSection += `## Agents\n\n`;
355
+ for (const agent of plugin.agents) {
356
+ const agentContent = await fs.readFile(path.join(agent.path, 'AGENT.md'), 'utf-8');
357
+ // Inject system prompt if needed
358
+ const modifiedContent = this.injectSystemPrompt(agentContent, language);
359
+ pluginSection += `### ${agent.name}\n\n${modifiedContent}\n\n`;
360
+ }
361
+ }
362
+
363
+ if (plugin.commands.length > 0) {
364
+ pluginSection += `## Commands\n\n`;
365
+ for (const command of plugin.commands) {
366
+ const commandContent = await fs.readFile(command.path, 'utf-8');
367
+ const contentWithoutFrontmatter = commandContent.replace(/^---\n[\s\S]+?\n---\n/, '');
368
+ // Inject system prompt if needed
369
+ const modifiedContent = this.injectSystemPrompt(contentWithoutFrontmatter, language);
370
+ pluginSection += `### /${command.name}\n\n${modifiedContent}\n\n`;
371
+ }
372
+ }
373
+
374
+ pluginSection += `<!-- End Plugin: ${plugin.manifest.name} -->\n`;
375
+
376
+ agentsMd += pluginSection;
377
+ await fs.writeFile(agentsMdPath, agentsMd, 'utf-8');
378
+
379
+ console.log(` āœ“ Compiled to AGENTS.md`);
380
+ console.log(` āœ“ ${plugin.skills.length} skills, ${plugin.agents.length} agents, ${plugin.commands.length} commands`);
381
+ console.log(`\nāœ… Plugin ${plugin.manifest.name} compiled for Copilot!`);
382
+ }
383
+
384
+ /**
385
+ * Unload a plugin from Copilot
386
+ */
387
+ async unloadPlugin(pluginName: string): Promise<void> {
388
+ const projectPath = process.cwd();
389
+ const agentsMdPath = path.join(projectPath, 'AGENTS.md');
390
+
391
+ console.log(`\nšŸ—‘ļø Unloading plugin from Copilot: ${pluginName}`);
392
+
393
+ if (!(await fs.pathExists(agentsMdPath))) {
394
+ console.warn(`āš ļø AGENTS.md not found`);
395
+ return;
396
+ }
397
+
398
+ let agentsMd = await fs.readFile(agentsMdPath, 'utf-8');
399
+
400
+ const startMarker = `<!-- Plugin: ${pluginName} -->`;
401
+ const endMarker = `<!-- End Plugin: ${pluginName} -->`;
402
+
403
+ const startIndex = agentsMd.indexOf(startMarker);
404
+ if (startIndex === -1) {
405
+ console.warn(`āš ļø Plugin ${pluginName} not found in AGENTS.md`);
406
+ return;
407
+ }
408
+
409
+ const endIndex = agentsMd.indexOf(endMarker, startIndex);
410
+ if (endIndex === -1) {
411
+ console.warn(`āš ļø Plugin ${pluginName} section malformed`);
412
+ return;
413
+ }
414
+
415
+ agentsMd = agentsMd.slice(0, startIndex) + agentsMd.slice(endIndex + endMarker.length);
416
+ await fs.writeFile(agentsMdPath, agentsMd, 'utf-8');
417
+
418
+ console.log(` āœ“ Removed from AGENTS.md`);
419
+ console.log(`\nāœ… Plugin ${pluginName} unloaded!`);
420
+ }
421
+
422
+ /**
423
+ * Get list of installed plugins for Copilot
424
+ */
425
+ async getInstalledPlugins(): Promise<string[]> {
426
+ const projectPath = process.cwd();
427
+ const agentsMdPath = path.join(projectPath, 'AGENTS.md');
428
+
429
+ if (!(await fs.pathExists(agentsMdPath))) {
430
+ return [];
431
+ }
432
+
433
+ const agentsMd = await fs.readFile(agentsMdPath, 'utf-8');
434
+ const pluginMarkerRegex = /<!-- Plugin: (specweave-[a-z0-9-]+) -->/g;
435
+ const matches = agentsMd.matchAll(pluginMarkerRegex);
436
+
437
+ const plugins: string[] = [];
438
+ for (const match of matches) {
439
+ plugins.push(match[1]);
440
+ }
441
+
442
+ return plugins;
443
+ }
181
444
  }
@@ -12,6 +12,9 @@ import * as path from 'path';
12
12
  import fs from 'fs-extra';
13
13
  import { AdapterBase } from '../adapter-base.js';
14
14
  import { AdapterOptions, AdapterFile } from '../adapter-interface.js';
15
+ import type { Plugin } from '../../core/types/plugin.js';
16
+ import { LanguageManager, getSystemPromptForLanguage } from '../../core/i18n/language-manager.js';
17
+ import type { SupportedLanguage } from '../../core/i18n/types.js';
15
18
 
16
19
  export class CursorAdapter extends AdapterBase {
17
20
  name = 'cursor';
@@ -219,4 +222,230 @@ Pro tip: Say "act as [role]" to follow AGENTS.md patterns:
219
222
  - "act as DevOps and create infrastructure" (AGENTS.md defines DevOps role)
220
223
  `;
221
224
  }
225
+
226
+ /**
227
+ * Check if Cursor adapter supports plugins
228
+ *
229
+ * Cursor has plugin support via AGENTS.md compilation
230
+ *
231
+ * @returns boolean True for Cursor
232
+ */
233
+ supportsPlugins(): boolean {
234
+ return true;
235
+ }
236
+
237
+ /**
238
+ * Read language configuration from project config
239
+ *
240
+ * @returns Language setting from config, defaults to 'en'
241
+ */
242
+ private async getLanguageConfig(): Promise<SupportedLanguage> {
243
+ const projectPath = process.cwd();
244
+ const configPath = path.join(projectPath, '.specweave', 'config.json');
245
+
246
+ if (!(await fs.pathExists(configPath))) {
247
+ return 'en'; // Default to English if no config
248
+ }
249
+
250
+ try {
251
+ const config = await fs.readJson(configPath);
252
+ return (config.language as SupportedLanguage) || 'en';
253
+ } catch (error) {
254
+ console.warn('āš ļø Could not read language from config, defaulting to English');
255
+ return 'en';
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Inject system prompt for non-English languages
261
+ *
262
+ * Prepends language instruction to markdown content if language !== 'en'
263
+ *
264
+ * @param content Original markdown content
265
+ * @param language Target language
266
+ * @returns Modified content with system prompt (or unchanged if English)
267
+ */
268
+ private injectSystemPrompt(content: string, language: SupportedLanguage): string {
269
+ if (language === 'en') {
270
+ return content; // No changes for English - preserve default behavior
271
+ }
272
+
273
+ // Get system prompt for target language
274
+ const systemPrompt = getSystemPromptForLanguage(language);
275
+
276
+ // For AGENTS.md compilation, inject at the beginning of the content
277
+ return `${systemPrompt}\n\n${content}`;
278
+ }
279
+
280
+ /**
281
+ * Compile and install a plugin for Cursor
282
+ *
283
+ * Cursor uses AGENTS.md compilation:
284
+ * - Append skills to AGENTS.md
285
+ * - Append agents to AGENTS.md
286
+ * - Append commands to team commands JSON
287
+ *
288
+ * NEW: Injects system prompts for non-English languages
289
+ *
290
+ * @param plugin Plugin to install
291
+ */
292
+ async compilePlugin(plugin: Plugin): Promise<void> {
293
+ const projectPath = process.cwd();
294
+ const agentsMdPath = path.join(projectPath, 'AGENTS.md');
295
+
296
+ console.log(`\nšŸ“¦ Compiling plugin for Cursor: ${plugin.manifest.name}`);
297
+
298
+ // Get language configuration for system prompt injection
299
+ const language = await this.getLanguageConfig();
300
+ if (language !== 'en') {
301
+ console.log(` 🌐 Language: ${language} (system prompts will be injected)`);
302
+ }
303
+
304
+ // Ensure AGENTS.md exists
305
+ if (!(await fs.pathExists(agentsMdPath))) {
306
+ throw new Error('AGENTS.md not found. Run specweave init first.');
307
+ }
308
+
309
+ // Read current AGENTS.md
310
+ let agentsMd = await fs.readFile(agentsMdPath, 'utf-8');
311
+
312
+ // Check if plugin already compiled
313
+ const pluginMarker = `<!-- Plugin: ${plugin.manifest.name} -->`;
314
+ if (agentsMd.includes(pluginMarker)) {
315
+ console.log(` ā„¹ļø Plugin ${plugin.manifest.name} already compiled to AGENTS.md`);
316
+ return;
317
+ }
318
+
319
+ // Generate plugin section for AGENTS.md
320
+ let pluginSection = `\n\n${pluginMarker}\n\n`;
321
+ pluginSection += `# Plugin: ${plugin.manifest.name}\n\n`;
322
+ pluginSection += `${plugin.manifest.description}\n\n`;
323
+
324
+ // Add skills
325
+ if (plugin.skills.length > 0) {
326
+ pluginSection += `## Skills\n\n`;
327
+ for (const skill of plugin.skills) {
328
+ const skillContent = await fs.readFile(path.join(skill.path, 'SKILL.md'), 'utf-8');
329
+ // Remove frontmatter for AGENTS.md
330
+ const contentWithoutFrontmatter = skillContent.replace(/^---\n[\s\S]+?\n---\n/, '');
331
+ // Inject system prompt if needed
332
+ const modifiedContent = this.injectSystemPrompt(contentWithoutFrontmatter, language);
333
+ pluginSection += `### ${skill.name}\n\n`;
334
+ pluginSection += `${modifiedContent}\n\n`;
335
+ }
336
+ }
337
+
338
+ // Add agents
339
+ if (plugin.agents.length > 0) {
340
+ pluginSection += `## Agents\n\n`;
341
+ for (const agent of plugin.agents) {
342
+ const agentContent = await fs.readFile(path.join(agent.path, 'AGENT.md'), 'utf-8');
343
+ // Inject system prompt if needed
344
+ const modifiedContent = this.injectSystemPrompt(agentContent, language);
345
+ pluginSection += `### ${agent.name}\n\n`;
346
+ pluginSection += `${modifiedContent}\n\n`;
347
+ }
348
+ }
349
+
350
+ // Add commands
351
+ if (plugin.commands.length > 0) {
352
+ pluginSection += `## Commands\n\n`;
353
+ for (const command of plugin.commands) {
354
+ const commandContent = await fs.readFile(command.path, 'utf-8');
355
+ // Remove frontmatter
356
+ const contentWithoutFrontmatter = commandContent.replace(/^---\n[\s\S]+?\n---\n/, '');
357
+ // Inject system prompt if needed
358
+ const modifiedContent = this.injectSystemPrompt(contentWithoutFrontmatter, language);
359
+ pluginSection += `### /${command.name}\n\n`;
360
+ pluginSection += `${modifiedContent}\n\n`;
361
+ }
362
+ }
363
+
364
+ pluginSection += `<!-- End Plugin: ${plugin.manifest.name} -->\n`;
365
+
366
+ // Append to AGENTS.md
367
+ agentsMd += pluginSection;
368
+ await fs.writeFile(agentsMdPath, agentsMd, 'utf-8');
369
+
370
+ console.log(` āœ“ Compiled to AGENTS.md`);
371
+ console.log(` āœ“ ${plugin.skills.length} skills added`);
372
+ console.log(` āœ“ ${plugin.agents.length} agents added`);
373
+ console.log(` āœ“ ${plugin.commands.length} commands added`);
374
+
375
+ console.log(`\nāœ… Plugin ${plugin.manifest.name} compiled for Cursor!`);
376
+ }
377
+
378
+ /**
379
+ * Unload a plugin from Cursor
380
+ *
381
+ * Removes plugin section from AGENTS.md
382
+ *
383
+ * @param pluginName Name of plugin to unload
384
+ */
385
+ async unloadPlugin(pluginName: string): Promise<void> {
386
+ const projectPath = process.cwd();
387
+ const agentsMdPath = path.join(projectPath, 'AGENTS.md');
388
+
389
+ console.log(`\nšŸ—‘ļø Unloading plugin from Cursor: ${pluginName}`);
390
+
391
+ if (!(await fs.pathExists(agentsMdPath))) {
392
+ console.warn(`āš ļø AGENTS.md not found`);
393
+ return;
394
+ }
395
+
396
+ // Read AGENTS.md
397
+ let agentsMd = await fs.readFile(agentsMdPath, 'utf-8');
398
+
399
+ // Find plugin section
400
+ const startMarker = `<!-- Plugin: ${pluginName} -->`;
401
+ const endMarker = `<!-- End Plugin: ${pluginName} -->`;
402
+
403
+ const startIndex = agentsMd.indexOf(startMarker);
404
+ if (startIndex === -1) {
405
+ console.warn(`āš ļø Plugin ${pluginName} not found in AGENTS.md`);
406
+ return;
407
+ }
408
+
409
+ const endIndex = agentsMd.indexOf(endMarker, startIndex);
410
+ if (endIndex === -1) {
411
+ console.warn(`āš ļø Plugin ${pluginName} section malformed in AGENTS.md`);
412
+ return;
413
+ }
414
+
415
+ // Remove plugin section
416
+ agentsMd = agentsMd.slice(0, startIndex) + agentsMd.slice(endIndex + endMarker.length);
417
+
418
+ // Write back
419
+ await fs.writeFile(agentsMdPath, agentsMd, 'utf-8');
420
+
421
+ console.log(` āœ“ Removed from AGENTS.md`);
422
+ console.log(`\nāœ… Plugin ${pluginName} unloaded!`);
423
+ }
424
+
425
+ /**
426
+ * Get list of installed plugins for Cursor
427
+ *
428
+ * Parses AGENTS.md for plugin markers
429
+ *
430
+ * @returns Array of installed plugin names
431
+ */
432
+ async getInstalledPlugins(): Promise<string[]> {
433
+ const projectPath = process.cwd();
434
+ const agentsMdPath = path.join(projectPath, 'AGENTS.md');
435
+
436
+ if (!(await fs.pathExists(agentsMdPath))) {
437
+ return [];
438
+ }
439
+
440
+ const agentsMd = await fs.readFile(agentsMdPath, 'utf-8');
441
+ const pluginMarkerRegex = /<!-- Plugin: (specweave-[a-z0-9-]+) -->/g;
442
+ const matches = agentsMd.matchAll(pluginMarkerRegex);
443
+
444
+ const plugins: string[] = [];
445
+ for (const match of matches) {
446
+ plugins.push(match[1]);
447
+ }
448
+
449
+ return plugins;
450
+ }
222
451
  }