aidevops 2.52.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 (329) hide show
  1. package/.agent/AGENTS.md +614 -0
  2. package/.agent/accounts.md +65 -0
  3. package/.agent/aidevops/add-new-mcp-to-aidevops.md +456 -0
  4. package/.agent/aidevops/api-integrations.md +335 -0
  5. package/.agent/aidevops/architecture.md +510 -0
  6. package/.agent/aidevops/configs.md +274 -0
  7. package/.agent/aidevops/docs.md +244 -0
  8. package/.agent/aidevops/extension.md +311 -0
  9. package/.agent/aidevops/mcp-integrations.md +340 -0
  10. package/.agent/aidevops/mcp-troubleshooting.md +162 -0
  11. package/.agent/aidevops/memory-patterns.md +172 -0
  12. package/.agent/aidevops/providers.md +217 -0
  13. package/.agent/aidevops/recommendations.md +321 -0
  14. package/.agent/aidevops/requirements.md +301 -0
  15. package/.agent/aidevops/resources.md +214 -0
  16. package/.agent/aidevops/security-requirements.md +174 -0
  17. package/.agent/aidevops/security.md +350 -0
  18. package/.agent/aidevops/service-links.md +400 -0
  19. package/.agent/aidevops/services.md +357 -0
  20. package/.agent/aidevops/setup.md +153 -0
  21. package/.agent/aidevops/troubleshooting.md +389 -0
  22. package/.agent/aidevops.md +124 -0
  23. package/.agent/build-plus.md +244 -0
  24. package/.agent/content/guidelines.md +109 -0
  25. package/.agent/content.md +87 -0
  26. package/.agent/health.md +59 -0
  27. package/.agent/legal.md +59 -0
  28. package/.agent/loop-state/full-loop.local.md +16 -0
  29. package/.agent/loop-state/ralph-loop.local.md +10 -0
  30. package/.agent/marketing.md +440 -0
  31. package/.agent/memory/README.md +260 -0
  32. package/.agent/onboarding.md +796 -0
  33. package/.agent/plan-plus.md +245 -0
  34. package/.agent/research.md +100 -0
  35. package/.agent/sales.md +333 -0
  36. package/.agent/scripts/101domains-helper.sh +701 -0
  37. package/.agent/scripts/add-missing-returns.sh +140 -0
  38. package/.agent/scripts/agent-browser-helper.sh +311 -0
  39. package/.agent/scripts/agno-setup.sh +712 -0
  40. package/.agent/scripts/ahrefs-mcp-wrapper.js +168 -0
  41. package/.agent/scripts/aidevops-update-check.sh +71 -0
  42. package/.agent/scripts/ampcode-cli.sh +522 -0
  43. package/.agent/scripts/auto-version-bump.sh +156 -0
  44. package/.agent/scripts/autogen-helper.sh +512 -0
  45. package/.agent/scripts/beads-sync-helper.sh +596 -0
  46. package/.agent/scripts/closte-helper.sh +5 -0
  47. package/.agent/scripts/cloudron-helper.sh +321 -0
  48. package/.agent/scripts/codacy-cli-chunked.sh +581 -0
  49. package/.agent/scripts/codacy-cli.sh +442 -0
  50. package/.agent/scripts/code-audit-helper.sh +5 -0
  51. package/.agent/scripts/coderabbit-cli.sh +417 -0
  52. package/.agent/scripts/coderabbit-pro-analysis.sh +238 -0
  53. package/.agent/scripts/commands/code-simplifier.md +86 -0
  54. package/.agent/scripts/commands/full-loop.md +246 -0
  55. package/.agent/scripts/commands/postflight-loop.md +103 -0
  56. package/.agent/scripts/commands/recall.md +182 -0
  57. package/.agent/scripts/commands/remember.md +132 -0
  58. package/.agent/scripts/commands/save-todo.md +175 -0
  59. package/.agent/scripts/commands/session-review.md +154 -0
  60. package/.agent/scripts/comprehensive-quality-fix.sh +106 -0
  61. package/.agent/scripts/context-builder-helper.sh +522 -0
  62. package/.agent/scripts/coolify-cli-helper.sh +674 -0
  63. package/.agent/scripts/coolify-helper.sh +380 -0
  64. package/.agent/scripts/crawl4ai-examples.sh +401 -0
  65. package/.agent/scripts/crawl4ai-helper.sh +1078 -0
  66. package/.agent/scripts/crewai-helper.sh +681 -0
  67. package/.agent/scripts/dev-browser-helper.sh +513 -0
  68. package/.agent/scripts/dns-helper.sh +396 -0
  69. package/.agent/scripts/domain-research-helper.sh +917 -0
  70. package/.agent/scripts/dspy-helper.sh +285 -0
  71. package/.agent/scripts/dspyground-helper.sh +291 -0
  72. package/.agent/scripts/eeat-score-helper.sh +1242 -0
  73. package/.agent/scripts/efficient-return-fix.sh +92 -0
  74. package/.agent/scripts/extract-opencode-prompts.sh +128 -0
  75. package/.agent/scripts/find-missing-returns.sh +113 -0
  76. package/.agent/scripts/fix-auth-headers.sh +104 -0
  77. package/.agent/scripts/fix-common-strings.sh +254 -0
  78. package/.agent/scripts/fix-content-type.sh +100 -0
  79. package/.agent/scripts/fix-error-messages.sh +130 -0
  80. package/.agent/scripts/fix-misplaced-returns.sh +74 -0
  81. package/.agent/scripts/fix-remaining-literals.sh +152 -0
  82. package/.agent/scripts/fix-return-statements.sh +41 -0
  83. package/.agent/scripts/fix-s131-default-cases.sh +249 -0
  84. package/.agent/scripts/fix-sc2155-simple.sh +102 -0
  85. package/.agent/scripts/fix-shellcheck-critical.sh +187 -0
  86. package/.agent/scripts/fix-string-literals.sh +273 -0
  87. package/.agent/scripts/full-loop-helper.sh +773 -0
  88. package/.agent/scripts/generate-opencode-agents.sh +497 -0
  89. package/.agent/scripts/generate-opencode-commands.sh +1629 -0
  90. package/.agent/scripts/generate-skills.sh +366 -0
  91. package/.agent/scripts/git-platforms-helper.sh +640 -0
  92. package/.agent/scripts/gitea-cli-helper.sh +743 -0
  93. package/.agent/scripts/github-cli-helper.sh +702 -0
  94. package/.agent/scripts/gitlab-cli-helper.sh +682 -0
  95. package/.agent/scripts/gsc-add-user-helper.sh +325 -0
  96. package/.agent/scripts/gsc-sitemap-helper.sh +678 -0
  97. package/.agent/scripts/hetzner-helper.sh +485 -0
  98. package/.agent/scripts/hostinger-helper.sh +229 -0
  99. package/.agent/scripts/keyword-research-helper.sh +1815 -0
  100. package/.agent/scripts/langflow-helper.sh +544 -0
  101. package/.agent/scripts/linkedin-automation.py +241 -0
  102. package/.agent/scripts/linter-manager.sh +599 -0
  103. package/.agent/scripts/linters-local.sh +434 -0
  104. package/.agent/scripts/list-keys-helper.sh +488 -0
  105. package/.agent/scripts/local-browser-automation.py +339 -0
  106. package/.agent/scripts/localhost-helper.sh +744 -0
  107. package/.agent/scripts/loop-common.sh +806 -0
  108. package/.agent/scripts/mainwp-helper.sh +728 -0
  109. package/.agent/scripts/markdown-formatter.sh +338 -0
  110. package/.agent/scripts/markdown-lint-fix.sh +311 -0
  111. package/.agent/scripts/mass-fix-returns.sh +58 -0
  112. package/.agent/scripts/mcp-diagnose.sh +167 -0
  113. package/.agent/scripts/mcp-inspector-helper.sh +449 -0
  114. package/.agent/scripts/memory-helper.sh +650 -0
  115. package/.agent/scripts/monitor-code-review.sh +255 -0
  116. package/.agent/scripts/onboarding-helper.sh +706 -0
  117. package/.agent/scripts/opencode-github-setup-helper.sh +797 -0
  118. package/.agent/scripts/opencode-test-helper.sh +213 -0
  119. package/.agent/scripts/pagespeed-helper.sh +464 -0
  120. package/.agent/scripts/pandoc-helper.sh +362 -0
  121. package/.agent/scripts/postflight-check.sh +555 -0
  122. package/.agent/scripts/pre-commit-hook.sh +259 -0
  123. package/.agent/scripts/pre-edit-check.sh +169 -0
  124. package/.agent/scripts/qlty-cli.sh +356 -0
  125. package/.agent/scripts/quality-cli-manager.sh +525 -0
  126. package/.agent/scripts/quality-feedback-helper.sh +462 -0
  127. package/.agent/scripts/quality-fix.sh +263 -0
  128. package/.agent/scripts/quality-loop-helper.sh +1108 -0
  129. package/.agent/scripts/ralph-loop-helper.sh +836 -0
  130. package/.agent/scripts/ralph-upstream-check.sh +341 -0
  131. package/.agent/scripts/secretlint-helper.sh +847 -0
  132. package/.agent/scripts/servers-helper.sh +241 -0
  133. package/.agent/scripts/ses-helper.sh +619 -0
  134. package/.agent/scripts/session-review-helper.sh +404 -0
  135. package/.agent/scripts/setup-linters-wizard.sh +379 -0
  136. package/.agent/scripts/setup-local-api-keys.sh +330 -0
  137. package/.agent/scripts/setup-mcp-integrations.sh +472 -0
  138. package/.agent/scripts/shared-constants.sh +246 -0
  139. package/.agent/scripts/site-crawler-helper.sh +1487 -0
  140. package/.agent/scripts/snyk-helper.sh +940 -0
  141. package/.agent/scripts/sonarcloud-autofix.sh +193 -0
  142. package/.agent/scripts/sonarcloud-cli.sh +191 -0
  143. package/.agent/scripts/sonarscanner-cli.sh +455 -0
  144. package/.agent/scripts/spaceship-helper.sh +747 -0
  145. package/.agent/scripts/stagehand-helper.sh +321 -0
  146. package/.agent/scripts/stagehand-python-helper.sh +321 -0
  147. package/.agent/scripts/stagehand-python-setup.sh +441 -0
  148. package/.agent/scripts/stagehand-setup.sh +439 -0
  149. package/.agent/scripts/system-cleanup.sh +340 -0
  150. package/.agent/scripts/terminal-title-helper.sh +388 -0
  151. package/.agent/scripts/terminal-title-setup.sh +549 -0
  152. package/.agent/scripts/test-stagehand-both-integration.sh +317 -0
  153. package/.agent/scripts/test-stagehand-integration.sh +309 -0
  154. package/.agent/scripts/test-stagehand-python-integration.sh +341 -0
  155. package/.agent/scripts/todo-ready.sh +263 -0
  156. package/.agent/scripts/tool-version-check.sh +362 -0
  157. package/.agent/scripts/toon-helper.sh +469 -0
  158. package/.agent/scripts/twilio-helper.sh +917 -0
  159. package/.agent/scripts/updown-helper.sh +279 -0
  160. package/.agent/scripts/validate-mcp-integrations.sh +250 -0
  161. package/.agent/scripts/validate-version-consistency.sh +131 -0
  162. package/.agent/scripts/vaultwarden-helper.sh +597 -0
  163. package/.agent/scripts/vercel-cli-helper.sh +816 -0
  164. package/.agent/scripts/verify-mirrors.sh +169 -0
  165. package/.agent/scripts/version-manager.sh +831 -0
  166. package/.agent/scripts/webhosting-helper.sh +471 -0
  167. package/.agent/scripts/webhosting-verify.sh +238 -0
  168. package/.agent/scripts/wordpress-mcp-helper.sh +508 -0
  169. package/.agent/scripts/worktree-helper.sh +595 -0
  170. package/.agent/scripts/worktree-sessions.sh +577 -0
  171. package/.agent/seo/dataforseo.md +215 -0
  172. package/.agent/seo/domain-research.md +532 -0
  173. package/.agent/seo/eeat-score.md +659 -0
  174. package/.agent/seo/google-search-console.md +366 -0
  175. package/.agent/seo/gsc-sitemaps.md +282 -0
  176. package/.agent/seo/keyword-research.md +521 -0
  177. package/.agent/seo/serper.md +278 -0
  178. package/.agent/seo/site-crawler.md +387 -0
  179. package/.agent/seo.md +236 -0
  180. package/.agent/services/accounting/quickfile.md +159 -0
  181. package/.agent/services/communications/telfon.md +470 -0
  182. package/.agent/services/communications/twilio.md +569 -0
  183. package/.agent/services/crm/fluentcrm.md +449 -0
  184. package/.agent/services/email/ses.md +399 -0
  185. package/.agent/services/hosting/101domains.md +378 -0
  186. package/.agent/services/hosting/closte.md +177 -0
  187. package/.agent/services/hosting/cloudflare.md +251 -0
  188. package/.agent/services/hosting/cloudron.md +478 -0
  189. package/.agent/services/hosting/dns-providers.md +335 -0
  190. package/.agent/services/hosting/domain-purchasing.md +344 -0
  191. package/.agent/services/hosting/hetzner.md +327 -0
  192. package/.agent/services/hosting/hostinger.md +287 -0
  193. package/.agent/services/hosting/localhost.md +419 -0
  194. package/.agent/services/hosting/spaceship.md +353 -0
  195. package/.agent/services/hosting/webhosting.md +330 -0
  196. package/.agent/social-media.md +69 -0
  197. package/.agent/templates/plans-template.md +114 -0
  198. package/.agent/templates/prd-template.md +129 -0
  199. package/.agent/templates/tasks-template.md +108 -0
  200. package/.agent/templates/todo-template.md +89 -0
  201. package/.agent/tools/ai-assistants/agno.md +471 -0
  202. package/.agent/tools/ai-assistants/capsolver.md +326 -0
  203. package/.agent/tools/ai-assistants/configuration.md +221 -0
  204. package/.agent/tools/ai-assistants/overview.md +209 -0
  205. package/.agent/tools/ai-assistants/status.md +171 -0
  206. package/.agent/tools/ai-assistants/windsurf.md +193 -0
  207. package/.agent/tools/ai-orchestration/autogen.md +406 -0
  208. package/.agent/tools/ai-orchestration/crewai.md +445 -0
  209. package/.agent/tools/ai-orchestration/langflow.md +405 -0
  210. package/.agent/tools/ai-orchestration/openprose.md +487 -0
  211. package/.agent/tools/ai-orchestration/overview.md +362 -0
  212. package/.agent/tools/ai-orchestration/packaging.md +647 -0
  213. package/.agent/tools/browser/agent-browser.md +464 -0
  214. package/.agent/tools/browser/browser-automation.md +400 -0
  215. package/.agent/tools/browser/chrome-devtools.md +282 -0
  216. package/.agent/tools/browser/crawl4ai-integration.md +422 -0
  217. package/.agent/tools/browser/crawl4ai-resources.md +277 -0
  218. package/.agent/tools/browser/crawl4ai-usage.md +416 -0
  219. package/.agent/tools/browser/crawl4ai.md +585 -0
  220. package/.agent/tools/browser/dev-browser.md +341 -0
  221. package/.agent/tools/browser/pagespeed.md +260 -0
  222. package/.agent/tools/browser/playwright.md +266 -0
  223. package/.agent/tools/browser/playwriter.md +310 -0
  224. package/.agent/tools/browser/stagehand-examples.md +456 -0
  225. package/.agent/tools/browser/stagehand-python.md +483 -0
  226. package/.agent/tools/browser/stagehand.md +421 -0
  227. package/.agent/tools/build-agent/agent-review.md +224 -0
  228. package/.agent/tools/build-agent/build-agent.md +784 -0
  229. package/.agent/tools/build-mcp/aidevops-plugin.md +476 -0
  230. package/.agent/tools/build-mcp/api-wrapper.md +445 -0
  231. package/.agent/tools/build-mcp/build-mcp.md +240 -0
  232. package/.agent/tools/build-mcp/deployment.md +401 -0
  233. package/.agent/tools/build-mcp/server-patterns.md +632 -0
  234. package/.agent/tools/build-mcp/transports.md +366 -0
  235. package/.agent/tools/code-review/auditing.md +383 -0
  236. package/.agent/tools/code-review/automation.md +219 -0
  237. package/.agent/tools/code-review/best-practices.md +203 -0
  238. package/.agent/tools/code-review/codacy.md +151 -0
  239. package/.agent/tools/code-review/code-simplifier.md +174 -0
  240. package/.agent/tools/code-review/code-standards.md +309 -0
  241. package/.agent/tools/code-review/coderabbit.md +101 -0
  242. package/.agent/tools/code-review/management.md +155 -0
  243. package/.agent/tools/code-review/qlty.md +248 -0
  244. package/.agent/tools/code-review/secretlint.md +565 -0
  245. package/.agent/tools/code-review/setup.md +250 -0
  246. package/.agent/tools/code-review/snyk.md +563 -0
  247. package/.agent/tools/code-review/tools.md +230 -0
  248. package/.agent/tools/content/summarize.md +353 -0
  249. package/.agent/tools/context/augment-context-engine.md +468 -0
  250. package/.agent/tools/context/context-builder-agent.md +76 -0
  251. package/.agent/tools/context/context-builder.md +375 -0
  252. package/.agent/tools/context/context7.md +371 -0
  253. package/.agent/tools/context/dspy.md +302 -0
  254. package/.agent/tools/context/dspyground.md +374 -0
  255. package/.agent/tools/context/llm-tldr.md +219 -0
  256. package/.agent/tools/context/osgrep.md +488 -0
  257. package/.agent/tools/context/prompt-optimization.md +338 -0
  258. package/.agent/tools/context/toon.md +292 -0
  259. package/.agent/tools/conversion/pandoc.md +304 -0
  260. package/.agent/tools/credentials/api-key-management.md +154 -0
  261. package/.agent/tools/credentials/api-key-setup.md +224 -0
  262. package/.agent/tools/credentials/environment-variables.md +180 -0
  263. package/.agent/tools/credentials/vaultwarden.md +382 -0
  264. package/.agent/tools/data-extraction/outscraper.md +974 -0
  265. package/.agent/tools/deployment/coolify-cli.md +388 -0
  266. package/.agent/tools/deployment/coolify-setup.md +353 -0
  267. package/.agent/tools/deployment/coolify.md +345 -0
  268. package/.agent/tools/deployment/vercel.md +390 -0
  269. package/.agent/tools/git/authentication.md +132 -0
  270. package/.agent/tools/git/gitea-cli.md +193 -0
  271. package/.agent/tools/git/github-actions.md +207 -0
  272. package/.agent/tools/git/github-cli.md +223 -0
  273. package/.agent/tools/git/gitlab-cli.md +190 -0
  274. package/.agent/tools/git/opencode-github-security.md +350 -0
  275. package/.agent/tools/git/opencode-github.md +328 -0
  276. package/.agent/tools/git/opencode-gitlab.md +252 -0
  277. package/.agent/tools/git/security.md +196 -0
  278. package/.agent/tools/git.md +207 -0
  279. package/.agent/tools/opencode/oh-my-opencode.md +375 -0
  280. package/.agent/tools/opencode/opencode-anthropic-auth.md +446 -0
  281. package/.agent/tools/opencode/opencode.md +651 -0
  282. package/.agent/tools/social-media/bird.md +437 -0
  283. package/.agent/tools/task-management/beads.md +336 -0
  284. package/.agent/tools/terminal/terminal-title.md +251 -0
  285. package/.agent/tools/ui/shadcn.md +196 -0
  286. package/.agent/tools/ui/ui-skills.md +115 -0
  287. package/.agent/tools/wordpress/localwp.md +311 -0
  288. package/.agent/tools/wordpress/mainwp.md +391 -0
  289. package/.agent/tools/wordpress/scf.md +527 -0
  290. package/.agent/tools/wordpress/wp-admin.md +729 -0
  291. package/.agent/tools/wordpress/wp-dev.md +940 -0
  292. package/.agent/tools/wordpress/wp-preferred.md +398 -0
  293. package/.agent/tools/wordpress.md +95 -0
  294. package/.agent/workflows/branch/bugfix.md +63 -0
  295. package/.agent/workflows/branch/chore.md +95 -0
  296. package/.agent/workflows/branch/experiment.md +115 -0
  297. package/.agent/workflows/branch/feature.md +59 -0
  298. package/.agent/workflows/branch/hotfix.md +98 -0
  299. package/.agent/workflows/branch/refactor.md +92 -0
  300. package/.agent/workflows/branch/release.md +96 -0
  301. package/.agent/workflows/branch.md +347 -0
  302. package/.agent/workflows/bug-fixing.md +267 -0
  303. package/.agent/workflows/changelog.md +129 -0
  304. package/.agent/workflows/code-audit-remote.md +279 -0
  305. package/.agent/workflows/conversation-starter.md +69 -0
  306. package/.agent/workflows/error-feedback.md +578 -0
  307. package/.agent/workflows/feature-development.md +355 -0
  308. package/.agent/workflows/git-workflow.md +702 -0
  309. package/.agent/workflows/multi-repo-workspace.md +268 -0
  310. package/.agent/workflows/plans.md +709 -0
  311. package/.agent/workflows/postflight.md +604 -0
  312. package/.agent/workflows/pr.md +571 -0
  313. package/.agent/workflows/preflight.md +278 -0
  314. package/.agent/workflows/ralph-loop.md +773 -0
  315. package/.agent/workflows/release.md +498 -0
  316. package/.agent/workflows/session-manager.md +254 -0
  317. package/.agent/workflows/session-review.md +311 -0
  318. package/.agent/workflows/sql-migrations.md +631 -0
  319. package/.agent/workflows/version-bump.md +283 -0
  320. package/.agent/workflows/wiki-update.md +333 -0
  321. package/.agent/workflows/worktree.md +477 -0
  322. package/LICENSE +21 -0
  323. package/README.md +1446 -0
  324. package/VERSION +1 -0
  325. package/aidevops.sh +1746 -0
  326. package/bin/aidevops +21 -0
  327. package/package.json +75 -0
  328. package/scripts/npm-postinstall.js +60 -0
  329. package/setup.sh +2366 -0
