qa-skills 3.0.0 → 3.1.1

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 (262) hide show
  1. package/README.md +20 -149
  2. package/bin/cli.js +1 -40
  3. package/package.json +23 -26
  4. package/dist/agents/registry.d.ts +0 -5
  5. package/dist/agents/registry.d.ts.map +0 -1
  6. package/dist/agents/registry.js +0 -101
  7. package/dist/agents/registry.js.map +0 -1
  8. package/dist/agents/types.d.ts +0 -9
  9. package/dist/agents/types.d.ts.map +0 -1
  10. package/dist/agents/types.js +0 -2
  11. package/dist/agents/types.js.map +0 -1
  12. package/dist/dependencies.d.ts +0 -21
  13. package/dist/dependencies.d.ts.map +0 -1
  14. package/dist/dependencies.js +0 -125
  15. package/dist/dependencies.js.map +0 -1
  16. package/dist/installer.d.ts +0 -25
  17. package/dist/installer.d.ts.map +0 -1
  18. package/dist/installer.js +0 -437
  19. package/dist/installer.js.map +0 -1
  20. package/dist/scaffold.d.ts +0 -27
  21. package/dist/scaffold.d.ts.map +0 -1
  22. package/dist/scaffold.js +0 -182
  23. package/dist/scaffold.js.map +0 -1
  24. package/skills/qa-accessibility-test-writer/SKILL.md +0 -127
  25. package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +0 -349
  26. package/skills/qa-accessibility-test-writer/references/best-practices.md +0 -184
  27. package/skills/qa-accessibility-test-writer/references/wcag-tests.md +0 -331
  28. package/skills/qa-api-contract-curator/SKILL.md +0 -104
  29. package/skills/qa-api-contract-curator/references/breaking-changes.md +0 -363
  30. package/skills/qa-api-contract-curator/references/openapi-structure.md +0 -404
  31. package/skills/qa-browser-data-collector/SKILL.md +0 -132
  32. package/skills/qa-browser-data-collector/references/data-collection-checklist.md +0 -91
  33. package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +0 -113
  34. package/skills/qa-bug-ticket-creator/SKILL.md +0 -148
  35. package/skills/qa-bug-ticket-creator/references/bug-report-format.md +0 -149
  36. package/skills/qa-bug-ticket-creator/references/severity-guide.md +0 -81
  37. package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +0 -39
  38. package/skills/qa-changelog-analyzer/SKILL.md +0 -134
  39. package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +0 -138
  40. package/skills/qa-changelog-analyzer/references/impact-mapping.md +0 -120
  41. package/skills/qa-clickup-integration/SKILL.md +0 -166
  42. package/skills/qa-clickup-integration/references/api-patterns.md +0 -102
  43. package/skills/qa-clickup-integration/references/field-mapping.md +0 -71
  44. package/skills/qa-codeceptjs-writer/SKILL.md +0 -136
  45. package/skills/qa-codeceptjs-writer/references/best-practices.md +0 -207
  46. package/skills/qa-codeceptjs-writer/references/config.md +0 -255
  47. package/skills/qa-codeceptjs-writer/references/patterns.md +0 -285
  48. package/skills/qa-coverage-analyzer/SKILL.md +0 -166
  49. package/skills/qa-coverage-analyzer/references/best-practices.md +0 -142
  50. package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +0 -155
  51. package/skills/qa-coverage-analyzer/references/tools.md +0 -204
  52. package/skills/qa-cypress-writer/SKILL.md +0 -134
  53. package/skills/qa-cypress-writer/references/assertions.md +0 -121
  54. package/skills/qa-cypress-writer/references/best-practices.md +0 -82
  55. package/skills/qa-cypress-writer/references/config.md +0 -121
  56. package/skills/qa-cypress-writer/references/patterns.md +0 -170
  57. package/skills/qa-data-factory/SKILL.md +0 -126
  58. package/skills/qa-data-factory/references/factory-patterns.md +0 -164
  59. package/skills/qa-data-factory/references/faker-guide.md +0 -131
  60. package/skills/qa-diagram-generator/SKILL.md +0 -125
  61. package/skills/qa-diagram-generator/references/c4-model.md +0 -53
  62. package/skills/qa-diagram-generator/references/charts.md +0 -58
  63. package/skills/qa-diagram-generator/references/class-diagram.md +0 -85
  64. package/skills/qa-diagram-generator/references/er-diagram.md +0 -69
  65. package/skills/qa-diagram-generator/references/flowchart.md +0 -92
  66. package/skills/qa-diagram-generator/references/from-screenshot.md +0 -45
  67. package/skills/qa-diagram-generator/references/gantt.md +0 -49
  68. package/skills/qa-diagram-generator/references/journey.md +0 -50
  69. package/skills/qa-diagram-generator/references/mindmap.md +0 -75
  70. package/skills/qa-diagram-generator/references/sequence.md +0 -69
  71. package/skills/qa-diagram-generator/references/state-diagram.md +0 -56
  72. package/skills/qa-discovery-interview/SKILL.md +0 -182
  73. package/skills/qa-discovery-interview/references/completeness-checklist.md +0 -53
  74. package/skills/qa-discovery-interview/references/conflict-patterns.md +0 -101
  75. package/skills/qa-discovery-interview/references/qa-categories.md +0 -147
  76. package/skills/qa-discovery-interview/templates/qa-brief-template.md +0 -168
  77. package/skills/qa-environment-checker/SKILL.md +0 -142
  78. package/skills/qa-environment-checker/references/dependency-matrix.md +0 -101
  79. package/skills/qa-environment-checker/references/health-checks.md +0 -209
  80. package/skills/qa-environment-checker/templates/env-readiness-template.md +0 -64
  81. package/skills/qa-flaky-detector/SKILL.md +0 -153
  82. package/skills/qa-flaky-detector/references/ci-analysis.md +0 -140
  83. package/skills/qa-flaky-detector/references/flaky-patterns.md +0 -247
  84. package/skills/qa-github-issues-enhanced/SKILL.md +0 -175
  85. package/skills/qa-github-issues-enhanced/references/issue-templates.md +0 -425
  86. package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +0 -130
  87. package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +0 -188
  88. package/skills/qa-httpx-writer/SKILL.md +0 -138
  89. package/skills/qa-httpx-writer/references/assertions.md +0 -195
  90. package/skills/qa-httpx-writer/references/best-practices.md +0 -140
  91. package/skills/qa-httpx-writer/references/config.md +0 -212
  92. package/skills/qa-httpx-writer/references/patterns.md +0 -262
  93. package/skills/qa-jest-writer/SKILL.md +0 -131
  94. package/skills/qa-jest-writer/references/assertions.md +0 -125
  95. package/skills/qa-jest-writer/references/best-practices.md +0 -136
  96. package/skills/qa-jest-writer/references/config.md +0 -134
  97. package/skills/qa-jest-writer/references/patterns.md +0 -172
  98. package/skills/qa-jira-integration/SKILL.md +0 -135
  99. package/skills/qa-jira-integration/references/api-patterns.md +0 -143
  100. package/skills/qa-jira-integration/references/field-mapping.md +0 -79
  101. package/skills/qa-jira-integration/references/xray-integration.md +0 -85
  102. package/skills/qa-jmeter-writer/SKILL.md +0 -171
  103. package/skills/qa-jmeter-writer/references/best-practices.md +0 -157
  104. package/skills/qa-jmeter-writer/references/config.md +0 -204
  105. package/skills/qa-jmeter-writer/references/patterns.md +0 -242
  106. package/skills/qa-junit5-writer/SKILL.md +0 -157
  107. package/skills/qa-junit5-writer/references/assertions.md +0 -118
  108. package/skills/qa-junit5-writer/references/config.md +0 -97
  109. package/skills/qa-junit5-writer/references/patterns.md +0 -162
  110. package/skills/qa-k6-writer/SKILL.md +0 -155
  111. package/skills/qa-k6-writer/references/best-practices.md +0 -236
  112. package/skills/qa-k6-writer/references/config.md +0 -219
  113. package/skills/qa-k6-writer/references/patterns.md +0 -304
  114. package/skills/qa-linear-integration/SKILL.md +0 -137
  115. package/skills/qa-linear-integration/references/api-patterns.md +0 -249
  116. package/skills/qa-linear-integration/references/field-mapping.md +0 -121
  117. package/skills/qa-locust-writer/SKILL.md +0 -151
  118. package/skills/qa-locust-writer/references/best-practices.md +0 -126
  119. package/skills/qa-locust-writer/references/config.md +0 -170
  120. package/skills/qa-locust-writer/references/patterns.md +0 -235
  121. package/skills/qa-manual-test-designer/SKILL.md +0 -145
  122. package/skills/qa-manual-test-designer/references/exploratory-charters.md +0 -138
  123. package/skills/qa-manual-test-designer/references/personas.md +0 -146
  124. package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +0 -47
  125. package/skills/qa-manual-test-designer/templates/test-case-template.md +0 -31
  126. package/skills/qa-mobile-test-writer/SKILL.md +0 -144
  127. package/skills/qa-mobile-test-writer/references/best-practices.md +0 -214
  128. package/skills/qa-mobile-test-writer/references/config.md +0 -309
  129. package/skills/qa-mobile-test-writer/references/patterns.md +0 -304
  130. package/skills/qa-nfr-analyst/SKILL.md +0 -177
  131. package/skills/qa-nfr-analyst/references/iso-25010-model.md +0 -159
  132. package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +0 -202
  133. package/skills/qa-nfr-analyst/references/wcag-checklist.md +0 -184
  134. package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +0 -89
  135. package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +0 -48
  136. package/skills/qa-orchestrator/SKILL.md +0 -132
  137. package/skills/qa-orchestrator/references/handoff-chains.md +0 -105
  138. package/skills/qa-orchestrator/references/pipeline-modes.md +0 -115
  139. package/skills/qa-orchestrator/references/scheduler-rules.md +0 -84
  140. package/skills/qa-pact-writer/SKILL.md +0 -133
  141. package/skills/qa-pact-writer/references/best-practices.md +0 -100
  142. package/skills/qa-pact-writer/references/config.md +0 -135
  143. package/skills/qa-pact-writer/references/patterns.md +0 -161
  144. package/skills/qa-plan-creator/SKILL.md +0 -139
  145. package/skills/qa-plan-creator/references/introduction-plan.md +0 -43
  146. package/skills/qa-plan-creator/references/migration-plan.md +0 -44
  147. package/skills/qa-plan-creator/references/onboarding-plan.md +0 -46
  148. package/skills/qa-plan-creator/references/performance-plan.md +0 -44
  149. package/skills/qa-plan-creator/references/regression-plan.md +0 -45
  150. package/skills/qa-plan-creator/references/release-plan.md +0 -45
  151. package/skills/qa-plan-creator/references/sprint-plan.md +0 -44
  152. package/skills/qa-plan-creator/references/test-plan.md +0 -59
  153. package/skills/qa-plan-creator/references/uat-plan.md +0 -43
  154. package/skills/qa-plan-creator/templates/checklist-template.md +0 -36
  155. package/skills/qa-plan-creator/templates/regression-checklist-template.md +0 -49
  156. package/skills/qa-plan-creator/templates/release-checklist-template.md +0 -46
  157. package/skills/qa-plan-creator/templates/test-plan-template.md +0 -74
  158. package/skills/qa-playwright-py-writer/SKILL.md +0 -156
  159. package/skills/qa-playwright-py-writer/references/best-practices.md +0 -194
  160. package/skills/qa-playwright-py-writer/references/config.md +0 -195
  161. package/skills/qa-playwright-py-writer/references/patterns.md +0 -212
  162. package/skills/qa-playwright-ts-writer/SKILL.md +0 -151
  163. package/skills/qa-playwright-ts-writer/references/assertions.md +0 -109
  164. package/skills/qa-playwright-ts-writer/references/best-practices.md +0 -191
  165. package/skills/qa-playwright-ts-writer/references/config.md +0 -144
  166. package/skills/qa-playwright-ts-writer/references/patterns.md +0 -171
  167. package/skills/qa-pytest-writer/SKILL.md +0 -145
  168. package/skills/qa-pytest-writer/references/assertions.md +0 -149
  169. package/skills/qa-pytest-writer/references/best-practices.md +0 -97
  170. package/skills/qa-pytest-writer/references/config.md +0 -176
  171. package/skills/qa-pytest-writer/references/patterns.md +0 -251
  172. package/skills/qa-qase-integration/SKILL.md +0 -149
  173. package/skills/qa-qase-integration/references/api-reference.md +0 -354
  174. package/skills/qa-qase-integration/references/ci-integration.md +0 -196
  175. package/skills/qa-qase-integration/references/field-mapping.md +0 -157
  176. package/skills/qa-requirements-generator/SKILL.md +0 -152
  177. package/skills/qa-requirements-generator/references/iso-29148-structure.md +0 -153
  178. package/skills/qa-requirements-generator/references/requirement-patterns.md +0 -278
  179. package/skills/qa-rest-assured-writer/SKILL.md +0 -137
  180. package/skills/qa-rest-assured-writer/references/best-practices.md +0 -50
  181. package/skills/qa-rest-assured-writer/references/config.md +0 -124
  182. package/skills/qa-rest-assured-writer/references/patterns.md +0 -192
  183. package/skills/qa-risk-analyzer/SKILL.md +0 -158
  184. package/skills/qa-risk-analyzer/references/impact-analysis.md +0 -133
  185. package/skills/qa-risk-analyzer/references/risk-factors.md +0 -123
  186. package/skills/qa-robot-framework-writer/SKILL.md +0 -147
  187. package/skills/qa-robot-framework-writer/references/best-practices.md +0 -249
  188. package/skills/qa-robot-framework-writer/references/config.md +0 -204
  189. package/skills/qa-robot-framework-writer/references/libraries.md +0 -273
  190. package/skills/qa-robot-framework-writer/references/patterns.md +0 -216
  191. package/skills/qa-security-test-writer/SKILL.md +0 -123
  192. package/skills/qa-security-test-writer/references/best-practices.md +0 -155
  193. package/skills/qa-security-test-writer/references/owasp-top10.md +0 -331
  194. package/skills/qa-security-test-writer/references/zap-config.md +0 -258
  195. package/skills/qa-selenium-java-writer/SKILL.md +0 -143
  196. package/skills/qa-selenium-java-writer/references/best-practices.md +0 -59
  197. package/skills/qa-selenium-java-writer/references/config.md +0 -143
  198. package/skills/qa-selenium-java-writer/references/patterns.md +0 -170
  199. package/skills/qa-selenium-py-writer/SKILL.md +0 -150
  200. package/skills/qa-selenium-py-writer/references/best-practices.md +0 -175
  201. package/skills/qa-selenium-py-writer/references/config.md +0 -224
  202. package/skills/qa-selenium-py-writer/references/patterns.md +0 -255
  203. package/skills/qa-shortcut-integration/SKILL.md +0 -143
  204. package/skills/qa-shortcut-integration/references/api-patterns.md +0 -126
  205. package/skills/qa-shortcut-integration/references/field-mapping.md +0 -66
  206. package/skills/qa-spec-auditor/SKILL.md +0 -162
  207. package/skills/qa-spec-auditor/references/audit-checklist.md +0 -144
  208. package/skills/qa-spec-auditor/references/drift-patterns.md +0 -207
  209. package/skills/qa-spec-writer/SKILL.md +0 -143
  210. package/skills/qa-spec-writer/references/gherkin-guide.md +0 -253
  211. package/skills/qa-spec-writer/references/specification-patterns.md +0 -274
  212. package/skills/qa-spring-test-writer/SKILL.md +0 -170
  213. package/skills/qa-spring-test-writer/references/best-practices.md +0 -57
  214. package/skills/qa-spring-test-writer/references/config.md +0 -179
  215. package/skills/qa-spring-test-writer/references/patterns.md +0 -235
  216. package/skills/qa-supertest-writer/SKILL.md +0 -150
  217. package/skills/qa-supertest-writer/references/assertions.md +0 -192
  218. package/skills/qa-supertest-writer/references/best-practices.md +0 -102
  219. package/skills/qa-supertest-writer/references/config.md +0 -166
  220. package/skills/qa-supertest-writer/references/patterns.md +0 -242
  221. package/skills/qa-task-creator/SKILL.md +0 -142
  222. package/skills/qa-task-creator/references/linking-patterns.md +0 -127
  223. package/skills/qa-task-creator/references/task-types.md +0 -169
  224. package/skills/qa-task-creator/templates/task-template.md +0 -24
  225. package/skills/qa-test-doc-compiler/SKILL.md +0 -114
  226. package/skills/qa-test-doc-compiler/references/agile-tailoring.md +0 -220
  227. package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +0 -302
  228. package/skills/qa-test-healer/SKILL.md +0 -101
  229. package/skills/qa-test-healer/references/diagnosis-patterns.md +0 -142
  230. package/skills/qa-test-healer/references/fix-strategies.md +0 -177
  231. package/skills/qa-test-reporter/SKILL.md +0 -130
  232. package/skills/qa-test-reporter/references/best-practices.md +0 -162
  233. package/skills/qa-test-reporter/references/iso-29119-reports.md +0 -236
  234. package/skills/qa-test-reporter/references/report-formats.md +0 -287
  235. package/skills/qa-test-reviewer/SKILL.md +0 -142
  236. package/skills/qa-test-reviewer/references/anti-patterns.md +0 -268
  237. package/skills/qa-test-reviewer/references/review-checklist.md +0 -93
  238. package/skills/qa-test-strategy/SKILL.md +0 -133
  239. package/skills/qa-test-strategy/references/entry-exit-criteria.md +0 -176
  240. package/skills/qa-test-strategy/references/risk-matrix.md +0 -102
  241. package/skills/qa-test-strategy/references/testing-types.md +0 -143
  242. package/skills/qa-testcase-from-docs/SKILL.md +0 -161
  243. package/skills/qa-testcase-from-docs/references/test-case-format.md +0 -196
  244. package/skills/qa-testcase-from-docs/references/test-design-techniques.md +0 -126
  245. package/skills/qa-testcase-from-docs/templates/test-case-template.md +0 -31
  246. package/skills/qa-testcase-from-ui/SKILL.md +0 -109
  247. package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +0 -126
  248. package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +0 -146
  249. package/skills/qa-testcase-from-ui/templates/test-case-template.md +0 -31
  250. package/skills/qa-visual-regression-writer/SKILL.md +0 -175
  251. package/skills/qa-visual-regression-writer/references/best-practices.md +0 -154
  252. package/skills/qa-visual-regression-writer/references/config.md +0 -220
  253. package/skills/qa-visual-regression-writer/references/patterns.md +0 -213
  254. package/skills/qa-vitest-writer/SKILL.md +0 -141
  255. package/skills/qa-vitest-writer/references/assertions.md +0 -105
  256. package/skills/qa-vitest-writer/references/best-practices.md +0 -62
  257. package/skills/qa-vitest-writer/references/config.md +0 -127
  258. package/skills/qa-vitest-writer/references/patterns.md +0 -141
  259. package/skills/qa-webdriverio-writer/SKILL.md +0 -145
  260. package/skills/qa-webdriverio-writer/references/best-practices.md +0 -176
  261. package/skills/qa-webdriverio-writer/references/config.md +0 -240
  262. package/skills/qa-webdriverio-writer/references/patterns.md +0 -269
