qa-skills 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -0
- package/bin/cli.js +42 -0
- package/dist/agents/registry.d.ts +5 -0
- package/dist/agents/registry.d.ts.map +1 -0
- package/dist/agents/registry.js +101 -0
- package/dist/agents/registry.js.map +1 -0
- package/dist/agents/types.d.ts +9 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/dependencies.d.ts +21 -0
- package/dist/dependencies.d.ts.map +1 -0
- package/dist/dependencies.js +125 -0
- package/dist/dependencies.js.map +1 -0
- package/dist/installer.d.ts +25 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +437 -0
- package/dist/installer.js.map +1 -0
- package/dist/scaffold.d.ts +27 -0
- package/dist/scaffold.d.ts.map +1 -0
- package/dist/scaffold.js +182 -0
- package/dist/scaffold.js.map +1 -0
- package/package.json +40 -0
- package/skills/qa-accessibility-test-writer/SKILL.md +127 -0
- package/skills/qa-accessibility-test-writer/references/axe-core-patterns.md +349 -0
- package/skills/qa-accessibility-test-writer/references/best-practices.md +184 -0
- package/skills/qa-accessibility-test-writer/references/wcag-tests.md +331 -0
- package/skills/qa-api-contract-curator/SKILL.md +104 -0
- package/skills/qa-api-contract-curator/references/breaking-changes.md +363 -0
- package/skills/qa-api-contract-curator/references/openapi-structure.md +404 -0
- package/skills/qa-browser-data-collector/SKILL.md +132 -0
- package/skills/qa-browser-data-collector/references/data-collection-checklist.md +91 -0
- package/skills/qa-browser-data-collector/references/playwright-mcp-patterns.md +113 -0
- package/skills/qa-bug-ticket-creator/SKILL.md +148 -0
- package/skills/qa-bug-ticket-creator/references/bug-report-format.md +149 -0
- package/skills/qa-bug-ticket-creator/references/severity-guide.md +81 -0
- package/skills/qa-bug-ticket-creator/templates/bug-ticket-template.md +39 -0
- package/skills/qa-changelog-analyzer/SKILL.md +134 -0
- package/skills/qa-changelog-analyzer/references/git-analysis-patterns.md +138 -0
- package/skills/qa-changelog-analyzer/references/impact-mapping.md +120 -0
- package/skills/qa-clickup-integration/SKILL.md +166 -0
- package/skills/qa-clickup-integration/references/api-patterns.md +102 -0
- package/skills/qa-clickup-integration/references/field-mapping.md +71 -0
- package/skills/qa-codeceptjs-writer/SKILL.md +136 -0
- package/skills/qa-codeceptjs-writer/references/best-practices.md +207 -0
- package/skills/qa-codeceptjs-writer/references/config.md +255 -0
- package/skills/qa-codeceptjs-writer/references/patterns.md +285 -0
- package/skills/qa-coverage-analyzer/SKILL.md +166 -0
- package/skills/qa-coverage-analyzer/references/best-practices.md +142 -0
- package/skills/qa-coverage-analyzer/references/coverage-dimensions.md +155 -0
- package/skills/qa-coverage-analyzer/references/tools.md +204 -0
- package/skills/qa-cypress-writer/SKILL.md +134 -0
- package/skills/qa-cypress-writer/references/assertions.md +121 -0
- package/skills/qa-cypress-writer/references/best-practices.md +82 -0
- package/skills/qa-cypress-writer/references/config.md +121 -0
- package/skills/qa-cypress-writer/references/patterns.md +170 -0
- package/skills/qa-data-factory/SKILL.md +126 -0
- package/skills/qa-data-factory/references/factory-patterns.md +164 -0
- package/skills/qa-data-factory/references/faker-guide.md +131 -0
- package/skills/qa-diagram-generator/SKILL.md +125 -0
- package/skills/qa-diagram-generator/references/c4-model.md +53 -0
- package/skills/qa-diagram-generator/references/charts.md +58 -0
- package/skills/qa-diagram-generator/references/class-diagram.md +85 -0
- package/skills/qa-diagram-generator/references/er-diagram.md +69 -0
- package/skills/qa-diagram-generator/references/flowchart.md +92 -0
- package/skills/qa-diagram-generator/references/from-screenshot.md +45 -0
- package/skills/qa-diagram-generator/references/gantt.md +49 -0
- package/skills/qa-diagram-generator/references/journey.md +50 -0
- package/skills/qa-diagram-generator/references/mindmap.md +75 -0
- package/skills/qa-diagram-generator/references/sequence.md +69 -0
- package/skills/qa-diagram-generator/references/state-diagram.md +56 -0
- package/skills/qa-discovery-interview/SKILL.md +182 -0
- package/skills/qa-discovery-interview/references/completeness-checklist.md +53 -0
- package/skills/qa-discovery-interview/references/conflict-patterns.md +101 -0
- package/skills/qa-discovery-interview/references/qa-categories.md +147 -0
- package/skills/qa-discovery-interview/templates/qa-brief-template.md +168 -0
- package/skills/qa-environment-checker/SKILL.md +142 -0
- package/skills/qa-environment-checker/references/dependency-matrix.md +101 -0
- package/skills/qa-environment-checker/references/health-checks.md +209 -0
- package/skills/qa-environment-checker/templates/env-readiness-template.md +64 -0
- package/skills/qa-flaky-detector/SKILL.md +153 -0
- package/skills/qa-flaky-detector/references/ci-analysis.md +140 -0
- package/skills/qa-flaky-detector/references/flaky-patterns.md +247 -0
- package/skills/qa-github-issues-enhanced/SKILL.md +175 -0
- package/skills/qa-github-issues-enhanced/references/issue-templates.md +425 -0
- package/skills/qa-github-issues-enhanced/references/label-taxonomy.md +130 -0
- package/skills/qa-github-issues-enhanced/references/workflow-patterns.md +188 -0
- package/skills/qa-httpx-writer/SKILL.md +138 -0
- package/skills/qa-httpx-writer/references/assertions.md +195 -0
- package/skills/qa-httpx-writer/references/best-practices.md +140 -0
- package/skills/qa-httpx-writer/references/config.md +212 -0
- package/skills/qa-httpx-writer/references/patterns.md +262 -0
- package/skills/qa-jest-writer/SKILL.md +131 -0
- package/skills/qa-jest-writer/references/assertions.md +125 -0
- package/skills/qa-jest-writer/references/best-practices.md +136 -0
- package/skills/qa-jest-writer/references/config.md +134 -0
- package/skills/qa-jest-writer/references/patterns.md +172 -0
- package/skills/qa-jira-integration/SKILL.md +135 -0
- package/skills/qa-jira-integration/references/api-patterns.md +143 -0
- package/skills/qa-jira-integration/references/field-mapping.md +79 -0
- package/skills/qa-jira-integration/references/xray-integration.md +85 -0
- package/skills/qa-jmeter-writer/SKILL.md +171 -0
- package/skills/qa-jmeter-writer/references/best-practices.md +157 -0
- package/skills/qa-jmeter-writer/references/config.md +204 -0
- package/skills/qa-jmeter-writer/references/patterns.md +242 -0
- package/skills/qa-junit5-writer/SKILL.md +157 -0
- package/skills/qa-junit5-writer/references/assertions.md +118 -0
- package/skills/qa-junit5-writer/references/config.md +97 -0
- package/skills/qa-junit5-writer/references/patterns.md +162 -0
- package/skills/qa-k6-writer/SKILL.md +155 -0
- package/skills/qa-k6-writer/references/best-practices.md +236 -0
- package/skills/qa-k6-writer/references/config.md +219 -0
- package/skills/qa-k6-writer/references/patterns.md +304 -0
- package/skills/qa-linear-integration/SKILL.md +137 -0
- package/skills/qa-linear-integration/references/api-patterns.md +249 -0
- package/skills/qa-linear-integration/references/field-mapping.md +121 -0
- package/skills/qa-locust-writer/SKILL.md +151 -0
- package/skills/qa-locust-writer/references/best-practices.md +126 -0
- package/skills/qa-locust-writer/references/config.md +170 -0
- package/skills/qa-locust-writer/references/patterns.md +235 -0
- package/skills/qa-manual-test-designer/SKILL.md +145 -0
- package/skills/qa-manual-test-designer/references/exploratory-charters.md +138 -0
- package/skills/qa-manual-test-designer/references/personas.md +146 -0
- package/skills/qa-manual-test-designer/templates/exploratory-charter-template.md +47 -0
- package/skills/qa-manual-test-designer/templates/test-case-template.md +31 -0
- package/skills/qa-mobile-test-writer/SKILL.md +144 -0
- package/skills/qa-mobile-test-writer/references/best-practices.md +214 -0
- package/skills/qa-mobile-test-writer/references/config.md +309 -0
- package/skills/qa-mobile-test-writer/references/patterns.md +304 -0
- package/skills/qa-nfr-analyst/SKILL.md +177 -0
- package/skills/qa-nfr-analyst/references/iso-25010-model.md +159 -0
- package/skills/qa-nfr-analyst/references/owasp-wstg-baseline.md +202 -0
- package/skills/qa-nfr-analyst/references/wcag-checklist.md +184 -0
- package/skills/qa-nfr-analyst/templates/owasp-checklist-template.md +89 -0
- package/skills/qa-nfr-analyst/templates/wcag-checklist-template.md +48 -0
- package/skills/qa-orchestrator/SKILL.md +132 -0
- package/skills/qa-orchestrator/references/handoff-chains.md +105 -0
- package/skills/qa-orchestrator/references/pipeline-modes.md +115 -0
- package/skills/qa-orchestrator/references/scheduler-rules.md +84 -0
- package/skills/qa-pact-writer/SKILL.md +133 -0
- package/skills/qa-pact-writer/references/best-practices.md +100 -0
- package/skills/qa-pact-writer/references/config.md +135 -0
- package/skills/qa-pact-writer/references/patterns.md +161 -0
- package/skills/qa-plan-creator/SKILL.md +139 -0
- package/skills/qa-plan-creator/references/introduction-plan.md +43 -0
- package/skills/qa-plan-creator/references/migration-plan.md +44 -0
- package/skills/qa-plan-creator/references/onboarding-plan.md +46 -0
- package/skills/qa-plan-creator/references/performance-plan.md +44 -0
- package/skills/qa-plan-creator/references/regression-plan.md +45 -0
- package/skills/qa-plan-creator/references/release-plan.md +45 -0
- package/skills/qa-plan-creator/references/sprint-plan.md +44 -0
- package/skills/qa-plan-creator/references/test-plan.md +59 -0
- package/skills/qa-plan-creator/references/uat-plan.md +43 -0
- package/skills/qa-plan-creator/templates/checklist-template.md +36 -0
- package/skills/qa-plan-creator/templates/regression-checklist-template.md +49 -0
- package/skills/qa-plan-creator/templates/release-checklist-template.md +46 -0
- package/skills/qa-plan-creator/templates/test-plan-template.md +74 -0
- package/skills/qa-playwright-py-writer/SKILL.md +156 -0
- package/skills/qa-playwright-py-writer/references/best-practices.md +194 -0
- package/skills/qa-playwright-py-writer/references/config.md +195 -0
- package/skills/qa-playwright-py-writer/references/patterns.md +212 -0
- package/skills/qa-playwright-ts-writer/SKILL.md +151 -0
- package/skills/qa-playwright-ts-writer/references/assertions.md +109 -0
- package/skills/qa-playwright-ts-writer/references/best-practices.md +191 -0
- package/skills/qa-playwright-ts-writer/references/config.md +144 -0
- package/skills/qa-playwright-ts-writer/references/patterns.md +171 -0
- package/skills/qa-pytest-writer/SKILL.md +145 -0
- package/skills/qa-pytest-writer/references/assertions.md +149 -0
- package/skills/qa-pytest-writer/references/best-practices.md +97 -0
- package/skills/qa-pytest-writer/references/config.md +176 -0
- package/skills/qa-pytest-writer/references/patterns.md +251 -0
- package/skills/qa-qase-integration/SKILL.md +149 -0
- package/skills/qa-qase-integration/references/api-reference.md +354 -0
- package/skills/qa-qase-integration/references/ci-integration.md +196 -0
- package/skills/qa-qase-integration/references/field-mapping.md +157 -0
- package/skills/qa-requirements-generator/SKILL.md +152 -0
- package/skills/qa-requirements-generator/references/iso-29148-structure.md +153 -0
- package/skills/qa-requirements-generator/references/requirement-patterns.md +278 -0
- package/skills/qa-rest-assured-writer/SKILL.md +137 -0
- package/skills/qa-rest-assured-writer/references/best-practices.md +50 -0
- package/skills/qa-rest-assured-writer/references/config.md +124 -0
- package/skills/qa-rest-assured-writer/references/patterns.md +192 -0
- package/skills/qa-risk-analyzer/SKILL.md +158 -0
- package/skills/qa-risk-analyzer/references/impact-analysis.md +133 -0
- package/skills/qa-risk-analyzer/references/risk-factors.md +123 -0
- package/skills/qa-robot-framework-writer/SKILL.md +147 -0
- package/skills/qa-robot-framework-writer/references/best-practices.md +249 -0
- package/skills/qa-robot-framework-writer/references/config.md +204 -0
- package/skills/qa-robot-framework-writer/references/libraries.md +273 -0
- package/skills/qa-robot-framework-writer/references/patterns.md +216 -0
- package/skills/qa-security-test-writer/SKILL.md +123 -0
- package/skills/qa-security-test-writer/references/best-practices.md +155 -0
- package/skills/qa-security-test-writer/references/owasp-top10.md +331 -0
- package/skills/qa-security-test-writer/references/zap-config.md +258 -0
- package/skills/qa-selenium-java-writer/SKILL.md +143 -0
- package/skills/qa-selenium-java-writer/references/best-practices.md +59 -0
- package/skills/qa-selenium-java-writer/references/config.md +143 -0
- package/skills/qa-selenium-java-writer/references/patterns.md +170 -0
- package/skills/qa-selenium-py-writer/SKILL.md +150 -0
- package/skills/qa-selenium-py-writer/references/best-practices.md +175 -0
- package/skills/qa-selenium-py-writer/references/config.md +224 -0
- package/skills/qa-selenium-py-writer/references/patterns.md +255 -0
- package/skills/qa-shortcut-integration/SKILL.md +143 -0
- package/skills/qa-shortcut-integration/references/api-patterns.md +126 -0
- package/skills/qa-shortcut-integration/references/field-mapping.md +66 -0
- package/skills/qa-spec-auditor/SKILL.md +162 -0
- package/skills/qa-spec-auditor/references/audit-checklist.md +144 -0
- package/skills/qa-spec-auditor/references/drift-patterns.md +207 -0
- package/skills/qa-spec-writer/SKILL.md +143 -0
- package/skills/qa-spec-writer/references/gherkin-guide.md +253 -0
- package/skills/qa-spec-writer/references/specification-patterns.md +274 -0
- package/skills/qa-spring-test-writer/SKILL.md +170 -0
- package/skills/qa-spring-test-writer/references/best-practices.md +57 -0
- package/skills/qa-spring-test-writer/references/config.md +179 -0
- package/skills/qa-spring-test-writer/references/patterns.md +235 -0
- package/skills/qa-supertest-writer/SKILL.md +150 -0
- package/skills/qa-supertest-writer/references/assertions.md +192 -0
- package/skills/qa-supertest-writer/references/best-practices.md +102 -0
- package/skills/qa-supertest-writer/references/config.md +166 -0
- package/skills/qa-supertest-writer/references/patterns.md +242 -0
- package/skills/qa-task-creator/SKILL.md +142 -0
- package/skills/qa-task-creator/references/linking-patterns.md +127 -0
- package/skills/qa-task-creator/references/task-types.md +169 -0
- package/skills/qa-task-creator/templates/task-template.md +24 -0
- package/skills/qa-test-doc-compiler/SKILL.md +114 -0
- package/skills/qa-test-doc-compiler/references/agile-tailoring.md +220 -0
- package/skills/qa-test-doc-compiler/references/iso-29119-3-documents.md +302 -0
- package/skills/qa-test-healer/SKILL.md +101 -0
- package/skills/qa-test-healer/references/diagnosis-patterns.md +142 -0
- package/skills/qa-test-healer/references/fix-strategies.md +177 -0
- package/skills/qa-test-reporter/SKILL.md +130 -0
- package/skills/qa-test-reporter/references/best-practices.md +162 -0
- package/skills/qa-test-reporter/references/iso-29119-reports.md +236 -0
- package/skills/qa-test-reporter/references/report-formats.md +287 -0
- package/skills/qa-test-reviewer/SKILL.md +142 -0
- package/skills/qa-test-reviewer/references/anti-patterns.md +268 -0
- package/skills/qa-test-reviewer/references/review-checklist.md +93 -0
- package/skills/qa-test-strategy/SKILL.md +133 -0
- package/skills/qa-test-strategy/references/entry-exit-criteria.md +176 -0
- package/skills/qa-test-strategy/references/risk-matrix.md +102 -0
- package/skills/qa-test-strategy/references/testing-types.md +143 -0
- package/skills/qa-testcase-from-docs/SKILL.md +161 -0
- package/skills/qa-testcase-from-docs/references/test-case-format.md +196 -0
- package/skills/qa-testcase-from-docs/references/test-design-techniques.md +126 -0
- package/skills/qa-testcase-from-docs/templates/test-case-template.md +31 -0
- package/skills/qa-testcase-from-ui/SKILL.md +109 -0
- package/skills/qa-testcase-from-ui/references/ui-element-patterns.md +126 -0
- package/skills/qa-testcase-from-ui/references/visual-analysis-guide.md +146 -0
- package/skills/qa-testcase-from-ui/templates/test-case-template.md +31 -0
- package/skills/qa-visual-regression-writer/SKILL.md +175 -0
- package/skills/qa-visual-regression-writer/references/best-practices.md +154 -0
- package/skills/qa-visual-regression-writer/references/config.md +220 -0
- package/skills/qa-visual-regression-writer/references/patterns.md +213 -0
- package/skills/qa-vitest-writer/SKILL.md +141 -0
- package/skills/qa-vitest-writer/references/assertions.md +105 -0
- package/skills/qa-vitest-writer/references/best-practices.md +62 -0
- package/skills/qa-vitest-writer/references/config.md +127 -0
- package/skills/qa-vitest-writer/references/patterns.md +141 -0
- package/skills/qa-webdriverio-writer/SKILL.md +145 -0
- package/skills/qa-webdriverio-writer/references/best-practices.md +176 -0
- package/skills/qa-webdriverio-writer/references/config.md +240 -0
- package/skills/qa-webdriverio-writer/references/patterns.md +269 -0
package/README.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# qa-skills
|
|
2
|
+
|
|
3
|
+
Interactive CLI installer for the **QA Skills Ecosystem** — install 56 specialized QA agent skills into Cursor, Claude Code, Codex, Cline, GitHub Copilot, Windsurf, and more.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx qa-skills init
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or install globally:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g qa-skills
|
|
15
|
+
qa-skills init
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Running bare `qa-skills` is equivalent to `qa-skills init`.
|
|
19
|
+
|
|
20
|
+
## Features
|
|
21
|
+
|
|
22
|
+
- **Single `init` command** — one entry point for fresh machines and existing setups
|
|
23
|
+
- **Skills bundled** — works offline, no need to clone the repo first
|
|
24
|
+
- **Interactive prompts** — select skills with descriptions, grouped by category
|
|
25
|
+
- **Multi-agent support** — install to 11+ coding agents simultaneously
|
|
26
|
+
- **Dependency suggestions** — notifies when selected skills work best with companions
|
|
27
|
+
- **Symlink / Copy** — symlink (recommended) for single source of truth, or copy for independence
|
|
28
|
+
- **Project / Global scope** — install per-project or user-wide
|
|
29
|
+
- **MCP configuration** — optionally configure Playwright, GitHub, Filesystem MCP servers
|
|
30
|
+
- **Project structure rule** — maps each skill to an output directory via `AGENTS.md`
|
|
31
|
+
- **Non-interactive mode** — CLI flags for CI/CD automation
|
|
32
|
+
|
|
33
|
+
## Agent Support
|
|
34
|
+
|
|
35
|
+
| Agent | `--agent` flag | Project Path | Global Path |
|
|
36
|
+
|-------|---------------|--------------|-------------|
|
|
37
|
+
| Cursor | `cursor` | `.cursor/skills/` | `~/.cursor/skills/` |
|
|
38
|
+
| Claude Code | `claude-code` | `.claude/skills/` | `~/.claude/skills/` |
|
|
39
|
+
| Codex | `codex` | `.agents/skills/` | `~/.codex/skills/` |
|
|
40
|
+
| Cline | `cline` | `.agents/skills/` | `~/.agents/skills/` |
|
|
41
|
+
| GitHub Copilot | `github-copilot` | `.agents/skills/` | `~/.copilot/skills/` |
|
|
42
|
+
| Windsurf | `windsurf` | `.windsurf/skills/` | `~/.codeium/windsurf/skills/` |
|
|
43
|
+
| Roo Code | `roo` | `.roo/skills/` | `~/.roo/skills/` |
|
|
44
|
+
| OpenCode | `opencode` | `.agents/skills/` | `~/.config/opencode/skills/` |
|
|
45
|
+
| Gemini CLI | `gemini-cli` | `.agents/skills/` | `~/.gemini/skills/` |
|
|
46
|
+
| Amp | `amp` | `.agents/skills/` | `~/.config/agents/skills/` |
|
|
47
|
+
| VS Code | `vscode` | `.agents/skills/` | — |
|
|
48
|
+
|
|
49
|
+
## CLI Options
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
qa-skills init [options]
|
|
53
|
+
|
|
54
|
+
Options:
|
|
55
|
+
-a, --agent <agents...> Target specific agents (e.g., cursor claude-code)
|
|
56
|
+
-s, --skill <skills...> Install specific skills by name
|
|
57
|
+
-g, --global Install to user home directory instead of project
|
|
58
|
+
--copy Copy files instead of symlinking
|
|
59
|
+
-y, --yes Skip all confirmation prompts
|
|
60
|
+
-l, --list List available skills without installing
|
|
61
|
+
-V, --version Output version number
|
|
62
|
+
-h, --help Display help
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Examples
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Interactive — pick skills, agents, options
|
|
69
|
+
qa-skills init
|
|
70
|
+
|
|
71
|
+
# List available skills
|
|
72
|
+
qa-skills init --list
|
|
73
|
+
|
|
74
|
+
# Install specific skills to Cursor (non-interactive)
|
|
75
|
+
qa-skills init -a cursor -s playwright-ts-writer jest-writer -y
|
|
76
|
+
|
|
77
|
+
# Install all skills to multiple agents
|
|
78
|
+
qa-skills init -a cursor claude-code codex -y
|
|
79
|
+
|
|
80
|
+
# Install globally with copy method
|
|
81
|
+
qa-skills init -g --copy -a cursor -s orchestrator -y
|
|
82
|
+
|
|
83
|
+
# Shorthand (init is the default command)
|
|
84
|
+
qa-skills -a cursor -s jest-writer -y
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Skill Categories
|
|
88
|
+
|
|
89
|
+
| Category | Count | Skills |
|
|
90
|
+
|----------|-------|--------|
|
|
91
|
+
| Documentation & Planning | 8 | requirements-generator, spec-writer, nfr-analyst, api-contract-curator, plan-creator, diagram-generator, test-strategy, test-doc-compiler |
|
|
92
|
+
| Test Case Design | 4 | testcase-from-docs, testcase-from-ui, browser-data-collector, manual-test-designer |
|
|
93
|
+
| TypeScript Test Writers | 7 | jest-writer, vitest-writer, playwright-ts-writer, cypress-writer, webdriverio-writer, codeceptjs-writer, supertest-writer |
|
|
94
|
+
| Python Test Writers | 5 | pytest-writer, playwright-py-writer, selenium-py-writer, robot-framework-writer, httpx-writer |
|
|
95
|
+
| Java Test Writers | 4 | junit5-writer, selenium-java-writer, rest-assured-writer, spring-test-writer |
|
|
96
|
+
| Performance & Specialized | 8 | k6-writer, locust-writer, jmeter-writer, security-test-writer, accessibility-test-writer, visual-regression-writer, pact-writer, mobile-test-writer |
|
|
97
|
+
| Reporting & Analysis | 6 | test-reporter, coverage-analyzer, bug-ticket-creator, task-creator, risk-analyzer, spec-auditor |
|
|
98
|
+
| Orchestration | 1 | orchestrator |
|
|
99
|
+
| Support & Maintenance | 7 | test-healer, changelog-analyzer, flaky-detector, test-reviewer, data-factory, environment-checker, discovery-interview |
|
|
100
|
+
| Integrations | 6 | qase-integration, github-issues-enhanced, jira-integration, linear-integration, clickup-integration, shortcut-integration |
|
|
101
|
+
|
|
102
|
+
## Dependency System
|
|
103
|
+
|
|
104
|
+
Skills can recommend companions. After selection, the installer checks for missing recommendations:
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Some selected skills work best with additional skills:
|
|
108
|
+
|
|
109
|
+
qa-task-creator recommends qa-bug-ticket-creator
|
|
110
|
+
Paired mode: auto-create linked fix tasks from bug tickets
|
|
111
|
+
|
|
112
|
+
Add recommended skills? (space to toggle, enter to confirm)
|
|
113
|
+
[x] qa-bug-ticket-creator
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Project Structure Rule
|
|
117
|
+
|
|
118
|
+
When enabled, the installer maps each skill to its output directory in two locations:
|
|
119
|
+
|
|
120
|
+
1. **`AGENTS.md`** (project root) — always committed to git, readable by all agents
|
|
121
|
+
2. **`.cursor/rules/qa-project-structure.mdc`** — only written if `.cursor/` is **not** in `.gitignore`
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
docs/requirements/ <- qa-requirements-generator
|
|
125
|
+
docs/specs/ <- qa-spec-writer
|
|
126
|
+
docs/plans/ <- qa-plan-creator, qa-test-strategy
|
|
127
|
+
tests/e2e/ <- qa-playwright-ts-writer, qa-cypress-writer, ...
|
|
128
|
+
reports/test-runs/ <- qa-test-reporter
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Directories are created on-demand by skills — no empty folders are pre-created.
|
|
132
|
+
|
|
133
|
+
## Gitignore Handling
|
|
134
|
+
|
|
135
|
+
Many teams gitignore `.cursor/`, `.windsurf/`, etc. The installer handles this gracefully:
|
|
136
|
+
|
|
137
|
+
| Artifact | `.cursor/` gitignored | `.cursor/` committed |
|
|
138
|
+
|----------|----------------------|---------------------|
|
|
139
|
+
| Skills | Installed locally, each dev runs `qa-skills init` | Committed with project |
|
|
140
|
+
| Structure rule | Written to `AGENTS.md` only | Written to both `AGENTS.md` and `.cursor/rules/` |
|
|
141
|
+
| MCP config | Installed locally | Committed with project |
|
|
142
|
+
|
|
143
|
+
When `.cursor/` is gitignored, the installer shows a notice:
|
|
144
|
+
```
|
|
145
|
+
warning .cursor/skills is in .gitignore — each developer must install individually
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Source Resolution
|
|
149
|
+
|
|
150
|
+
The installer finds skills in this priority order:
|
|
151
|
+
|
|
152
|
+
1. `QA_SKILLS_SOURCE` env var (explicit override)
|
|
153
|
+
2. Monorepo sibling: `../.cursor/skills/` (author developing locally)
|
|
154
|
+
3. Bundled: `skills/` inside the npm package (fresh machine via `npx`)
|
|
155
|
+
|
|
156
|
+
## skills.sh Compatibility
|
|
157
|
+
|
|
158
|
+
This repo is also compatible with the [skills.sh](https://skills.sh) ecosystem:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
npx skills add owner/qa-skills
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
The `.cursor/skills/` directory is auto-discovered by the `skills` CLI.
|
|
165
|
+
|
|
166
|
+
## License
|
|
167
|
+
|
|
168
|
+
GPL-3.0 — see [LICENSE](../LICENSE)
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { program } from 'commander';
|
|
4
|
+
|
|
5
|
+
const initCmd = program
|
|
6
|
+
.name('qa-skills')
|
|
7
|
+
.description('QA Skills Ecosystem — install agent skills into Cursor, Claude Code, Codex, and more')
|
|
8
|
+
.version('3.0.0');
|
|
9
|
+
|
|
10
|
+
initCmd
|
|
11
|
+
.command('init', { isDefault: true })
|
|
12
|
+
.description('Initialize QA skills in your project (default command)')
|
|
13
|
+
.option('-a, --agent <agents...>', 'Target specific agents (e.g., cursor, claude-code)')
|
|
14
|
+
.option('-s, --skill <skills...>', 'Install specific skills by name')
|
|
15
|
+
.option('-g, --global', 'Install to user home directory instead of project')
|
|
16
|
+
.option('--copy', 'Copy files instead of symlinking')
|
|
17
|
+
.option('-y, --yes', 'Skip all confirmation prompts')
|
|
18
|
+
.option('-l, --list', 'List available skills without installing')
|
|
19
|
+
.action(async (opts) => {
|
|
20
|
+
const { listSkills, runInteractive, runNonInteractive } = await import('../dist/installer.js');
|
|
21
|
+
|
|
22
|
+
if (opts.list) {
|
|
23
|
+
await listSkills();
|
|
24
|
+
} else if (opts.yes || (opts.agent && opts.skill)) {
|
|
25
|
+
await runNonInteractive({
|
|
26
|
+
agents: opts.agent,
|
|
27
|
+
skills: opts.skill,
|
|
28
|
+
global: opts.global,
|
|
29
|
+
copy: opts.copy,
|
|
30
|
+
yes: opts.yes,
|
|
31
|
+
});
|
|
32
|
+
} else {
|
|
33
|
+
await runInteractive({
|
|
34
|
+
agents: opts.agent,
|
|
35
|
+
skills: opts.skill,
|
|
36
|
+
global: opts.global,
|
|
37
|
+
copy: opts.copy,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
program.parse();
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AgentConfig } from './types.js';
|
|
2
|
+
export declare const AGENT_REGISTRY: AgentConfig[];
|
|
3
|
+
export declare function getAgentById(id: string): AgentConfig | undefined;
|
|
4
|
+
export declare function resolveGlobalPath(globalPath: string): string;
|
|
5
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,cAAc,EAAE,WAAW,EAyFvC,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAEhE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAM5D"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export const AGENT_REGISTRY = [
|
|
2
|
+
{
|
|
3
|
+
id: 'cursor',
|
|
4
|
+
name: 'Cursor',
|
|
5
|
+
projectSkillsPath: '.cursor/skills',
|
|
6
|
+
globalSkillsPath: '~/.cursor/skills',
|
|
7
|
+
rulesPath: '.cursor/rules',
|
|
8
|
+
mcpPath: '.cursor/mcp.json',
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
id: 'claude-code',
|
|
12
|
+
name: 'Claude Code',
|
|
13
|
+
projectSkillsPath: '.claude/skills',
|
|
14
|
+
globalSkillsPath: '~/.claude/skills',
|
|
15
|
+
rulesPath: null,
|
|
16
|
+
mcpPath: null,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: 'codex',
|
|
20
|
+
name: 'Codex',
|
|
21
|
+
projectSkillsPath: '.agents/skills',
|
|
22
|
+
globalSkillsPath: '~/.codex/skills',
|
|
23
|
+
rulesPath: null,
|
|
24
|
+
mcpPath: null,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: 'cline',
|
|
28
|
+
name: 'Cline',
|
|
29
|
+
projectSkillsPath: '.agents/skills',
|
|
30
|
+
globalSkillsPath: '~/.agents/skills',
|
|
31
|
+
rulesPath: null,
|
|
32
|
+
mcpPath: null,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: 'github-copilot',
|
|
36
|
+
name: 'GitHub Copilot',
|
|
37
|
+
projectSkillsPath: '.agents/skills',
|
|
38
|
+
globalSkillsPath: '~/.copilot/skills',
|
|
39
|
+
rulesPath: null,
|
|
40
|
+
mcpPath: null,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 'windsurf',
|
|
44
|
+
name: 'Windsurf',
|
|
45
|
+
projectSkillsPath: '.windsurf/skills',
|
|
46
|
+
globalSkillsPath: '~/.codeium/windsurf/skills',
|
|
47
|
+
rulesPath: '.windsurf/rules',
|
|
48
|
+
mcpPath: '.windsurf/mcp.json',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: 'roo',
|
|
52
|
+
name: 'Roo Code',
|
|
53
|
+
projectSkillsPath: '.roo/skills',
|
|
54
|
+
globalSkillsPath: '~/.roo/skills',
|
|
55
|
+
rulesPath: null,
|
|
56
|
+
mcpPath: null,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: 'opencode',
|
|
60
|
+
name: 'OpenCode',
|
|
61
|
+
projectSkillsPath: '.agents/skills',
|
|
62
|
+
globalSkillsPath: '~/.config/opencode/skills',
|
|
63
|
+
rulesPath: null,
|
|
64
|
+
mcpPath: null,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: 'gemini-cli',
|
|
68
|
+
name: 'Gemini CLI',
|
|
69
|
+
projectSkillsPath: '.agents/skills',
|
|
70
|
+
globalSkillsPath: '~/.gemini/skills',
|
|
71
|
+
rulesPath: null,
|
|
72
|
+
mcpPath: null,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: 'amp',
|
|
76
|
+
name: 'Amp',
|
|
77
|
+
projectSkillsPath: '.agents/skills',
|
|
78
|
+
globalSkillsPath: '~/.config/agents/skills',
|
|
79
|
+
rulesPath: null,
|
|
80
|
+
mcpPath: null,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'vscode',
|
|
84
|
+
name: 'VS Code',
|
|
85
|
+
projectSkillsPath: '.agents/skills',
|
|
86
|
+
globalSkillsPath: null,
|
|
87
|
+
rulesPath: null,
|
|
88
|
+
mcpPath: null,
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
export function getAgentById(id) {
|
|
92
|
+
return AGENT_REGISTRY.find((a) => a.id === id);
|
|
93
|
+
}
|
|
94
|
+
export function resolveGlobalPath(globalPath) {
|
|
95
|
+
if (globalPath.startsWith('~/')) {
|
|
96
|
+
const home = process.env.HOME || process.env.USERPROFILE || '';
|
|
97
|
+
return globalPath.replace('~', home);
|
|
98
|
+
}
|
|
99
|
+
return globalPath;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/agents/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface AgentConfig {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly name: string;
|
|
4
|
+
readonly projectSkillsPath: string;
|
|
5
|
+
readonly globalSkillsPath: string | null;
|
|
6
|
+
readonly rulesPath: string | null;
|
|
7
|
+
readonly mcpPath: string | null;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface SkillDependency {
|
|
2
|
+
recommended: string[];
|
|
3
|
+
reason: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Dependency map: skill ID (without qa- prefix) -> recommended companion skills.
|
|
7
|
+
* Only lists strong/moderate pairings where skills genuinely enhance each other.
|
|
8
|
+
* Pipeline-upstream skills (e.g. every writer recommending testcase-from-docs) are omitted.
|
|
9
|
+
*/
|
|
10
|
+
export declare const SKILL_DEPENDENCIES: Record<string, SkillDependency>;
|
|
11
|
+
export interface DependencySuggestion {
|
|
12
|
+
requiredBy: string;
|
|
13
|
+
skillId: string;
|
|
14
|
+
reason: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Given a list of selected skill IDs (without qa- prefix),
|
|
18
|
+
* returns suggestions for missing recommended companions.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveDependencies(selectedIds: string[]): DependencySuggestion[];
|
|
21
|
+
//# sourceMappingURL=dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA6F9D,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAsBjF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency map: skill ID (without qa- prefix) -> recommended companion skills.
|
|
3
|
+
* Only lists strong/moderate pairings where skills genuinely enhance each other.
|
|
4
|
+
* Pipeline-upstream skills (e.g. every writer recommending testcase-from-docs) are omitted.
|
|
5
|
+
*/
|
|
6
|
+
export const SKILL_DEPENDENCIES = {
|
|
7
|
+
'requirements-generator': {
|
|
8
|
+
recommended: ['discovery-interview'],
|
|
9
|
+
reason: 'Auto-delegates when input is insufficient (<3 sentences)',
|
|
10
|
+
},
|
|
11
|
+
'spec-writer': {
|
|
12
|
+
recommended: ['requirements-generator'],
|
|
13
|
+
reason: 'Transforms requirements into detailed specs',
|
|
14
|
+
},
|
|
15
|
+
'plan-creator': {
|
|
16
|
+
recommended: ['diagram-generator'],
|
|
17
|
+
reason: 'Embeds diagrams into plans (Gantt, flowchart)',
|
|
18
|
+
},
|
|
19
|
+
'test-strategy': {
|
|
20
|
+
recommended: ['diagram-generator', 'risk-analyzer'],
|
|
21
|
+
reason: 'Uses diagrams for visualization and risk data for prioritization',
|
|
22
|
+
},
|
|
23
|
+
'test-doc-compiler': {
|
|
24
|
+
recommended: ['test-reporter'],
|
|
25
|
+
reason: 'Aggregates test reports into ISO 29119-3 documents',
|
|
26
|
+
},
|
|
27
|
+
'testcase-from-docs': {
|
|
28
|
+
recommended: ['requirements-generator', 'spec-writer'],
|
|
29
|
+
reason: 'Best results when fed structured requirements/specs',
|
|
30
|
+
},
|
|
31
|
+
'testcase-from-ui': {
|
|
32
|
+
recommended: ['browser-data-collector'],
|
|
33
|
+
reason: 'Browser data collector provides page structure for test case generation',
|
|
34
|
+
},
|
|
35
|
+
'task-creator': {
|
|
36
|
+
recommended: ['bug-ticket-creator'],
|
|
37
|
+
reason: 'Paired mode: auto-create linked fix tasks from bug tickets',
|
|
38
|
+
},
|
|
39
|
+
'bug-ticket-creator': {
|
|
40
|
+
recommended: ['task-creator', 'github-issues-enhanced'],
|
|
41
|
+
reason: 'Create GitHub Issues and linked fix tasks',
|
|
42
|
+
},
|
|
43
|
+
'spec-auditor': {
|
|
44
|
+
recommended: ['requirements-generator', 'spec-writer'],
|
|
45
|
+
reason: 'Compares live behavior against requirement and spec docs',
|
|
46
|
+
},
|
|
47
|
+
'risk-analyzer': {
|
|
48
|
+
recommended: ['coverage-analyzer'],
|
|
49
|
+
reason: 'Uses coverage data in risk formula: Risk = Complexity x ChangeFreq x (1 - Coverage)',
|
|
50
|
+
},
|
|
51
|
+
'flaky-detector': {
|
|
52
|
+
recommended: ['test-healer'],
|
|
53
|
+
reason: 'Test healer auto-fixes issues that flaky detector identifies',
|
|
54
|
+
},
|
|
55
|
+
'orchestrator': {
|
|
56
|
+
recommended: ['diagram-generator', 'discovery-interview'],
|
|
57
|
+
reason: 'Orchestrator chains depend on these embedded services',
|
|
58
|
+
},
|
|
59
|
+
'pact-writer': {
|
|
60
|
+
recommended: ['api-contract-curator'],
|
|
61
|
+
reason: 'Contract tests work best with formalized API contracts',
|
|
62
|
+
},
|
|
63
|
+
'supertest': {
|
|
64
|
+
recommended: ['api-contract-curator'],
|
|
65
|
+
reason: 'API tests benefit from structured OpenAPI contracts',
|
|
66
|
+
},
|
|
67
|
+
'httpx': {
|
|
68
|
+
recommended: ['api-contract-curator'],
|
|
69
|
+
reason: 'API tests benefit from structured OpenAPI contracts',
|
|
70
|
+
},
|
|
71
|
+
'rest-assured': {
|
|
72
|
+
recommended: ['api-contract-curator'],
|
|
73
|
+
reason: 'API tests benefit from structured OpenAPI contracts',
|
|
74
|
+
},
|
|
75
|
+
'github-issues-enhanced': {
|
|
76
|
+
recommended: ['bug-ticket-creator'],
|
|
77
|
+
reason: 'Enhanced GitHub workflows work with structured bug reports',
|
|
78
|
+
},
|
|
79
|
+
'jira-integration': {
|
|
80
|
+
recommended: ['bug-ticket-creator', 'task-creator'],
|
|
81
|
+
reason: 'Syncs bug tickets and tasks to Jira issues',
|
|
82
|
+
},
|
|
83
|
+
'linear-integration': {
|
|
84
|
+
recommended: ['bug-ticket-creator', 'task-creator'],
|
|
85
|
+
reason: 'Syncs bug tickets and tasks to Linear issues',
|
|
86
|
+
},
|
|
87
|
+
'clickup-integration': {
|
|
88
|
+
recommended: ['bug-ticket-creator', 'task-creator'],
|
|
89
|
+
reason: 'Syncs bug tickets and tasks to ClickUp tasks',
|
|
90
|
+
},
|
|
91
|
+
'shortcut-integration': {
|
|
92
|
+
recommended: ['bug-ticket-creator', 'task-creator'],
|
|
93
|
+
reason: 'Syncs bug tickets and tasks to Shortcut stories',
|
|
94
|
+
},
|
|
95
|
+
'qase-integration': {
|
|
96
|
+
recommended: ['testcase-from-docs', 'test-reporter'],
|
|
97
|
+
reason: 'Syncs test cases and results with Qase.io TMS',
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Given a list of selected skill IDs (without qa- prefix),
|
|
102
|
+
* returns suggestions for missing recommended companions.
|
|
103
|
+
*/
|
|
104
|
+
export function resolveDependencies(selectedIds) {
|
|
105
|
+
const selectedSet = new Set(selectedIds);
|
|
106
|
+
const suggestions = [];
|
|
107
|
+
const alreadySuggested = new Set();
|
|
108
|
+
for (const id of selectedIds) {
|
|
109
|
+
const dep = SKILL_DEPENDENCIES[id];
|
|
110
|
+
if (!dep)
|
|
111
|
+
continue;
|
|
112
|
+
for (const rec of dep.recommended) {
|
|
113
|
+
if (!selectedSet.has(rec) && !alreadySuggested.has(rec)) {
|
|
114
|
+
suggestions.push({
|
|
115
|
+
requiredBy: id,
|
|
116
|
+
skillId: rec,
|
|
117
|
+
reason: dep.reason,
|
|
118
|
+
});
|
|
119
|
+
alreadySuggested.add(rec);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return suggestions;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
export interface SkillInfo {
|
|
7
|
+
id: string;
|
|
8
|
+
dirName: string;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
category: string;
|
|
12
|
+
}
|
|
13
|
+
export interface InstallerOptions {
|
|
14
|
+
agents?: string[];
|
|
15
|
+
skills?: string[];
|
|
16
|
+
global?: boolean;
|
|
17
|
+
copy?: boolean;
|
|
18
|
+
yes?: boolean;
|
|
19
|
+
list?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare const SKILL_CATEGORIES: Record<string, string[]>;
|
|
22
|
+
export declare function listSkills(): Promise<void>;
|
|
23
|
+
export declare function runInteractive(opts?: InstallerOptions): Promise<void>;
|
|
24
|
+
export declare function runNonInteractive(opts: InstallerOptions): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6BH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAyCrD,CAAC;AA8LF,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAuBhD;AAID,wBAAsB,cAAc,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8M/E;AAID,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoD7E"}
|