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,441 +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
|
-
# 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 "$@"
|