package/dist/installer.js DELETED
@@ -1,437 +0,0 @@
1
- /**
2
- * qa-skills v3 — Interactive CLI for installing QA Skills into coding agents.
3
- * Single entry point: `qa-skills init` (or bare `qa-skills`).
4
- * Skills are bundled with the npm package for zero-config usage on fresh machines.
5
- */
6
- import { intro, outro, select, multiselect, confirm, spinner, note, log, isCancel, cancel, } from '@clack/prompts';
7
- import chalk from 'chalk';
8
- import fs from 'fs-extra';
9
- import path from 'node:path';
10
- import os from 'node:os';
11
- import { fileURLToPath } from 'node:url';
12
- import matter from 'gray-matter';
13
- import { AGENT_REGISTRY, resolveGlobalPath } from './agents/registry.js';
14
- import { resolveDependencies } from './dependencies.js';
15
- import { writeStructureRule, writeAgentsMd, isGitignored } from './scaffold.js';
16
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
17
- // ─── Skill Categories ───────────────────────────────────────────────────
18
- export const SKILL_CATEGORIES = {
19
- 'Documentation & Planning': [
20
- 'requirements-generator', 'spec-writer', 'nfr-analyst',
21
- 'api-contract-curator', 'plan-creator', 'diagram-generator',
22
- 'test-strategy', 'test-doc-compiler',
23
- ],
24
- 'Test Case Design': [
25
- 'testcase-from-docs', 'testcase-from-ui',
26
- 'browser-data-collector', 'manual-test-designer',
27
- ],
28
- 'TypeScript Test Writers': [
29
- 'jest-writer', 'vitest-writer', 'playwright-ts-writer', 'cypress-writer',
30
- 'webdriverio-writer', 'codeceptjs-writer', 'supertest-writer',
31
- ],
32
- 'Python Test Writers': [
33
- 'pytest-writer', 'playwright-py-writer', 'selenium-py-writer',
34
- 'robot-framework-writer', 'httpx-writer',
35
- ],
36
- 'Java Test Writers': [
37
- 'junit5-writer', 'selenium-java-writer', 'rest-assured-writer', 'spring-test-writer',
38
- ],
39
- 'Performance & Specialized': [
40
- 'k6-writer', 'locust-writer', 'jmeter-writer', 'security-test-writer',
41
- 'accessibility-test-writer', 'visual-regression-writer',
42
- 'pact-writer', 'mobile-test-writer',
43
- ],
44
- 'Reporting & Analysis': [
45
- 'test-reporter', 'coverage-analyzer', 'bug-ticket-creator',
46
- 'task-creator', 'risk-analyzer', 'spec-auditor',
47
- ],
48
- 'Orchestration': ['orchestrator'],
49
- 'Support & Maintenance': [
50
- 'test-healer', 'changelog-analyzer', 'flaky-detector',
51
- 'test-reviewer', 'data-factory', 'environment-checker',
52
- 'discovery-interview',
53
- ],
54
- 'Integrations': [
55
- 'qase-integration', 'github-issues-enhanced',
56
- 'jira-integration', 'linear-integration',
57
- 'clickup-integration', 'shortcut-integration',
58
- ],
59
- };
60
- // ─── Banner ─────────────────────────────────────────────────────────────
61
- function printBanner() {
62
- const banner = `
63
- ${chalk.cyan(' ╔═══════════════════════════════════════════════════════════╗')}
64
- ${chalk.cyan(' ║')}${chalk.white.bold(' QA Skills Ecosystem — Interactive Installer ')}${chalk.cyan('║')}
65
- ${chalk.cyan(' ╚═══════════════════════════════════════════════════════════╝')}`;
66
- console.log(banner);
67
- }
68
- // ─── Source Resolution ──────────────────────────────────────────────────
69
- // Priority: 1) QA_SKILLS_SOURCE env 2) monorepo sibling 3) bundled in npm package
70
- async function resolveSourceDir() {
71
- const envSource = process.env.QA_SKILLS_SOURCE;
72
- if (envSource)
73
- return path.resolve(envSource);
74
- const pkgRoot = path.resolve(__dirname, '..');
75
- const monorepoSkills = path.resolve(pkgRoot, '..', '.cursor', 'skills');
76
- if (await fs.pathExists(monorepoSkills))
77
- return monorepoSkills;
78
- const bundledSkills = path.resolve(pkgRoot, 'skills');
79
- if (await fs.pathExists(bundledSkills))
80
- return bundledSkills;
81
- return bundledSkills;
82
- }
83
- // ─── Skill Discovery ────────────────────────────────────────────────────
84
- function getCategoryForSkill(skillId) {
85
- for (const [cat, ids] of Object.entries(SKILL_CATEGORIES)) {
86
- if (ids.includes(skillId))
87
- return cat;
88
- }
89
- return 'Other';
90
- }
91
- async function discoverSkills(sourceDir) {
92
- const skills = [];
93
- if (!(await fs.pathExists(sourceDir)))
94
- return skills;
95
- const entries = await fs.readdir(sourceDir);
96
- for (const entry of entries) {
97
- if (!entry.startsWith('qa-'))
98
- continue;
99
- const skillMd = path.join(sourceDir, entry, 'SKILL.md');
100
- if (!(await fs.pathExists(skillMd)))
101
- continue;
102
- const raw = await fs.readFile(skillMd, 'utf-8');
103
- const { data } = matter(raw);
104
- const id = entry.replace(/^qa-/, '');
105
- skills.push({
106
- id,
107
- dirName: entry,
108
- name: data.name || entry,
109
- description: data.description || '',
110
- category: getCategoryForSkill(id),
111
- });
112
- }
113
- return skills.sort((a, b) => a.id.localeCompare(b.id));
114
- }
115
- // ─── Helpers ────────────────────────────────────────────────────────────
116
- function handleCancel(value) {
117
- if (isCancel(value)) {
118
- cancel('Installation cancelled.');
119
- process.exit(0);
120
- }
121
- }
122
- function truncate(str, max) {
123
- if (str.length <= max)
124
- return str;
125
- return str.slice(0, max - 3) + '...';
126
- }
127
- function getDefaultMcpConfig() {
128
- return {
129
- mcpServers: {
130
- playwright: {
131
- command: 'npx',
132
- args: ['@playwright/mcp@latest'],
133
- },
134
- github: {
135
- command: 'npx',
136
- args: ['-y', '@modelcontextprotocol/server-github'],
137
- env: { GITHUB_PERSONAL_ACCESS_TOKEN: '${GITHUB_PERSONAL_ACCESS_TOKEN}' },
138
- },
139
- filesystem: {
140
- command: 'npx',
141
- args: ['-y', '@modelcontextprotocol/server-filesystem', process.cwd()],
142
- },
143
- },
144
- };
145
- }
146
- // ─── Installation Logic ─────────────────────────────────────────────────
147
- async function installSkillsToAgent(sourceDir, targetDir, agent, skillDirNames, scope, method) {
148
- const basePath = scope === 'global' && agent.globalSkillsPath
149
- ? resolveGlobalPath(agent.globalSkillsPath)
150
- : path.join(targetDir, agent.projectSkillsPath);
151
- await fs.ensureDir(basePath);
152
- const installed = [];
153
- const skipped = [];
154
- for (const dirName of skillDirNames) {
155
- const src = path.join(sourceDir, dirName);
156
- const dest = path.join(basePath, dirName);
157
- if (!(await fs.pathExists(src))) {
158
- skipped.push(dirName);
159
- continue;
160
- }
161
- if (await fs.pathExists(dest)) {
162
- await fs.remove(dest);
163
- }
164
- if (method === 'symlink') {
165
- const isWindows = os.platform() === 'win32';
166
- await fs.symlink(src, dest, isWindows ? 'junction' : 'dir');
167
- }
168
- else {
169
- await fs.copy(src, dest, { overwrite: true });
170
- }
171
- installed.push(dirName);
172
- }
173
- return { installed, skipped };
174
- }
175
- async function writeMcpConfig(targetDir, mcpPath) {
176
- const mcpFile = path.join(targetDir, mcpPath);
177
- await fs.ensureDir(path.dirname(mcpFile));
178
- const defaults = getDefaultMcpConfig();
179
- const defaultServers = (defaults.mcpServers ?? {});
180
- let existing = {};
181
- if (await fs.pathExists(mcpFile)) {
182
- try {
183
- existing = await fs.readJson(mcpFile);
184
- }
185
- catch {
186
- existing = {};
187
- }
188
- }
189
- const existingServers = (existing.mcpServers ?? {});
190
- const merged = {
191
- ...existing,
192
- mcpServers: { ...defaultServers, ...existingServers },
193
- };
194
- await fs.writeJson(mcpFile, merged, { spaces: 2 });
195
- }
196
- async function writeEnvTemplate(targetDir) {
197
- const envFile = path.join(targetDir, '.env');
198
- let existing = '';
199
- if (await fs.pathExists(envFile)) {
200
- existing = await fs.readFile(envFile, 'utf-8');
201
- }
202
- const keys = ['GITHUB_PERSONAL_ACCESS_TOKEN', 'OPENAI_API_KEY'];
203
- const missing = keys.filter((k) => !existing.includes(k));
204
- if (missing.length > 0) {
205
- const lines = missing.map((k) => `# ${k}\n${k}=`);
206
- await fs.writeFile(envFile, existing.trimEnd() + '\n\n' + lines.join('\n\n') + '\n');
207
- }
208
- }
209
- // ─── List Mode ──────────────────────────────────────────────────────────
210
- export async function listSkills() {
211
- printBanner();
212
- const sourceDir = await resolveSourceDir();
213
- const skills = await discoverSkills(sourceDir);
214
- if (skills.length === 0) {
215
- log.error(`No skills found in ${sourceDir}`);
216
- process.exit(1);
217
- }
218
- console.log();
219
- log.info(`Found ${chalk.bold(skills.length)} skills in ${chalk.dim(sourceDir)}`);
220
- console.log();
221
- let currentCategory = '';
222
- for (const skill of skills.sort((a, b) => a.category.localeCompare(b.category) || a.id.localeCompare(b.id))) {
223
- if (skill.category !== currentCategory) {
224
- currentCategory = skill.category;
225
- console.log(chalk.cyan.bold(` ${currentCategory}`));
226
- }
227
- console.log(` ${chalk.white(skill.dirName)} ${chalk.dim(truncate(skill.description, 70))}`);
228
- }
229
- console.log();
230
- }
231
- // ─── Interactive Flow ───────────────────────────────────────────────────
232
- export async function runInteractive(opts = {}) {
233
- printBanner();
234
- intro(chalk.bgCyan.black(' qa-skills '));
235
- // 1. Resolve source
236
- const sourceDir = await resolveSourceDir();
237
- if (!(await fs.pathExists(sourceDir))) {
238
- log.error(`Skills source not found: ${sourceDir}`);
239
- log.info('Set QA_SKILLS_SOURCE or run from the qa-skills repo.');
240
- process.exit(1);
241
- }
242
- // 2. Discover skills
243
- const allSkills = await discoverSkills(sourceDir);
244
- if (allSkills.length === 0) {
245
- log.error('No skills found.');
246
- process.exit(1);
247
- }
248
- log.info(`Found ${chalk.bold(allSkills.length)} skills`);
249
- // 3. Select skills
250
- const skillChoices = allSkills.map((s) => ({
251
- value: s.id,
252
- label: s.dirName,
253
- hint: truncate(s.description, 60),
254
- }));
255
- const selectedSkills = await multiselect({
256
- message: 'Select skills to install (space to toggle)',
257
- options: skillChoices,
258
- required: true,
259
- });
260
- handleCancel(selectedSkills);
261
- const selectedIds = selectedSkills;
262
- // 4. Check dependencies
263
- const suggestions = resolveDependencies(selectedIds);
264
- let finalSkillIds = [...selectedIds];
265
- if (suggestions.length > 0) {
266
- const depLines = suggestions.map((s) => ` ${chalk.yellow('qa-' + s.requiredBy)} recommends ${chalk.green('qa-' + s.skillId)}\n ${chalk.dim(s.reason)}`);
267
- note(depLines.join('\n\n'), 'Recommended companion skills');
268
- const addDeps = await multiselect({
269
- message: 'Add recommended skills? (space to toggle, enter to confirm)',
270
- options: suggestions.map((s) => ({
271
- value: s.skillId,
272
- label: `qa-${s.skillId}`,
273
- hint: s.reason,
274
- })),
275
- required: false,
276
- });
277
- handleCancel(addDeps);
278
- if (Array.isArray(addDeps) && addDeps.length > 0) {
279
- finalSkillIds.push(...addDeps);
280
- finalSkillIds = [...new Set(finalSkillIds)];
281
- }
282
- }
283
- log.success(`${finalSkillIds.length} skills selected`);
284
- // 5. Select agents
285
- const agentChoices = AGENT_REGISTRY.map((a) => ({
286
- value: a.id,
287
- label: a.name,
288
- hint: a.projectSkillsPath,
289
- }));
290
- const selectedAgents = await multiselect({
291
- message: 'Which agents do you want to install to?',
292
- options: agentChoices,
293
- required: true,
294
- initialValues: opts.agents || ['cursor'],
295
- });
296
- handleCancel(selectedAgents);
297
- const agentIds = selectedAgents;
298
- // 6. Installation scope
299
- const scope = await select({
300
- message: 'Installation scope',
301
- options: [
302
- { value: 'project', label: 'Project', hint: 'Install in current directory (committed with your project)' },
303
- { value: 'global', label: 'Global', hint: 'Install in user home directory' },
304
- ],
305
- initialValue: 'project',
306
- });
307
- handleCancel(scope);
308
- // 7. Installation method
309
- const method = await select({
310
- message: 'Installation method',
311
- options: [
312
- { value: 'symlink', label: 'Symlink (Recommended)', hint: 'Single source of truth, easy updates' },
313
- { value: 'copy', label: 'Copy to all agents', hint: 'Independent copies per agent' },
314
- ],
315
- initialValue: 'symlink',
316
- });
317
- handleCancel(method);
318
- // 8. MCP config
319
- const agentConfigs = agentIds.map((id) => AGENT_REGISTRY.find((a) => a.id === id));
320
- const hasMcpAgents = agentConfigs.some((a) => a.mcpPath);
321
- let configureMcp = false;
322
- if (hasMcpAgents) {
323
- const mcpAnswer = await confirm({
324
- message: 'Configure MCP servers? (Playwright, GitHub, Filesystem)',
325
- initialValue: true,
326
- });
327
- handleCancel(mcpAnswer);
328
- configureMcp = mcpAnswer;
329
- }
330
- // 9. Structure rule
331
- let installStructureRule = false;
332
- const ruleAnswer = await confirm({
333
- message: 'Install QA project structure rule? (maps skills to output directories)',
334
- initialValue: true,
335
- });
336
- handleCancel(ruleAnswer);
337
- installStructureRule = ruleAnswer;
338
- // 10. .env template
339
- const envAnswer = await confirm({
340
- message: 'Create .env template for API keys?',
341
- initialValue: false,
342
- });
343
- handleCancel(envAnswer);
344
- const configureEnv = envAnswer;
345
- // ─── Install ────────────────────────────────────────────────────────
346
- const targetDir = process.cwd();
347
- const skillDirNames = finalSkillIds.map((id) => `qa-${id}`);
348
- const s = spinner();
349
- s.start('Installing skills...');
350
- const results = [];
351
- const gitignoreWarnings = [];
352
- for (const agent of agentConfigs) {
353
- const { installed, skipped } = await installSkillsToAgent(sourceDir, targetDir, agent, skillDirNames, scope, method);
354
- results.push({ agent: agent.name, installed, skipped });
355
- if (scope === 'project' && await isGitignored(targetDir, agent.projectSkillsPath)) {
356
- gitignoreWarnings.push(`${agent.name}: ${agent.projectSkillsPath} is in .gitignore — skills won't be committed (each developer must install individually)`);
357
- }
358
- if (configureMcp && agent.mcpPath) {
359
- await writeMcpConfig(targetDir, agent.mcpPath);
360
- }
361
- if (installStructureRule && agent.rulesPath) {
362
- const rulesIgnored = await isGitignored(targetDir, agent.rulesPath);
363
- if (!rulesIgnored) {
364
- await writeStructureRule(targetDir, agent.rulesPath, finalSkillIds);
365
- }
366
- }
367
- }
368
- if (installStructureRule) {
369
- await writeAgentsMd(targetDir, finalSkillIds);
370
- }
371
- if (configureEnv) {
372
- await writeEnvTemplate(targetDir);
373
- }
374
- s.stop('Installation complete');
375
- // ─── Gitignore warnings ─────────────────────────────────────────────
376
- if (gitignoreWarnings.length > 0) {
377
- note(gitignoreWarnings.map((w) => ` ${chalk.yellow('⚠')} ${w}`).join('\n'), 'Gitignore notice');
378
- }
379
- // ─── Summary ────────────────────────────────────────────────────────
380
- console.log();
381
- for (const r of results) {
382
- const lines = [];
383
- for (const skill of r.installed) {
384
- lines.push(` ${chalk.green('✓')} ${skill}`);
385
- }
386
- for (const skill of r.skipped) {
387
- lines.push(` ${chalk.yellow('⚠')} ${skill} ${chalk.dim('(not found)')}`);
388
- }
389
- note(lines.join('\n'), `${r.agent} — ${r.installed.length} installed`);
390
- }
391
- if (configureMcp)
392
- log.info('MCP servers configured');
393
- if (installStructureRule)
394
- log.info('QA project structure rule → AGENTS.md (always committed)');
395
- if (configureEnv)
396
- log.info('.env template created');
397
- outro(chalk.green.bold(`Done! Installed ${finalSkillIds.length} skills to ${agentIds.length} agent(s).`));
398
- }
399
- // ─── Non-Interactive Flow ───────────────────────────────────────────────
400
- export async function runNonInteractive(opts) {
401
- printBanner();
402
- const sourceDir = await resolveSourceDir();
403
- if (!(await fs.pathExists(sourceDir))) {
404
- console.error(chalk.red(`Skills source not found: ${sourceDir}`));
405
- process.exit(1);
406
- }
407
- const allSkills = await discoverSkills(sourceDir);
408
- const agentIds = opts.agents || ['cursor'];
409
- const skillIds = opts.skills || allSkills.map((s) => s.id);
410
- const normalizedIds = skillIds.map((id) => id.replace(/^qa-/, ''));
411
- const scope = opts.global ? 'global' : 'project';
412
- const method = opts.copy ? 'copy' : 'symlink';
413
- const targetDir = process.cwd();
414
- const skillDirNames = normalizedIds.map((id) => `qa-${id}`);
415
- console.log(chalk.dim(`Installing ${skillIds.length} skills to ${agentIds.length} agent(s)...`));
416
- for (const agentId of agentIds) {
417
- const agent = AGENT_REGISTRY.find((a) => a.id === agentId);
418
- if (!agent) {
419
- console.error(chalk.yellow(`Unknown agent: ${agentId}, skipping.`));
420
- continue;
421
- }
422
- const { installed, skipped } = await installSkillsToAgent(sourceDir, targetDir, agent, skillDirNames, scope, method);
423
- if (scope === 'project' && await isGitignored(targetDir, agent.projectSkillsPath)) {
424
- console.log(chalk.yellow(` ⚠ ${agent.projectSkillsPath} is in .gitignore — each developer must install individually`));
425
- }
426
- if (agent.rulesPath && !(await isGitignored(targetDir, agent.rulesPath))) {
427
- await writeStructureRule(targetDir, agent.rulesPath, normalizedIds);
428
- }
429
- console.log(chalk.white(` ${agent.name}: `) +
430
- chalk.green(`${installed.length} installed`) +
431
- (skipped.length ? chalk.yellow(` ${skipped.length} skipped`) : ''));
432
- }
433
- await writeAgentsMd(targetDir, normalizedIds);
434
- console.log(chalk.dim(' Project structure rule → AGENTS.md'));
435
- console.log(chalk.green.bold('\nDone!'));
436
- }
437
- //# sourceMappingURL=installer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- export declare const SKILL_OUTPUT_MAP: Record<string, {
2
- dirs: string[];
3
- pattern: string;
4
- }>;
5
- /**
6
- * Generate the qa-project-structure.mdc rule content for only the installed skills.
7
- */
8
- export declare function generateStructureRule(installedSkillIds: string[]): string;
9
- /**
10
- * Check whether a given path prefix is covered by the project's .gitignore.
11
- */
12
- export declare function isGitignored(targetDir: string, dirPrefix: string): Promise<boolean>;
13
- /**
14
- * Generate a portable AGENTS.md section with the project structure convention.
15
- * This file lives at the project root and is always committed to git.
16
- */
17
- export declare function generateAgentsMdSection(installedSkillIds: string[]): string;
18
- /**
19
- * Write the structure rule to the appropriate agent rules directory.
20
- */
21
- export declare function writeStructureRule(targetDir: string, rulesPath: string, installedSkillIds: string[]): Promise<boolean>;
22
- /**
23
- * Write or append the structure convention to AGENTS.md at the project root.
24
- * This is the gitignore-safe fallback — AGENTS.md is always committed.
25
- */
26
- export declare function writeAgentsMd(targetDir: string, installedSkillIds: string[]): Promise<boolean>;
27
- //# sourceMappingURL=scaffold.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CA8ChF,CAAC;AAEF;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,MAAM,CAsCzE;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAoBzF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,EAAE,GAAG,MAAM,CA+B3E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EAAE,GAC1B,OAAO,CAAC,OAAO,CAAC,CAsBlB"}