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.
- package/.agent/AGENTS.md +614 -0
- package/.agent/accounts.md +65 -0
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +456 -0
- package/.agent/aidevops/api-integrations.md +335 -0
- package/.agent/aidevops/architecture.md +510 -0
- package/.agent/aidevops/configs.md +274 -0
- package/.agent/aidevops/docs.md +244 -0
- package/.agent/aidevops/extension.md +311 -0
- package/.agent/aidevops/mcp-integrations.md +340 -0
- package/.agent/aidevops/mcp-troubleshooting.md +162 -0
- package/.agent/aidevops/memory-patterns.md +172 -0
- package/.agent/aidevops/providers.md +217 -0
- package/.agent/aidevops/recommendations.md +321 -0
- package/.agent/aidevops/requirements.md +301 -0
- package/.agent/aidevops/resources.md +214 -0
- package/.agent/aidevops/security-requirements.md +174 -0
- package/.agent/aidevops/security.md +350 -0
- package/.agent/aidevops/service-links.md +400 -0
- package/.agent/aidevops/services.md +357 -0
- package/.agent/aidevops/setup.md +153 -0
- package/.agent/aidevops/troubleshooting.md +389 -0
- package/.agent/aidevops.md +124 -0
- package/.agent/build-plus.md +244 -0
- package/.agent/content/guidelines.md +109 -0
- package/.agent/content.md +87 -0
- package/.agent/health.md +59 -0
- package/.agent/legal.md +59 -0
- package/.agent/loop-state/full-loop.local.md +16 -0
- package/.agent/loop-state/ralph-loop.local.md +10 -0
- package/.agent/marketing.md +440 -0
- package/.agent/memory/README.md +260 -0
- package/.agent/onboarding.md +796 -0
- package/.agent/plan-plus.md +245 -0
- package/.agent/research.md +100 -0
- package/.agent/sales.md +333 -0
- package/.agent/scripts/101domains-helper.sh +701 -0
- package/.agent/scripts/add-missing-returns.sh +140 -0
- package/.agent/scripts/agent-browser-helper.sh +311 -0
- package/.agent/scripts/agno-setup.sh +712 -0
- package/.agent/scripts/ahrefs-mcp-wrapper.js +168 -0
- package/.agent/scripts/aidevops-update-check.sh +71 -0
- package/.agent/scripts/ampcode-cli.sh +522 -0
- package/.agent/scripts/auto-version-bump.sh +156 -0
- package/.agent/scripts/autogen-helper.sh +512 -0
- package/.agent/scripts/beads-sync-helper.sh +596 -0
- package/.agent/scripts/closte-helper.sh +5 -0
- package/.agent/scripts/cloudron-helper.sh +321 -0
- package/.agent/scripts/codacy-cli-chunked.sh +581 -0
- package/.agent/scripts/codacy-cli.sh +442 -0
- package/.agent/scripts/code-audit-helper.sh +5 -0
- package/.agent/scripts/coderabbit-cli.sh +417 -0
- package/.agent/scripts/coderabbit-pro-analysis.sh +238 -0
- package/.agent/scripts/commands/code-simplifier.md +86 -0
- package/.agent/scripts/commands/full-loop.md +246 -0
- package/.agent/scripts/commands/postflight-loop.md +103 -0
- package/.agent/scripts/commands/recall.md +182 -0
- package/.agent/scripts/commands/remember.md +132 -0
- package/.agent/scripts/commands/save-todo.md +175 -0
- package/.agent/scripts/commands/session-review.md +154 -0
- package/.agent/scripts/comprehensive-quality-fix.sh +106 -0
- package/.agent/scripts/context-builder-helper.sh +522 -0
- package/.agent/scripts/coolify-cli-helper.sh +674 -0
- package/.agent/scripts/coolify-helper.sh +380 -0
- package/.agent/scripts/crawl4ai-examples.sh +401 -0
- package/.agent/scripts/crawl4ai-helper.sh +1078 -0
- package/.agent/scripts/crewai-helper.sh +681 -0
- package/.agent/scripts/dev-browser-helper.sh +513 -0
- package/.agent/scripts/dns-helper.sh +396 -0
- package/.agent/scripts/domain-research-helper.sh +917 -0
- package/.agent/scripts/dspy-helper.sh +285 -0
- package/.agent/scripts/dspyground-helper.sh +291 -0
- package/.agent/scripts/eeat-score-helper.sh +1242 -0
- package/.agent/scripts/efficient-return-fix.sh +92 -0
- package/.agent/scripts/extract-opencode-prompts.sh +128 -0
- package/.agent/scripts/find-missing-returns.sh +113 -0
- package/.agent/scripts/fix-auth-headers.sh +104 -0
- package/.agent/scripts/fix-common-strings.sh +254 -0
- package/.agent/scripts/fix-content-type.sh +100 -0
- package/.agent/scripts/fix-error-messages.sh +130 -0
- package/.agent/scripts/fix-misplaced-returns.sh +74 -0
- package/.agent/scripts/fix-remaining-literals.sh +152 -0
- package/.agent/scripts/fix-return-statements.sh +41 -0
- package/.agent/scripts/fix-s131-default-cases.sh +249 -0
- package/.agent/scripts/fix-sc2155-simple.sh +102 -0
- package/.agent/scripts/fix-shellcheck-critical.sh +187 -0
- package/.agent/scripts/fix-string-literals.sh +273 -0
- package/.agent/scripts/full-loop-helper.sh +773 -0
- package/.agent/scripts/generate-opencode-agents.sh +497 -0
- package/.agent/scripts/generate-opencode-commands.sh +1629 -0
- package/.agent/scripts/generate-skills.sh +366 -0
- package/.agent/scripts/git-platforms-helper.sh +640 -0
- package/.agent/scripts/gitea-cli-helper.sh +743 -0
- package/.agent/scripts/github-cli-helper.sh +702 -0
- package/.agent/scripts/gitlab-cli-helper.sh +682 -0
- package/.agent/scripts/gsc-add-user-helper.sh +325 -0
- package/.agent/scripts/gsc-sitemap-helper.sh +678 -0
- package/.agent/scripts/hetzner-helper.sh +485 -0
- package/.agent/scripts/hostinger-helper.sh +229 -0
- package/.agent/scripts/keyword-research-helper.sh +1815 -0
- package/.agent/scripts/langflow-helper.sh +544 -0
- package/.agent/scripts/linkedin-automation.py +241 -0
- package/.agent/scripts/linter-manager.sh +599 -0
- package/.agent/scripts/linters-local.sh +434 -0
- package/.agent/scripts/list-keys-helper.sh +488 -0
- package/.agent/scripts/local-browser-automation.py +339 -0
- package/.agent/scripts/localhost-helper.sh +744 -0
- package/.agent/scripts/loop-common.sh +806 -0
- package/.agent/scripts/mainwp-helper.sh +728 -0
- package/.agent/scripts/markdown-formatter.sh +338 -0
- package/.agent/scripts/markdown-lint-fix.sh +311 -0
- package/.agent/scripts/mass-fix-returns.sh +58 -0
- package/.agent/scripts/mcp-diagnose.sh +167 -0
- package/.agent/scripts/mcp-inspector-helper.sh +449 -0
- package/.agent/scripts/memory-helper.sh +650 -0
- package/.agent/scripts/monitor-code-review.sh +255 -0
- package/.agent/scripts/onboarding-helper.sh +706 -0
- package/.agent/scripts/opencode-github-setup-helper.sh +797 -0
- package/.agent/scripts/opencode-test-helper.sh +213 -0
- package/.agent/scripts/pagespeed-helper.sh +464 -0
- package/.agent/scripts/pandoc-helper.sh +362 -0
- package/.agent/scripts/postflight-check.sh +555 -0
- package/.agent/scripts/pre-commit-hook.sh +259 -0
- package/.agent/scripts/pre-edit-check.sh +169 -0
- package/.agent/scripts/qlty-cli.sh +356 -0
- package/.agent/scripts/quality-cli-manager.sh +525 -0
- package/.agent/scripts/quality-feedback-helper.sh +462 -0
- package/.agent/scripts/quality-fix.sh +263 -0
- package/.agent/scripts/quality-loop-helper.sh +1108 -0
- package/.agent/scripts/ralph-loop-helper.sh +836 -0
- package/.agent/scripts/ralph-upstream-check.sh +341 -0
- package/.agent/scripts/secretlint-helper.sh +847 -0
- package/.agent/scripts/servers-helper.sh +241 -0
- package/.agent/scripts/ses-helper.sh +619 -0
- package/.agent/scripts/session-review-helper.sh +404 -0
- package/.agent/scripts/setup-linters-wizard.sh +379 -0
- package/.agent/scripts/setup-local-api-keys.sh +330 -0
- package/.agent/scripts/setup-mcp-integrations.sh +472 -0
- package/.agent/scripts/shared-constants.sh +246 -0
- package/.agent/scripts/site-crawler-helper.sh +1487 -0
- package/.agent/scripts/snyk-helper.sh +940 -0
- package/.agent/scripts/sonarcloud-autofix.sh +193 -0
- package/.agent/scripts/sonarcloud-cli.sh +191 -0
- package/.agent/scripts/sonarscanner-cli.sh +455 -0
- package/.agent/scripts/spaceship-helper.sh +747 -0
- package/.agent/scripts/stagehand-helper.sh +321 -0
- package/.agent/scripts/stagehand-python-helper.sh +321 -0
- package/.agent/scripts/stagehand-python-setup.sh +441 -0
- package/.agent/scripts/stagehand-setup.sh +439 -0
- package/.agent/scripts/system-cleanup.sh +340 -0
- package/.agent/scripts/terminal-title-helper.sh +388 -0
- package/.agent/scripts/terminal-title-setup.sh +549 -0
- package/.agent/scripts/test-stagehand-both-integration.sh +317 -0
- package/.agent/scripts/test-stagehand-integration.sh +309 -0
- package/.agent/scripts/test-stagehand-python-integration.sh +341 -0
- package/.agent/scripts/todo-ready.sh +263 -0
- package/.agent/scripts/tool-version-check.sh +362 -0
- package/.agent/scripts/toon-helper.sh +469 -0
- package/.agent/scripts/twilio-helper.sh +917 -0
- package/.agent/scripts/updown-helper.sh +279 -0
- package/.agent/scripts/validate-mcp-integrations.sh +250 -0
- package/.agent/scripts/validate-version-consistency.sh +131 -0
- package/.agent/scripts/vaultwarden-helper.sh +597 -0
- package/.agent/scripts/vercel-cli-helper.sh +816 -0
- package/.agent/scripts/verify-mirrors.sh +169 -0
- package/.agent/scripts/version-manager.sh +831 -0
- package/.agent/scripts/webhosting-helper.sh +471 -0
- package/.agent/scripts/webhosting-verify.sh +238 -0
- package/.agent/scripts/wordpress-mcp-helper.sh +508 -0
- package/.agent/scripts/worktree-helper.sh +595 -0
- package/.agent/scripts/worktree-sessions.sh +577 -0
- package/.agent/seo/dataforseo.md +215 -0
- package/.agent/seo/domain-research.md +532 -0
- package/.agent/seo/eeat-score.md +659 -0
- package/.agent/seo/google-search-console.md +366 -0
- package/.agent/seo/gsc-sitemaps.md +282 -0
- package/.agent/seo/keyword-research.md +521 -0
- package/.agent/seo/serper.md +278 -0
- package/.agent/seo/site-crawler.md +387 -0
- package/.agent/seo.md +236 -0
- package/.agent/services/accounting/quickfile.md +159 -0
- package/.agent/services/communications/telfon.md +470 -0
- package/.agent/services/communications/twilio.md +569 -0
- package/.agent/services/crm/fluentcrm.md +449 -0
- package/.agent/services/email/ses.md +399 -0
- package/.agent/services/hosting/101domains.md +378 -0
- package/.agent/services/hosting/closte.md +177 -0
- package/.agent/services/hosting/cloudflare.md +251 -0
- package/.agent/services/hosting/cloudron.md +478 -0
- package/.agent/services/hosting/dns-providers.md +335 -0
- package/.agent/services/hosting/domain-purchasing.md +344 -0
- package/.agent/services/hosting/hetzner.md +327 -0
- package/.agent/services/hosting/hostinger.md +287 -0
- package/.agent/services/hosting/localhost.md +419 -0
- package/.agent/services/hosting/spaceship.md +353 -0
- package/.agent/services/hosting/webhosting.md +330 -0
- package/.agent/social-media.md +69 -0
- package/.agent/templates/plans-template.md +114 -0
- package/.agent/templates/prd-template.md +129 -0
- package/.agent/templates/tasks-template.md +108 -0
- package/.agent/templates/todo-template.md +89 -0
- package/.agent/tools/ai-assistants/agno.md +471 -0
- package/.agent/tools/ai-assistants/capsolver.md +326 -0
- package/.agent/tools/ai-assistants/configuration.md +221 -0
- package/.agent/tools/ai-assistants/overview.md +209 -0
- package/.agent/tools/ai-assistants/status.md +171 -0
- package/.agent/tools/ai-assistants/windsurf.md +193 -0
- package/.agent/tools/ai-orchestration/autogen.md +406 -0
- package/.agent/tools/ai-orchestration/crewai.md +445 -0
- package/.agent/tools/ai-orchestration/langflow.md +405 -0
- package/.agent/tools/ai-orchestration/openprose.md +487 -0
- package/.agent/tools/ai-orchestration/overview.md +362 -0
- package/.agent/tools/ai-orchestration/packaging.md +647 -0
- package/.agent/tools/browser/agent-browser.md +464 -0
- package/.agent/tools/browser/browser-automation.md +400 -0
- package/.agent/tools/browser/chrome-devtools.md +282 -0
- package/.agent/tools/browser/crawl4ai-integration.md +422 -0
- package/.agent/tools/browser/crawl4ai-resources.md +277 -0
- package/.agent/tools/browser/crawl4ai-usage.md +416 -0
- package/.agent/tools/browser/crawl4ai.md +585 -0
- package/.agent/tools/browser/dev-browser.md +341 -0
- package/.agent/tools/browser/pagespeed.md +260 -0
- package/.agent/tools/browser/playwright.md +266 -0
- package/.agent/tools/browser/playwriter.md +310 -0
- package/.agent/tools/browser/stagehand-examples.md +456 -0
- package/.agent/tools/browser/stagehand-python.md +483 -0
- package/.agent/tools/browser/stagehand.md +421 -0
- package/.agent/tools/build-agent/agent-review.md +224 -0
- package/.agent/tools/build-agent/build-agent.md +784 -0
- package/.agent/tools/build-mcp/aidevops-plugin.md +476 -0
- package/.agent/tools/build-mcp/api-wrapper.md +445 -0
- package/.agent/tools/build-mcp/build-mcp.md +240 -0
- package/.agent/tools/build-mcp/deployment.md +401 -0
- package/.agent/tools/build-mcp/server-patterns.md +632 -0
- package/.agent/tools/build-mcp/transports.md +366 -0
- package/.agent/tools/code-review/auditing.md +383 -0
- package/.agent/tools/code-review/automation.md +219 -0
- package/.agent/tools/code-review/best-practices.md +203 -0
- package/.agent/tools/code-review/codacy.md +151 -0
- package/.agent/tools/code-review/code-simplifier.md +174 -0
- package/.agent/tools/code-review/code-standards.md +309 -0
- package/.agent/tools/code-review/coderabbit.md +101 -0
- package/.agent/tools/code-review/management.md +155 -0
- package/.agent/tools/code-review/qlty.md +248 -0
- package/.agent/tools/code-review/secretlint.md +565 -0
- package/.agent/tools/code-review/setup.md +250 -0
- package/.agent/tools/code-review/snyk.md +563 -0
- package/.agent/tools/code-review/tools.md +230 -0
- package/.agent/tools/content/summarize.md +353 -0
- package/.agent/tools/context/augment-context-engine.md +468 -0
- package/.agent/tools/context/context-builder-agent.md +76 -0
- package/.agent/tools/context/context-builder.md +375 -0
- package/.agent/tools/context/context7.md +371 -0
- package/.agent/tools/context/dspy.md +302 -0
- package/.agent/tools/context/dspyground.md +374 -0
- package/.agent/tools/context/llm-tldr.md +219 -0
- package/.agent/tools/context/osgrep.md +488 -0
- package/.agent/tools/context/prompt-optimization.md +338 -0
- package/.agent/tools/context/toon.md +292 -0
- package/.agent/tools/conversion/pandoc.md +304 -0
- package/.agent/tools/credentials/api-key-management.md +154 -0
- package/.agent/tools/credentials/api-key-setup.md +224 -0
- package/.agent/tools/credentials/environment-variables.md +180 -0
- package/.agent/tools/credentials/vaultwarden.md +382 -0
- package/.agent/tools/data-extraction/outscraper.md +974 -0
- package/.agent/tools/deployment/coolify-cli.md +388 -0
- package/.agent/tools/deployment/coolify-setup.md +353 -0
- package/.agent/tools/deployment/coolify.md +345 -0
- package/.agent/tools/deployment/vercel.md +390 -0
- package/.agent/tools/git/authentication.md +132 -0
- package/.agent/tools/git/gitea-cli.md +193 -0
- package/.agent/tools/git/github-actions.md +207 -0
- package/.agent/tools/git/github-cli.md +223 -0
- package/.agent/tools/git/gitlab-cli.md +190 -0
- package/.agent/tools/git/opencode-github-security.md +350 -0
- package/.agent/tools/git/opencode-github.md +328 -0
- package/.agent/tools/git/opencode-gitlab.md +252 -0
- package/.agent/tools/git/security.md +196 -0
- package/.agent/tools/git.md +207 -0
- package/.agent/tools/opencode/oh-my-opencode.md +375 -0
- package/.agent/tools/opencode/opencode-anthropic-auth.md +446 -0
- package/.agent/tools/opencode/opencode.md +651 -0
- package/.agent/tools/social-media/bird.md +437 -0
- package/.agent/tools/task-management/beads.md +336 -0
- package/.agent/tools/terminal/terminal-title.md +251 -0
- package/.agent/tools/ui/shadcn.md +196 -0
- package/.agent/tools/ui/ui-skills.md +115 -0
- package/.agent/tools/wordpress/localwp.md +311 -0
- package/.agent/tools/wordpress/mainwp.md +391 -0
- package/.agent/tools/wordpress/scf.md +527 -0
- package/.agent/tools/wordpress/wp-admin.md +729 -0
- package/.agent/tools/wordpress/wp-dev.md +940 -0
- package/.agent/tools/wordpress/wp-preferred.md +398 -0
- package/.agent/tools/wordpress.md +95 -0
- package/.agent/workflows/branch/bugfix.md +63 -0
- package/.agent/workflows/branch/chore.md +95 -0
- package/.agent/workflows/branch/experiment.md +115 -0
- package/.agent/workflows/branch/feature.md +59 -0
- package/.agent/workflows/branch/hotfix.md +98 -0
- package/.agent/workflows/branch/refactor.md +92 -0
- package/.agent/workflows/branch/release.md +96 -0
- package/.agent/workflows/branch.md +347 -0
- package/.agent/workflows/bug-fixing.md +267 -0
- package/.agent/workflows/changelog.md +129 -0
- package/.agent/workflows/code-audit-remote.md +279 -0
- package/.agent/workflows/conversation-starter.md +69 -0
- package/.agent/workflows/error-feedback.md +578 -0
- package/.agent/workflows/feature-development.md +355 -0
- package/.agent/workflows/git-workflow.md +702 -0
- package/.agent/workflows/multi-repo-workspace.md +268 -0
- package/.agent/workflows/plans.md +709 -0
- package/.agent/workflows/postflight.md +604 -0
- package/.agent/workflows/pr.md +571 -0
- package/.agent/workflows/preflight.md +278 -0
- package/.agent/workflows/ralph-loop.md +773 -0
- package/.agent/workflows/release.md +498 -0
- package/.agent/workflows/session-manager.md +254 -0
- package/.agent/workflows/session-review.md +311 -0
- package/.agent/workflows/sql-migrations.md +631 -0
- package/.agent/workflows/version-bump.md +283 -0
- package/.agent/workflows/wiki-update.md +333 -0
- package/.agent/workflows/worktree.md +477 -0
- package/LICENSE +21 -0
- package/README.md +1446 -0
- package/VERSION +1 -0
- package/aidevops.sh +1746 -0
- package/bin/aidevops +21 -0
- package/package.json +75 -0
- package/scripts/npm-postinstall.js +60 -0
- package/setup.sh +2366 -0
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
#!/bin/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
|
+
# =============================================================================
|
|
4
|
+
# Local Linters - Fast Offline Quality Checks
|
|
5
|
+
# =============================================================================
|
|
6
|
+
# Runs local linting tools without requiring external service APIs.
|
|
7
|
+
# Use this for pre-commit checks and fast feedback during development.
|
|
8
|
+
#
|
|
9
|
+
# Checks performed:
|
|
10
|
+
# - ShellCheck for shell scripts
|
|
11
|
+
# - Secretlint for exposed secrets
|
|
12
|
+
# - Pattern validation (return statements, positional parameters)
|
|
13
|
+
# - Markdown formatting
|
|
14
|
+
#
|
|
15
|
+
# For remote auditing (CodeRabbit, Codacy, SonarCloud), use:
|
|
16
|
+
# /code-audit-remote or code-audit-helper.sh
|
|
17
|
+
# =============================================================================
|
|
18
|
+
|
|
19
|
+
set -euo pipefail
|
|
20
|
+
|
|
21
|
+
# Color codes for output
|
|
22
|
+
readonly RED='\033[0;31m'
|
|
23
|
+
readonly GREEN='\033[0;32m'
|
|
24
|
+
readonly YELLOW='\033[1;33m'
|
|
25
|
+
readonly BLUE='\033[0;34m'
|
|
26
|
+
readonly NC='\033[0m' # No Color
|
|
27
|
+
|
|
28
|
+
# Quality thresholds
|
|
29
|
+
# Note: These thresholds are set to allow existing code patterns while catching regressions
|
|
30
|
+
# - Return issues: Simple utility functions (log_*, print_*) don't need explicit returns
|
|
31
|
+
# - Positional params: Using $1/$2 in case statements and argument parsing is valid
|
|
32
|
+
# - String literals: Code duplication is a style issue, not a bug
|
|
33
|
+
readonly MAX_TOTAL_ISSUES=100
|
|
34
|
+
readonly MAX_RETURN_ISSUES=10
|
|
35
|
+
readonly MAX_POSITIONAL_ISSUES=150
|
|
36
|
+
readonly MAX_STRING_LITERAL_ISSUES=2000
|
|
37
|
+
|
|
38
|
+
print_header() {
|
|
39
|
+
echo -e "${BLUE}Local Linters - Fast Offline Quality Checks${NC}"
|
|
40
|
+
echo -e "${BLUE}================================================================${NC}"
|
|
41
|
+
return 0
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
print_success() {
|
|
45
|
+
local message="$1"
|
|
46
|
+
echo -e "${GREEN}[PASS] $message${NC}"
|
|
47
|
+
return 0
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
print_warning() {
|
|
51
|
+
local message="$1"
|
|
52
|
+
echo -e "${YELLOW}[WARN] $message${NC}"
|
|
53
|
+
return 0
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
print_error() {
|
|
57
|
+
local message="$1"
|
|
58
|
+
echo -e "${RED}[FAIL] $message${NC}"
|
|
59
|
+
return 0
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
print_info() {
|
|
63
|
+
local message="$1"
|
|
64
|
+
echo -e "${BLUE}[INFO] $message${NC}"
|
|
65
|
+
return 0
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
check_sonarcloud_status() {
|
|
69
|
+
echo -e "${BLUE}Checking SonarCloud Status (remote API)...${NC}"
|
|
70
|
+
|
|
71
|
+
local response
|
|
72
|
+
if response=$(curl -s "https://sonarcloud.io/api/issues/search?componentKeys=marcusquinn_aidevops&impactSoftwareQualities=MAINTAINABILITY&resolved=false&ps=1"); then
|
|
73
|
+
local total_issues
|
|
74
|
+
total_issues=$(echo "$response" | jq -r '.total // 0')
|
|
75
|
+
|
|
76
|
+
echo "Total Issues: $total_issues"
|
|
77
|
+
|
|
78
|
+
if [[ $total_issues -le $MAX_TOTAL_ISSUES ]]; then
|
|
79
|
+
print_success "SonarCloud: $total_issues issues (within threshold of $MAX_TOTAL_ISSUES)"
|
|
80
|
+
else
|
|
81
|
+
print_warning "SonarCloud: $total_issues issues (exceeds threshold of $MAX_TOTAL_ISSUES)"
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
# Get detailed breakdown
|
|
85
|
+
local breakdown_response
|
|
86
|
+
if breakdown_response=$(curl -s "https://sonarcloud.io/api/issues/search?componentKeys=marcusquinn_aidevops&impactSoftwareQualities=MAINTAINABILITY&resolved=false&ps=10&facets=rules"); then
|
|
87
|
+
echo "Issue Breakdown:"
|
|
88
|
+
echo "$breakdown_response" | jq -r '.facets[0].values[] | " \(.val): \(.count) issues"'
|
|
89
|
+
fi
|
|
90
|
+
else
|
|
91
|
+
print_error "Failed to fetch SonarCloud status"
|
|
92
|
+
return 1
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
return 0
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
check_return_statements() {
|
|
99
|
+
echo -e "${BLUE}Checking Return Statements (S7682)...${NC}"
|
|
100
|
+
|
|
101
|
+
local violations=0
|
|
102
|
+
local files_checked=0
|
|
103
|
+
|
|
104
|
+
for file in .agent/scripts/*.sh; do
|
|
105
|
+
if [[ -f "$file" ]]; then
|
|
106
|
+
((files_checked++))
|
|
107
|
+
|
|
108
|
+
# Count multi-line functions (exclude one-liners like: func() { echo "x"; })
|
|
109
|
+
# One-liners don't need explicit return statements
|
|
110
|
+
local functions_count
|
|
111
|
+
functions_count=$(grep -c "^[a-zA-Z_][a-zA-Z0-9_]*() {$" "$file" 2>/dev/null || echo "0")
|
|
112
|
+
|
|
113
|
+
# Count all return patterns: return 0, return 1, return $var, return $((expr))
|
|
114
|
+
local return_statements
|
|
115
|
+
return_statements=$(grep -cE "return [0-9]+|return \\\$" "$file" 2>/dev/null || echo "0")
|
|
116
|
+
|
|
117
|
+
# Also count exit statements at script level (exit 0, exit $?)
|
|
118
|
+
local exit_statements
|
|
119
|
+
exit_statements=$(grep -cE "^exit [0-9]+|^exit \\\$" "$file" 2>/dev/null || echo "0")
|
|
120
|
+
|
|
121
|
+
# Ensure variables are numeric
|
|
122
|
+
functions_count=${functions_count//[^0-9]/}
|
|
123
|
+
return_statements=${return_statements//[^0-9]/}
|
|
124
|
+
exit_statements=${exit_statements//[^0-9]/}
|
|
125
|
+
functions_count=${functions_count:-0}
|
|
126
|
+
return_statements=${return_statements:-0}
|
|
127
|
+
exit_statements=${exit_statements:-0}
|
|
128
|
+
|
|
129
|
+
# Total returns = return statements + exit statements (for main)
|
|
130
|
+
local total_returns=$((return_statements + exit_statements))
|
|
131
|
+
|
|
132
|
+
if [[ $total_returns -lt $functions_count ]]; then
|
|
133
|
+
((violations++))
|
|
134
|
+
print_warning "Missing return statements in $file"
|
|
135
|
+
fi
|
|
136
|
+
fi
|
|
137
|
+
done
|
|
138
|
+
|
|
139
|
+
echo "Files checked: $files_checked"
|
|
140
|
+
echo "Files with violations: $violations"
|
|
141
|
+
|
|
142
|
+
if [[ $violations -le $MAX_RETURN_ISSUES ]]; then
|
|
143
|
+
print_success "Return statements: $violations violations (within threshold)"
|
|
144
|
+
else
|
|
145
|
+
print_error "Return statements: $violations violations (exceeds threshold of $MAX_RETURN_ISSUES)"
|
|
146
|
+
return 1
|
|
147
|
+
fi
|
|
148
|
+
|
|
149
|
+
return 0
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
check_positional_parameters() {
|
|
153
|
+
echo -e "${BLUE}Checking Positional Parameters (S7679)...${NC}"
|
|
154
|
+
|
|
155
|
+
local violations=0
|
|
156
|
+
|
|
157
|
+
# Find direct usage of positional parameters inside functions (not in local assignments)
|
|
158
|
+
# Exclude: heredocs (<<), awk scripts, main script body, and local assignments
|
|
159
|
+
local tmp_file
|
|
160
|
+
tmp_file=$(mktemp)
|
|
161
|
+
|
|
162
|
+
# Only check inside function bodies, exclude heredocs, awk/sed patterns, and comments
|
|
163
|
+
for file in .agent/scripts/*.sh; do
|
|
164
|
+
if [[ -f "$file" ]]; then
|
|
165
|
+
# Use awk to find $1-$9 usage inside functions, excluding:
|
|
166
|
+
# - local assignments (local var="$1")
|
|
167
|
+
# - heredocs (<<EOF ... EOF)
|
|
168
|
+
# - awk/sed scripts (contain $1, $2 for field references)
|
|
169
|
+
# - comments (lines starting with #)
|
|
170
|
+
# - echo/print statements showing usage examples
|
|
171
|
+
awk '
|
|
172
|
+
/^[a-zA-Z_][a-zA-Z0-9_]*\(\)[[:space:]]*\{/ { in_func=1; next }
|
|
173
|
+
in_func && /^\}$/ { in_func=0; next }
|
|
174
|
+
/<<.*EOF/ || /<<.*"EOF"/ || /<<-.*EOF/ { in_heredoc=1; next }
|
|
175
|
+
in_heredoc && /^EOF/ { in_heredoc=0; next }
|
|
176
|
+
in_heredoc { next }
|
|
177
|
+
# Track multi-line awk scripts (awk ... single-quote opens, closes on later line)
|
|
178
|
+
/awk[[:space:]]+\047[^\047]*$/ { in_awk=1; next }
|
|
179
|
+
in_awk && /\047/ { in_awk=0; next }
|
|
180
|
+
in_awk { next }
|
|
181
|
+
# Skip single-line awk/sed scripts (they use $1, $2 for fields)
|
|
182
|
+
/awk.*\047.*\047/ { next }
|
|
183
|
+
/awk.*".*"/ { next }
|
|
184
|
+
/sed.*\047/ || /sed.*"/ { next }
|
|
185
|
+
# Skip comments and usage examples
|
|
186
|
+
/^[[:space:]]*#/ { next }
|
|
187
|
+
/echo.*\$[1-9]/ { next }
|
|
188
|
+
/print.*\$[1-9]/ { next }
|
|
189
|
+
/Usage:/ { next }
|
|
190
|
+
in_func && /\$[1-9]/ && !/local.*=.*\$[1-9]/ {
|
|
191
|
+
print FILENAME ":" NR ": " $0
|
|
192
|
+
}
|
|
193
|
+
' "$file" >> "$tmp_file"
|
|
194
|
+
fi
|
|
195
|
+
done
|
|
196
|
+
|
|
197
|
+
if [[ -s "$tmp_file" ]]; then
|
|
198
|
+
violations=$(wc -l < "$tmp_file")
|
|
199
|
+
violations=${violations//[^0-9]/}
|
|
200
|
+
violations=${violations:-0}
|
|
201
|
+
|
|
202
|
+
if [[ $violations -gt 0 ]]; then
|
|
203
|
+
print_warning "Found $violations positional parameter violations:"
|
|
204
|
+
head -10 "$tmp_file"
|
|
205
|
+
if [[ $violations -gt 10 ]]; then
|
|
206
|
+
echo "... and $((violations - 10)) more"
|
|
207
|
+
fi
|
|
208
|
+
fi
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
rm -f "$tmp_file"
|
|
212
|
+
|
|
213
|
+
if [[ $violations -le $MAX_POSITIONAL_ISSUES ]]; then
|
|
214
|
+
print_success "Positional parameters: $violations violations (within threshold)"
|
|
215
|
+
else
|
|
216
|
+
print_error "Positional parameters: $violations violations (exceeds threshold of $MAX_POSITIONAL_ISSUES)"
|
|
217
|
+
return 1
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
return 0
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
check_string_literals() {
|
|
224
|
+
echo -e "${BLUE}Checking String Literals (S1192)...${NC}"
|
|
225
|
+
|
|
226
|
+
local violations=0
|
|
227
|
+
|
|
228
|
+
for file in .agent/scripts/*.sh; do
|
|
229
|
+
if [[ -f "$file" ]]; then
|
|
230
|
+
# Find strings that appear 3 or more times
|
|
231
|
+
local repeated_strings
|
|
232
|
+
repeated_strings=$(grep -o '"[^"]*"' "$file" | sort | uniq -c | awk '$1 >= 3 {print $1, $2}' | wc -l)
|
|
233
|
+
|
|
234
|
+
if [[ $repeated_strings -gt 0 ]]; then
|
|
235
|
+
((violations += repeated_strings))
|
|
236
|
+
print_warning "$file has $repeated_strings repeated string literals"
|
|
237
|
+
fi
|
|
238
|
+
fi
|
|
239
|
+
done
|
|
240
|
+
|
|
241
|
+
if [[ $violations -le $MAX_STRING_LITERAL_ISSUES ]]; then
|
|
242
|
+
print_success "String literals: $violations violations (within threshold)"
|
|
243
|
+
else
|
|
244
|
+
print_error "String literals: $violations violations (exceeds threshold of $MAX_STRING_LITERAL_ISSUES)"
|
|
245
|
+
return 1
|
|
246
|
+
fi
|
|
247
|
+
|
|
248
|
+
return 0
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
run_shellcheck() {
|
|
252
|
+
echo -e "${BLUE}Running ShellCheck Validation...${NC}"
|
|
253
|
+
|
|
254
|
+
local violations=0
|
|
255
|
+
|
|
256
|
+
for file in .agent/scripts/*.sh; do
|
|
257
|
+
if [[ -f "$file" ]]; then
|
|
258
|
+
# Only count errors and warnings, not info-level (SC1091, SC2329, etc.)
|
|
259
|
+
# Use severity filter to exclude info-level messages
|
|
260
|
+
local result
|
|
261
|
+
result=$(shellcheck --severity=warning "$file" 2>&1) || true
|
|
262
|
+
if [[ -n "$result" ]]; then
|
|
263
|
+
((violations++))
|
|
264
|
+
print_warning "ShellCheck violations in $file"
|
|
265
|
+
fi
|
|
266
|
+
fi
|
|
267
|
+
done
|
|
268
|
+
|
|
269
|
+
if [[ $violations -eq 0 ]]; then
|
|
270
|
+
print_success "ShellCheck: No violations found"
|
|
271
|
+
else
|
|
272
|
+
print_error "ShellCheck: $violations files with violations"
|
|
273
|
+
return 1
|
|
274
|
+
fi
|
|
275
|
+
|
|
276
|
+
return 0
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
# Check for secrets in codebase
|
|
280
|
+
check_secrets() {
|
|
281
|
+
echo -e "${BLUE}Checking for Exposed Secrets (Secretlint)...${NC}"
|
|
282
|
+
|
|
283
|
+
local secretlint_script=".agent/scripts/secretlint-helper.sh"
|
|
284
|
+
local violations=0
|
|
285
|
+
|
|
286
|
+
# Check if secretlint is available
|
|
287
|
+
if command -v secretlint &> /dev/null || [[ -f "node_modules/.bin/secretlint" ]]; then
|
|
288
|
+
# Run secretlint scan
|
|
289
|
+
local secretlint_cmd
|
|
290
|
+
if command -v secretlint &> /dev/null; then
|
|
291
|
+
secretlint_cmd="secretlint"
|
|
292
|
+
else
|
|
293
|
+
secretlint_cmd="./node_modules/.bin/secretlint"
|
|
294
|
+
fi
|
|
295
|
+
|
|
296
|
+
if [[ -f ".secretlintrc.json" ]]; then
|
|
297
|
+
# Run scan and capture exit code
|
|
298
|
+
if $secretlint_cmd "**/*" --format compact 2>/dev/null; then
|
|
299
|
+
print_success "Secretlint: No secrets detected"
|
|
300
|
+
else
|
|
301
|
+
violations=1
|
|
302
|
+
print_error "Secretlint: Potential secrets detected!"
|
|
303
|
+
print_info "Run: bash $secretlint_script scan (for detailed results)"
|
|
304
|
+
fi
|
|
305
|
+
else
|
|
306
|
+
print_warning "Secretlint: Configuration not found"
|
|
307
|
+
print_info "Run: bash $secretlint_script init"
|
|
308
|
+
fi
|
|
309
|
+
elif command -v docker &> /dev/null; then
|
|
310
|
+
print_info "Secretlint: Using Docker for scan (30s timeout)..."
|
|
311
|
+
# Use gtimeout (macOS) or timeout (Linux) to prevent Docker from hanging
|
|
312
|
+
local timeout_cmd=""
|
|
313
|
+
if command -v gtimeout &> /dev/null; then
|
|
314
|
+
timeout_cmd="gtimeout 30"
|
|
315
|
+
elif command -v timeout &> /dev/null; then
|
|
316
|
+
timeout_cmd="timeout 30"
|
|
317
|
+
fi
|
|
318
|
+
|
|
319
|
+
local docker_result
|
|
320
|
+
if [[ -n "$timeout_cmd" ]]; then
|
|
321
|
+
docker_result=$($timeout_cmd docker run -v "$(pwd)":"$(pwd)" -w "$(pwd)" --rm secretlint/secretlint secretlint "**/*" --format compact 2>&1) || true
|
|
322
|
+
else
|
|
323
|
+
# No timeout available, run without (may hang on large repos)
|
|
324
|
+
docker_result=$(docker run -v "$(pwd)":"$(pwd)" -w "$(pwd)" --rm secretlint/secretlint secretlint "**/*" --format compact 2>&1) || true
|
|
325
|
+
fi
|
|
326
|
+
|
|
327
|
+
if [[ -z "$docker_result" ]] || [[ "$docker_result" == *"0 problems"* ]]; then
|
|
328
|
+
print_success "Secretlint: No secrets detected"
|
|
329
|
+
elif [[ "$docker_result" == *"timed out"* ]] || [[ "$docker_result" == *"timeout"* ]]; then
|
|
330
|
+
print_warning "Secretlint: Timed out (skipped)"
|
|
331
|
+
print_info "Install native secretlint for faster scans: npm install -g secretlint"
|
|
332
|
+
else
|
|
333
|
+
violations=1
|
|
334
|
+
print_error "Secretlint: Potential secrets detected!"
|
|
335
|
+
fi
|
|
336
|
+
else
|
|
337
|
+
print_warning "Secretlint: Not installed (install with: npm install secretlint)"
|
|
338
|
+
print_info "Run: bash $secretlint_script install"
|
|
339
|
+
fi
|
|
340
|
+
|
|
341
|
+
return $violations
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
# Check AI-Powered Quality CLIs integration
|
|
345
|
+
check_remote_cli_status() {
|
|
346
|
+
print_info "Remote Audit CLIs Status (use /code-audit-remote for full analysis)..."
|
|
347
|
+
|
|
348
|
+
# Secretlint
|
|
349
|
+
local secretlint_script=".agent/scripts/secretlint-helper.sh"
|
|
350
|
+
if [[ -f "$secretlint_script" ]]; then
|
|
351
|
+
if command -v secretlint &> /dev/null || [[ -f "node_modules/.bin/secretlint" ]]; then
|
|
352
|
+
print_success "Secretlint: Ready"
|
|
353
|
+
else
|
|
354
|
+
print_info "Secretlint: Available for setup"
|
|
355
|
+
fi
|
|
356
|
+
fi
|
|
357
|
+
|
|
358
|
+
# CodeRabbit CLI
|
|
359
|
+
local coderabbit_script=".agent/scripts/coderabbit-cli.sh"
|
|
360
|
+
if [[ -f "$coderabbit_script" ]]; then
|
|
361
|
+
if bash "$coderabbit_script" status > /dev/null 2>&1; then
|
|
362
|
+
print_success "CodeRabbit CLI: Ready"
|
|
363
|
+
else
|
|
364
|
+
print_info "CodeRabbit CLI: Available for setup"
|
|
365
|
+
fi
|
|
366
|
+
fi
|
|
367
|
+
|
|
368
|
+
# Codacy CLI
|
|
369
|
+
local codacy_script=".agent/scripts/codacy-cli.sh"
|
|
370
|
+
if [[ -f "$codacy_script" ]]; then
|
|
371
|
+
if bash "$codacy_script" status > /dev/null 2>&1; then
|
|
372
|
+
print_success "Codacy CLI: Ready"
|
|
373
|
+
else
|
|
374
|
+
print_info "Codacy CLI: Available for setup"
|
|
375
|
+
fi
|
|
376
|
+
fi
|
|
377
|
+
|
|
378
|
+
# SonarScanner CLI
|
|
379
|
+
local sonar_script=".agent/scripts/sonarscanner-cli.sh"
|
|
380
|
+
if [[ -f "$sonar_script" ]]; then
|
|
381
|
+
if bash "$sonar_script" status > /dev/null 2>&1; then
|
|
382
|
+
print_success "SonarScanner CLI: Ready"
|
|
383
|
+
else
|
|
384
|
+
print_info "SonarScanner CLI: Available for setup"
|
|
385
|
+
fi
|
|
386
|
+
fi
|
|
387
|
+
|
|
388
|
+
return 0
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
main() {
|
|
392
|
+
print_header
|
|
393
|
+
|
|
394
|
+
local exit_code=0
|
|
395
|
+
|
|
396
|
+
# Run all local quality checks
|
|
397
|
+
check_sonarcloud_status || exit_code=1
|
|
398
|
+
echo ""
|
|
399
|
+
|
|
400
|
+
check_return_statements || exit_code=1
|
|
401
|
+
echo ""
|
|
402
|
+
|
|
403
|
+
check_positional_parameters || exit_code=1
|
|
404
|
+
echo ""
|
|
405
|
+
|
|
406
|
+
check_string_literals || exit_code=1
|
|
407
|
+
echo ""
|
|
408
|
+
|
|
409
|
+
run_shellcheck || exit_code=1
|
|
410
|
+
echo ""
|
|
411
|
+
|
|
412
|
+
check_secrets || exit_code=1
|
|
413
|
+
echo ""
|
|
414
|
+
|
|
415
|
+
check_remote_cli_status
|
|
416
|
+
|
|
417
|
+
echo ""
|
|
418
|
+
print_info "Markdown Formatting Tools Available:"
|
|
419
|
+
print_info "Run: bash .agent/scripts/markdown-lint-fix.sh manual . (for quick fixes)"
|
|
420
|
+
print_info "Run: bash .agent/scripts/markdown-formatter.sh format . (for comprehensive formatting)"
|
|
421
|
+
echo ""
|
|
422
|
+
|
|
423
|
+
# Final summary
|
|
424
|
+
if [[ $exit_code -eq 0 ]]; then
|
|
425
|
+
print_success "ALL LOCAL CHECKS PASSED!"
|
|
426
|
+
print_info "For remote auditing, run: /code-audit-remote"
|
|
427
|
+
else
|
|
428
|
+
print_error "QUALITY ISSUES DETECTED. Please address violations before committing."
|
|
429
|
+
fi
|
|
430
|
+
|
|
431
|
+
return $exit_code
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
main "$@"
|