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,366 @@
1
+ ---
2
+ description: Google Search Console MCP setup and usage
3
+ mode: subagent
4
+ tools:
5
+ read: true
6
+ write: true
7
+ edit: true
8
+ bash: true
9
+ glob: true
10
+ grep: true
11
+ webfetch: true
12
+ task: true
13
+ ---
14
+
15
+ # Google Search Console MCP Setup & Usage
16
+
17
+ <!-- AI-CONTEXT-START -->
18
+
19
+ ## Quick Reference
20
+
21
+ - **MCP Integration**: Google Search Console API for AI assistants
22
+ - **Credentials**: `~/.config/aidevops/gsc-credentials.json` (service account JSON key)
23
+ - **Setup**: Google Cloud Project → Enable Search Console API → Service Account → Add to GSC properties
24
+ - **Capabilities**: Search analytics, URL inspection, indexing requests, sitemap management
25
+ - **Key Methods**: `getSearchAnalytics()`, `getTopPages()`, `getTopQueries()`, `getCoreWebVitals()`
26
+ - **Metrics**: clicks, impressions, ctr, position
27
+ - **Dimensions**: query, page, country, device, searchAppearance
28
+ - **Bulk Setup**: Use Playwright to add service account to all GSC properties automatically
29
+
30
+ ## Setup Steps
31
+
32
+ ### 1. Google Cloud Project Setup
33
+
34
+ 1. Go to [Google Cloud Console](https://console.cloud.google.com)
35
+ 2. Create or select a project
36
+ 3. Enable the **Google Search Console API**
37
+ 4. Go to **Credentials** → **Create Credentials** → **Service Account**
38
+ 5. Name it (e.g., `aidevops`) and create
39
+ 6. Go to **Keys** tab → **Add Key** → **Create new key** → **JSON**
40
+ 7. Save the downloaded file to `~/.config/aidevops/gsc-credentials.json`
41
+ 8. Set permissions: `chmod 600 ~/.config/aidevops/gsc-credentials.json`
42
+
43
+ ### 2. Add Service Account to GSC Properties
44
+
45
+ The service account email (e.g., `aidevops@project-id.iam.gserviceaccount.com`) must be added as a user to each GSC property.
46
+
47
+ **Manual method**: GSC → Property → Settings → Users and permissions → Add user
48
+
49
+ **Automated method**: Use Playwright to bulk-add to all properties (see below)
50
+
51
+ ### 3. Verify Access
52
+
53
+ ```bash
54
+ # Test GSC MCP connection
55
+ opencode mcp list | grep -i search
56
+ ```
57
+ <!-- AI-CONTEXT-END -->
58
+
59
+ ## Automated Bulk Setup with Playwright
60
+
61
+ Add the service account to all GSC properties automatically:
62
+
63
+ ```javascript
64
+ // Save as gsc-add-service-account.js
65
+ import { chromium } from 'playwright';
66
+
67
+ const SERVICE_ACCOUNT = "your-service-account@project.iam.gserviceaccount.com";
68
+
69
+ async function main() {
70
+ // Launch Chrome with user profile (logged into Google)
71
+ const browser = await chromium.launchPersistentContext(
72
+ '/Users/USERNAME/Library/Application Support/Google/Chrome/Default',
73
+ { headless: false, channel: 'chrome' }
74
+ );
75
+
76
+ const page = await browser.newPage();
77
+ await page.goto("https://search.google.com/search-console", { waitUntil: 'networkidle' });
78
+ await page.waitForTimeout(2000);
79
+
80
+ // Get all domains from the page
81
+ const html = await page.content();
82
+ const domainRegex = /sc-domain:([a-z0-9.-]+)/g;
83
+ const matches = [...html.matchAll(domainRegex)];
84
+ const domains = [...new Set(matches.map(m => m[1]))];
85
+
86
+ console.log(`Found ${domains.length} properties`);
87
+
88
+ for (const domain of domains) {
89
+ console.log(`Processing ${domain}...`);
90
+
91
+ try {
92
+ await page.goto(`https://search.google.com/search-console/users?resource_id=sc-domain:${domain}`,
93
+ { waitUntil: 'networkidle' });
94
+ await page.waitForTimeout(400);
95
+
96
+ const content = await page.content();
97
+
98
+ // Skip if no access or already added
99
+ if (content.includes("don't have access")) {
100
+ console.log(` ⏭ No access`);
101
+ continue;
102
+ }
103
+ if (content.includes(SERVICE_ACCOUNT)) {
104
+ console.log(` ⏭ Already added`);
105
+ continue;
106
+ }
107
+
108
+ // Click ADD USER, type email, press Enter
109
+ await page.click('text=ADD USER');
110
+ await page.waitForTimeout(400);
111
+ await page.keyboard.type(SERVICE_ACCOUNT, { delay: 5 });
112
+ await page.keyboard.press('Enter');
113
+ await page.waitForTimeout(1000);
114
+
115
+ console.log(` ✓ Added`);
116
+ } catch (error) {
117
+ console.error(` ✗ ${error.message}`);
118
+ }
119
+ }
120
+
121
+ await browser.close();
122
+ }
123
+
124
+ main().catch(console.error);
125
+ ```
126
+
127
+ Run with: `node gsc-add-service-account.js`
128
+
129
+ **Requirements**:
130
+ - Playwright installed: `npm install playwright`
131
+ - Chrome browser with logged-in Google session
132
+ - User must have Owner access to GSC properties
133
+
134
+ ## Search Performance Analysis
135
+
136
+ ### **Query Performance Metrics**
137
+
138
+ ```javascript
139
+ // Get search performance data for specific queries
140
+ await googleSearchConsole.getSearchAnalytics({
141
+ siteUrl: "https://your-website.com",
142
+ startDate: "2024-01-01",
143
+ endDate: "2024-12-31",
144
+ dimensions: ["query", "page", "country", "device"],
145
+ metrics: ["clicks", "impressions", "ctr", "position"]
146
+ });
147
+ ```
148
+
149
+ ### **Top Performing Pages**
150
+
151
+ ```javascript
152
+ // Analyze top performing pages by clicks
153
+ await googleSearchConsole.getTopPages({
154
+ siteUrl: "https://your-website.com",
155
+ startDate: "2024-11-01",
156
+ endDate: "2024-11-30",
157
+ orderBy: "clicks",
158
+ limit: 50
159
+ });
160
+ ```
161
+
162
+ ## Keyword Research & Analysis
163
+
164
+ ### **Top Search Queries**
165
+
166
+ ```javascript
167
+ // Get top search queries driving traffic
168
+ await googleSearchConsole.getTopQueries({
169
+ siteUrl: "https://your-website.com",
170
+ startDate: "2024-10-01",
171
+ endDate: "2024-10-31",
172
+ orderBy: "impressions",
173
+ limit: 100
174
+ });
175
+ ```
176
+
177
+ ### **Query Position Tracking**
178
+
179
+ ```javascript
180
+ // Track specific keyword positions over time
181
+ await googleSearchConsole.trackKeywordPositions({
182
+ siteUrl: "https://your-website.com",
183
+ queries: ["ai assisted devops", "automation framework", "mcp integration"],
184
+ startDate: "2024-01-01",
185
+ endDate: "2024-12-31",
186
+ groupBy: "month"
187
+ });
188
+ ```
189
+
190
+ ## Device & Geographic Analysis
191
+
192
+ ### **Device Performance Breakdown**
193
+
194
+ ```javascript
195
+ // Analyze performance across different devices
196
+ await googleSearchConsole.getDevicePerformance({
197
+ siteUrl: "https://your-website.com",
198
+ startDate: "2024-11-01",
199
+ endDate: "2024-11-30",
200
+ devices: ["desktop", "mobile", "tablet"],
201
+ metrics: ["clicks", "impressions", "ctr", "position"]
202
+ });
203
+ ```
204
+
205
+ ### **Geographic Performance**
206
+
207
+ ```javascript
208
+ // Get performance data by country
209
+ await googleSearchConsole.getGeographicPerformance({
210
+ siteUrl: "https://your-website.com",
211
+ startDate: "2024-11-01",
212
+ endDate: "2024-11-30",
213
+ countries: ["USA", "GBR", "CAN", "AUS"],
214
+ orderBy: "clicks"
215
+ });
216
+ ```
217
+
218
+ ## Technical SEO Monitoring
219
+
220
+ ### **Index Coverage Analysis**
221
+
222
+ ```javascript
223
+ // Check index coverage status
224
+ await googleSearchConsole.getIndexCoverage({
225
+ siteUrl: "https://your-website.com",
226
+ category: "all", // or "error", "valid", "excluded", "warning"
227
+ platform: "web" // or "mobile"
228
+ });
229
+ ```
230
+
231
+ ### **Core Web Vitals Monitoring**
232
+
233
+ ```javascript
234
+ // Monitor Core Web Vitals performance
235
+ await googleSearchConsole.getCoreWebVitals({
236
+ siteUrl: "https://your-website.com",
237
+ category: "all", // or "good", "needs_improvement", "poor"
238
+ platform: "desktop" // or "mobile"
239
+ });
240
+ ```
241
+
242
+ ## Competitive Analysis
243
+
244
+ ### **Search Appearance Features**
245
+
246
+ ```javascript
247
+ // Analyze search appearance features (rich snippets, etc.)
248
+ await googleSearchConsole.getSearchAppearance({
249
+ siteUrl: "https://your-website.com",
250
+ startDate: "2024-11-01",
251
+ endDate: "2024-11-30",
252
+ searchAppearance: ["richSnippet", "ampBlueLink", "ampNonRichResult"]
253
+ });
254
+ ```
255
+
256
+ ### **Click-Through Rate Optimization**
257
+
258
+ ```javascript
259
+ // Identify pages with high impressions but low CTR
260
+ await googleSearchConsole.getCTROpportunities({
261
+ siteUrl: "https://your-website.com",
262
+ startDate: "2024-11-01",
263
+ endDate: "2024-11-30",
264
+ minImpressions: 100,
265
+ maxCTR: 0.05, // 5% CTR threshold
266
+ orderBy: "impressions"
267
+ });
268
+ ```
269
+
270
+ ## Issue Detection & Monitoring
271
+
272
+ ### **Manual Actions Check**
273
+
274
+ ```javascript
275
+ // Check for manual actions against the site
276
+ await googleSearchConsole.getManualActions({
277
+ siteUrl: "https://your-website.com"
278
+ });
279
+ ```
280
+
281
+ ### **Security Issues Monitoring**
282
+
283
+ ```javascript
284
+ // Monitor security issues
285
+ await googleSearchConsole.getSecurityIssues({
286
+ siteUrl: "https://your-website.com"
287
+ });
288
+ ```
289
+
290
+ ## Reporting & Analytics
291
+
292
+ ### **Monthly Performance Report**
293
+
294
+ ```javascript
295
+ // Generate comprehensive monthly report
296
+ await googleSearchConsole.generateMonthlyReport({
297
+ siteUrl: "https://your-website.com",
298
+ month: "2024-11",
299
+ includeMetrics: ["clicks", "impressions", "ctr", "position"],
300
+ includeDimensions: ["query", "page", "country", "device"],
301
+ exportFormat: "json" // or "csv"
302
+ });
303
+ ```
304
+
305
+ ### **Competitor Comparison**
306
+
307
+ ```javascript
308
+ // Compare performance with competitor keywords
309
+ await googleSearchConsole.compareWithCompetitors({
310
+ siteUrl: "https://your-website.com",
311
+ competitorQueries: ["devops automation", "infrastructure management"],
312
+ startDate: "2024-11-01",
313
+ endDate: "2024-11-30",
314
+ metrics: ["position", "clicks", "impressions"]
315
+ });
316
+ ```
317
+
318
+ ## Troubleshooting
319
+
320
+ ### Empty Results from API
321
+
322
+ If the API returns empty results `{}`:
323
+ - Service account not added to any GSC properties
324
+ - Use the Playwright script above to bulk-add access
325
+
326
+ ### "No access to property" Error
327
+
328
+ - The service account email must be added as a user (Full or Owner permission)
329
+ - Domain must be verified in GSC first
330
+
331
+ ### Connection Issues
332
+
333
+ ```bash
334
+ # Check credentials file exists and has correct permissions
335
+ ls -la ~/.config/aidevops/gsc-credentials.json
336
+
337
+ # Verify service account email
338
+ cat ~/.config/aidevops/gsc-credentials.json | grep client_email
339
+
340
+ # Test MCP connection
341
+ opencode mcp list
342
+ ```
343
+
344
+ ### Chrome Profile Path (for Playwright)
345
+
346
+ - **macOS**: `/Users/USERNAME/Library/Application Support/Google/Chrome/Default`
347
+ - **Linux**: `~/.config/google-chrome/Default`
348
+ - **Windows**: `%LOCALAPPDATA%\Google\Chrome\User Data\Default`
349
+
350
+ ## MCP Configuration
351
+
352
+ Add to your MCP config (`~/.config/opencode/mcp.json` or similar):
353
+
354
+ ```json
355
+ {
356
+ "mcpServers": {
357
+ "google-search-console": {
358
+ "command": "npx",
359
+ "args": ["-y", "@anthropic/google-search-console-mcp"],
360
+ "env": {
361
+ "GOOGLE_APPLICATION_CREDENTIALS": "~/.config/aidevops/gsc-credentials.json"
362
+ }
363
+ }
364
+ }
365
+ }
366
+ ```
@@ -0,0 +1,282 @@
1
+ ---
2
+ description: Google Search Console sitemap submission via Playwright browser automation
3
+ mode: subagent
4
+ tools:
5
+ read: true
6
+ write: true
7
+ edit: true
8
+ bash: true
9
+ glob: true
10
+ grep: true
11
+ webfetch: true
12
+ task: true
13
+ ---
14
+
15
+ # Google Search Console Sitemap Submission
16
+
17
+ <!-- AI-CONTEXT-START -->
18
+
19
+ ## Quick Reference
20
+
21
+ - **Purpose**: Automate sitemap submissions to Google Search Console
22
+ - **Method**: Playwright browser automation with persistent Chrome profile
23
+ - **Script**: `~/.aidevops/agents/scripts/gsc-sitemap-helper.sh`
24
+ - **Config**: `~/.config/aidevops/gsc-config.json`
25
+ - **Profile**: `~/.aidevops/.agent-workspace/chrome-gsc-profile/`
26
+ - **Screenshots**: `/tmp/gsc-screenshots/` (verification)
27
+
28
+ **Commands**:
29
+
30
+ ```bash
31
+ # Submit sitemap for single domain
32
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh submit example.com
33
+
34
+ # Submit sitemaps for multiple domains
35
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh submit example.com example.net example.org
36
+
37
+ # Submit from file (one domain per line)
38
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh submit --file domains.txt
39
+
40
+ # Check sitemap status
41
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh status example.com
42
+
43
+ # List all sitemaps for a domain
44
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh list example.com
45
+ ```
46
+
47
+ **Note**: Add `~/.aidevops/agents/scripts` to your PATH for shorter commands, or use the full path as shown above.
48
+
49
+ **Prerequisites**:
50
+ - Domain verified in Google Search Console
51
+ - Sitemap accessible at URL (test with `curl https://example.com/sitemap.xml`)
52
+ - User logged into Google in the Chrome profile
53
+ - Node.js and Playwright installed
54
+
55
+ <!-- AI-CONTEXT-END -->
56
+
57
+ ## When to Use
58
+
59
+ - After deploying a new site
60
+ - After adding `sitemap.xml` to a domain
61
+ - When setting up multiple domains (like a portfolio of sites)
62
+ - After major site restructuring that changes sitemap content
63
+
64
+ ## How It Works
65
+
66
+ 1. Opens Chrome with persistent profile (preserves Google login)
67
+ 2. Navigates to GSC sitemaps page for each domain
68
+ 3. Fills sitemap URL in "Add a new sitemap" input
69
+ 4. Clicks SUBMIT button (finds it relative to input, not sidebar feedback button)
70
+ 5. Verifies success via screenshot
71
+ 6. Handles domains that already have sitemaps submitted
72
+
73
+ ## Technical Details
74
+
75
+ ### Chrome Profile Setup
76
+
77
+ Uses `chromium.launchPersistentContext()` with a dedicated profile directory and stealth flags to avoid "browser isn't secure" warnings:
78
+
79
+ ```javascript
80
+ {
81
+ ignoreDefaultArgs: ['--enable-automation'],
82
+ args: [
83
+ '--disable-blink-features=AutomationControlled',
84
+ '--disable-infobars',
85
+ '--no-first-run',
86
+ '--no-default-browser-check'
87
+ ]
88
+ }
89
+ ```
90
+
91
+ ### GSC UI Specifics
92
+
93
+ - **SUBMIT button**: A `div[role="button"]` not a `<button>` element
94
+ - **Sidebar conflict**: There's also a "Submit feedback" link - must avoid clicking that
95
+ - **Button location**: Found relative to input field (walk up DOM to find container)
96
+ - **Input format**: Requires FULL URL: `https://www.domain.com/sitemap.xml` not just `sitemap.xml`
97
+ - **Button state**: Disabled until input has valid content
98
+
99
+ ### Finding the Correct Submit Button
100
+
101
+ ```javascript
102
+ const submitBtn = await input.evaluateHandle(el => {
103
+ let parent = el.parentElement;
104
+ for (let i = 0; i < 10; i++) {
105
+ if (!parent) break;
106
+ const btn = parent.querySelector('[role="button"]');
107
+ if (btn && btn.textContent.trim().toUpperCase() === 'SUBMIT') {
108
+ return btn;
109
+ }
110
+ parent = parent.parentElement;
111
+ }
112
+ return null;
113
+ });
114
+ ```
115
+
116
+ ### Detecting Already Submitted
117
+
118
+ Look for sitemap in table (not just page content, as "sitemap.xml" appears in input placeholder):
119
+
120
+ ```javascript
121
+ const sitemapInTable = await page.$('table:has-text("sitemap.xml")') ||
122
+ await page.$('tr:has-text("sitemap.xml")') ||
123
+ await page.$('[role="row"]:has-text("sitemap.xml")');
124
+ ```
125
+
126
+ ## Configuration
127
+
128
+ Store in `~/.config/aidevops/gsc-config.json`:
129
+
130
+ ```json
131
+ {
132
+ "chrome_profile_dir": "~/.aidevops/.agent-workspace/chrome-gsc-profile",
133
+ "default_sitemap_path": "sitemap.xml",
134
+ "screenshot_dir": "/tmp/gsc-screenshots",
135
+ "timeout_ms": 60000,
136
+ "headless": false
137
+ }
138
+ ```
139
+
140
+ ## First-Time Setup
141
+
142
+ 1. **Install dependencies**:
143
+
144
+ ```bash
145
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh setup
146
+ ```
147
+
148
+ 2. **Login to Google** (first run opens browser for manual login):
149
+
150
+ ```bash
151
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh login
152
+ ```
153
+
154
+ 3. **Verify access**:
155
+
156
+ ```bash
157
+ ~/.aidevops/agents/scripts/gsc-sitemap-helper.sh list example.com
158
+ ```
159
+
160
+ ## Usage Examples
161
+
162
+ ### Single Domain
163
+
164
+ ```bash
165
+ # Submit sitemap for one domain
166
+ gsc-sitemap-helper.sh submit example.com
167
+
168
+ # With custom sitemap path
169
+ gsc-sitemap-helper.sh submit example.com --sitemap news-sitemap.xml
170
+ ```
171
+
172
+ ### Multiple Domains
173
+
174
+ ```bash
175
+ # Submit to multiple domains
176
+ gsc-sitemap-helper.sh submit example.com example.net example.org
177
+
178
+ # From file
179
+ echo -e "example.com\nexample.net\nexample.org" > domains.txt
180
+ gsc-sitemap-helper.sh submit --file domains.txt
181
+ ```
182
+
183
+ ### Status Checking
184
+
185
+ ```bash
186
+ # Check if sitemap is submitted
187
+ gsc-sitemap-helper.sh status example.com
188
+
189
+ # List all sitemaps for a domain
190
+ gsc-sitemap-helper.sh list example.com
191
+ ```
192
+
193
+ ### Batch Operations
194
+
195
+ ```bash
196
+ # Dry run (show what would be done)
197
+ gsc-sitemap-helper.sh submit --dry-run example.com example.net
198
+
199
+ # Skip already-submitted domains
200
+ gsc-sitemap-helper.sh submit --skip-existing example.com example.net
201
+ ```
202
+
203
+ ## Troubleshooting
204
+
205
+ ### "Browser isn't secure" Warning
206
+
207
+ The script uses stealth flags to prevent this. If it still appears:
208
+
209
+ 1. Close all Chrome instances
210
+ 2. Delete the profile: `rm -rf ~/.aidevops/.agent-workspace/chrome-gsc-profile`
211
+ 3. Run `gsc-sitemap-helper.sh login` to create fresh profile
212
+
213
+ ### "No access" Error
214
+
215
+ - Domain not verified in GSC for this Google account
216
+ - Check GSC manually: https://search.google.com/search-console
217
+
218
+ ### Submit Button Not Clicking
219
+
220
+ - Check screenshot in `/tmp/gsc-screenshots/`
221
+ - May be clicking feedback button instead of submit
222
+ - Script uses DOM traversal to find correct button
223
+
224
+ ### Session Expired
225
+
226
+ ```bash
227
+ # Re-login to refresh session
228
+ gsc-sitemap-helper.sh login
229
+ ```
230
+
231
+ ### Sitemap Not Accessible
232
+
233
+ Before submitting, verify sitemap is accessible:
234
+
235
+ ```bash
236
+ curl -I https://www.example.com/sitemap.xml
237
+ # Should return 200 OK with Content-Type: application/xml
238
+ ```
239
+
240
+ ## Integration with Other Tools
241
+
242
+ ### With Site Crawler
243
+
244
+ After crawling a site, submit its sitemap:
245
+
246
+ ```bash
247
+ # Crawl site
248
+ site-crawler-helper.sh crawl https://example.com
249
+
250
+ # Submit sitemap
251
+ gsc-sitemap-helper.sh submit example.com
252
+ ```
253
+
254
+ ### With MainWP (WordPress Fleet)
255
+
256
+ Submit sitemaps for all managed WordPress sites:
257
+
258
+ ```bash
259
+ # Get domains from MainWP
260
+ mainwp-helper.sh list-sites | awk '{print $2}' > wp-domains.txt
261
+
262
+ # Submit sitemaps
263
+ gsc-sitemap-helper.sh submit --file wp-domains.txt
264
+ ```
265
+
266
+ ### With Coolify Deployments
267
+
268
+ After deploying a new site:
269
+
270
+ ```bash
271
+ # Deploy site
272
+ coolify-helper.sh deploy my-app
273
+
274
+ # Submit sitemap
275
+ gsc-sitemap-helper.sh submit my-app.example.com
276
+ ```
277
+
278
+ ## Related
279
+
280
+ - `seo/google-search-console.md` - GSC API integration (analytics, not sitemaps)
281
+ - `tools/browser/playwright.md` - Playwright automation patterns
282
+ - `seo/site-crawler.md` - Site auditing and crawling