aidevops 2.52.1 → 2.53.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/README.md +1 -1
- package/VERSION +1 -1
- package/aidevops.sh +15 -9
- package/package.json +4 -4
- package/scripts/npm-postinstall.js +6 -7
- package/setup.sh +1 -1
- package/templates/deploy-templates.sh +144 -0
- package/templates/home/.agent/README.md +33 -0
- package/templates/home/AGENTS.md +96 -0
- package/templates/home/git/.agent/README.md +48 -0
- package/templates/home/git/AGENTS.md +97 -0
- package/templates/standard-functions.sh +179 -0
- package/templates/wordpress-performance-workflow.md +217 -0
- package/.agent/AGENTS.md +0 -614
- package/.agent/accounts.md +0 -65
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +0 -456
- package/.agent/aidevops/api-integrations.md +0 -335
- package/.agent/aidevops/architecture.md +0 -510
- package/.agent/aidevops/configs.md +0 -274
- package/.agent/aidevops/docs.md +0 -244
- package/.agent/aidevops/extension.md +0 -311
- package/.agent/aidevops/mcp-integrations.md +0 -340
- package/.agent/aidevops/mcp-troubleshooting.md +0 -162
- package/.agent/aidevops/memory-patterns.md +0 -172
- package/.agent/aidevops/providers.md +0 -217
- package/.agent/aidevops/recommendations.md +0 -321
- package/.agent/aidevops/requirements.md +0 -301
- package/.agent/aidevops/resources.md +0 -214
- package/.agent/aidevops/security-requirements.md +0 -174
- package/.agent/aidevops/security.md +0 -350
- package/.agent/aidevops/service-links.md +0 -400
- package/.agent/aidevops/services.md +0 -357
- package/.agent/aidevops/setup.md +0 -153
- package/.agent/aidevops/troubleshooting.md +0 -389
- package/.agent/aidevops.md +0 -124
- package/.agent/build-plus.md +0 -244
- package/.agent/content/guidelines.md +0 -109
- package/.agent/content.md +0 -87
- package/.agent/health.md +0 -59
- package/.agent/legal.md +0 -59
- package/.agent/loop-state/full-loop.local.md +0 -16
- package/.agent/loop-state/ralph-loop.local.md +0 -10
- package/.agent/marketing.md +0 -440
- package/.agent/memory/README.md +0 -260
- package/.agent/onboarding.md +0 -796
- package/.agent/plan-plus.md +0 -245
- package/.agent/research.md +0 -100
- package/.agent/sales.md +0 -333
- package/.agent/scripts/101domains-helper.sh +0 -701
- package/.agent/scripts/add-missing-returns.sh +0 -140
- package/.agent/scripts/agent-browser-helper.sh +0 -311
- package/.agent/scripts/agno-setup.sh +0 -712
- package/.agent/scripts/ahrefs-mcp-wrapper.js +0 -168
- package/.agent/scripts/aidevops-update-check.sh +0 -71
- package/.agent/scripts/ampcode-cli.sh +0 -522
- package/.agent/scripts/auto-version-bump.sh +0 -156
- package/.agent/scripts/autogen-helper.sh +0 -512
- package/.agent/scripts/beads-sync-helper.sh +0 -596
- package/.agent/scripts/closte-helper.sh +0 -5
- package/.agent/scripts/cloudron-helper.sh +0 -321
- package/.agent/scripts/codacy-cli-chunked.sh +0 -581
- package/.agent/scripts/codacy-cli.sh +0 -442
- package/.agent/scripts/code-audit-helper.sh +0 -5
- package/.agent/scripts/coderabbit-cli.sh +0 -417
- package/.agent/scripts/coderabbit-pro-analysis.sh +0 -238
- package/.agent/scripts/commands/code-simplifier.md +0 -86
- package/.agent/scripts/commands/full-loop.md +0 -246
- package/.agent/scripts/commands/postflight-loop.md +0 -103
- package/.agent/scripts/commands/recall.md +0 -182
- package/.agent/scripts/commands/remember.md +0 -132
- package/.agent/scripts/commands/save-todo.md +0 -175
- package/.agent/scripts/commands/session-review.md +0 -154
- package/.agent/scripts/comprehensive-quality-fix.sh +0 -106
- package/.agent/scripts/context-builder-helper.sh +0 -522
- package/.agent/scripts/coolify-cli-helper.sh +0 -674
- package/.agent/scripts/coolify-helper.sh +0 -380
- package/.agent/scripts/crawl4ai-examples.sh +0 -401
- package/.agent/scripts/crawl4ai-helper.sh +0 -1078
- package/.agent/scripts/crewai-helper.sh +0 -681
- package/.agent/scripts/dev-browser-helper.sh +0 -513
- package/.agent/scripts/dns-helper.sh +0 -396
- package/.agent/scripts/domain-research-helper.sh +0 -917
- package/.agent/scripts/dspy-helper.sh +0 -285
- package/.agent/scripts/dspyground-helper.sh +0 -291
- package/.agent/scripts/eeat-score-helper.sh +0 -1242
- package/.agent/scripts/efficient-return-fix.sh +0 -92
- package/.agent/scripts/extract-opencode-prompts.sh +0 -128
- package/.agent/scripts/find-missing-returns.sh +0 -113
- package/.agent/scripts/fix-auth-headers.sh +0 -104
- package/.agent/scripts/fix-common-strings.sh +0 -254
- package/.agent/scripts/fix-content-type.sh +0 -100
- package/.agent/scripts/fix-error-messages.sh +0 -130
- package/.agent/scripts/fix-misplaced-returns.sh +0 -74
- package/.agent/scripts/fix-remaining-literals.sh +0 -152
- package/.agent/scripts/fix-return-statements.sh +0 -41
- package/.agent/scripts/fix-s131-default-cases.sh +0 -249
- package/.agent/scripts/fix-sc2155-simple.sh +0 -102
- package/.agent/scripts/fix-shellcheck-critical.sh +0 -187
- package/.agent/scripts/fix-string-literals.sh +0 -273
- package/.agent/scripts/full-loop-helper.sh +0 -773
- package/.agent/scripts/generate-opencode-agents.sh +0 -497
- package/.agent/scripts/generate-opencode-commands.sh +0 -1629
- package/.agent/scripts/generate-skills.sh +0 -366
- package/.agent/scripts/git-platforms-helper.sh +0 -640
- package/.agent/scripts/gitea-cli-helper.sh +0 -743
- package/.agent/scripts/github-cli-helper.sh +0 -702
- package/.agent/scripts/gitlab-cli-helper.sh +0 -682
- package/.agent/scripts/gsc-add-user-helper.sh +0 -325
- package/.agent/scripts/gsc-sitemap-helper.sh +0 -678
- package/.agent/scripts/hetzner-helper.sh +0 -485
- package/.agent/scripts/hostinger-helper.sh +0 -229
- package/.agent/scripts/keyword-research-helper.sh +0 -1815
- package/.agent/scripts/langflow-helper.sh +0 -544
- package/.agent/scripts/linkedin-automation.py +0 -241
- package/.agent/scripts/linter-manager.sh +0 -599
- package/.agent/scripts/linters-local.sh +0 -434
- package/.agent/scripts/list-keys-helper.sh +0 -488
- package/.agent/scripts/local-browser-automation.py +0 -339
- package/.agent/scripts/localhost-helper.sh +0 -744
- package/.agent/scripts/loop-common.sh +0 -806
- package/.agent/scripts/mainwp-helper.sh +0 -728
- package/.agent/scripts/markdown-formatter.sh +0 -338
- package/.agent/scripts/markdown-lint-fix.sh +0 -311
- package/.agent/scripts/mass-fix-returns.sh +0 -58
- package/.agent/scripts/mcp-diagnose.sh +0 -167
- package/.agent/scripts/mcp-inspector-helper.sh +0 -449
- package/.agent/scripts/memory-helper.sh +0 -650
- package/.agent/scripts/monitor-code-review.sh +0 -255
- package/.agent/scripts/onboarding-helper.sh +0 -706
- package/.agent/scripts/opencode-github-setup-helper.sh +0 -797
- package/.agent/scripts/opencode-test-helper.sh +0 -213
- package/.agent/scripts/pagespeed-helper.sh +0 -464
- package/.agent/scripts/pandoc-helper.sh +0 -362
- package/.agent/scripts/postflight-check.sh +0 -555
- package/.agent/scripts/pre-commit-hook.sh +0 -259
- package/.agent/scripts/pre-edit-check.sh +0 -169
- package/.agent/scripts/qlty-cli.sh +0 -356
- package/.agent/scripts/quality-cli-manager.sh +0 -525
- package/.agent/scripts/quality-feedback-helper.sh +0 -462
- package/.agent/scripts/quality-fix.sh +0 -263
- package/.agent/scripts/quality-loop-helper.sh +0 -1108
- package/.agent/scripts/ralph-loop-helper.sh +0 -836
- package/.agent/scripts/ralph-upstream-check.sh +0 -341
- package/.agent/scripts/secretlint-helper.sh +0 -847
- package/.agent/scripts/servers-helper.sh +0 -241
- package/.agent/scripts/ses-helper.sh +0 -619
- package/.agent/scripts/session-review-helper.sh +0 -404
- package/.agent/scripts/setup-linters-wizard.sh +0 -379
- package/.agent/scripts/setup-local-api-keys.sh +0 -330
- package/.agent/scripts/setup-mcp-integrations.sh +0 -472
- package/.agent/scripts/shared-constants.sh +0 -246
- package/.agent/scripts/site-crawler-helper.sh +0 -1487
- package/.agent/scripts/snyk-helper.sh +0 -940
- package/.agent/scripts/sonarcloud-autofix.sh +0 -193
- package/.agent/scripts/sonarcloud-cli.sh +0 -191
- package/.agent/scripts/sonarscanner-cli.sh +0 -455
- package/.agent/scripts/spaceship-helper.sh +0 -747
- package/.agent/scripts/stagehand-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-setup.sh +0 -441
- package/.agent/scripts/stagehand-setup.sh +0 -439
- package/.agent/scripts/system-cleanup.sh +0 -340
- package/.agent/scripts/terminal-title-helper.sh +0 -388
- package/.agent/scripts/terminal-title-setup.sh +0 -549
- package/.agent/scripts/test-stagehand-both-integration.sh +0 -317
- package/.agent/scripts/test-stagehand-integration.sh +0 -309
- package/.agent/scripts/test-stagehand-python-integration.sh +0 -341
- package/.agent/scripts/todo-ready.sh +0 -263
- package/.agent/scripts/tool-version-check.sh +0 -362
- package/.agent/scripts/toon-helper.sh +0 -469
- package/.agent/scripts/twilio-helper.sh +0 -917
- package/.agent/scripts/updown-helper.sh +0 -279
- package/.agent/scripts/validate-mcp-integrations.sh +0 -250
- package/.agent/scripts/validate-version-consistency.sh +0 -131
- package/.agent/scripts/vaultwarden-helper.sh +0 -597
- package/.agent/scripts/vercel-cli-helper.sh +0 -816
- package/.agent/scripts/verify-mirrors.sh +0 -169
- package/.agent/scripts/version-manager.sh +0 -831
- package/.agent/scripts/webhosting-helper.sh +0 -471
- package/.agent/scripts/webhosting-verify.sh +0 -238
- package/.agent/scripts/wordpress-mcp-helper.sh +0 -508
- package/.agent/scripts/worktree-helper.sh +0 -595
- package/.agent/scripts/worktree-sessions.sh +0 -577
- package/.agent/seo/dataforseo.md +0 -215
- package/.agent/seo/domain-research.md +0 -532
- package/.agent/seo/eeat-score.md +0 -659
- package/.agent/seo/google-search-console.md +0 -366
- package/.agent/seo/gsc-sitemaps.md +0 -282
- package/.agent/seo/keyword-research.md +0 -521
- package/.agent/seo/serper.md +0 -278
- package/.agent/seo/site-crawler.md +0 -387
- package/.agent/seo.md +0 -236
- package/.agent/services/accounting/quickfile.md +0 -159
- package/.agent/services/communications/telfon.md +0 -470
- package/.agent/services/communications/twilio.md +0 -569
- package/.agent/services/crm/fluentcrm.md +0 -449
- package/.agent/services/email/ses.md +0 -399
- package/.agent/services/hosting/101domains.md +0 -378
- package/.agent/services/hosting/closte.md +0 -177
- package/.agent/services/hosting/cloudflare.md +0 -251
- package/.agent/services/hosting/cloudron.md +0 -478
- package/.agent/services/hosting/dns-providers.md +0 -335
- package/.agent/services/hosting/domain-purchasing.md +0 -344
- package/.agent/services/hosting/hetzner.md +0 -327
- package/.agent/services/hosting/hostinger.md +0 -287
- package/.agent/services/hosting/localhost.md +0 -419
- package/.agent/services/hosting/spaceship.md +0 -353
- package/.agent/services/hosting/webhosting.md +0 -330
- package/.agent/social-media.md +0 -69
- package/.agent/templates/plans-template.md +0 -114
- package/.agent/templates/prd-template.md +0 -129
- package/.agent/templates/tasks-template.md +0 -108
- package/.agent/templates/todo-template.md +0 -89
- package/.agent/tools/ai-assistants/agno.md +0 -471
- package/.agent/tools/ai-assistants/capsolver.md +0 -326
- package/.agent/tools/ai-assistants/configuration.md +0 -221
- package/.agent/tools/ai-assistants/overview.md +0 -209
- package/.agent/tools/ai-assistants/status.md +0 -171
- package/.agent/tools/ai-assistants/windsurf.md +0 -193
- package/.agent/tools/ai-orchestration/autogen.md +0 -406
- package/.agent/tools/ai-orchestration/crewai.md +0 -445
- package/.agent/tools/ai-orchestration/langflow.md +0 -405
- package/.agent/tools/ai-orchestration/openprose.md +0 -487
- package/.agent/tools/ai-orchestration/overview.md +0 -362
- package/.agent/tools/ai-orchestration/packaging.md +0 -647
- package/.agent/tools/browser/agent-browser.md +0 -464
- package/.agent/tools/browser/browser-automation.md +0 -400
- package/.agent/tools/browser/chrome-devtools.md +0 -282
- package/.agent/tools/browser/crawl4ai-integration.md +0 -422
- package/.agent/tools/browser/crawl4ai-resources.md +0 -277
- package/.agent/tools/browser/crawl4ai-usage.md +0 -416
- package/.agent/tools/browser/crawl4ai.md +0 -585
- package/.agent/tools/browser/dev-browser.md +0 -341
- package/.agent/tools/browser/pagespeed.md +0 -260
- package/.agent/tools/browser/playwright.md +0 -266
- package/.agent/tools/browser/playwriter.md +0 -310
- package/.agent/tools/browser/stagehand-examples.md +0 -456
- package/.agent/tools/browser/stagehand-python.md +0 -483
- package/.agent/tools/browser/stagehand.md +0 -421
- package/.agent/tools/build-agent/agent-review.md +0 -224
- package/.agent/tools/build-agent/build-agent.md +0 -784
- package/.agent/tools/build-mcp/aidevops-plugin.md +0 -476
- package/.agent/tools/build-mcp/api-wrapper.md +0 -445
- package/.agent/tools/build-mcp/build-mcp.md +0 -240
- package/.agent/tools/build-mcp/deployment.md +0 -401
- package/.agent/tools/build-mcp/server-patterns.md +0 -632
- package/.agent/tools/build-mcp/transports.md +0 -366
- package/.agent/tools/code-review/auditing.md +0 -383
- package/.agent/tools/code-review/automation.md +0 -219
- package/.agent/tools/code-review/best-practices.md +0 -203
- package/.agent/tools/code-review/codacy.md +0 -151
- package/.agent/tools/code-review/code-simplifier.md +0 -174
- package/.agent/tools/code-review/code-standards.md +0 -309
- package/.agent/tools/code-review/coderabbit.md +0 -101
- package/.agent/tools/code-review/management.md +0 -155
- package/.agent/tools/code-review/qlty.md +0 -248
- package/.agent/tools/code-review/secretlint.md +0 -565
- package/.agent/tools/code-review/setup.md +0 -250
- package/.agent/tools/code-review/snyk.md +0 -563
- package/.agent/tools/code-review/tools.md +0 -230
- package/.agent/tools/content/summarize.md +0 -353
- package/.agent/tools/context/augment-context-engine.md +0 -468
- package/.agent/tools/context/context-builder-agent.md +0 -76
- package/.agent/tools/context/context-builder.md +0 -375
- package/.agent/tools/context/context7.md +0 -371
- package/.agent/tools/context/dspy.md +0 -302
- package/.agent/tools/context/dspyground.md +0 -374
- package/.agent/tools/context/llm-tldr.md +0 -219
- package/.agent/tools/context/osgrep.md +0 -488
- package/.agent/tools/context/prompt-optimization.md +0 -338
- package/.agent/tools/context/toon.md +0 -292
- package/.agent/tools/conversion/pandoc.md +0 -304
- package/.agent/tools/credentials/api-key-management.md +0 -154
- package/.agent/tools/credentials/api-key-setup.md +0 -224
- package/.agent/tools/credentials/environment-variables.md +0 -180
- package/.agent/tools/credentials/vaultwarden.md +0 -382
- package/.agent/tools/data-extraction/outscraper.md +0 -974
- package/.agent/tools/deployment/coolify-cli.md +0 -388
- package/.agent/tools/deployment/coolify-setup.md +0 -353
- package/.agent/tools/deployment/coolify.md +0 -345
- package/.agent/tools/deployment/vercel.md +0 -390
- package/.agent/tools/git/authentication.md +0 -132
- package/.agent/tools/git/gitea-cli.md +0 -193
- package/.agent/tools/git/github-actions.md +0 -207
- package/.agent/tools/git/github-cli.md +0 -223
- package/.agent/tools/git/gitlab-cli.md +0 -190
- package/.agent/tools/git/opencode-github-security.md +0 -350
- package/.agent/tools/git/opencode-github.md +0 -328
- package/.agent/tools/git/opencode-gitlab.md +0 -252
- package/.agent/tools/git/security.md +0 -196
- package/.agent/tools/git.md +0 -207
- package/.agent/tools/opencode/oh-my-opencode.md +0 -375
- package/.agent/tools/opencode/opencode-anthropic-auth.md +0 -446
- package/.agent/tools/opencode/opencode.md +0 -651
- package/.agent/tools/social-media/bird.md +0 -437
- package/.agent/tools/task-management/beads.md +0 -336
- package/.agent/tools/terminal/terminal-title.md +0 -251
- package/.agent/tools/ui/shadcn.md +0 -196
- package/.agent/tools/ui/ui-skills.md +0 -115
- package/.agent/tools/wordpress/localwp.md +0 -311
- package/.agent/tools/wordpress/mainwp.md +0 -391
- package/.agent/tools/wordpress/scf.md +0 -527
- package/.agent/tools/wordpress/wp-admin.md +0 -729
- package/.agent/tools/wordpress/wp-dev.md +0 -940
- package/.agent/tools/wordpress/wp-preferred.md +0 -398
- package/.agent/tools/wordpress.md +0 -95
- package/.agent/workflows/branch/bugfix.md +0 -63
- package/.agent/workflows/branch/chore.md +0 -95
- package/.agent/workflows/branch/experiment.md +0 -115
- package/.agent/workflows/branch/feature.md +0 -59
- package/.agent/workflows/branch/hotfix.md +0 -98
- package/.agent/workflows/branch/refactor.md +0 -92
- package/.agent/workflows/branch/release.md +0 -96
- package/.agent/workflows/branch.md +0 -347
- package/.agent/workflows/bug-fixing.md +0 -267
- package/.agent/workflows/changelog.md +0 -129
- package/.agent/workflows/code-audit-remote.md +0 -279
- package/.agent/workflows/conversation-starter.md +0 -69
- package/.agent/workflows/error-feedback.md +0 -578
- package/.agent/workflows/feature-development.md +0 -355
- package/.agent/workflows/git-workflow.md +0 -702
- package/.agent/workflows/multi-repo-workspace.md +0 -268
- package/.agent/workflows/plans.md +0 -709
- package/.agent/workflows/postflight.md +0 -604
- package/.agent/workflows/pr.md +0 -571
- package/.agent/workflows/preflight.md +0 -278
- package/.agent/workflows/ralph-loop.md +0 -773
- package/.agent/workflows/release.md +0 -498
- package/.agent/workflows/session-manager.md +0 -254
- package/.agent/workflows/session-review.md +0 -311
- package/.agent/workflows/sql-migrations.md +0 -631
- package/.agent/workflows/version-bump.md +0 -283
- package/.agent/workflows/wiki-update.md +0 -333
- package/.agent/workflows/worktree.md +0 -477
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# shellcheck disable=SC2155
|
|
3
|
-
# =============================================================================
|
|
4
|
-
# OpenCode CLI Testing Helper
|
|
5
|
-
# =============================================================================
|
|
6
|
-
# Quick testing of OpenCode configuration changes without TUI restart.
|
|
7
|
-
# Useful for testing new MCPs, agent permissions, and slash commands.
|
|
8
|
-
#
|
|
9
|
-
# Usage:
|
|
10
|
-
# opencode-test-helper.sh test-mcp <mcp-name> <agent>
|
|
11
|
-
# opencode-test-helper.sh test-agent <agent>
|
|
12
|
-
# opencode-test-helper.sh list-tools <agent>
|
|
13
|
-
# opencode-test-helper.sh serve [port]
|
|
14
|
-
# opencode-test-helper.sh attach <message> [agent] [port]
|
|
15
|
-
# opencode-test-helper.sh run <message> [--agent <agent>]
|
|
16
|
-
# =============================================================================
|
|
17
|
-
|
|
18
|
-
set -euo pipefail
|
|
19
|
-
|
|
20
|
-
# Colors
|
|
21
|
-
readonly GREEN='\033[0;32m'
|
|
22
|
-
readonly BLUE='\033[0;34m'
|
|
23
|
-
readonly YELLOW='\033[1;33m'
|
|
24
|
-
readonly RED='\033[0;31m'
|
|
25
|
-
readonly NC='\033[0m'
|
|
26
|
-
|
|
27
|
-
print_info() { echo -e "${BLUE}[INFO]${NC} $1"; return 0; }
|
|
28
|
-
print_success() { echo -e "${GREEN}[OK]${NC} $1"; return 0; }
|
|
29
|
-
print_warning() { echo -e "${YELLOW}[WARN]${NC} $1"; return 0; }
|
|
30
|
-
print_error() { echo -e "${RED}[ERROR]${NC} $1"; return 0; }
|
|
31
|
-
|
|
32
|
-
show_help() {
|
|
33
|
-
cat << 'EOF'
|
|
34
|
-
OpenCode CLI Testing Helper
|
|
35
|
-
|
|
36
|
-
Test OpenCode configuration changes without restarting the TUI.
|
|
37
|
-
|
|
38
|
-
Commands:
|
|
39
|
-
test-mcp <mcp-name> [agent] Test if MCP is accessible by agent
|
|
40
|
-
test-agent <agent> Test agent tool permissions
|
|
41
|
-
list-tools [agent] List tools available to agent
|
|
42
|
-
serve [port] Start persistent server (default: 4096)
|
|
43
|
-
attach <message> [agent] Run against persistent server
|
|
44
|
-
run <message> [--agent name] Run single command (passthrough to opencode)
|
|
45
|
-
|
|
46
|
-
Examples:
|
|
47
|
-
opencode-test-helper.sh test-mcp dataforseo SEO
|
|
48
|
-
opencode-test-helper.sh test-mcp serper SEO
|
|
49
|
-
opencode-test-helper.sh test-agent Plan+
|
|
50
|
-
opencode-test-helper.sh list-tools Build+
|
|
51
|
-
opencode-test-helper.sh serve 4096
|
|
52
|
-
opencode-test-helper.sh attach "quick test" SEO
|
|
53
|
-
|
|
54
|
-
Workflow for testing new MCPs:
|
|
55
|
-
1. Edit ~/.config/opencode/opencode.json
|
|
56
|
-
2. Run: opencode-test-helper.sh test-mcp <mcp-name> <agent>
|
|
57
|
-
3. If working, restart TUI
|
|
58
|
-
4. If failing, check output and iterate
|
|
59
|
-
EOF
|
|
60
|
-
return 0
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
# Check if opencode is installed
|
|
64
|
-
check_opencode() {
|
|
65
|
-
if ! command -v opencode &> /dev/null; then
|
|
66
|
-
print_error "OpenCode CLI not found. Install from https://opencode.ai"
|
|
67
|
-
exit 1
|
|
68
|
-
fi
|
|
69
|
-
return 0
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
# Test if MCP is accessible by agent
|
|
73
|
-
test_mcp() {
|
|
74
|
-
local mcp_name="$1"
|
|
75
|
-
local agent="${2:-Build+}"
|
|
76
|
-
|
|
77
|
-
print_info "Testing MCP '$mcp_name' with agent '$agent'..."
|
|
78
|
-
echo ""
|
|
79
|
-
|
|
80
|
-
local result
|
|
81
|
-
result=$(opencode run "List all tools you have access to that start with '${mcp_name}_'. Format as a simple list. If none found, say 'No ${mcp_name} tools available'." --agent "$agent" 2>&1) || true
|
|
82
|
-
|
|
83
|
-
echo "$result"
|
|
84
|
-
echo ""
|
|
85
|
-
|
|
86
|
-
if echo "$result" | grep -qi "no.*tools\|not available\|error\|failed"; then
|
|
87
|
-
print_warning "MCP '$mcp_name' may not be accessible to agent '$agent'"
|
|
88
|
-
print_info "Check ~/.config/opencode/opencode.json for:"
|
|
89
|
-
print_info " 1. MCP server is defined in 'mcp' section"
|
|
90
|
-
print_info " 2. Tool pattern '${mcp_name}_*' is enabled for agent"
|
|
91
|
-
return 1
|
|
92
|
-
else
|
|
93
|
-
print_success "MCP '$mcp_name' appears accessible to agent '$agent'"
|
|
94
|
-
return 0
|
|
95
|
-
fi
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
# Test agent permissions
|
|
99
|
-
test_agent() {
|
|
100
|
-
local agent="$1"
|
|
101
|
-
|
|
102
|
-
print_info "Testing agent '$agent' permissions..."
|
|
103
|
-
echo ""
|
|
104
|
-
|
|
105
|
-
print_info "Testing read access..."
|
|
106
|
-
opencode run "Read the first 3 lines of ~/.aidevops/agents/AGENTS.md and confirm you can read files." --agent "$agent" 2>&1 || true
|
|
107
|
-
echo ""
|
|
108
|
-
|
|
109
|
-
print_info "Testing write access (should fail for read-only agents like Plan+)..."
|
|
110
|
-
local write_result
|
|
111
|
-
write_result=$(opencode run "Try to create a file at /tmp/opencode-test-$$.txt with content 'test'. Report if you succeeded or were denied." --agent "$agent" 2>&1) || true
|
|
112
|
-
echo "$write_result"
|
|
113
|
-
|
|
114
|
-
# Cleanup
|
|
115
|
-
rm -f "/tmp/opencode-test-$$.txt" 2>/dev/null || true
|
|
116
|
-
|
|
117
|
-
echo ""
|
|
118
|
-
if echo "$write_result" | grep -qi "denied\|cannot\|not allowed\|permission"; then
|
|
119
|
-
print_info "Agent '$agent' is read-only (write denied)"
|
|
120
|
-
else
|
|
121
|
-
print_info "Agent '$agent' has write access"
|
|
122
|
-
fi
|
|
123
|
-
|
|
124
|
-
return 0
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
# List tools available to agent
|
|
128
|
-
list_tools() {
|
|
129
|
-
local agent="${1:-Build+}"
|
|
130
|
-
|
|
131
|
-
print_info "Listing tools for agent '$agent'..."
|
|
132
|
-
echo ""
|
|
133
|
-
|
|
134
|
-
opencode run "List ALL tools you have access to. Group them by: 1) Built-in tools (read, write, edit, bash, etc.) 2) MCP tools (grouped by MCP name). Be comprehensive and format as a clear list." --agent "$agent" 2>&1 || true
|
|
135
|
-
|
|
136
|
-
return 0
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
# Start persistent server
|
|
140
|
-
start_serve() {
|
|
141
|
-
local port="${1:-4096}"
|
|
142
|
-
|
|
143
|
-
print_info "Starting OpenCode server on port $port..."
|
|
144
|
-
print_info "Use 'opencode run --attach http://localhost:$port \"message\" --agent AgentName' to test"
|
|
145
|
-
print_info "Or use: $0 attach \"message\" AgentName"
|
|
146
|
-
print_warning "Press Ctrl+C to stop"
|
|
147
|
-
echo ""
|
|
148
|
-
|
|
149
|
-
opencode serve --port "$port"
|
|
150
|
-
return 0
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
# Run against persistent server
|
|
154
|
-
run_attach() {
|
|
155
|
-
local message="$1"
|
|
156
|
-
local agent="${2:-Build+}"
|
|
157
|
-
local port="${3:-4096}"
|
|
158
|
-
|
|
159
|
-
print_info "Running against server on port $port with agent '$agent'..."
|
|
160
|
-
opencode run --attach "http://localhost:$port" "$message" --agent "$agent"
|
|
161
|
-
return 0
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
# Passthrough to opencode run
|
|
165
|
-
run_passthrough() {
|
|
166
|
-
opencode run "$@"
|
|
167
|
-
return 0
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
# Main
|
|
171
|
-
main() {
|
|
172
|
-
check_opencode
|
|
173
|
-
|
|
174
|
-
local command="${1:-help}"
|
|
175
|
-
|
|
176
|
-
case "$command" in
|
|
177
|
-
test-mcp)
|
|
178
|
-
[[ $# -lt 2 ]] && { print_error "Usage: $0 test-mcp <mcp-name> [agent]"; exit 1; }
|
|
179
|
-
test_mcp "$2" "${3:-Build+}"
|
|
180
|
-
;;
|
|
181
|
-
test-agent)
|
|
182
|
-
[[ $# -lt 2 ]] && { print_error "Usage: $0 test-agent <agent>"; exit 1; }
|
|
183
|
-
test_agent "$2"
|
|
184
|
-
;;
|
|
185
|
-
list-tools)
|
|
186
|
-
list_tools "${2:-Build+}"
|
|
187
|
-
;;
|
|
188
|
-
serve)
|
|
189
|
-
start_serve "${2:-4096}"
|
|
190
|
-
;;
|
|
191
|
-
attach)
|
|
192
|
-
[[ $# -lt 2 ]] && { print_error "Usage: $0 attach <message> [agent] [port]"; exit 1; }
|
|
193
|
-
run_attach "$2" "${3:-Build+}" "${4:-4096}"
|
|
194
|
-
;;
|
|
195
|
-
run)
|
|
196
|
-
shift
|
|
197
|
-
run_passthrough "$@"
|
|
198
|
-
;;
|
|
199
|
-
help|--help|-h)
|
|
200
|
-
show_help
|
|
201
|
-
;;
|
|
202
|
-
*)
|
|
203
|
-
print_error "Unknown command: $command"
|
|
204
|
-
echo ""
|
|
205
|
-
show_help
|
|
206
|
-
exit 1
|
|
207
|
-
;;
|
|
208
|
-
esac
|
|
209
|
-
|
|
210
|
-
return 0
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
main "$@"
|
|
@@ -1,464 +0,0 @@
|
|
|
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
|
-
# 🚀 PageSpeed Insights & Lighthouse Helper Script
|
|
5
|
-
# Comprehensive website performance auditing and optimization guidance
|
|
6
|
-
|
|
7
|
-
set -euo pipefail
|
|
8
|
-
|
|
9
|
-
# Colors for output
|
|
10
|
-
readonly RED='\033[0;31m'
|
|
11
|
-
readonly GREEN='\033[0;32m'
|
|
12
|
-
readonly BLUE='\033[0;34m'
|
|
13
|
-
readonly YELLOW='\033[1;33m'
|
|
14
|
-
readonly PURPLE='\033[0;35m'
|
|
15
|
-
readonly CYAN='\033[0;36m'
|
|
16
|
-
readonly NC='\033[0m'
|
|
17
|
-
|
|
18
|
-
print_header() { local msg="$1"; echo -e "${PURPLE}$msg${NC}"; return 0; }
|
|
19
|
-
print_info() { local msg="$1"; echo -e "${BLUE}$msg${NC}"; return 0; }
|
|
20
|
-
print_success() { local msg="$1"; echo -e "${GREEN}$msg${NC}"; return 0; }
|
|
21
|
-
print_warning() { local msg="$1"; echo -e "${YELLOW}$msg${NC}"; return 0; }
|
|
22
|
-
print_error() { local msg="$1"; echo -e "${RED}$msg${NC}"; return 0; }
|
|
23
|
-
print_metric() { local msg="$1"; echo -e "${CYAN}$msg${NC}"; return 0; }
|
|
24
|
-
|
|
25
|
-
# Configuration
|
|
26
|
-
readonly PAGESPEED_API_URL="https://www.googleapis.com/pagespeedonline/v5/runPagespeed"
|
|
27
|
-
readonly REPORTS_DIR="$HOME/.ai-devops/reports/pagespeed"
|
|
28
|
-
|
|
29
|
-
# Ensure reports directory exists
|
|
30
|
-
mkdir -p "$REPORTS_DIR"
|
|
31
|
-
|
|
32
|
-
# Check prerequisites
|
|
33
|
-
check_prerequisites() {
|
|
34
|
-
print_header "Checking Prerequisites"
|
|
35
|
-
|
|
36
|
-
# Check for curl
|
|
37
|
-
if ! command -v curl &> /dev/null; then
|
|
38
|
-
print_error "curl is required but not installed"
|
|
39
|
-
exit 1
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
# Check for jq (for JSON parsing)
|
|
43
|
-
if ! command -v jq &> /dev/null; then
|
|
44
|
-
print_warning "jq not found. Installing for better JSON parsing..."
|
|
45
|
-
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
46
|
-
if command -v brew &> /dev/null; then
|
|
47
|
-
brew install jq
|
|
48
|
-
else
|
|
49
|
-
print_error "Please install jq manually: https://stedolan.github.io/jq/"
|
|
50
|
-
exit 1
|
|
51
|
-
fi
|
|
52
|
-
else
|
|
53
|
-
print_error "Please install jq manually: https://stedolan.github.io/jq/"
|
|
54
|
-
exit 1
|
|
55
|
-
fi
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
# Check for Lighthouse CLI
|
|
59
|
-
if ! command -v lighthouse &> /dev/null; then
|
|
60
|
-
print_warning "Lighthouse CLI not found. Installing..."
|
|
61
|
-
if command -v npm &> /dev/null; then
|
|
62
|
-
npm install -g lighthouse
|
|
63
|
-
print_success "Lighthouse CLI installed"
|
|
64
|
-
else
|
|
65
|
-
print_error "npm is required to install Lighthouse CLI"
|
|
66
|
-
print_info "Install Node.js from: https://nodejs.org/"
|
|
67
|
-
exit 1
|
|
68
|
-
fi
|
|
69
|
-
fi
|
|
70
|
-
|
|
71
|
-
print_success "All prerequisites satisfied"
|
|
72
|
-
return 0
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
# Run PageSpeed Insights API test
|
|
76
|
-
run_pagespeed_api() {
|
|
77
|
-
local url="$command"
|
|
78
|
-
local strategy="${2:-desktop}" # desktop or mobile
|
|
79
|
-
local api_key="${GOOGLE_API_KEY:-}"
|
|
80
|
-
|
|
81
|
-
print_header "Running PageSpeed Insights API Test"
|
|
82
|
-
print_info "URL: $url"
|
|
83
|
-
print_info "Strategy: $strategy"
|
|
84
|
-
|
|
85
|
-
# Build API URL
|
|
86
|
-
local api_url="$PAGESPEED_API_URL?url=$url&strategy=$strategy"
|
|
87
|
-
|
|
88
|
-
if [[ -n "$api_key" ]]; then
|
|
89
|
-
api_url="$api_url&key=$api_key"
|
|
90
|
-
print_info "Using API key for higher rate limits"
|
|
91
|
-
else
|
|
92
|
-
print_warning "No API key provided. Using public rate limits."
|
|
93
|
-
print_info "Set GOOGLE_API_KEY environment variable for higher limits"
|
|
94
|
-
fi
|
|
95
|
-
|
|
96
|
-
# Make API request
|
|
97
|
-
local timestamp
|
|
98
|
-
timestamp=$(date +"%Y%m%d_%H%M%S")
|
|
99
|
-
local report_file="$REPORTS_DIR/pagespeed_${timestamp}_${strategy}.json"
|
|
100
|
-
|
|
101
|
-
print_info "Fetching PageSpeed data..."
|
|
102
|
-
|
|
103
|
-
if curl -s "$api_url" > "$report_file"; then
|
|
104
|
-
print_success "PageSpeed report saved: $report_file"
|
|
105
|
-
|
|
106
|
-
# Parse and display key metrics
|
|
107
|
-
parse_pagespeed_report "$report_file"
|
|
108
|
-
else
|
|
109
|
-
print_error "Failed to fetch PageSpeed data"
|
|
110
|
-
return 1
|
|
111
|
-
fi
|
|
112
|
-
|
|
113
|
-
return 0
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
# Parse PageSpeed report and extract actionable insights
|
|
117
|
-
parse_pagespeed_report() {
|
|
118
|
-
local report_file="$command"
|
|
119
|
-
|
|
120
|
-
print_header "PageSpeed Insights Results"
|
|
121
|
-
|
|
122
|
-
# Check if report contains error
|
|
123
|
-
if jq -e '.error' "$report_file" &> /dev/null; then
|
|
124
|
-
local error_message
|
|
125
|
-
error_message=$(jq -r '.error.message' "$report_file")
|
|
126
|
-
print_error "API Error: $error_message"
|
|
127
|
-
return 1
|
|
128
|
-
fi
|
|
129
|
-
|
|
130
|
-
# Extract key metrics
|
|
131
|
-
local performance_score
|
|
132
|
-
local fcp
|
|
133
|
-
local lcp
|
|
134
|
-
local cls
|
|
135
|
-
local fid
|
|
136
|
-
local ttfb
|
|
137
|
-
|
|
138
|
-
performance_score=$(jq -r '.lighthouseResult.categories.performance.score // "N/A"' "$report_file")
|
|
139
|
-
fcp=$(jq -r '.lighthouseResult.audits["first-contentful-paint"].displayValue // "N/A"' "$report_file")
|
|
140
|
-
lcp=$(jq -r '.lighthouseResult.audits["largest-contentful-paint"].displayValue // "N/A"' "$report_file")
|
|
141
|
-
cls=$(jq -r '.lighthouseResult.audits["cumulative-layout-shift"].displayValue // "N/A"' "$report_file")
|
|
142
|
-
fid=$(jq -r '.lighthouseResult.audits["max-potential-fid"].displayValue // "N/A"' "$report_file")
|
|
143
|
-
ttfb=$(jq -r '.lighthouseResult.audits["server-response-time"].displayValue // "N/A"' "$report_file")
|
|
144
|
-
|
|
145
|
-
# Display metrics with color coding
|
|
146
|
-
echo
|
|
147
|
-
print_metric "Performance Score: $(format_score "$performance_score")"
|
|
148
|
-
print_metric "First Contentful Paint (FCP): $fcp"
|
|
149
|
-
print_metric "Largest Contentful Paint (LCP): $lcp"
|
|
150
|
-
print_metric "Cumulative Layout Shift (CLS): $cls"
|
|
151
|
-
print_metric "First Input Delay (FID): $fid"
|
|
152
|
-
print_metric "Time to First Byte (TTFB): $ttfb"
|
|
153
|
-
echo
|
|
154
|
-
|
|
155
|
-
# Extract opportunities for improvement
|
|
156
|
-
print_header "Optimization Opportunities"
|
|
157
|
-
|
|
158
|
-
local opportunities
|
|
159
|
-
opportunities=$(jq -r '.lighthouseResult.audits | to_entries[] | select(.value.details.overallSavingsMs > 0) | "\(.key): \(.value.title) - Potential savings: \(.value.details.overallSavingsMs)ms"' "$report_file" 2>/dev/null || echo "No specific opportunities found")
|
|
160
|
-
|
|
161
|
-
if [[ "$opportunities" != "No specific opportunities found" ]]; then
|
|
162
|
-
echo "$opportunities" | head -10
|
|
163
|
-
else
|
|
164
|
-
print_info "No major optimization opportunities identified"
|
|
165
|
-
fi
|
|
166
|
-
|
|
167
|
-
return 0
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
# Format score with color coding
|
|
171
|
-
format_score() {
|
|
172
|
-
local score="$command"
|
|
173
|
-
|
|
174
|
-
if [[ "$score" == "N/A" ]]; then
|
|
175
|
-
echo "N/A"
|
|
176
|
-
return
|
|
177
|
-
fi
|
|
178
|
-
|
|
179
|
-
# Convert to percentage
|
|
180
|
-
local percentage
|
|
181
|
-
percentage=$(echo "$score * 100" | bc -l 2>/dev/null || echo "0")
|
|
182
|
-
local int_percentage
|
|
183
|
-
int_percentage=${percentage%.*}
|
|
184
|
-
|
|
185
|
-
if [[ $int_percentage -ge 90 ]]; then
|
|
186
|
-
echo -e "${GREEN}${int_percentage}%${NC}"
|
|
187
|
-
elif [[ $int_percentage -ge 50 ]]; then
|
|
188
|
-
echo -e "${YELLOW}${int_percentage}%${NC}"
|
|
189
|
-
else
|
|
190
|
-
echo -e "${RED}${int_percentage}%${NC}"
|
|
191
|
-
fi
|
|
192
|
-
return 0
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
# Run Lighthouse CLI audit
|
|
196
|
-
run_lighthouse_audit() {
|
|
197
|
-
local url="$command"
|
|
198
|
-
local output_format="${2:-html}" # html, json, csv
|
|
199
|
-
|
|
200
|
-
print_header "Running Lighthouse CLI Audit"
|
|
201
|
-
print_info "URL: $url"
|
|
202
|
-
print_info "Output format: $output_format"
|
|
203
|
-
|
|
204
|
-
local timestamp
|
|
205
|
-
timestamp=$(date +"%Y%m%d_%H%M%S")
|
|
206
|
-
local report_file="$REPORTS_DIR/lighthouse_${timestamp}.$output_format"
|
|
207
|
-
|
|
208
|
-
print_info "Running comprehensive Lighthouse audit..."
|
|
209
|
-
|
|
210
|
-
# Run Lighthouse with comprehensive options
|
|
211
|
-
if lighthouse "$url" \
|
|
212
|
-
--output="$output_format" \
|
|
213
|
-
--output-path="$report_file" \
|
|
214
|
-
--chrome-flags="--headless --no-sandbox" \
|
|
215
|
-
--quiet; then
|
|
216
|
-
|
|
217
|
-
print_success "Lighthouse report saved: $report_file"
|
|
218
|
-
|
|
219
|
-
# If JSON format, parse key metrics
|
|
220
|
-
if [[ "$output_format" == "json" ]]; then
|
|
221
|
-
parse_lighthouse_json "$report_file"
|
|
222
|
-
else
|
|
223
|
-
print_info "Open the HTML report in your browser to view detailed results"
|
|
224
|
-
fi
|
|
225
|
-
else
|
|
226
|
-
print_error "Lighthouse audit failed"
|
|
227
|
-
return 1
|
|
228
|
-
fi
|
|
229
|
-
|
|
230
|
-
return 0
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
# Parse Lighthouse JSON report
|
|
234
|
-
parse_lighthouse_json() {
|
|
235
|
-
local report_file="$command"
|
|
236
|
-
|
|
237
|
-
print_header "Lighthouse Audit Results"
|
|
238
|
-
|
|
239
|
-
# Extract scores for all categories
|
|
240
|
-
local performance
|
|
241
|
-
local accessibility
|
|
242
|
-
local best_practices
|
|
243
|
-
local seo
|
|
244
|
-
local pwa
|
|
245
|
-
|
|
246
|
-
performance=$(jq -r '.categories.performance.score // "N/A"' "$report_file")
|
|
247
|
-
accessibility=$(jq -r '.categories.accessibility.score // "N/A"' "$report_file")
|
|
248
|
-
best_practices=$(jq -r '.categories["best-practices"].score // "N/A"' "$report_file")
|
|
249
|
-
seo=$(jq -r '.categories.seo.score // "N/A"' "$report_file")
|
|
250
|
-
pwa=$(jq -r '.categories.pwa.score // "N/A"' "$report_file")
|
|
251
|
-
|
|
252
|
-
echo
|
|
253
|
-
print_metric "Performance: $(format_score "$performance")"
|
|
254
|
-
print_metric "Accessibility: $(format_score "$accessibility")"
|
|
255
|
-
print_metric "Best Practices: $(format_score "$best_practices")"
|
|
256
|
-
print_metric "SEO: $(format_score "$seo")"
|
|
257
|
-
print_metric "PWA: $(format_score "$pwa")"
|
|
258
|
-
echo
|
|
259
|
-
|
|
260
|
-
return 0
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
# WordPress-specific performance analysis
|
|
264
|
-
analyze_wordpress_performance() {
|
|
265
|
-
local url="$command"
|
|
266
|
-
|
|
267
|
-
print_header "WordPress Performance Analysis"
|
|
268
|
-
print_info "Analyzing WordPress-specific performance issues for: $url"
|
|
269
|
-
|
|
270
|
-
# Run both PageSpeed and Lighthouse
|
|
271
|
-
run_pagespeed_api "$url" "desktop"
|
|
272
|
-
echo
|
|
273
|
-
run_pagespeed_api "$url" "mobile"
|
|
274
|
-
echo
|
|
275
|
-
run_lighthouse_audit "$url" "json"
|
|
276
|
-
|
|
277
|
-
# WordPress-specific recommendations
|
|
278
|
-
print_header "WordPress Optimization Recommendations"
|
|
279
|
-
echo
|
|
280
|
-
print_info "Common WordPress Performance Issues to Check:"
|
|
281
|
-
echo "• Plugin Performance: Disable unnecessary plugins"
|
|
282
|
-
echo "• Image Optimization: Use WebP format and proper sizing"
|
|
283
|
-
echo "• Caching: Implement page caching (WP Rocket, W3 Total Cache)"
|
|
284
|
-
echo "• CDN: Use a Content Delivery Network (Cloudflare, MaxCDN)"
|
|
285
|
-
echo "• Database Optimization: Clean up revisions and spam"
|
|
286
|
-
echo "• Theme Performance: Use lightweight, optimized themes"
|
|
287
|
-
echo "• Hosting: Ensure adequate server resources"
|
|
288
|
-
echo
|
|
289
|
-
|
|
290
|
-
return 0
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
# Bulk audit multiple URLs
|
|
294
|
-
bulk_audit() {
|
|
295
|
-
local urls_file="$command"
|
|
296
|
-
|
|
297
|
-
if [[ ! -f "$urls_file" ]]; then
|
|
298
|
-
print_error "URLs file not found: $urls_file"
|
|
299
|
-
return 1
|
|
300
|
-
fi
|
|
301
|
-
|
|
302
|
-
print_header "Bulk Website Audit"
|
|
303
|
-
print_info "Processing URLs from: $urls_file"
|
|
304
|
-
|
|
305
|
-
local count=0
|
|
306
|
-
while IFS= read -r url; do
|
|
307
|
-
# Skip empty lines and comments
|
|
308
|
-
[[ -z "$url" || "$url" =~ ^#.*$ ]] && continue
|
|
309
|
-
|
|
310
|
-
count=$((count + 1))
|
|
311
|
-
print_header "Auditing Site $count: $url"
|
|
312
|
-
|
|
313
|
-
# Run PageSpeed for both desktop and mobile
|
|
314
|
-
run_pagespeed_api "$url" "desktop"
|
|
315
|
-
run_pagespeed_api "$url" "mobile"
|
|
316
|
-
|
|
317
|
-
echo "----------------------------------------"
|
|
318
|
-
|
|
319
|
-
# Add delay to respect rate limits
|
|
320
|
-
sleep 2
|
|
321
|
-
|
|
322
|
-
done < "$urls_file"
|
|
323
|
-
|
|
324
|
-
print_success "Bulk audit completed for $count websites"
|
|
325
|
-
return 0
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
# Generate actionable report
|
|
329
|
-
generate_actionable_report() {
|
|
330
|
-
local report_file="$command"
|
|
331
|
-
|
|
332
|
-
if [[ ! -f "$report_file" ]]; then
|
|
333
|
-
print_error "Report file not found: $report_file"
|
|
334
|
-
return 1
|
|
335
|
-
fi
|
|
336
|
-
|
|
337
|
-
print_header "Actionable Performance Report"
|
|
338
|
-
|
|
339
|
-
# Extract and prioritize recommendations
|
|
340
|
-
local recommendations
|
|
341
|
-
recommendations=$(jq -r '
|
|
342
|
-
.lighthouseResult.audits |
|
|
343
|
-
to_entries[] |
|
|
344
|
-
select(.value.score != null and .value.score < 0.9) |
|
|
345
|
-
select(.value.details.overallSavingsMs > 100 or .value.numericValue > 2000) |
|
|
346
|
-
{
|
|
347
|
-
title: .value.title,
|
|
348
|
-
description: .value.description,
|
|
349
|
-
savings: (.value.details.overallSavingsMs // 0),
|
|
350
|
-
impact: (if .value.details.overallSavingsMs > 1000 then "HIGH"
|
|
351
|
-
elif .value.details.overallSavingsMs > 500 then "MEDIUM"
|
|
352
|
-
else "LOW" end)
|
|
353
|
-
}
|
|
354
|
-
' "$report_file" 2>/dev/null)
|
|
355
|
-
|
|
356
|
-
if [[ -n "$recommendations" ]]; then
|
|
357
|
-
echo "$recommendations" | jq -r '"🔧 \(.title) (\(.impact) IMPACT)\n 💡 \(.description)\n ⏱️ Potential savings: \(.savings)ms\n"'
|
|
358
|
-
else
|
|
359
|
-
print_info "No major performance issues found. Great job!"
|
|
360
|
-
fi
|
|
361
|
-
|
|
362
|
-
return 0
|
|
363
|
-
}
|
|
364
|
-
|
|
365
|
-
# Main function
|
|
366
|
-
main() {
|
|
367
|
-
# Assign positional parameters to local variables
|
|
368
|
-
local command="${1:-help}"
|
|
369
|
-
local account_name="$account_name"
|
|
370
|
-
local target="$target"
|
|
371
|
-
local options="$options"
|
|
372
|
-
# Assign positional parameters to local variables
|
|
373
|
-
local command="${1:-help}"
|
|
374
|
-
local account_name="$account_name"
|
|
375
|
-
local target="$target"
|
|
376
|
-
local options="$options"
|
|
377
|
-
# Assign positional parameters to local variables
|
|
378
|
-
local command="${1:-help}"
|
|
379
|
-
local account_name="$account_name"
|
|
380
|
-
local target="$target"
|
|
381
|
-
local options="$options"
|
|
382
|
-
# Assign positional parameters to local variables
|
|
383
|
-
case "${1:-help}" in
|
|
384
|
-
"check"|"audit")
|
|
385
|
-
if [[ -z "${2:-}" ]]; then
|
|
386
|
-
print_error "Please provide a URL to audit"
|
|
387
|
-
print_info "Usage: $0 audit <url>"
|
|
388
|
-
exit 1
|
|
389
|
-
fi
|
|
390
|
-
check_prerequisites
|
|
391
|
-
run_pagespeed_api "$account_name" "desktop"
|
|
392
|
-
echo
|
|
393
|
-
run_pagespeed_api "$account_name" "mobile"
|
|
394
|
-
;;
|
|
395
|
-
"lighthouse")
|
|
396
|
-
if [[ -z "${2:-}" ]]; then
|
|
397
|
-
print_error "Please provide a URL for Lighthouse audit"
|
|
398
|
-
print_info "Usage: $0 lighthouse <url> [format]"
|
|
399
|
-
exit 1
|
|
400
|
-
fi
|
|
401
|
-
check_prerequisites
|
|
402
|
-
run_lighthouse_audit "$account_name" "${3:-html}"
|
|
403
|
-
;;
|
|
404
|
-
"wordpress"|"wp")
|
|
405
|
-
if [[ -z "${2:-}" ]]; then
|
|
406
|
-
print_error "Please provide a WordPress URL to analyze"
|
|
407
|
-
print_info "Usage: $0 wordpress <url>"
|
|
408
|
-
exit 1
|
|
409
|
-
fi
|
|
410
|
-
check_prerequisites
|
|
411
|
-
analyze_wordpress_performance "$account_name"
|
|
412
|
-
;;
|
|
413
|
-
"bulk")
|
|
414
|
-
if [[ -z "${2:-}" ]]; then
|
|
415
|
-
print_error "Please provide a file containing URLs"
|
|
416
|
-
print_info "Usage: $0 bulk <urls-file>"
|
|
417
|
-
print_info "File format: one URL per line"
|
|
418
|
-
exit 1
|
|
419
|
-
fi
|
|
420
|
-
check_prerequisites
|
|
421
|
-
bulk_audit "$account_name"
|
|
422
|
-
;;
|
|
423
|
-
"report")
|
|
424
|
-
if [[ -z "${2:-}" ]]; then
|
|
425
|
-
print_error "Please provide a report file to analyze"
|
|
426
|
-
print_info "Usage: $0 report <report-file.json>"
|
|
427
|
-
exit 1
|
|
428
|
-
fi
|
|
429
|
-
generate_actionable_report "$account_name"
|
|
430
|
-
;;
|
|
431
|
-
"install-deps")
|
|
432
|
-
check_prerequisites
|
|
433
|
-
;;
|
|
434
|
-
"help"|*)
|
|
435
|
-
print_header "PageSpeed Insights & Lighthouse Helper"
|
|
436
|
-
echo "Usage: $0 [command] [options]"
|
|
437
|
-
echo ""
|
|
438
|
-
echo "Commands:"
|
|
439
|
-
echo " audit <url> - Run PageSpeed Insights for desktop & mobile"
|
|
440
|
-
echo " lighthouse <url> [fmt] - Run Lighthouse audit (html/json/csv)"
|
|
441
|
-
echo " wordpress <url> - WordPress-specific performance analysis"
|
|
442
|
-
echo " bulk <urls-file> - Audit multiple URLs from file"
|
|
443
|
-
echo " report <report.json> - Generate actionable report from JSON"
|
|
444
|
-
echo " install-deps - Install required dependencies"
|
|
445
|
-
echo " help - Show this help"
|
|
446
|
-
echo ""
|
|
447
|
-
echo "Environment Variables:"
|
|
448
|
-
echo " GOOGLE_API_KEY - Google API key for higher rate limits"
|
|
449
|
-
echo ""
|
|
450
|
-
echo "Examples:"
|
|
451
|
-
echo " $0 audit https://example.com"
|
|
452
|
-
echo " $0 lighthouse https://example.com json"
|
|
453
|
-
echo " $0 wordpress https://myblog.com"
|
|
454
|
-
echo " $0 bulk websites.txt"
|
|
455
|
-
echo ""
|
|
456
|
-
echo "Reports are saved to: $REPORTS_DIR"
|
|
457
|
-
;;
|
|
458
|
-
esac
|
|
459
|
-
return 0
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
main "$@"
|
|
463
|
-
|
|
464
|
-
return 0
|