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,441 @@
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
+ # Stagehand Python Setup Script for AI DevOps Framework
5
+ # Comprehensive setup and configuration for Stagehand Python AI browser automation
6
+
7
+ # Source shared constants
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || exit
9
+ source "${SCRIPT_DIR}/../../.agent/scripts/shared-constants.sh"
10
+
11
+ # Colors for output
12
+ readonly BLUE='\033[0;34m'
13
+ readonly GREEN='\033[0;32m'
14
+ readonly YELLOW='\033[1;33m'
15
+ readonly RED='\033[0;31m'
16
+ readonly NC='\033[0m'
17
+
18
+ # Print functions
19
+ print_info() {
20
+ local msg="$1"
21
+ echo -e "${BLUE}[INFO]${NC} $msg"
22
+ return 0
23
+ }
24
+
25
+ print_success() {
26
+ local msg="$1"
27
+ echo -e "${GREEN}[SUCCESS]${NC} $msg"
28
+ return 0
29
+ }
30
+
31
+ print_warning() {
32
+ local msg="$1"
33
+ echo -e "${YELLOW}[WARNING]${NC} $msg"
34
+ return 0
35
+ }
36
+
37
+ print_error() {
38
+ local msg="$1"
39
+ echo -e "${RED}[ERROR]${NC} $msg" >&2
40
+ return 0
41
+ }
42
+
43
+ # Stagehand Python configuration
44
+ readonly STAGEHAND_PYTHON_CONFIG_DIR="${HOME}/.aidevops/stagehand-python"
45
+ readonly STAGEHAND_PYTHON_EXAMPLES_DIR="${STAGEHAND_PYTHON_CONFIG_DIR}/examples"
46
+ readonly STAGEHAND_PYTHON_TEMPLATES_DIR="${STAGEHAND_PYTHON_CONFIG_DIR}/templates"
47
+
48
+ # Create advanced Python example scripts
49
+ create_python_examples() {
50
+ print_info "Creating advanced Stagehand Python example scripts..."
51
+
52
+ mkdir -p "$STAGEHAND_PYTHON_EXAMPLES_DIR"
53
+ mkdir -p "$STAGEHAND_PYTHON_TEMPLATES_DIR"
54
+
55
+ # Basic example with Pydantic
56
+ cat > "${STAGEHAND_PYTHON_EXAMPLES_DIR}/basic_example.py" << 'EOF'
57
+ #!/usr/bin/env python3
58
+ """
59
+ Basic Stagehand Python Example
60
+ Simple example demonstrating core Stagehand Python functionality
61
+ """
62
+
63
+ import asyncio
64
+ import os
65
+ from dotenv import load_dotenv
66
+ from pydantic import BaseModel, Field
67
+
68
+ from stagehand import StagehandConfig, Stagehand
69
+
70
+ # Load environment variables
71
+ load_dotenv()
72
+
73
+ # Define Pydantic models for structured data extraction
74
+ class PageInfo(BaseModel):
75
+ title: str = Field(..., description="Page title")
76
+ heading: str = Field(..., description="Main heading text")
77
+ description: str = Field(..., description="Page description or summary")
78
+
79
+ async def main():
80
+ """Main function demonstrating basic Stagehand usage"""
81
+ print("🤘 Testing Stagehand Python AI Browser Automation...")
82
+
83
+ # Create configuration
84
+ config = StagehandConfig(
85
+ env="LOCAL", # or "BROWSERBASE"
86
+ api_key=os.getenv("BROWSERBASE_API_KEY"),
87
+ project_id=os.getenv("BROWSERBASE_PROJECT_ID"),
88
+ model_name="google/gemini-2.5-flash-preview-05-20",
89
+ model_api_key=os.getenv("GOOGLE_API_KEY"),
90
+ headless=False,
91
+ verbose=1
92
+ )
93
+
94
+ stagehand = Stagehand(config)
95
+
96
+ try:
97
+ print("\nInitializing 🤘 Stagehand...")
98
+ await stagehand.init()
99
+
100
+ if stagehand.env == "BROWSERBASE":
101
+ print(f"🌐 View your live browser: https://www.browserbase.com/sessions/{stagehand.session_id}")
102
+
103
+ page = stagehand.page
104
+
105
+ # Navigate to a test page
106
+ await page.goto("https://example.com")
107
+ print("✅ Successfully navigated to example.com")
108
+
109
+ # Use natural language to interact
110
+ await page.act("scroll down to see more content")
111
+ print("✅ Performed scroll action")
112
+
113
+ # Extract structured data
114
+ page_info = await page.extract(
115
+ "extract the page title, main heading, and description",
116
+ schema=PageInfo
117
+ )
118
+
119
+ print(f"\n📊 Extracted Data:")
120
+ print(f"Title: {page_info.title}")
121
+ print(f"Heading: {page_info.heading}")
122
+ print(f"Description: {page_info.description}")
123
+
124
+ # Use observe to discover elements
125
+ elements = await page.observe("find all clickable links")
126
+ print(f"\n🔍 Observed Elements: {elements}")
127
+
128
+ print("\n🎉 Stagehand Python test completed successfully!")
129
+
130
+ except Exception as e:
131
+ print(f"❌ Error: {str(e)}")
132
+ raise
133
+ finally:
134
+ print("\nClosing 🤘 Stagehand...")
135
+ await stagehand.close()
136
+
137
+ if __name__ == "__main__":
138
+ asyncio.run(main())
139
+ EOF
140
+
141
+ # E-commerce automation example
142
+ cat > "${STAGEHAND_PYTHON_EXAMPLES_DIR}/ecommerce_automation.py" << 'EOF'
143
+ #!/usr/bin/env python3
144
+ """
145
+ E-commerce Automation with Stagehand Python
146
+ Product research and price comparison automation
147
+ """
148
+
149
+ import asyncio
150
+ import json
151
+ import os
152
+ from datetime import datetime
153
+ from typing import List
154
+ from dotenv import load_dotenv
155
+ from pydantic import BaseModel, Field
156
+
157
+ from stagehand import StagehandConfig, Stagehand
158
+
159
+ # Load environment variables
160
+ load_dotenv()
161
+
162
+ class Product(BaseModel):
163
+ name: str = Field(..., description="Product name")
164
+ price: float = Field(..., description="Price in USD")
165
+ rating: float = Field(..., description="Star rating out of 5")
166
+ review_count: int = Field(..., description="Number of reviews")
167
+ availability: str = Field(..., description="Stock status")
168
+ url: str = Field(None, description="Product URL")
169
+
170
+ class ProductResults(BaseModel):
171
+ products: List[Product] = Field(..., description="List of products")
172
+ search_query: str = Field(..., description="Search query used")
173
+ timestamp: str = Field(..., description="Search timestamp")
174
+
175
+ async def search_products(query: str, max_results: int = 5) -> ProductResults:
176
+ """Search for products and extract structured data"""
177
+
178
+ config = StagehandConfig(
179
+ env="LOCAL",
180
+ model_name="google/gemini-2.5-flash-preview-05-20",
181
+ model_api_key=os.getenv("GOOGLE_API_KEY"),
182
+ headless=True, # Run headless for automation
183
+ verbose=1
184
+ )
185
+
186
+ stagehand = Stagehand(config)
187
+
188
+ try:
189
+ await stagehand.init()
190
+ page = stagehand.page
191
+
192
+ # Navigate to Amazon (example)
193
+ await page.goto("https://amazon.com")
194
+
195
+ # Search for products
196
+ await page.act(f'search for "{query}"')
197
+
198
+ # Wait for results to load
199
+ await asyncio.sleep(3)
200
+
201
+ # Extract product information
202
+ products_data = await page.extract(
203
+ f"extract the first {max_results} products with their details",
204
+ schema=ProductResults
205
+ )
206
+
207
+ # Add metadata
208
+ products_data.search_query = query
209
+ products_data.timestamp = datetime.now().isoformat()
210
+
211
+ # Save results
212
+ results_dir = f"{os.path.expanduser('~')}/.aidevops/stagehand-python/results"
213
+ os.makedirs(results_dir, exist_ok=True)
214
+
215
+ filename = f"product-search-{query.replace(' ', '-')}-{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
216
+ filepath = os.path.join(results_dir, filename)
217
+
218
+ with open(filepath, 'w') as f:
219
+ json.dump(products_data.dict(), f, indent=2)
220
+
221
+ print(f"Found {len(products_data.products)} products:")
222
+ for i, product in enumerate(products_data.products, 1):
223
+ print(f"{i}. {product.name} - ${product.price} ({product.rating}⭐)")
224
+
225
+ print(f"Results saved to: {filepath}")
226
+ return products_data
227
+
228
+ except Exception as e:
229
+ print(f"Error during product search: {e}")
230
+ raise
231
+ finally:
232
+ await stagehand.close()
233
+
234
+ async def main():
235
+ """Main function for product search"""
236
+ import sys
237
+
238
+ query = sys.argv[1] if len(sys.argv) > 1 else "wireless headphones"
239
+ max_results = int(sys.argv[2]) if len(sys.argv) > 2 else 5
240
+
241
+ results = await search_products(query, max_results)
242
+ print(f"\nProduct search completed for: {results.search_query}")
243
+
244
+ if __name__ == "__main__":
245
+ asyncio.run(main())
246
+ EOF
247
+
248
+ # Web scraping template
249
+ cat > "${STAGEHAND_PYTHON_TEMPLATES_DIR}/web_scraping_template.py" << 'EOF'
250
+ #!/usr/bin/env python3
251
+ """
252
+ Web Scraping Template with Stagehand Python
253
+ Adaptable template for various websites with structured data extraction
254
+ """
255
+
256
+ import asyncio
257
+ import json
258
+ import os
259
+ from datetime import datetime
260
+ from typing import List, Optional
261
+ from dotenv import load_dotenv
262
+ from pydantic import BaseModel, Field
263
+
264
+ from stagehand import StagehandConfig, Stagehand
265
+
266
+ # Load environment variables
267
+ load_dotenv()
268
+
269
+ class ScrapedItem(BaseModel):
270
+ title: str = Field(..., description="Item title")
271
+ description: str = Field(..., description="Item description or content")
272
+ url: Optional[str] = Field(None, description="Item URL")
273
+ metadata: Optional[dict] = Field(None, description="Additional metadata")
274
+
275
+ class ScrapingResults(BaseModel):
276
+ items: List[ScrapedItem] = Field(..., description="List of scraped items")
277
+ source_url: str = Field(..., description="Source URL")
278
+ extraction_prompt: str = Field(..., description="Extraction prompt used")
279
+ timestamp: str = Field(..., description="Scraping timestamp")
280
+
281
+ async def scrape_website(url: str, extraction_prompt: str, max_items: int = 10) -> ScrapingResults:
282
+ """Generic website scraping function"""
283
+
284
+ config = StagehandConfig(
285
+ env="LOCAL",
286
+ model_name="google/gemini-2.5-flash-preview-05-20",
287
+ model_api_key=os.getenv("GOOGLE_API_KEY"),
288
+ headless=True,
289
+ verbose=1
290
+ )
291
+
292
+ stagehand = Stagehand(config)
293
+
294
+ try:
295
+ await stagehand.init()
296
+ page = stagehand.page
297
+
298
+ print(f"Navigating to: {url}")
299
+ await page.goto(url)
300
+
301
+ # Wait for page to load
302
+ await asyncio.sleep(3)
303
+
304
+ # Handle cookie banners or popups
305
+ try:
306
+ await page.act("close any cookie banners or popups")
307
+ except Exception:
308
+ print("No popups to close")
309
+
310
+ # Extract data based on the prompt
311
+ results = await page.extract(
312
+ extraction_prompt,
313
+ schema=ScrapingResults
314
+ )
315
+
316
+ # Add metadata
317
+ results.source_url = url
318
+ results.extraction_prompt = extraction_prompt
319
+ results.timestamp = datetime.now().isoformat()
320
+
321
+ print(f"Extracted {len(results.items)} items:")
322
+ for i, item in enumerate(results.items, 1):
323
+ print(f"{i}. {item.title}")
324
+ print(f" {item.description[:100]}...")
325
+
326
+ return results
327
+
328
+ except Exception as e:
329
+ print(f"Error during web scraping: {e}")
330
+ raise
331
+ finally:
332
+ await stagehand.close()
333
+
334
+ async def main():
335
+ """Main function for web scraping"""
336
+ import sys
337
+
338
+ url = sys.argv[1] if len(sys.argv) > 1 else "https://news.ycombinator.com"
339
+ prompt = sys.argv[2] if len(sys.argv) > 2 else "extract the top stories with titles and descriptions"
340
+ max_items = int(sys.argv[3]) if len(sys.argv) > 3 else 10
341
+
342
+ results = await scrape_website(url, prompt, max_items)
343
+
344
+ # Save results
345
+ results_dir = f"{os.path.expanduser('~')}/.aidevops/stagehand-python/results"
346
+ os.makedirs(results_dir, exist_ok=True)
347
+
348
+ filename = f"scraping-results-{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
349
+ filepath = os.path.join(results_dir, filename)
350
+
351
+ with open(filepath, 'w') as f:
352
+ json.dump(results.dict(), f, indent=2)
353
+
354
+ print(f"Results saved to: {filepath}")
355
+
356
+ if __name__ == "__main__":
357
+ asyncio.run(main())
358
+ EOF
359
+
360
+ print_success "Created advanced Stagehand Python examples"
361
+ return 0
362
+ }
363
+
364
+ # Create requirements.txt for the project
365
+ create_requirements_file() {
366
+ local requirements_file="${STAGEHAND_PYTHON_CONFIG_DIR}/requirements.txt"
367
+
368
+ cat > "$requirements_file" << 'EOF'
369
+ # Stagehand Python AI Browser Automation
370
+ stagehand>=0.5.0
371
+
372
+ # Core dependencies
373
+ pydantic>=2.0.0
374
+ python-dotenv>=1.0.0
375
+ playwright>=1.40.0
376
+
377
+ # Optional dependencies for enhanced functionality
378
+ aiofiles>=23.0.0
379
+ httpx>=0.25.0
380
+ rich>=13.0.0
381
+
382
+ # Development dependencies (optional)
383
+ pytest>=7.0.0
384
+ pytest-asyncio>=0.21.0
385
+ black>=23.0.0
386
+ isort>=5.12.0
387
+ mypy>=1.5.0
388
+ EOF
389
+
390
+ print_success "Created requirements.txt at: $requirements_file"
391
+ return 0
392
+ }
393
+
394
+ # Main setup function
395
+ main() {
396
+ local command="${1:-setup}"
397
+
398
+ case "$command" in
399
+ "setup")
400
+ print_info "Setting up Stagehand Python advanced configuration..."
401
+ create_python_examples
402
+ create_requirements_file
403
+ print_success "Stagehand Python advanced setup completed!"
404
+ print_info "Next steps:"
405
+ print_info "1. Run: bash .agent/scripts/stagehand-python-helper.sh install"
406
+ print_info "2. Configure API keys in ~/.aidevops/stagehand-python/.env"
407
+ print_info "3. Activate venv: source ~/.aidevops/stagehand-python/.venv/bin/activate"
408
+ print_info "4. Try examples: cd ~/.aidevops/stagehand-python && python examples/basic_example.py" || exit
409
+ ;;
410
+ "examples")
411
+ create_python_examples
412
+ ;;
413
+ "requirements")
414
+ create_requirements_file
415
+ ;;
416
+ "help")
417
+ cat << EOF
418
+ Stagehand Python Setup Script
419
+
420
+ USAGE:
421
+ $0 [COMMAND]
422
+
423
+ COMMANDS:
424
+ setup Complete advanced setup (default)
425
+ examples Create example scripts only
426
+ requirements Create requirements.txt only
427
+ help Show this help
428
+
429
+ EOF
430
+ ;;
431
+ *)
432
+ print_error "$ERROR_UNKNOWN_COMMAND $command"
433
+ return 1
434
+ ;;
435
+ esac
436
+
437
+ return 0
438
+ }
439
+
440
+ # Execute main function
441
+ main "$@"