@@ -0,0 +1,462 @@
1
+ #!/usr/bin/env bash
2
+ # shellcheck disable=SC2034,SC2155,SC2317,SC2329,SC2016,SC2181,SC1091,SC2154,SC2015,SC2086,SC2129,SC2030,SC2031,SC2119,SC2120,SC2001,SC2162,SC2088,SC2089,SC2090,SC2029,SC2006,SC2153
3
+ # quality-feedback-helper.sh - Retrieve code quality feedback via GitHub API
4
+ # Consolidates feedback from Codacy, CodeRabbit, SonarCloud, CodeFactor, etc.
5
+ #
6
+ # Usage:
7
+ # quality-feedback-helper.sh [command] [options]
8
+ #
9
+ # Commands:
10
+ # status Show status of all quality checks for current commit/PR
11
+ # failed Show only failed checks with details
12
+ # annotations Get line-level annotations from all check runs
13
+ # codacy Get Codacy-specific feedback
14
+ # coderabbit Get CodeRabbit review comments
15
+ # sonar Get SonarCloud feedback
16
+ # watch Watch for check completion (polls every 30s)
17
+ #
18
+ # Examples:
19
+ # quality-feedback-helper.sh status
20
+ # quality-feedback-helper.sh failed --pr 4
21
+ # quality-feedback-helper.sh annotations --commit abc123
22
+ # quality-feedback-helper.sh watch --pr 4
23
+
24
+ set -euo pipefail
25
+
26
+ # Colors for output
27
+ readonly RED='\033[0;31m'
28
+ readonly GREEN='\033[0;32m'
29
+ readonly YELLOW='\033[1;33m'
30
+ readonly BLUE='\033[0;34m'
31
+ readonly NC='\033[0m' # No Color
32
+
33
+ # Common constants
34
+ readonly ERROR_UNKNOWN_COMMAND="Unknown command:"
35
+ # Get repository info
36
+ get_repo() {
37
+ local repo
38
+ repo="${GITHUB_REPOSITORY:-}"
39
+ if [[ -z "$repo" ]]; then
40
+ repo=$(gh repo view --json nameWithOwner -q .nameWithOwner 2>/dev/null) || {
41
+ echo "Error: Not in a GitHub repository or gh CLI not configured" >&2
42
+ exit 1
43
+ }
44
+ fi
45
+ echo "$repo"
46
+ return 0
47
+ }
48
+
49
+ # Get commit SHA (from PR or current HEAD)
50
+ get_sha() {
51
+ local pr_number="${1:-}"
52
+ if [[ -n "$pr_number" ]]; then
53
+ gh pr view "$pr_number" --json headRefOid -q .headRefOid
54
+ else
55
+ git rev-parse HEAD
56
+ fi
57
+ return 0
58
+ }
59
+
60
+ # Show status of all checks
61
+ cmd_status() {
62
+ local pr_number="${1:-}"
63
+ local repo
64
+ local sha
65
+
66
+ repo=$(get_repo)
67
+ sha=$(get_sha "$pr_number")
68
+
69
+ echo -e "${BLUE}=== Quality Check Status ===${NC}"
70
+ echo -e "Repository: ${repo}"
71
+ echo -e "Commit: ${sha:0:8}"
72
+ [[ -n "$pr_number" ]] && echo -e "PR: #${pr_number}"
73
+ echo ""
74
+
75
+ gh api "repos/${repo}/commits/${sha}/check-runs" \
76
+ --jq '.check_runs[] | "\(.conclusion // .status)\t\(.name)"' | \
77
+ while IFS=$'\t' read -r conclusion name; do
78
+ case "$conclusion" in
79
+ success)
80
+ echo -e "${GREEN}✓${NC} ${name}"
81
+ ;;
82
+ failure|action_required)
83
+ echo -e "${RED}✗${NC} ${name}"
84
+ ;;
85
+ in_progress|queued|pending)
86
+ echo -e "${YELLOW}○${NC} ${name} (${conclusion})"
87
+ ;;
88
+ neutral|skipped)
89
+ echo -e "${BLUE}–${NC} ${name} (${conclusion})"
90
+ ;;
91
+ *)
92
+ echo -e "? ${name} (${conclusion:-unknown})"
93
+ ;;
94
+ esac
95
+ done | sort
96
+ return 0
97
+ }
98
+
99
+ # Show only failed checks with details
100
+ cmd_failed() {
101
+ local pr_number="${1:-}"
102
+ local repo
103
+ local sha
104
+
105
+ repo=$(get_repo)
106
+ sha=$(get_sha "$pr_number")
107
+
108
+ echo -e "${RED}=== Failed Quality Checks ===${NC}"
109
+ echo -e "Commit: ${sha:0:8}"
110
+ echo ""
111
+
112
+ local failed_count=0
113
+
114
+ while IFS=$'\t' read -r name summary url; do
115
+ ((failed_count++)) || true
116
+ echo -e "${RED}✗ ${name}${NC}"
117
+ [[ -n "$summary" && "$summary" != "null" ]] && echo " Summary: ${summary}"
118
+ [[ -n "$url" && "$url" != "null" ]] && echo " Details: ${url}"
119
+ echo ""
120
+ done < <(gh api "repos/${repo}/commits/${sha}/check-runs" \
121
+ --jq '.check_runs[] | select(.conclusion == "failure" or .conclusion == "action_required") | "\(.name)\t\(.output.summary)\t\(.html_url)"')
122
+
123
+ if [[ $failed_count -eq 0 ]]; then
124
+ echo -e "${GREEN}No failed checks!${NC}"
125
+ else
126
+ echo -e "${RED}Total failed: ${failed_count}${NC}"
127
+ fi
128
+ return 0
129
+ }
130
+
131
+ # Get line-level annotations from all check runs
132
+ cmd_annotations() {
133
+ local pr_number="${1:-}"
134
+ local repo
135
+ local sha
136
+
137
+ repo=$(get_repo)
138
+ sha=$(get_sha "$pr_number")
139
+
140
+ echo -e "${BLUE}=== Annotations (Line-Level Issues) ===${NC}"
141
+ echo -e "Commit: ${sha:0:8}"
142
+ echo ""
143
+
144
+ # Get all check run IDs
145
+ local check_ids
146
+ check_ids=$(gh api "repos/${repo}/commits/${sha}/check-runs" --jq '.check_runs[].id')
147
+
148
+ local total_annotations=0
149
+
150
+ for check_id in $check_ids; do
151
+ local check_name
152
+ check_name=$(gh api "repos/${repo}/check-runs/${check_id}" --jq '.name')
153
+
154
+ local annotations
155
+ annotations=$(gh api "repos/${repo}/check-runs/${check_id}/annotations" 2>/dev/null || echo "[]")
156
+
157
+ local count
158
+ count=$(echo "$annotations" | jq 'length')
159
+
160
+ if [[ "$count" -gt 0 ]]; then
161
+ echo -e "${YELLOW}--- ${check_name} (${count} annotations) ---${NC}"
162
+ echo "$annotations" | jq -r '.[] | " \(.path):\(.start_line) [\(.annotation_level)] \(.message)"'
163
+ echo ""
164
+ total_annotations=$((total_annotations + count))
165
+ fi
166
+ done
167
+
168
+ if [[ $total_annotations -eq 0 ]]; then
169
+ echo "No annotations found."
170
+ else
171
+ echo -e "${YELLOW}Total annotations: ${total_annotations}${NC}"
172
+ fi
173
+ return 0
174
+ }
175
+
176
+ # Get Codacy-specific feedback
177
+ cmd_codacy() {
178
+ local pr_number="${1:-}"
179
+ local repo
180
+ local sha
181
+
182
+ repo=$(get_repo)
183
+ sha=$(get_sha "$pr_number")
184
+
185
+ echo -e "${BLUE}=== Codacy Feedback ===${NC}"
186
+
187
+ local codacy_check
188
+ codacy_check=$(gh api "repos/${repo}/commits/${sha}/check-runs" \
189
+ --jq '.check_runs[] | select(.app.slug == "codacy-production" or .name | contains("Codacy"))' 2>/dev/null)
190
+
191
+ if [[ -z "$codacy_check" ]]; then
192
+ echo "No Codacy check found for this commit."
193
+ return
194
+ fi
195
+
196
+ local conclusion
197
+ local summary
198
+ local url
199
+ local check_id
200
+
201
+ conclusion=$(echo "$codacy_check" | jq -r '.conclusion // .status')
202
+ summary=$(echo "$codacy_check" | jq -r '.output.summary // "No summary"')
203
+ url=$(echo "$codacy_check" | jq -r '.html_url')
204
+ check_id=$(echo "$codacy_check" | jq -r '.id')
205
+
206
+ echo "Status: ${conclusion}"
207
+ echo "Summary: ${summary}"
208
+ echo "Details: ${url}"
209
+ echo ""
210
+
211
+ # Get annotations if available
212
+ local annotations
213
+ annotations=$(gh api "repos/${repo}/check-runs/${check_id}/annotations" 2>/dev/null || echo "[]")
214
+ local count
215
+ count=$(echo "$annotations" | jq 'length')
216
+
217
+ if [[ "$count" -gt 0 ]]; then
218
+ echo -e "${YELLOW}Issues found:${NC}"
219
+ echo "$annotations" | jq -r '.[] | " \(.path):\(.start_line) [\(.annotation_level)] \(.message)"'
220
+ fi
221
+ return 0
222
+ }
223
+
224
+ # Get CodeRabbit review comments
225
+ cmd_coderabbit() {
226
+ local pr_number="${1:-}"
227
+ local repo
228
+
229
+ repo=$(get_repo)
230
+
231
+ if [[ -z "$pr_number" ]]; then
232
+ pr_number=$(gh pr view --json number -q .number 2>/dev/null) || {
233
+ echo "Error: Please specify a PR number with --pr" >&2
234
+ exit 1
235
+ }
236
+ fi
237
+
238
+ echo -e "${BLUE}=== CodeRabbit Review Comments ===${NC}"
239
+ echo -e "PR: #${pr_number}"
240
+ echo ""
241
+
242
+ # Get review comments from CodeRabbit
243
+ local comments
244
+ comments=$(gh api "repos/${repo}/pulls/${pr_number}/comments" \
245
+ --jq '[.[] | select(.user.login | contains("coderabbit"))]' 2>/dev/null || echo "[]")
246
+
247
+ local count
248
+ count=$(echo "$comments" | jq 'length')
249
+
250
+ if [[ "$count" -eq 0 ]]; then
251
+ echo "No CodeRabbit comments found."
252
+
253
+ # Check for review body
254
+ local reviews
255
+ reviews=$(gh api "repos/${repo}/pulls/${pr_number}/reviews" \
256
+ --jq '[.[] | select(.user.login | contains("coderabbit"))]' 2>/dev/null || echo "[]")
257
+
258
+ local review_count
259
+ review_count=$(echo "$reviews" | jq 'length')
260
+
261
+ if [[ "$review_count" -gt 0 ]]; then
262
+ echo ""
263
+ echo -e "${YELLOW}CodeRabbit Reviews:${NC}"
264
+ echo "$reviews" | jq -r '.[] | "State: \(.state)\n\(.body)\n---"'
265
+ fi
266
+ else
267
+ echo -e "${YELLOW}Inline Comments (${count}):${NC}"
268
+ echo "$comments" | jq -r '.[] | "\(.path):\(.line // .original_line)\n \(.body)\n"'
269
+ fi
270
+ return 0
271
+ }
272
+
273
+ # Get SonarCloud feedback
274
+ cmd_sonar() {
275
+ local pr_number="${1:-}"
276
+ local repo
277
+ local sha
278
+
279
+ repo=$(get_repo)
280
+ sha=$(get_sha "$pr_number")
281
+
282
+ echo -e "${BLUE}=== SonarCloud Feedback ===${NC}"
283
+
284
+ local sonar_check
285
+ sonar_check=$(gh api "repos/${repo}/commits/${sha}/check-runs" \
286
+ --jq '.check_runs[] | select(.name | contains("SonarCloud") or .name | contains("sonar"))' 2>/dev/null)
287
+
288
+ if [[ -z "$sonar_check" ]]; then
289
+ echo "No SonarCloud check found for this commit."
290
+ return
291
+ fi
292
+
293
+ local conclusion
294
+ local summary
295
+ local details_url
296
+
297
+ conclusion=$(echo "$sonar_check" | jq -r '.conclusion // .status')
298
+ summary=$(echo "$sonar_check" | jq -r '.output.summary // "No summary"')
299
+ details_url=$(echo "$sonar_check" | jq -r '.details_url // .html_url')
300
+
301
+ echo "Status: ${conclusion}"
302
+ echo "Summary: ${summary}"
303
+ echo "Dashboard: ${details_url}"
304
+ return 0
305
+ }
306
+
307
+ # Watch for check completion
308
+ cmd_watch() {
309
+ local pr_number="${1:-}"
310
+ local repo
311
+ local sha
312
+ local interval="${2:-30}"
313
+
314
+ repo=$(get_repo)
315
+ sha=$(get_sha "$pr_number")
316
+
317
+ echo -e "${BLUE}=== Watching Quality Checks ===${NC}"
318
+ echo -e "Commit: ${sha:0:8}"
319
+ echo -e "Polling every ${interval} seconds..."
320
+ echo ""
321
+
322
+ while true; do
323
+ local pending
324
+ pending=$(gh api "repos/${repo}/commits/${sha}/check-runs" \
325
+ --jq '[.check_runs[] | select(.status == "in_progress" or .status == "queued" or .status == "pending")] | length')
326
+
327
+ local failed
328
+ failed=$(gh api "repos/${repo}/commits/${sha}/check-runs" \
329
+ --jq '[.check_runs[] | select(.conclusion == "failure")] | length')
330
+
331
+ local total
332
+ total=$(gh api "repos/${repo}/commits/${sha}/check-runs" --jq '.check_runs | length')
333
+
334
+ local completed
335
+ completed=$((total - pending))
336
+
337
+ echo -e "[$(date '+%H:%M:%S')] Completed: ${completed}/${total}, Pending: ${pending}, Failed: ${failed}"
338
+
339
+ if [[ "$pending" -eq 0 ]]; then
340
+ echo ""
341
+ if [[ "$failed" -eq 0 ]]; then
342
+ echo -e "${GREEN}All checks passed!${NC}"
343
+ else
344
+ echo -e "${RED}${failed} check(s) failed.${NC}"
345
+ cmd_failed "$pr_number"
346
+ fi
347
+ break
348
+ fi
349
+
350
+ sleep "$interval"
351
+ done
352
+ return 0
353
+ }
354
+
355
+ # Show help
356
+ show_help() {
357
+ cat << 'EOF'
358
+ Quality Feedback Helper - Retrieve code quality feedback via GitHub API
359
+
360
+ Usage: quality-feedback-helper.sh [command] [options]
361
+
362
+ Commands:
363
+ status Show status of all quality checks
364
+ failed Show only failed checks with details
365
+ annotations Get line-level annotations from all check runs
366
+ codacy Get Codacy-specific feedback
367
+ coderabbit Get CodeRabbit review comments
368
+ sonar Get SonarCloud feedback
369
+ watch Watch for check completion (polls every 30s)
370
+ help Show this help message
371
+
372
+ Options:
373
+ --pr NUMBER Specify PR number (otherwise uses current commit)
374
+ --commit SHA Specify commit SHA (otherwise uses HEAD)
375
+
376
+ Examples:
377
+ quality-feedback-helper.sh status
378
+ quality-feedback-helper.sh failed --pr 4
379
+ quality-feedback-helper.sh annotations
380
+ quality-feedback-helper.sh coderabbit --pr 4
381
+ quality-feedback-helper.sh watch --pr 4
382
+
383
+ Requirements:
384
+ - GitHub CLI (gh) installed and authenticated
385
+ - jq for JSON parsing
386
+ - Inside a Git repository linked to GitHub
387
+ EOF
388
+ return 0
389
+ }
390
+
391
+ # Parse arguments
392
+ main() {
393
+ local _arg1="$1"
394
+ local _arg2="$2"
395
+ local command="${1:-status}"
396
+ shift || true
397
+
398
+ local pr_number=""
399
+ local commit_sha=""
400
+
401
+ while [[ $# -gt 0 ]]; do
402
+ case "$_arg1" in
403
+ --pr)
404
+ pr_number="$_arg2"
405
+ shift 2
406
+ ;;
407
+ --commit)
408
+ commit_sha="$_arg2"
409
+ shift 2
410
+ ;;
411
+ --help|-h)
412
+ show_help
413
+ exit 0
414
+ ;;
415
+ *)
416
+ echo "Unknown option: $_arg1" >&2
417
+ show_help
418
+ exit 1
419
+ ;;
420
+ esac
421
+ done
422
+
423
+ # If commit SHA provided, use it directly
424
+ if [[ -n "$commit_sha" ]]; then
425
+ get_sha() { echo "$commit_sha"; return 0; }
426
+ fi
427
+
428
+ case "$command" in
429
+ status)
430
+ cmd_status "$pr_number"
431
+ ;;
432
+ failed)
433
+ cmd_failed "$pr_number"
434
+ ;;
435
+ annotations)
436
+ cmd_annotations "$pr_number"
437
+ ;;
438
+ codacy)
439
+ cmd_codacy "$pr_number"
440
+ ;;
441
+ coderabbit)
442
+ cmd_coderabbit "$pr_number"
443
+ ;;
444
+ sonar)
445
+ cmd_sonar "$pr_number"
446
+ ;;
447
+ watch)
448
+ cmd_watch "$pr_number"
449
+ ;;
450
+ help|--help|-h)
451
+ show_help
452
+ ;;
453
+ *)
454
+ echo "$ERROR_UNKNOWN_COMMAND $command" >&2
455
+ show_help
456
+ exit 1
457
+ ;;
458
+ esac
459
+ return 0
460
+ }
461
+
462
+ main "$@"