forge-workflow 0.0.4 → 0.0.6
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/.claude/commands/dev.md +345 -340
- package/.claude/commands/plan.md +566 -521
- package/.claude/commands/premerge.md +186 -176
- package/.claude/commands/research.md +42 -42
- package/.claude/commands/review.md +448 -442
- package/.claude/commands/rollback.md +721 -721
- package/.claude/commands/ship.md +212 -164
- package/.claude/commands/sonarcloud.md +152 -152
- package/.claude/commands/status.md +90 -48
- package/.claude/commands/validate.md +288 -282
- package/.claude/commands/verify.md +269 -221
- package/.claude/rules/greptile-review-process.md +285 -285
- package/.claude/rules/workflow.md +121 -105
- package/.claude/scripts/greptile-resolve.sh +558 -526
- package/.claude/scripts/load-env.sh +32 -32
- package/.cline/workflows/dev.md +342 -337
- package/.cline/workflows/plan.md +563 -518
- package/.cline/workflows/premerge.md +183 -173
- package/.cline/workflows/research.md +39 -39
- package/.cline/workflows/review.md +445 -439
- package/.cline/workflows/rollback.md +718 -718
- package/.cline/workflows/ship.md +209 -161
- package/.cline/workflows/sonarcloud.md +146 -146
- package/.cline/workflows/status.md +87 -45
- package/.cline/workflows/validate.md +285 -279
- package/.cline/workflows/verify.md +266 -218
- package/.codex/config.toml +11 -11
- package/.codex/skills/dev/SKILL.md +345 -340
- package/.codex/skills/plan/SKILL.md +566 -521
- package/.codex/skills/premerge/SKILL.md +186 -176
- package/.codex/skills/research/SKILL.md +42 -42
- package/.codex/skills/review/SKILL.md +448 -442
- package/.codex/skills/rollback/SKILL.md +721 -721
- package/.codex/skills/ship/SKILL.md +212 -164
- package/.codex/skills/sonarcloud/SKILL.md +149 -149
- package/.codex/skills/status/SKILL.md +90 -48
- package/.codex/skills/validate/SKILL.md +288 -282
- package/.codex/skills/verify/SKILL.md +269 -221
- package/.cursor/commands/dev.md +342 -337
- package/.cursor/commands/plan.md +563 -518
- package/.cursor/commands/premerge.md +183 -173
- package/.cursor/commands/research.md +39 -39
- package/.cursor/commands/review.md +445 -439
- package/.cursor/commands/rollback.md +718 -718
- package/.cursor/commands/ship.md +209 -161
- package/.cursor/commands/sonarcloud.md +146 -146
- package/.cursor/commands/status.md +87 -45
- package/.cursor/commands/validate.md +285 -279
- package/.cursor/commands/verify.md +266 -218
- package/.cursor/rules/permissions-guidance.mdc +37 -37
- package/.forge/hooks/check-tdd.js +240 -240
- package/.github/PLUGIN_TEMPLATE.json +32 -32
- package/.github/prompts/dev.prompt.md +347 -342
- package/.github/prompts/plan.prompt.md +568 -523
- package/.github/prompts/premerge.prompt.md +188 -178
- package/.github/prompts/research.prompt.md +44 -44
- package/.github/prompts/review.prompt.md +450 -444
- package/.github/prompts/rollback.prompt.md +723 -723
- package/.github/prompts/ship.prompt.md +214 -166
- package/.github/prompts/sonarcloud.prompt.md +151 -151
- package/.github/prompts/status.prompt.md +92 -50
- package/.github/prompts/validate.prompt.md +290 -284
- package/.github/prompts/verify.prompt.md +271 -223
- package/.github/workflows/beads-to-github.yml +56 -0
- package/.github/workflows/github-to-beads.yml +97 -0
- package/.kilocode/workflows/dev.md +346 -341
- package/.kilocode/workflows/plan.md +567 -522
- package/.kilocode/workflows/premerge.md +187 -177
- package/.kilocode/workflows/research.md +43 -43
- package/.kilocode/workflows/review.md +449 -443
- package/.kilocode/workflows/rollback.md +722 -722
- package/.kilocode/workflows/ship.md +213 -165
- package/.kilocode/workflows/sonarcloud.md +150 -150
- package/.kilocode/workflows/status.md +91 -49
- package/.kilocode/workflows/validate.md +289 -283
- package/.kilocode/workflows/verify.md +270 -222
- package/.mcp.json.example +12 -12
- package/.opencode/commands/dev.md +345 -340
- package/.opencode/commands/plan.md +566 -521
- package/.opencode/commands/premerge.md +186 -176
- package/.opencode/commands/research.md +42 -42
- package/.opencode/commands/review.md +448 -442
- package/.opencode/commands/rollback.md +721 -721
- package/.opencode/commands/ship.md +212 -164
- package/.opencode/commands/sonarcloud.md +149 -149
- package/.opencode/commands/status.md +90 -48
- package/.opencode/commands/validate.md +288 -282
- package/.opencode/commands/verify.md +269 -221
- package/.roo/commands/dev.md +346 -341
- package/.roo/commands/plan.md +567 -522
- package/.roo/commands/premerge.md +187 -177
- package/.roo/commands/research.md +43 -43
- package/.roo/commands/review.md +449 -443
- package/.roo/commands/rollback.md +722 -722
- package/.roo/commands/ship.md +213 -165
- package/.roo/commands/sonarcloud.md +150 -150
- package/.roo/commands/status.md +91 -49
- package/.roo/commands/validate.md +289 -283
- package/.roo/commands/verify.md +270 -222
- package/AGENTS.md +272 -175
- package/CLAUDE.md +110 -100
- package/README.md +429 -416
- package/bin/forge-cmd.js +317 -313
- package/bin/forge-preflight.js +322 -309
- package/bin/forge.js +4765 -4303
- package/docs/AGENT_INSTALL_PROMPT.md +342 -342
- package/docs/BEADS_GITHUB_SYNC.md +251 -251
- package/docs/ENHANCED_ONBOARDING.md +612 -602
- package/docs/EXAMPLES.md +482 -482
- package/docs/GREPTILE_SETUP.md +400 -400
- package/docs/MANUAL_REVIEW_GUIDE.md +106 -106
- package/docs/ROADMAP.md +359 -359
- package/docs/SETUP.md +663 -631
- package/docs/TOOLCHAIN.md +653 -630
- package/docs/VALIDATION.md +363 -363
- package/install.sh +40 -1056
- package/lefthook.yml +50 -39
- package/lib/agents/README.md +198 -198
- package/lib/agents/claude.plugin.json +28 -28
- package/lib/agents/cline.plugin.json +22 -22
- package/lib/agents/codex.plugin.json +19 -19
- package/lib/agents/copilot.plugin.json +24 -24
- package/lib/agents/cursor.plugin.json +25 -25
- package/lib/agents/kilocode.plugin.json +22 -22
- package/lib/agents/opencode.plugin.json +20 -20
- package/lib/agents/roo.plugin.json +23 -23
- package/lib/agents-config.js +2112 -2112
- package/lib/beads-health-check.js +143 -0
- package/lib/beads-setup.js +341 -0
- package/lib/beads-sync-scaffold.js +260 -0
- package/lib/commands/_registry.js +134 -0
- package/lib/commands/clean.js +181 -0
- package/lib/commands/dev.js +571 -513
- package/lib/commands/plan.js +692 -692
- package/lib/commands/push.js +196 -0
- package/lib/commands/recommend.js +119 -119
- package/lib/commands/ship.js +377 -377
- package/lib/commands/status.js +378 -378
- package/lib/commands/sync.js +55 -0
- package/lib/commands/team.js +37 -0
- package/lib/commands/test.js +207 -0
- package/lib/commands/validate.js +602 -602
- package/lib/commands/worktree.js +310 -0
- package/lib/context-merge.js +359 -359
- package/lib/dep-guard/analyzer.js +294 -294
- package/lib/dep-guard/behavior-detector.js +98 -98
- package/lib/dep-guard/contract-detector.js +162 -162
- package/lib/dep-guard/import-detector.js +498 -498
- package/lib/dep-guard/path-utils.js +13 -13
- package/lib/dep-guard/rubric.js +120 -120
- package/lib/dep-guard/task-parser.js +318 -318
- package/lib/detect-agent.js +191 -191
- package/lib/detect-worktree.js +47 -47
- package/lib/docs-command.js +51 -0
- package/lib/docs-copy.js +50 -0
- package/lib/file-hash.js +26 -26
- package/lib/freshness-token.js +148 -0
- package/lib/greptile-match.js +80 -0
- package/lib/husky-migration.js +450 -0
- package/lib/lefthook-check.js +65 -0
- package/lib/pat-setup.js +207 -0
- package/lib/plugin-catalog.js +350 -350
- package/lib/plugin-manager.js +166 -166
- package/lib/plugin-recommender.js +141 -141
- package/lib/project-discovery.js +491 -491
- package/lib/reset.js +309 -0
- package/lib/setup-action-log.js +139 -139
- package/lib/setup-summary-renderer.js +106 -106
- package/lib/setup-utils.js +96 -0
- package/lib/setup.js +192 -192
- package/lib/smart-merge.js +64 -0
- package/lib/symlink-utils.js +81 -0
- package/lib/task-ownership.js +117 -0
- package/lib/workflow-profiles.js +197 -197
- package/package.json +131 -128
- package/scripts/beads-context.sh +426 -0
- package/scripts/beads-context.test.js +567 -0
- package/scripts/behavioral-judge.sh +378 -0
- package/scripts/benchmark.js +85 -0
- package/scripts/branch-protection.js +183 -0
- package/scripts/check-agents.js +172 -0
- package/scripts/check-forge-token.js +98 -0
- package/scripts/commitlint.js +42 -0
- package/scripts/conflict-detect.sh +323 -0
- package/scripts/dep-guard-analyze.js +71 -0
- package/scripts/dep-guard.sh +789 -0
- package/scripts/eval_win.py +249 -0
- package/scripts/file-index.sh +493 -0
- package/scripts/forge-team/index.sh +86 -0
- package/scripts/forge-team/lib/agent-prompt.sh +52 -0
- package/scripts/forge-team/lib/claim.sh +256 -0
- package/scripts/forge-team/lib/dashboard.sh +341 -0
- package/scripts/forge-team/lib/epic.sh +332 -0
- package/scripts/forge-team/lib/hooks.sh +253 -0
- package/scripts/forge-team/lib/identity.sh +235 -0
- package/scripts/forge-team/lib/sync-github.sh +317 -0
- package/scripts/forge-team/lib/verify.sh +284 -0
- package/scripts/forge-team/lib/workload.sh +296 -0
- package/scripts/forge-team/tests/agent-prompt.test.sh +72 -0
- package/scripts/forge-team/tests/claim.test.sh +179 -0
- package/scripts/forge-team/tests/dashboard.test.sh +170 -0
- package/scripts/forge-team/tests/dispatcher.test.sh +79 -0
- package/scripts/forge-team/tests/epic.test.sh +176 -0
- package/scripts/forge-team/tests/hooks.test.sh +239 -0
- package/scripts/forge-team/tests/identity.test.sh +176 -0
- package/scripts/forge-team/tests/integration.test.sh +371 -0
- package/scripts/forge-team/tests/sync-github.test.sh +209 -0
- package/scripts/forge-team/tests/verify.test.sh +314 -0
- package/scripts/forge-team/tests/workflow-integration.test.sh +43 -0
- package/scripts/forge-team/tests/workload.test.sh +209 -0
- package/scripts/github-beads-sync/comment.mjs +64 -0
- package/scripts/github-beads-sync/config.mjs +148 -0
- package/scripts/github-beads-sync/github-api.mjs +131 -0
- package/scripts/github-beads-sync/index.mjs +332 -0
- package/scripts/github-beads-sync/label-mapper.mjs +54 -0
- package/scripts/github-beads-sync/mapping.mjs +78 -0
- package/scripts/github-beads-sync/reverse-sync-cli.mjs +31 -0
- package/scripts/github-beads-sync/reverse-sync.mjs +138 -0
- package/scripts/github-beads-sync/run-bd.mjs +159 -0
- package/scripts/github-beads-sync/sanitize.mjs +121 -0
- package/scripts/github-beads-sync.config.json +26 -0
- package/scripts/improve-command.js +375 -0
- package/scripts/lib/eval-runner.js +268 -0
- package/scripts/lib/eval-schema.js +135 -0
- package/scripts/lib/eval-storage.js +78 -0
- package/scripts/lib/grading.js +203 -0
- package/scripts/lib/jsonl-lock.sh +48 -0
- package/scripts/lib/sanitize.sh +116 -0
- package/scripts/lib/transcript-parser.js +63 -0
- package/scripts/lint.js +47 -0
- package/scripts/migrate-to-bun-test.js +412 -0
- package/scripts/pr-coordinator.sh +706 -0
- package/scripts/run-command-eval.js +236 -0
- package/scripts/smart-status.sh +809 -0
- package/scripts/sync-commands.js +571 -0
- package/scripts/sync-utils.sh +455 -0
- package/scripts/test-dashboard.js +123 -0
- package/scripts/test.js +46 -0
- package/scripts/validate.sh +94 -0
- package/skills/parallel-deep-research/SKILL.md +108 -108
- package/skills/parallel-deep-research/evals/README.md +27 -27
- package/skills/parallel-deep-research/evals/evals.json +62 -62
- package/skills/sonarcloud-analysis/SKILL.md +171 -171
- package/skills/sonarcloud-analysis/evals/README.md +27 -27
- package/skills/sonarcloud-analysis/evals/evals.json +50 -50
- package/skills/sonarcloud-analysis/references/api-reference.md +466 -466
- package/.cursor/hooks/state/continual-learning-index.json +0 -19
- package/.cursor/hooks/state/continual-learning.json +0 -8
|
@@ -1,171 +1,171 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sonarcloud-analysis
|
|
3
|
-
description: >
|
|
4
|
-
Pull issues, metrics, quality gates, and analysis data from SonarCloud. ALWAYS
|
|
5
|
-
use this skill when the user mentions SonarCloud, asks about code quality metrics,
|
|
6
|
-
wants to check PR quality gates, or needs to review security vulnerabilities and
|
|
7
|
-
technical debt from static analysis. Also trigger during /review workflow when
|
|
8
|
-
SonarCloud issues need addressing. Trigger on phrases like "SonarCloud",
|
|
9
|
-
"quality gate", "code quality metrics", "technical debt", "coverage report",
|
|
10
|
-
"static analysis issues", "security vulnerabilities from scan".
|
|
11
|
-
category: Code Quality
|
|
12
|
-
tags: [sonarcloud, code-quality, issues, metrics, security]
|
|
13
|
-
context: fork
|
|
14
|
-
tools: [Bash, WebFetch, Read, Grep, Glob]
|
|
15
|
-
model: sonnet
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
<role>
|
|
19
|
-
You are a SonarCloud code quality analyst with expertise in static analysis, security vulnerability assessment, and technical debt management. You operate with your own isolated context to perform comprehensive code quality analysis without polluting the main conversation.
|
|
20
|
-
</role>
|
|
21
|
-
|
|
22
|
-
<capabilities>
|
|
23
|
-
- Query SonarCloud API for issues, metrics, and quality gates
|
|
24
|
-
- Analyze code quality across branches and pull requests
|
|
25
|
-
- Identify security vulnerabilities and hotspots
|
|
26
|
-
- Track coverage, duplication, and technical debt
|
|
27
|
-
- Generate health reports and trend analysis
|
|
28
|
-
- Correlate SonarCloud findings with local codebase
|
|
29
|
-
</capabilities>
|
|
30
|
-
|
|
31
|
-
<constraints>
|
|
32
|
-
- Always use environment variables: $SONARCLOUD_TOKEN, $SONARCLOUD_ORG, $SONARCLOUD_PROJECT
|
|
33
|
-
- Load credentials from .env.local if environment variables are not set
|
|
34
|
-
- Never expose tokens in output
|
|
35
|
-
- Validate API responses before processing
|
|
36
|
-
- Handle pagination for large result sets
|
|
37
|
-
</constraints>
|
|
38
|
-
|
|
39
|
-
<workflow>
|
|
40
|
-
1. Load environment variables (check .env.local if needed: `source .env.local 2>/dev/null || true`)
|
|
41
|
-
2. Verify credentials are available
|
|
42
|
-
3. Determine the analysis scope (project, branch, PR)
|
|
43
|
-
4. Query relevant endpoints
|
|
44
|
-
5. Process and correlate results
|
|
45
|
-
6. Return actionable summary to main context
|
|
46
|
-
</workflow>
|
|
47
|
-
|
|
48
|
-
# SonarCloud Integration
|
|
49
|
-
|
|
50
|
-
**Base**: `https://sonarcloud.io/api` | **Auth**: `Bearer $SONARCLOUD_TOKEN`
|
|
51
|
-
|
|
52
|
-
## Configuration
|
|
53
|
-
|
|
54
|
-
**Environment Variables**: Required for authentication
|
|
55
|
-
- `SONARCLOUD_TOKEN` - Generate at sonarcloud.io/account/security
|
|
56
|
-
- `SONARCLOUD_ORG` - Your SonarCloud organization key
|
|
57
|
-
- `SONARCLOUD_PROJECT` - Your project key
|
|
58
|
-
|
|
59
|
-
**Option 1: Use .env.local** (Recommended)
|
|
60
|
-
Add to your project's `.env.local`:
|
|
61
|
-
```bash
|
|
62
|
-
SONARCLOUD_TOKEN=your_token_here
|
|
63
|
-
SONARCLOUD_ORG=your-org
|
|
64
|
-
SONARCLOUD_PROJECT=your-project
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
Before querying, load environment variables:
|
|
68
|
-
```bash
|
|
69
|
-
# Load .env.local into current environment
|
|
70
|
-
export $(grep -v '^#' .env.local | xargs)
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**Option 2: Export directly**
|
|
74
|
-
```bash
|
|
75
|
-
export SONARCLOUD_TOKEN="your_token"
|
|
76
|
-
export SONARCLOUD_ORG="your-org"
|
|
77
|
-
export SONARCLOUD_PROJECT="your-project"
|
|
78
|
-
|
|
79
|
-
# Common queries
|
|
80
|
-
curl -H "Authorization: Bearer $TOKEN" \
|
|
81
|
-
"https://sonarcloud.io/api/issues/search?organization=$ORG&componentKeys=$PROJECT&resolved=false"
|
|
82
|
-
curl -H "Authorization: Bearer $TOKEN" \
|
|
83
|
-
"https://sonarcloud.io/api/measures/component?component=$PROJECT&metricKeys=bugs,coverage"
|
|
84
|
-
curl -H "Authorization: Bearer $TOKEN" \
|
|
85
|
-
"https://sonarcloud.io/api/qualitygates/project_status?projectKey=$PROJECT"
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Endpoints
|
|
89
|
-
|
|
90
|
-
| Endpoint | Purpose | Key Params |
|
|
91
|
-
| ------------------------------- | ------------------------ | ---------------------------------------- |
|
|
92
|
-
| `/api/issues/search` | Bugs, vulnerabilities | `types`, `severities`, `branch`, `pullRequest` |
|
|
93
|
-
| `/api/measures/component` | Coverage, complexity | `metricKeys`, `branch`, `pullRequest` |
|
|
94
|
-
| `/api/qualitygates/project_status` | Pass/fail status | `projectKey`, `branch`, `pullRequest` |
|
|
95
|
-
| `/api/hotspots/search` | Security hotspots | `projectKey`, `status` |
|
|
96
|
-
| `/api/projects/search` | List projects | `organization`, `q` |
|
|
97
|
-
| `/api/project_analyses/search` | Analysis history | `project`, `from`, `to` |
|
|
98
|
-
| `/api/measures/search_history` | Metrics over time | `component`, `metrics`, `from` |
|
|
99
|
-
| `/api/components/tree` | Files with metrics | `qualifiers=FIL`, `metricKeys` |
|
|
100
|
-
| `/api/duplications/show` | Duplicate code blocks | `key` (file key), `branch` |
|
|
101
|
-
| `/api/sources/raw` | Raw source code | `key` (file key), `branch` |
|
|
102
|
-
| `/api/sources/scm` | SCM blame info | `key`, `from`, `to` |
|
|
103
|
-
| `/api/ce/activity` | Background tasks | `component`, `status`, `type` |
|
|
104
|
-
| `/api/qualityprofiles/search` | Quality profiles | `language`, `project` |
|
|
105
|
-
| `/api/languages/list` | Supported languages | - |
|
|
106
|
-
| `/api/project_branches/list` | Project branches | `project` |
|
|
107
|
-
| `/api/project_badges/measure` | SVG badge | `project`, `metric`, `branch` |
|
|
108
|
-
| `/api/rules/search` | Coding rules | `languages`, `severities`, `types` |
|
|
109
|
-
|
|
110
|
-
## Common Filters
|
|
111
|
-
|
|
112
|
-
**Issues**: `types=BUG,VULNERABILITY,CODE_SMELL` | `severities=BLOCKER,CRITICAL,MAJOR` | `resolved=false` | `inNewCodePeriod=true`
|
|
113
|
-
|
|
114
|
-
**Metrics**: `bugs,vulnerabilities,code_smells,coverage,duplicated_lines_density,sqale_rating,reliability_rating,security_rating`
|
|
115
|
-
|
|
116
|
-
**New Code**: `new_bugs,new_vulnerabilities,new_coverage,new_duplicated_lines_density`
|
|
117
|
-
|
|
118
|
-
## Workflows
|
|
119
|
-
|
|
120
|
-
### Health Check
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
curl ... "/api/qualitygates/project_status?projectKey=$PROJECT"
|
|
124
|
-
curl ... "/api/measures/component?component=$PROJECT&metricKeys=bugs,vulnerabilities,coverage,sqale_rating"
|
|
125
|
-
curl ... "/api/issues/search?organization=$ORG&componentKeys=$PROJECT&resolved=false&facets=severities,types&ps=1"
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
### PR Analysis
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
curl ... "/api/qualitygates/project_status?projectKey=$PROJECT&pullRequest=123"
|
|
132
|
-
curl ... "/api/issues/search?organization=$ORG&componentKeys=$PROJECT&pullRequest=123&resolved=false"
|
|
133
|
-
curl ... "/api/measures/component?component=$PROJECT&pullRequest=123&metricKeys=new_bugs,new_coverage"
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Security Audit
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
curl ... "/api/issues/search?organization=$ORG&componentKeys=$PROJECT&types=VULNERABILITY&resolved=false"
|
|
140
|
-
curl ... "/api/hotspots/search?projectKey=$PROJECT&status=TO_REVIEW"
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Duplication Analysis
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
# Get duplication metrics
|
|
147
|
-
curl ... "/api/measures/component?component=$PROJECT&metricKeys=duplicated_lines,duplicated_lines_density,duplicated_blocks,duplicated_files"
|
|
148
|
-
|
|
149
|
-
# Get files with most duplication
|
|
150
|
-
curl ... "/api/components/tree?component=$PROJECT&qualifiers=FIL&metricKeys=duplicated_lines_density&s=metric&metricSort=duplicated_lines_density&asc=false&ps=20"
|
|
151
|
-
|
|
152
|
-
# Get duplicate blocks for a specific file (requires file key from above)
|
|
153
|
-
curl ... "/api/duplications/show?key=my-project:src/utils/helpers.ts"
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
## Response Processing
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
# Count by severity
|
|
160
|
-
curl ... | jq '.issues | group_by(.severity) | map({severity: .[0].severity, count: length})'
|
|
161
|
-
|
|
162
|
-
# Failed quality gate conditions
|
|
163
|
-
curl ... | jq '.projectStatus.conditions | map(select(.status == "ERROR"))'
|
|
164
|
-
|
|
165
|
-
# Metrics as key-value
|
|
166
|
-
curl ... | jq '.component.measures | map({(.metric): .value}) | add'
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Detailed Reference
|
|
170
|
-
|
|
171
|
-
For complete API parameters and response schemas, see [references/api-reference.md](references/api-reference.md).
|
|
1
|
+
---
|
|
2
|
+
name: sonarcloud-analysis
|
|
3
|
+
description: >
|
|
4
|
+
Pull issues, metrics, quality gates, and analysis data from SonarCloud. ALWAYS
|
|
5
|
+
use this skill when the user mentions SonarCloud, asks about code quality metrics,
|
|
6
|
+
wants to check PR quality gates, or needs to review security vulnerabilities and
|
|
7
|
+
technical debt from static analysis. Also trigger during /review workflow when
|
|
8
|
+
SonarCloud issues need addressing. Trigger on phrases like "SonarCloud",
|
|
9
|
+
"quality gate", "code quality metrics", "technical debt", "coverage report",
|
|
10
|
+
"static analysis issues", "security vulnerabilities from scan".
|
|
11
|
+
category: Code Quality
|
|
12
|
+
tags: [sonarcloud, code-quality, issues, metrics, security]
|
|
13
|
+
context: fork
|
|
14
|
+
tools: [Bash, WebFetch, Read, Grep, Glob]
|
|
15
|
+
model: sonnet
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
<role>
|
|
19
|
+
You are a SonarCloud code quality analyst with expertise in static analysis, security vulnerability assessment, and technical debt management. You operate with your own isolated context to perform comprehensive code quality analysis without polluting the main conversation.
|
|
20
|
+
</role>
|
|
21
|
+
|
|
22
|
+
<capabilities>
|
|
23
|
+
- Query SonarCloud API for issues, metrics, and quality gates
|
|
24
|
+
- Analyze code quality across branches and pull requests
|
|
25
|
+
- Identify security vulnerabilities and hotspots
|
|
26
|
+
- Track coverage, duplication, and technical debt
|
|
27
|
+
- Generate health reports and trend analysis
|
|
28
|
+
- Correlate SonarCloud findings with local codebase
|
|
29
|
+
</capabilities>
|
|
30
|
+
|
|
31
|
+
<constraints>
|
|
32
|
+
- Always use environment variables: $SONARCLOUD_TOKEN, $SONARCLOUD_ORG, $SONARCLOUD_PROJECT
|
|
33
|
+
- Load credentials from .env.local if environment variables are not set
|
|
34
|
+
- Never expose tokens in output
|
|
35
|
+
- Validate API responses before processing
|
|
36
|
+
- Handle pagination for large result sets
|
|
37
|
+
</constraints>
|
|
38
|
+
|
|
39
|
+
<workflow>
|
|
40
|
+
1. Load environment variables (check .env.local if needed: `source .env.local 2>/dev/null || true`)
|
|
41
|
+
2. Verify credentials are available
|
|
42
|
+
3. Determine the analysis scope (project, branch, PR)
|
|
43
|
+
4. Query relevant endpoints
|
|
44
|
+
5. Process and correlate results
|
|
45
|
+
6. Return actionable summary to main context
|
|
46
|
+
</workflow>
|
|
47
|
+
|
|
48
|
+
# SonarCloud Integration
|
|
49
|
+
|
|
50
|
+
**Base**: `https://sonarcloud.io/api` | **Auth**: `Bearer $SONARCLOUD_TOKEN`
|
|
51
|
+
|
|
52
|
+
## Configuration
|
|
53
|
+
|
|
54
|
+
**Environment Variables**: Required for authentication
|
|
55
|
+
- `SONARCLOUD_TOKEN` - Generate at sonarcloud.io/account/security
|
|
56
|
+
- `SONARCLOUD_ORG` - Your SonarCloud organization key
|
|
57
|
+
- `SONARCLOUD_PROJECT` - Your project key
|
|
58
|
+
|
|
59
|
+
**Option 1: Use .env.local** (Recommended)
|
|
60
|
+
Add to your project's `.env.local`:
|
|
61
|
+
```bash
|
|
62
|
+
SONARCLOUD_TOKEN=your_token_here
|
|
63
|
+
SONARCLOUD_ORG=your-org
|
|
64
|
+
SONARCLOUD_PROJECT=your-project
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Before querying, load environment variables:
|
|
68
|
+
```bash
|
|
69
|
+
# Load .env.local into current environment
|
|
70
|
+
export $(grep -v '^#' .env.local | xargs)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Option 2: Export directly**
|
|
74
|
+
```bash
|
|
75
|
+
export SONARCLOUD_TOKEN="your_token"
|
|
76
|
+
export SONARCLOUD_ORG="your-org"
|
|
77
|
+
export SONARCLOUD_PROJECT="your-project"
|
|
78
|
+
|
|
79
|
+
# Common queries
|
|
80
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
81
|
+
"https://sonarcloud.io/api/issues/search?organization=$ORG&componentKeys=$PROJECT&resolved=false"
|
|
82
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
83
|
+
"https://sonarcloud.io/api/measures/component?component=$PROJECT&metricKeys=bugs,coverage"
|
|
84
|
+
curl -H "Authorization: Bearer $TOKEN" \
|
|
85
|
+
"https://sonarcloud.io/api/qualitygates/project_status?projectKey=$PROJECT"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Endpoints
|
|
89
|
+
|
|
90
|
+
| Endpoint | Purpose | Key Params |
|
|
91
|
+
| ------------------------------- | ------------------------ | ---------------------------------------- |
|
|
92
|
+
| `/api/issues/search` | Bugs, vulnerabilities | `types`, `severities`, `branch`, `pullRequest` |
|
|
93
|
+
| `/api/measures/component` | Coverage, complexity | `metricKeys`, `branch`, `pullRequest` |
|
|
94
|
+
| `/api/qualitygates/project_status` | Pass/fail status | `projectKey`, `branch`, `pullRequest` |
|
|
95
|
+
| `/api/hotspots/search` | Security hotspots | `projectKey`, `status` |
|
|
96
|
+
| `/api/projects/search` | List projects | `organization`, `q` |
|
|
97
|
+
| `/api/project_analyses/search` | Analysis history | `project`, `from`, `to` |
|
|
98
|
+
| `/api/measures/search_history` | Metrics over time | `component`, `metrics`, `from` |
|
|
99
|
+
| `/api/components/tree` | Files with metrics | `qualifiers=FIL`, `metricKeys` |
|
|
100
|
+
| `/api/duplications/show` | Duplicate code blocks | `key` (file key), `branch` |
|
|
101
|
+
| `/api/sources/raw` | Raw source code | `key` (file key), `branch` |
|
|
102
|
+
| `/api/sources/scm` | SCM blame info | `key`, `from`, `to` |
|
|
103
|
+
| `/api/ce/activity` | Background tasks | `component`, `status`, `type` |
|
|
104
|
+
| `/api/qualityprofiles/search` | Quality profiles | `language`, `project` |
|
|
105
|
+
| `/api/languages/list` | Supported languages | - |
|
|
106
|
+
| `/api/project_branches/list` | Project branches | `project` |
|
|
107
|
+
| `/api/project_badges/measure` | SVG badge | `project`, `metric`, `branch` |
|
|
108
|
+
| `/api/rules/search` | Coding rules | `languages`, `severities`, `types` |
|
|
109
|
+
|
|
110
|
+
## Common Filters
|
|
111
|
+
|
|
112
|
+
**Issues**: `types=BUG,VULNERABILITY,CODE_SMELL` | `severities=BLOCKER,CRITICAL,MAJOR` | `resolved=false` | `inNewCodePeriod=true`
|
|
113
|
+
|
|
114
|
+
**Metrics**: `bugs,vulnerabilities,code_smells,coverage,duplicated_lines_density,sqale_rating,reliability_rating,security_rating`
|
|
115
|
+
|
|
116
|
+
**New Code**: `new_bugs,new_vulnerabilities,new_coverage,new_duplicated_lines_density`
|
|
117
|
+
|
|
118
|
+
## Workflows
|
|
119
|
+
|
|
120
|
+
### Health Check
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
curl ... "/api/qualitygates/project_status?projectKey=$PROJECT"
|
|
124
|
+
curl ... "/api/measures/component?component=$PROJECT&metricKeys=bugs,vulnerabilities,coverage,sqale_rating"
|
|
125
|
+
curl ... "/api/issues/search?organization=$ORG&componentKeys=$PROJECT&resolved=false&facets=severities,types&ps=1"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### PR Analysis
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
curl ... "/api/qualitygates/project_status?projectKey=$PROJECT&pullRequest=123"
|
|
132
|
+
curl ... "/api/issues/search?organization=$ORG&componentKeys=$PROJECT&pullRequest=123&resolved=false"
|
|
133
|
+
curl ... "/api/measures/component?component=$PROJECT&pullRequest=123&metricKeys=new_bugs,new_coverage"
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Security Audit
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
curl ... "/api/issues/search?organization=$ORG&componentKeys=$PROJECT&types=VULNERABILITY&resolved=false"
|
|
140
|
+
curl ... "/api/hotspots/search?projectKey=$PROJECT&status=TO_REVIEW"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Duplication Analysis
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
# Get duplication metrics
|
|
147
|
+
curl ... "/api/measures/component?component=$PROJECT&metricKeys=duplicated_lines,duplicated_lines_density,duplicated_blocks,duplicated_files"
|
|
148
|
+
|
|
149
|
+
# Get files with most duplication
|
|
150
|
+
curl ... "/api/components/tree?component=$PROJECT&qualifiers=FIL&metricKeys=duplicated_lines_density&s=metric&metricSort=duplicated_lines_density&asc=false&ps=20"
|
|
151
|
+
|
|
152
|
+
# Get duplicate blocks for a specific file (requires file key from above)
|
|
153
|
+
curl ... "/api/duplications/show?key=my-project:src/utils/helpers.ts"
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Response Processing
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Count by severity
|
|
160
|
+
curl ... | jq '.issues | group_by(.severity) | map({severity: .[0].severity, count: length})'
|
|
161
|
+
|
|
162
|
+
# Failed quality gate conditions
|
|
163
|
+
curl ... | jq '.projectStatus.conditions | map(select(.status == "ERROR"))'
|
|
164
|
+
|
|
165
|
+
# Metrics as key-value
|
|
166
|
+
curl ... | jq '.component.measures | map({(.metric): .value}) | add'
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Detailed Reference
|
|
170
|
+
|
|
171
|
+
For complete API parameters and response schemas, see [references/api-reference.md](references/api-reference.md).
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
# Eval Sets
|
|
2
|
-
|
|
3
|
-
These eval files use a flat JSON array format targeting `scripts/eval_win.py`:
|
|
4
|
-
|
|
5
|
-
```json
|
|
6
|
-
[{"query": "...", "should_trigger": true}]
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
This is **not** compatible with the skill-creator plugin's `run_loop.py` which expects:
|
|
10
|
-
|
|
11
|
-
```json
|
|
12
|
-
{"skill_name": "...", "evals": [{"id": "...", "prompt": "...", "should_trigger": true}]}
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
To convert for `run_loop.py`:
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
python3 -c "
|
|
19
|
-
import json, pathlib, uuid
|
|
20
|
-
data = json.loads(pathlib.Path('evals.json').read_text())
|
|
21
|
-
out = {'skill_name': 'SKILL-NAME-HERE', 'evals': [
|
|
22
|
-
{'id': str(uuid.uuid4()), 'prompt': item['query'], 'should_trigger': item['should_trigger']}
|
|
23
|
-
for item in data
|
|
24
|
-
]}
|
|
25
|
-
print(json.dumps(out, indent=2))
|
|
26
|
-
" > evals_skill_creator.json
|
|
27
|
-
```
|
|
1
|
+
# Eval Sets
|
|
2
|
+
|
|
3
|
+
These eval files use a flat JSON array format targeting `scripts/eval_win.py`:
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
[{"query": "...", "should_trigger": true}]
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
This is **not** compatible with the skill-creator plugin's `run_loop.py` which expects:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{"skill_name": "...", "evals": [{"id": "...", "prompt": "...", "should_trigger": true}]}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
To convert for `run_loop.py`:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
python3 -c "
|
|
19
|
+
import json, pathlib, uuid
|
|
20
|
+
data = json.loads(pathlib.Path('evals.json').read_text())
|
|
21
|
+
out = {'skill_name': 'SKILL-NAME-HERE', 'evals': [
|
|
22
|
+
{'id': str(uuid.uuid4()), 'prompt': item['query'], 'should_trigger': item['should_trigger']}
|
|
23
|
+
for item in data
|
|
24
|
+
]}
|
|
25
|
+
print(json.dumps(out, indent=2))
|
|
26
|
+
" > evals_skill_creator.json
|
|
27
|
+
```
|
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"query": "Check the SonarCloud quality gate status for our latest PR — I want to see if there are any blockers before we can merge, especially around security vulnerabilities and code coverage",
|
|
4
|
-
"should_trigger": true
|
|
5
|
-
},
|
|
6
|
-
{
|
|
7
|
-
"query": "Pull the SonarCloud analysis results for our project — show me all the critical and major security vulnerabilities found in the last scan, with file locations and remediation guidance",
|
|
8
|
-
"should_trigger": true
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
"query": "We're in /review and SonarCloud flagged some issues — get the full list of code smells, bugs, and vulnerabilities from the latest analysis so I can address them before the quality gate passes",
|
|
12
|
-
"should_trigger": true
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"query": "What's our current technical debt ratio in SonarCloud? Show me the metrics dashboard — maintainability rating, reliability rating, security rating, and coverage percentage",
|
|
16
|
-
"should_trigger": true
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"query": "The SonarCloud quality gate is failing on our PR — pull the specific issues that are blocking it and show me what needs to be fixed, sorted by severity",
|
|
20
|
-
"should_trigger": true
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
"query": "Get the SonarCloud code coverage report for our project — I want to see which modules have low coverage and identify the files that need more tests before our next release",
|
|
24
|
-
"should_trigger": true
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"query": "Implement a new REST API endpoint for user profile management with CRUD operations, input validation, and proper error handling",
|
|
28
|
-
"should_trigger": false
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
"query": "Search for best practices around implementing OAuth2 PKCE flow in a Node.js application",
|
|
32
|
-
"should_trigger": false
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
"query": "Write a comprehensive market analysis of the DevSecOps tools landscape covering SAST, DAST, and SCA vendors",
|
|
36
|
-
"should_trigger": false
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"query": "Scrape https://docs.sonarcloud.io and extract the full list of supported languages and analysis rules",
|
|
40
|
-
"should_trigger": false
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
"query": "Build a structured company profile for SonarSource — return JSON with founding year, funding, products, and competitive positioning",
|
|
44
|
-
"should_trigger": false
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
"query": "Add proper citations to docs/research/security-audit-findings.md following our project's citation standards",
|
|
48
|
-
"should_trigger": false
|
|
49
|
-
}
|
|
50
|
-
]
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "Check the SonarCloud quality gate status for our latest PR — I want to see if there are any blockers before we can merge, especially around security vulnerabilities and code coverage",
|
|
4
|
+
"should_trigger": true
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
"query": "Pull the SonarCloud analysis results for our project — show me all the critical and major security vulnerabilities found in the last scan, with file locations and remediation guidance",
|
|
8
|
+
"should_trigger": true
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"query": "We're in /review and SonarCloud flagged some issues — get the full list of code smells, bugs, and vulnerabilities from the latest analysis so I can address them before the quality gate passes",
|
|
12
|
+
"should_trigger": true
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"query": "What's our current technical debt ratio in SonarCloud? Show me the metrics dashboard — maintainability rating, reliability rating, security rating, and coverage percentage",
|
|
16
|
+
"should_trigger": true
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"query": "The SonarCloud quality gate is failing on our PR — pull the specific issues that are blocking it and show me what needs to be fixed, sorted by severity",
|
|
20
|
+
"should_trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "Get the SonarCloud code coverage report for our project — I want to see which modules have low coverage and identify the files that need more tests before our next release",
|
|
24
|
+
"should_trigger": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"query": "Implement a new REST API endpoint for user profile management with CRUD operations, input validation, and proper error handling",
|
|
28
|
+
"should_trigger": false
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"query": "Search for best practices around implementing OAuth2 PKCE flow in a Node.js application",
|
|
32
|
+
"should_trigger": false
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"query": "Write a comprehensive market analysis of the DevSecOps tools landscape covering SAST, DAST, and SCA vendors",
|
|
36
|
+
"should_trigger": false
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"query": "Scrape https://docs.sonarcloud.io and extract the full list of supported languages and analysis rules",
|
|
40
|
+
"should_trigger": false
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"query": "Build a structured company profile for SonarSource — return JSON with founding year, funding, products, and competitive positioning",
|
|
44
|
+
"should_trigger": false
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"query": "Add proper citations to docs/research/security-audit-findings.md following our project's citation standards",
|
|
48
|
+
"should_trigger": false
|
|
49
|
+
}
|
|
50
|
+
]
|