aidevops 2.52.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/AGENTS.md +614 -0
- package/.agent/accounts.md +65 -0
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +456 -0
- package/.agent/aidevops/api-integrations.md +335 -0
- package/.agent/aidevops/architecture.md +510 -0
- package/.agent/aidevops/configs.md +274 -0
- package/.agent/aidevops/docs.md +244 -0
- package/.agent/aidevops/extension.md +311 -0
- package/.agent/aidevops/mcp-integrations.md +340 -0
- package/.agent/aidevops/mcp-troubleshooting.md +162 -0
- package/.agent/aidevops/memory-patterns.md +172 -0
- package/.agent/aidevops/providers.md +217 -0
- package/.agent/aidevops/recommendations.md +321 -0
- package/.agent/aidevops/requirements.md +301 -0
- package/.agent/aidevops/resources.md +214 -0
- package/.agent/aidevops/security-requirements.md +174 -0
- package/.agent/aidevops/security.md +350 -0
- package/.agent/aidevops/service-links.md +400 -0
- package/.agent/aidevops/services.md +357 -0
- package/.agent/aidevops/setup.md +153 -0
- package/.agent/aidevops/troubleshooting.md +389 -0
- package/.agent/aidevops.md +124 -0
- package/.agent/build-plus.md +244 -0
- package/.agent/content/guidelines.md +109 -0
- package/.agent/content.md +87 -0
- package/.agent/health.md +59 -0
- package/.agent/legal.md +59 -0
- package/.agent/loop-state/full-loop.local.md +16 -0
- package/.agent/loop-state/ralph-loop.local.md +10 -0
- package/.agent/marketing.md +440 -0
- package/.agent/memory/README.md +260 -0
- package/.agent/onboarding.md +796 -0
- package/.agent/plan-plus.md +245 -0
- package/.agent/research.md +100 -0
- package/.agent/sales.md +333 -0
- package/.agent/scripts/101domains-helper.sh +701 -0
- package/.agent/scripts/add-missing-returns.sh +140 -0
- package/.agent/scripts/agent-browser-helper.sh +311 -0
- package/.agent/scripts/agno-setup.sh +712 -0
- package/.agent/scripts/ahrefs-mcp-wrapper.js +168 -0
- package/.agent/scripts/aidevops-update-check.sh +71 -0
- package/.agent/scripts/ampcode-cli.sh +522 -0
- package/.agent/scripts/auto-version-bump.sh +156 -0
- package/.agent/scripts/autogen-helper.sh +512 -0
- package/.agent/scripts/beads-sync-helper.sh +596 -0
- package/.agent/scripts/closte-helper.sh +5 -0
- package/.agent/scripts/cloudron-helper.sh +321 -0
- package/.agent/scripts/codacy-cli-chunked.sh +581 -0
- package/.agent/scripts/codacy-cli.sh +442 -0
- package/.agent/scripts/code-audit-helper.sh +5 -0
- package/.agent/scripts/coderabbit-cli.sh +417 -0
- package/.agent/scripts/coderabbit-pro-analysis.sh +238 -0
- package/.agent/scripts/commands/code-simplifier.md +86 -0
- package/.agent/scripts/commands/full-loop.md +246 -0
- package/.agent/scripts/commands/postflight-loop.md +103 -0
- package/.agent/scripts/commands/recall.md +182 -0
- package/.agent/scripts/commands/remember.md +132 -0
- package/.agent/scripts/commands/save-todo.md +175 -0
- package/.agent/scripts/commands/session-review.md +154 -0
- package/.agent/scripts/comprehensive-quality-fix.sh +106 -0
- package/.agent/scripts/context-builder-helper.sh +522 -0
- package/.agent/scripts/coolify-cli-helper.sh +674 -0
- package/.agent/scripts/coolify-helper.sh +380 -0
- package/.agent/scripts/crawl4ai-examples.sh +401 -0
- package/.agent/scripts/crawl4ai-helper.sh +1078 -0
- package/.agent/scripts/crewai-helper.sh +681 -0
- package/.agent/scripts/dev-browser-helper.sh +513 -0
- package/.agent/scripts/dns-helper.sh +396 -0
- package/.agent/scripts/domain-research-helper.sh +917 -0
- package/.agent/scripts/dspy-helper.sh +285 -0
- package/.agent/scripts/dspyground-helper.sh +291 -0
- package/.agent/scripts/eeat-score-helper.sh +1242 -0
- package/.agent/scripts/efficient-return-fix.sh +92 -0
- package/.agent/scripts/extract-opencode-prompts.sh +128 -0
- package/.agent/scripts/find-missing-returns.sh +113 -0
- package/.agent/scripts/fix-auth-headers.sh +104 -0
- package/.agent/scripts/fix-common-strings.sh +254 -0
- package/.agent/scripts/fix-content-type.sh +100 -0
- package/.agent/scripts/fix-error-messages.sh +130 -0
- package/.agent/scripts/fix-misplaced-returns.sh +74 -0
- package/.agent/scripts/fix-remaining-literals.sh +152 -0
- package/.agent/scripts/fix-return-statements.sh +41 -0
- package/.agent/scripts/fix-s131-default-cases.sh +249 -0
- package/.agent/scripts/fix-sc2155-simple.sh +102 -0
- package/.agent/scripts/fix-shellcheck-critical.sh +187 -0
- package/.agent/scripts/fix-string-literals.sh +273 -0
- package/.agent/scripts/full-loop-helper.sh +773 -0
- package/.agent/scripts/generate-opencode-agents.sh +497 -0
- package/.agent/scripts/generate-opencode-commands.sh +1629 -0
- package/.agent/scripts/generate-skills.sh +366 -0
- package/.agent/scripts/git-platforms-helper.sh +640 -0
- package/.agent/scripts/gitea-cli-helper.sh +743 -0
- package/.agent/scripts/github-cli-helper.sh +702 -0
- package/.agent/scripts/gitlab-cli-helper.sh +682 -0
- package/.agent/scripts/gsc-add-user-helper.sh +325 -0
- package/.agent/scripts/gsc-sitemap-helper.sh +678 -0
- package/.agent/scripts/hetzner-helper.sh +485 -0
- package/.agent/scripts/hostinger-helper.sh +229 -0
- package/.agent/scripts/keyword-research-helper.sh +1815 -0
- package/.agent/scripts/langflow-helper.sh +544 -0
- package/.agent/scripts/linkedin-automation.py +241 -0
- package/.agent/scripts/linter-manager.sh +599 -0
- package/.agent/scripts/linters-local.sh +434 -0
- package/.agent/scripts/list-keys-helper.sh +488 -0
- package/.agent/scripts/local-browser-automation.py +339 -0
- package/.agent/scripts/localhost-helper.sh +744 -0
- package/.agent/scripts/loop-common.sh +806 -0
- package/.agent/scripts/mainwp-helper.sh +728 -0
- package/.agent/scripts/markdown-formatter.sh +338 -0
- package/.agent/scripts/markdown-lint-fix.sh +311 -0
- package/.agent/scripts/mass-fix-returns.sh +58 -0
- package/.agent/scripts/mcp-diagnose.sh +167 -0
- package/.agent/scripts/mcp-inspector-helper.sh +449 -0
- package/.agent/scripts/memory-helper.sh +650 -0
- package/.agent/scripts/monitor-code-review.sh +255 -0
- package/.agent/scripts/onboarding-helper.sh +706 -0
- package/.agent/scripts/opencode-github-setup-helper.sh +797 -0
- package/.agent/scripts/opencode-test-helper.sh +213 -0
- package/.agent/scripts/pagespeed-helper.sh +464 -0
- package/.agent/scripts/pandoc-helper.sh +362 -0
- package/.agent/scripts/postflight-check.sh +555 -0
- package/.agent/scripts/pre-commit-hook.sh +259 -0
- package/.agent/scripts/pre-edit-check.sh +169 -0
- package/.agent/scripts/qlty-cli.sh +356 -0
- package/.agent/scripts/quality-cli-manager.sh +525 -0
- package/.agent/scripts/quality-feedback-helper.sh +462 -0
- package/.agent/scripts/quality-fix.sh +263 -0
- package/.agent/scripts/quality-loop-helper.sh +1108 -0
- package/.agent/scripts/ralph-loop-helper.sh +836 -0
- package/.agent/scripts/ralph-upstream-check.sh +341 -0
- package/.agent/scripts/secretlint-helper.sh +847 -0
- package/.agent/scripts/servers-helper.sh +241 -0
- package/.agent/scripts/ses-helper.sh +619 -0
- package/.agent/scripts/session-review-helper.sh +404 -0
- package/.agent/scripts/setup-linters-wizard.sh +379 -0
- package/.agent/scripts/setup-local-api-keys.sh +330 -0
- package/.agent/scripts/setup-mcp-integrations.sh +472 -0
- package/.agent/scripts/shared-constants.sh +246 -0
- package/.agent/scripts/site-crawler-helper.sh +1487 -0
- package/.agent/scripts/snyk-helper.sh +940 -0
- package/.agent/scripts/sonarcloud-autofix.sh +193 -0
- package/.agent/scripts/sonarcloud-cli.sh +191 -0
- package/.agent/scripts/sonarscanner-cli.sh +455 -0
- package/.agent/scripts/spaceship-helper.sh +747 -0
- package/.agent/scripts/stagehand-helper.sh +321 -0
- package/.agent/scripts/stagehand-python-helper.sh +321 -0
- package/.agent/scripts/stagehand-python-setup.sh +441 -0
- package/.agent/scripts/stagehand-setup.sh +439 -0
- package/.agent/scripts/system-cleanup.sh +340 -0
- package/.agent/scripts/terminal-title-helper.sh +388 -0
- package/.agent/scripts/terminal-title-setup.sh +549 -0
- package/.agent/scripts/test-stagehand-both-integration.sh +317 -0
- package/.agent/scripts/test-stagehand-integration.sh +309 -0
- package/.agent/scripts/test-stagehand-python-integration.sh +341 -0
- package/.agent/scripts/todo-ready.sh +263 -0
- package/.agent/scripts/tool-version-check.sh +362 -0
- package/.agent/scripts/toon-helper.sh +469 -0
- package/.agent/scripts/twilio-helper.sh +917 -0
- package/.agent/scripts/updown-helper.sh +279 -0
- package/.agent/scripts/validate-mcp-integrations.sh +250 -0
- package/.agent/scripts/validate-version-consistency.sh +131 -0
- package/.agent/scripts/vaultwarden-helper.sh +597 -0
- package/.agent/scripts/vercel-cli-helper.sh +816 -0
- package/.agent/scripts/verify-mirrors.sh +169 -0
- package/.agent/scripts/version-manager.sh +831 -0
- package/.agent/scripts/webhosting-helper.sh +471 -0
- package/.agent/scripts/webhosting-verify.sh +238 -0
- package/.agent/scripts/wordpress-mcp-helper.sh +508 -0
- package/.agent/scripts/worktree-helper.sh +595 -0
- package/.agent/scripts/worktree-sessions.sh +577 -0
- package/.agent/seo/dataforseo.md +215 -0
- package/.agent/seo/domain-research.md +532 -0
- package/.agent/seo/eeat-score.md +659 -0
- package/.agent/seo/google-search-console.md +366 -0
- package/.agent/seo/gsc-sitemaps.md +282 -0
- package/.agent/seo/keyword-research.md +521 -0
- package/.agent/seo/serper.md +278 -0
- package/.agent/seo/site-crawler.md +387 -0
- package/.agent/seo.md +236 -0
- package/.agent/services/accounting/quickfile.md +159 -0
- package/.agent/services/communications/telfon.md +470 -0
- package/.agent/services/communications/twilio.md +569 -0
- package/.agent/services/crm/fluentcrm.md +449 -0
- package/.agent/services/email/ses.md +399 -0
- package/.agent/services/hosting/101domains.md +378 -0
- package/.agent/services/hosting/closte.md +177 -0
- package/.agent/services/hosting/cloudflare.md +251 -0
- package/.agent/services/hosting/cloudron.md +478 -0
- package/.agent/services/hosting/dns-providers.md +335 -0
- package/.agent/services/hosting/domain-purchasing.md +344 -0
- package/.agent/services/hosting/hetzner.md +327 -0
- package/.agent/services/hosting/hostinger.md +287 -0
- package/.agent/services/hosting/localhost.md +419 -0
- package/.agent/services/hosting/spaceship.md +353 -0
- package/.agent/services/hosting/webhosting.md +330 -0
- package/.agent/social-media.md +69 -0
- package/.agent/templates/plans-template.md +114 -0
- package/.agent/templates/prd-template.md +129 -0
- package/.agent/templates/tasks-template.md +108 -0
- package/.agent/templates/todo-template.md +89 -0
- package/.agent/tools/ai-assistants/agno.md +471 -0
- package/.agent/tools/ai-assistants/capsolver.md +326 -0
- package/.agent/tools/ai-assistants/configuration.md +221 -0
- package/.agent/tools/ai-assistants/overview.md +209 -0
- package/.agent/tools/ai-assistants/status.md +171 -0
- package/.agent/tools/ai-assistants/windsurf.md +193 -0
- package/.agent/tools/ai-orchestration/autogen.md +406 -0
- package/.agent/tools/ai-orchestration/crewai.md +445 -0
- package/.agent/tools/ai-orchestration/langflow.md +405 -0
- package/.agent/tools/ai-orchestration/openprose.md +487 -0
- package/.agent/tools/ai-orchestration/overview.md +362 -0
- package/.agent/tools/ai-orchestration/packaging.md +647 -0
- package/.agent/tools/browser/agent-browser.md +464 -0
- package/.agent/tools/browser/browser-automation.md +400 -0
- package/.agent/tools/browser/chrome-devtools.md +282 -0
- package/.agent/tools/browser/crawl4ai-integration.md +422 -0
- package/.agent/tools/browser/crawl4ai-resources.md +277 -0
- package/.agent/tools/browser/crawl4ai-usage.md +416 -0
- package/.agent/tools/browser/crawl4ai.md +585 -0
- package/.agent/tools/browser/dev-browser.md +341 -0
- package/.agent/tools/browser/pagespeed.md +260 -0
- package/.agent/tools/browser/playwright.md +266 -0
- package/.agent/tools/browser/playwriter.md +310 -0
- package/.agent/tools/browser/stagehand-examples.md +456 -0
- package/.agent/tools/browser/stagehand-python.md +483 -0
- package/.agent/tools/browser/stagehand.md +421 -0
- package/.agent/tools/build-agent/agent-review.md +224 -0
- package/.agent/tools/build-agent/build-agent.md +784 -0
- package/.agent/tools/build-mcp/aidevops-plugin.md +476 -0
- package/.agent/tools/build-mcp/api-wrapper.md +445 -0
- package/.agent/tools/build-mcp/build-mcp.md +240 -0
- package/.agent/tools/build-mcp/deployment.md +401 -0
- package/.agent/tools/build-mcp/server-patterns.md +632 -0
- package/.agent/tools/build-mcp/transports.md +366 -0
- package/.agent/tools/code-review/auditing.md +383 -0
- package/.agent/tools/code-review/automation.md +219 -0
- package/.agent/tools/code-review/best-practices.md +203 -0
- package/.agent/tools/code-review/codacy.md +151 -0
- package/.agent/tools/code-review/code-simplifier.md +174 -0
- package/.agent/tools/code-review/code-standards.md +309 -0
- package/.agent/tools/code-review/coderabbit.md +101 -0
- package/.agent/tools/code-review/management.md +155 -0
- package/.agent/tools/code-review/qlty.md +248 -0
- package/.agent/tools/code-review/secretlint.md +565 -0
- package/.agent/tools/code-review/setup.md +250 -0
- package/.agent/tools/code-review/snyk.md +563 -0
- package/.agent/tools/code-review/tools.md +230 -0
- package/.agent/tools/content/summarize.md +353 -0
- package/.agent/tools/context/augment-context-engine.md +468 -0
- package/.agent/tools/context/context-builder-agent.md +76 -0
- package/.agent/tools/context/context-builder.md +375 -0
- package/.agent/tools/context/context7.md +371 -0
- package/.agent/tools/context/dspy.md +302 -0
- package/.agent/tools/context/dspyground.md +374 -0
- package/.agent/tools/context/llm-tldr.md +219 -0
- package/.agent/tools/context/osgrep.md +488 -0
- package/.agent/tools/context/prompt-optimization.md +338 -0
- package/.agent/tools/context/toon.md +292 -0
- package/.agent/tools/conversion/pandoc.md +304 -0
- package/.agent/tools/credentials/api-key-management.md +154 -0
- package/.agent/tools/credentials/api-key-setup.md +224 -0
- package/.agent/tools/credentials/environment-variables.md +180 -0
- package/.agent/tools/credentials/vaultwarden.md +382 -0
- package/.agent/tools/data-extraction/outscraper.md +974 -0
- package/.agent/tools/deployment/coolify-cli.md +388 -0
- package/.agent/tools/deployment/coolify-setup.md +353 -0
- package/.agent/tools/deployment/coolify.md +345 -0
- package/.agent/tools/deployment/vercel.md +390 -0
- package/.agent/tools/git/authentication.md +132 -0
- package/.agent/tools/git/gitea-cli.md +193 -0
- package/.agent/tools/git/github-actions.md +207 -0
- package/.agent/tools/git/github-cli.md +223 -0
- package/.agent/tools/git/gitlab-cli.md +190 -0
- package/.agent/tools/git/opencode-github-security.md +350 -0
- package/.agent/tools/git/opencode-github.md +328 -0
- package/.agent/tools/git/opencode-gitlab.md +252 -0
- package/.agent/tools/git/security.md +196 -0
- package/.agent/tools/git.md +207 -0
- package/.agent/tools/opencode/oh-my-opencode.md +375 -0
- package/.agent/tools/opencode/opencode-anthropic-auth.md +446 -0
- package/.agent/tools/opencode/opencode.md +651 -0
- package/.agent/tools/social-media/bird.md +437 -0
- package/.agent/tools/task-management/beads.md +336 -0
- package/.agent/tools/terminal/terminal-title.md +251 -0
- package/.agent/tools/ui/shadcn.md +196 -0
- package/.agent/tools/ui/ui-skills.md +115 -0
- package/.agent/tools/wordpress/localwp.md +311 -0
- package/.agent/tools/wordpress/mainwp.md +391 -0
- package/.agent/tools/wordpress/scf.md +527 -0
- package/.agent/tools/wordpress/wp-admin.md +729 -0
- package/.agent/tools/wordpress/wp-dev.md +940 -0
- package/.agent/tools/wordpress/wp-preferred.md +398 -0
- package/.agent/tools/wordpress.md +95 -0
- package/.agent/workflows/branch/bugfix.md +63 -0
- package/.agent/workflows/branch/chore.md +95 -0
- package/.agent/workflows/branch/experiment.md +115 -0
- package/.agent/workflows/branch/feature.md +59 -0
- package/.agent/workflows/branch/hotfix.md +98 -0
- package/.agent/workflows/branch/refactor.md +92 -0
- package/.agent/workflows/branch/release.md +96 -0
- package/.agent/workflows/branch.md +347 -0
- package/.agent/workflows/bug-fixing.md +267 -0
- package/.agent/workflows/changelog.md +129 -0
- package/.agent/workflows/code-audit-remote.md +279 -0
- package/.agent/workflows/conversation-starter.md +69 -0
- package/.agent/workflows/error-feedback.md +578 -0
- package/.agent/workflows/feature-development.md +355 -0
- package/.agent/workflows/git-workflow.md +702 -0
- package/.agent/workflows/multi-repo-workspace.md +268 -0
- package/.agent/workflows/plans.md +709 -0
- package/.agent/workflows/postflight.md +604 -0
- package/.agent/workflows/pr.md +571 -0
- package/.agent/workflows/preflight.md +278 -0
- package/.agent/workflows/ralph-loop.md +773 -0
- package/.agent/workflows/release.md +498 -0
- package/.agent/workflows/session-manager.md +254 -0
- package/.agent/workflows/session-review.md +311 -0
- package/.agent/workflows/sql-migrations.md +631 -0
- package/.agent/workflows/version-bump.md +283 -0
- package/.agent/workflows/wiki-update.md +333 -0
- package/.agent/workflows/worktree.md +477 -0
- package/LICENSE +21 -0
- package/README.md +1446 -0
- package/VERSION +1 -0
- package/aidevops.sh +1746 -0
- package/bin/aidevops +21 -0
- package/package.json +75 -0
- package/scripts/npm-postinstall.js +60 -0
- package/setup.sh +2366 -0
|
@@ -0,0 +1,681 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# CrewAI Helper Script
|
|
4
|
+
# =============================================================================
|
|
5
|
+
# Multi-agent orchestration framework setup and management
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# bash .agent/scripts/crewai-helper.sh [action]
|
|
9
|
+
#
|
|
10
|
+
# Actions:
|
|
11
|
+
# setup Complete setup of CrewAI
|
|
12
|
+
# start Start CrewAI Studio
|
|
13
|
+
# stop Stop CrewAI Studio
|
|
14
|
+
# status Check CrewAI status
|
|
15
|
+
# check Check prerequisites
|
|
16
|
+
# create Create a new crew project
|
|
17
|
+
# run Run a crew
|
|
18
|
+
# help Show this help message
|
|
19
|
+
# =============================================================================
|
|
20
|
+
|
|
21
|
+
set -euo pipefail
|
|
22
|
+
|
|
23
|
+
# Colors
|
|
24
|
+
RED='\033[0;31m'
|
|
25
|
+
GREEN='\033[0;32m'
|
|
26
|
+
YELLOW='\033[1;33m'
|
|
27
|
+
BLUE='\033[0;34m'
|
|
28
|
+
NC='\033[0m'
|
|
29
|
+
|
|
30
|
+
# Configuration
|
|
31
|
+
CREWAI_DIR="$HOME/.aidevops/crewai"
|
|
32
|
+
CREWAI_STUDIO_PORT="${CREWAI_STUDIO_PORT:-8501}"
|
|
33
|
+
SCRIPTS_DIR="$HOME/.aidevops/scripts"
|
|
34
|
+
LOCALHOST_HELPER="$SCRIPTS_DIR/localhost-helper.sh"
|
|
35
|
+
|
|
36
|
+
# Helper functions
|
|
37
|
+
print_info() {
|
|
38
|
+
echo -e "${BLUE}[INFO]${NC} $1"
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
print_success() {
|
|
42
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
print_warning() {
|
|
46
|
+
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
print_error() {
|
|
50
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
# Port management integration with localhost-helper.sh
|
|
54
|
+
# Returns available port (original if free, or next available)
|
|
55
|
+
get_available_port() {
|
|
56
|
+
local desired_port="$1"
|
|
57
|
+
|
|
58
|
+
# Use localhost-helper.sh if available
|
|
59
|
+
if [[ -x "$LOCALHOST_HELPER" ]]; then
|
|
60
|
+
if "$LOCALHOST_HELPER" check-port "$desired_port" >/dev/null 2>&1; then
|
|
61
|
+
echo "$desired_port"
|
|
62
|
+
return 0
|
|
63
|
+
else
|
|
64
|
+
# Port in use, find alternative
|
|
65
|
+
local suggested
|
|
66
|
+
suggested=$("$LOCALHOST_HELPER" find-port "$((desired_port + 1))" 2>/dev/null)
|
|
67
|
+
if [[ -n "$suggested" ]]; then
|
|
68
|
+
print_warning "Port $desired_port in use, using $suggested instead"
|
|
69
|
+
echo "$suggested"
|
|
70
|
+
return 0
|
|
71
|
+
fi
|
|
72
|
+
fi
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Fallback: basic port check using lsof
|
|
76
|
+
if ! lsof -i :"$desired_port" >/dev/null 2>&1; then
|
|
77
|
+
echo "$desired_port"
|
|
78
|
+
return 0
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Find next available port
|
|
82
|
+
local port="$desired_port"
|
|
83
|
+
while lsof -i :"$port" >/dev/null 2>&1 && [[ $port -lt 65535 ]]; do
|
|
84
|
+
((port++))
|
|
85
|
+
done
|
|
86
|
+
|
|
87
|
+
if [[ $port -lt 65535 ]]; then
|
|
88
|
+
print_warning "Port $desired_port in use, using $port instead"
|
|
89
|
+
echo "$port"
|
|
90
|
+
return 0
|
|
91
|
+
fi
|
|
92
|
+
|
|
93
|
+
print_error "No available ports found"
|
|
94
|
+
return 1
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
# Check prerequisites
|
|
98
|
+
check_prerequisites() {
|
|
99
|
+
local missing=0
|
|
100
|
+
|
|
101
|
+
print_info "Checking prerequisites..."
|
|
102
|
+
|
|
103
|
+
# Check Python
|
|
104
|
+
if command -v python3 &> /dev/null; then
|
|
105
|
+
local python_version
|
|
106
|
+
python_version=$(python3 --version 2>&1 | cut -d' ' -f2)
|
|
107
|
+
local major minor
|
|
108
|
+
major=$(echo "$python_version" | cut -d. -f1)
|
|
109
|
+
minor=$(echo "$python_version" | cut -d. -f2)
|
|
110
|
+
|
|
111
|
+
if [[ $major -ge 3 ]] && [[ $minor -ge 10 ]]; then
|
|
112
|
+
print_success "Python $python_version found (3.10+ required)"
|
|
113
|
+
else
|
|
114
|
+
print_error "Python 3.10+ required, found $python_version"
|
|
115
|
+
missing=1
|
|
116
|
+
fi
|
|
117
|
+
else
|
|
118
|
+
print_error "Python 3 not found"
|
|
119
|
+
missing=1
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
# Check pip
|
|
123
|
+
if command -v pip3 &> /dev/null || python3 -m pip --version &> /dev/null; then
|
|
124
|
+
print_success "pip found"
|
|
125
|
+
else
|
|
126
|
+
print_error "pip not found"
|
|
127
|
+
missing=1
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
# Check for uv (preferred)
|
|
131
|
+
if command -v uv &> /dev/null; then
|
|
132
|
+
print_success "uv found (preferred package manager)"
|
|
133
|
+
else
|
|
134
|
+
print_warning "uv not found, will use pip"
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
if [[ $missing -eq 1 ]]; then
|
|
138
|
+
print_error "Missing prerequisites. Please install them first."
|
|
139
|
+
return 1
|
|
140
|
+
fi
|
|
141
|
+
|
|
142
|
+
print_success "All prerequisites met"
|
|
143
|
+
return 0
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
# Setup CrewAI
|
|
147
|
+
setup_crewai() {
|
|
148
|
+
print_info "Setting up CrewAI..."
|
|
149
|
+
|
|
150
|
+
# Create directories
|
|
151
|
+
mkdir -p "$CREWAI_DIR"
|
|
152
|
+
mkdir -p "$SCRIPTS_DIR"
|
|
153
|
+
|
|
154
|
+
cd "$CREWAI_DIR" || exit 1
|
|
155
|
+
|
|
156
|
+
# Create virtual environment
|
|
157
|
+
if [[ ! -d "venv" ]]; then
|
|
158
|
+
print_info "Creating virtual environment..."
|
|
159
|
+
python3 -m venv venv
|
|
160
|
+
fi
|
|
161
|
+
|
|
162
|
+
# Activate venv
|
|
163
|
+
# shellcheck source=/dev/null
|
|
164
|
+
source venv/bin/activate
|
|
165
|
+
|
|
166
|
+
# Install CrewAI
|
|
167
|
+
print_info "Installing CrewAI..."
|
|
168
|
+
if command -v uv &> /dev/null; then
|
|
169
|
+
uv pip install crewai -U
|
|
170
|
+
uv pip install 'crewai[tools]' -U
|
|
171
|
+
uv pip install streamlit -U
|
|
172
|
+
else
|
|
173
|
+
pip install crewai -U
|
|
174
|
+
pip install 'crewai[tools]' -U
|
|
175
|
+
pip install streamlit -U
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
# Create environment template
|
|
179
|
+
if [[ ! -f ".env.example" ]]; then
|
|
180
|
+
cat > .env.example << 'EOF'
|
|
181
|
+
# CrewAI Configuration for AI DevOps Framework
|
|
182
|
+
# Copy this file to .env and configure your API keys
|
|
183
|
+
|
|
184
|
+
# OpenAI Configuration (Required for most crews)
|
|
185
|
+
OPENAI_API_KEY=your_openai_api_key_here
|
|
186
|
+
|
|
187
|
+
# Anthropic Configuration (Optional)
|
|
188
|
+
ANTHROPIC_API_KEY=your_anthropic_key_here
|
|
189
|
+
|
|
190
|
+
# Serper API for web search (Optional)
|
|
191
|
+
SERPER_API_KEY=your_serper_key_here
|
|
192
|
+
|
|
193
|
+
# Google Configuration (Optional)
|
|
194
|
+
GOOGLE_API_KEY=your_google_key_here
|
|
195
|
+
|
|
196
|
+
# Local LLM Configuration (Ollama)
|
|
197
|
+
OLLAMA_BASE_URL=http://localhost:11434
|
|
198
|
+
|
|
199
|
+
# CrewAI Configuration
|
|
200
|
+
CREWAI_TELEMETRY=false
|
|
201
|
+
|
|
202
|
+
# CrewAI Studio Port
|
|
203
|
+
CREWAI_STUDIO_PORT=8501
|
|
204
|
+
|
|
205
|
+
# Security Note: All processing runs locally
|
|
206
|
+
# No data is sent to external services unless you configure external LLMs
|
|
207
|
+
EOF
|
|
208
|
+
print_success "Created environment template"
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
# Copy template to .env if not exists
|
|
212
|
+
if [[ ! -f ".env" ]]; then
|
|
213
|
+
cp .env.example .env
|
|
214
|
+
print_info "Created .env file - please configure your API keys"
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
# Create a simple studio app
|
|
218
|
+
create_studio_app
|
|
219
|
+
|
|
220
|
+
# Create management scripts
|
|
221
|
+
create_management_scripts
|
|
222
|
+
|
|
223
|
+
print_success "CrewAI setup complete"
|
|
224
|
+
print_info "Directory: $CREWAI_DIR"
|
|
225
|
+
print_info "Configure your API keys in .env file"
|
|
226
|
+
return 0
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
# Create a simple CrewAI Studio app
|
|
230
|
+
create_studio_app() {
|
|
231
|
+
print_info "Creating CrewAI Studio app..."
|
|
232
|
+
|
|
233
|
+
cat > "$CREWAI_DIR/studio_app.py" << 'STUDIOEOF'
|
|
234
|
+
"""
|
|
235
|
+
CrewAI Studio - Simple Streamlit Interface
|
|
236
|
+
AI DevOps Framework Integration
|
|
237
|
+
"""
|
|
238
|
+
import streamlit as st
|
|
239
|
+
import os
|
|
240
|
+
from dotenv import load_dotenv
|
|
241
|
+
|
|
242
|
+
# Load environment variables
|
|
243
|
+
load_dotenv()
|
|
244
|
+
|
|
245
|
+
st.set_page_config(
|
|
246
|
+
page_title="CrewAI Studio",
|
|
247
|
+
page_icon="🤖",
|
|
248
|
+
layout="wide"
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
st.title("🤖 CrewAI Studio")
|
|
252
|
+
st.markdown("*AI DevOps Framework - Multi-Agent Orchestration*")
|
|
253
|
+
|
|
254
|
+
# Sidebar configuration
|
|
255
|
+
st.sidebar.header("Configuration")
|
|
256
|
+
|
|
257
|
+
# API Key status
|
|
258
|
+
openai_key = os.getenv("OPENAI_API_KEY", "")
|
|
259
|
+
if openai_key and openai_key != "your_openai_api_key_here":
|
|
260
|
+
st.sidebar.success("✅ OpenAI API Key configured")
|
|
261
|
+
else:
|
|
262
|
+
st.sidebar.warning("⚠️ OpenAI API Key not configured")
|
|
263
|
+
|
|
264
|
+
# Model selection
|
|
265
|
+
model = st.sidebar.selectbox(
|
|
266
|
+
"Select Model",
|
|
267
|
+
["gpt-4o-mini", "gpt-4o", "gpt-4-turbo", "ollama/llama3.2"]
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
# Main content
|
|
271
|
+
tab1, tab2, tab3 = st.tabs(["Quick Crew", "Custom Crew", "Documentation"])
|
|
272
|
+
|
|
273
|
+
with tab1:
|
|
274
|
+
st.header("Quick Crew Builder")
|
|
275
|
+
|
|
276
|
+
topic = st.text_input("Research Topic", placeholder="Enter a topic to research...")
|
|
277
|
+
|
|
278
|
+
col1, col2 = st.columns(2)
|
|
279
|
+
with col1:
|
|
280
|
+
num_agents = st.slider("Number of Agents", 1, 5, 2)
|
|
281
|
+
with col2:
|
|
282
|
+
process_type = st.selectbox("Process Type", ["sequential", "hierarchical"])
|
|
283
|
+
|
|
284
|
+
if st.button("Run Crew", type="primary"):
|
|
285
|
+
if topic:
|
|
286
|
+
with st.spinner("Running crew..."):
|
|
287
|
+
try:
|
|
288
|
+
from crewai import Agent, Crew, Task, Process
|
|
289
|
+
|
|
290
|
+
# Create agents
|
|
291
|
+
researcher = Agent(
|
|
292
|
+
role="Senior Researcher",
|
|
293
|
+
goal=f"Research {topic} thoroughly",
|
|
294
|
+
backstory="Expert researcher with deep knowledge.",
|
|
295
|
+
verbose=True
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
writer = Agent(
|
|
299
|
+
role="Content Writer",
|
|
300
|
+
goal="Create engaging content",
|
|
301
|
+
backstory="Skilled writer who makes complex topics accessible.",
|
|
302
|
+
verbose=True
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
# Create tasks
|
|
306
|
+
research_task = Task(
|
|
307
|
+
description=f"Research the topic: {topic}",
|
|
308
|
+
expected_output="Comprehensive research summary",
|
|
309
|
+
agent=researcher
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
writing_task = Task(
|
|
313
|
+
description="Write a report based on the research",
|
|
314
|
+
expected_output="Well-written report in markdown",
|
|
315
|
+
agent=writer
|
|
316
|
+
)
|
|
317
|
+
|
|
318
|
+
# Create crew
|
|
319
|
+
crew = Crew(
|
|
320
|
+
agents=[researcher, writer],
|
|
321
|
+
tasks=[research_task, writing_task],
|
|
322
|
+
process=Process.sequential if process_type == "sequential" else Process.hierarchical,
|
|
323
|
+
verbose=True
|
|
324
|
+
)
|
|
325
|
+
|
|
326
|
+
result = crew.kickoff()
|
|
327
|
+
|
|
328
|
+
st.success("Crew completed!")
|
|
329
|
+
st.markdown("### Result")
|
|
330
|
+
st.markdown(str(result))
|
|
331
|
+
|
|
332
|
+
except Exception as e:
|
|
333
|
+
st.error(f"Error: {str(e)}")
|
|
334
|
+
else:
|
|
335
|
+
st.warning("Please enter a topic")
|
|
336
|
+
|
|
337
|
+
with tab2:
|
|
338
|
+
st.header("Custom Crew Configuration")
|
|
339
|
+
st.info("For advanced crews, use the CrewAI CLI:")
|
|
340
|
+
st.code("""
|
|
341
|
+
# Create a new crew project
|
|
342
|
+
crewai create crew my-project
|
|
343
|
+
|
|
344
|
+
# Navigate to project
|
|
345
|
+
cd my-project
|
|
346
|
+
|
|
347
|
+
# Edit configuration
|
|
348
|
+
# - src/my_project/config/agents.yaml
|
|
349
|
+
# - src/my_project/config/tasks.yaml
|
|
350
|
+
|
|
351
|
+
# Run the crew
|
|
352
|
+
crewai run
|
|
353
|
+
""", language="bash")
|
|
354
|
+
|
|
355
|
+
with tab3:
|
|
356
|
+
st.header("Documentation")
|
|
357
|
+
st.markdown("""
|
|
358
|
+
### Quick Links
|
|
359
|
+
- [CrewAI Documentation](https://docs.crewai.com)
|
|
360
|
+
- [CrewAI GitHub](https://github.com/crewAIInc/crewAI)
|
|
361
|
+
- [CrewAI Examples](https://github.com/crewAIInc/crewAI-examples)
|
|
362
|
+
|
|
363
|
+
### Key Concepts
|
|
364
|
+
|
|
365
|
+
**Agents**: AI entities with roles, goals, and backstories
|
|
366
|
+
|
|
367
|
+
**Tasks**: Specific assignments with descriptions and expected outputs
|
|
368
|
+
|
|
369
|
+
**Crews**: Teams of agents working together on tasks
|
|
370
|
+
|
|
371
|
+
**Flows**: Event-driven workflows for complex orchestration
|
|
372
|
+
|
|
373
|
+
### Process Types
|
|
374
|
+
|
|
375
|
+
- **Sequential**: Tasks executed one after another
|
|
376
|
+
- **Hierarchical**: Manager agent delegates to workers
|
|
377
|
+
""")
|
|
378
|
+
|
|
379
|
+
# Footer
|
|
380
|
+
st.markdown("---")
|
|
381
|
+
st.markdown("*Part of the [AI DevOps Framework](https://github.com/marcusquinn/aidevops)*")
|
|
382
|
+
STUDIOEOF
|
|
383
|
+
|
|
384
|
+
print_success "Created CrewAI Studio app"
|
|
385
|
+
return 0
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
# Create management scripts
|
|
389
|
+
create_management_scripts() {
|
|
390
|
+
print_info "Creating management scripts..."
|
|
391
|
+
|
|
392
|
+
mkdir -p "$SCRIPTS_DIR"
|
|
393
|
+
|
|
394
|
+
# Create start script
|
|
395
|
+
cat > "$SCRIPTS_DIR/start-crewai-studio.sh" << 'EOF'
|
|
396
|
+
#!/bin/bash
|
|
397
|
+
# AI DevOps Framework - CrewAI Studio Startup Script
|
|
398
|
+
|
|
399
|
+
CREWAI_DIR="$HOME/.aidevops/crewai"
|
|
400
|
+
SCRIPTS_DIR="$HOME/.aidevops/scripts"
|
|
401
|
+
LOCALHOST_HELPER="$SCRIPTS_DIR/localhost-helper.sh"
|
|
402
|
+
DESIRED_PORT="${CREWAI_STUDIO_PORT:-8501}"
|
|
403
|
+
|
|
404
|
+
echo "Starting CrewAI Studio..."
|
|
405
|
+
|
|
406
|
+
# Check port availability using localhost-helper.sh
|
|
407
|
+
if [[ -x "$LOCALHOST_HELPER" ]]; then
|
|
408
|
+
if ! "$LOCALHOST_HELPER" check-port "$DESIRED_PORT" >/dev/null 2>&1; then
|
|
409
|
+
echo "[WARNING] Port $DESIRED_PORT is in use"
|
|
410
|
+
SUGGESTED=$("$LOCALHOST_HELPER" find-port "$((DESIRED_PORT + 1))" 2>/dev/null)
|
|
411
|
+
if [[ -n "$SUGGESTED" ]]; then
|
|
412
|
+
echo "[INFO] Using alternative port: $SUGGESTED"
|
|
413
|
+
DESIRED_PORT="$SUGGESTED"
|
|
414
|
+
fi
|
|
415
|
+
fi
|
|
416
|
+
else
|
|
417
|
+
# Fallback port check
|
|
418
|
+
if lsof -i :"$DESIRED_PORT" >/dev/null 2>&1; then
|
|
419
|
+
echo "[WARNING] Port $DESIRED_PORT is in use, finding alternative..."
|
|
420
|
+
while lsof -i :"$DESIRED_PORT" >/dev/null 2>&1 && [[ $DESIRED_PORT -lt 65535 ]]; do
|
|
421
|
+
((DESIRED_PORT++))
|
|
422
|
+
done
|
|
423
|
+
echo "[INFO] Using port: $DESIRED_PORT"
|
|
424
|
+
fi
|
|
425
|
+
fi
|
|
426
|
+
|
|
427
|
+
if [[ -f "$CREWAI_DIR/studio_app.py" ]]; then
|
|
428
|
+
cd "$CREWAI_DIR" || exit 1
|
|
429
|
+
|
|
430
|
+
# Activate venv
|
|
431
|
+
source venv/bin/activate
|
|
432
|
+
|
|
433
|
+
# Load environment
|
|
434
|
+
if [[ -f .env ]]; then
|
|
435
|
+
set -a
|
|
436
|
+
source .env
|
|
437
|
+
set +a
|
|
438
|
+
fi
|
|
439
|
+
|
|
440
|
+
# Start Streamlit with available port
|
|
441
|
+
streamlit run studio_app.py --server.port "$DESIRED_PORT" --server.headless true &
|
|
442
|
+
STUDIO_PID=$!
|
|
443
|
+
echo "$STUDIO_PID" > /tmp/crewai_studio_pid
|
|
444
|
+
echo "$DESIRED_PORT" > /tmp/crewai_studio_port
|
|
445
|
+
|
|
446
|
+
sleep 3
|
|
447
|
+
|
|
448
|
+
echo ""
|
|
449
|
+
echo "CrewAI Studio started!"
|
|
450
|
+
echo "URL: http://localhost:$DESIRED_PORT"
|
|
451
|
+
echo ""
|
|
452
|
+
echo "Use 'stop-crewai-studio.sh' to stop"
|
|
453
|
+
else
|
|
454
|
+
echo "CrewAI Studio not set up. Run setup first:"
|
|
455
|
+
echo " bash .agent/scripts/crewai-helper.sh setup"
|
|
456
|
+
exit 1
|
|
457
|
+
fi
|
|
458
|
+
EOF
|
|
459
|
+
chmod +x "$SCRIPTS_DIR/start-crewai-studio.sh"
|
|
460
|
+
|
|
461
|
+
# Create stop script
|
|
462
|
+
cat > "$SCRIPTS_DIR/stop-crewai-studio.sh" << 'EOF'
|
|
463
|
+
#!/bin/bash
|
|
464
|
+
# AI DevOps Framework - CrewAI Studio Stop Script
|
|
465
|
+
|
|
466
|
+
echo "Stopping CrewAI Studio..."
|
|
467
|
+
|
|
468
|
+
if [[ -f /tmp/crewai_studio_pid ]]; then
|
|
469
|
+
STUDIO_PID=$(cat /tmp/crewai_studio_pid)
|
|
470
|
+
if kill -0 "$STUDIO_PID" 2>/dev/null; then
|
|
471
|
+
kill "$STUDIO_PID"
|
|
472
|
+
echo "Stopped CrewAI Studio (PID: $STUDIO_PID)"
|
|
473
|
+
fi
|
|
474
|
+
rm -f /tmp/crewai_studio_pid
|
|
475
|
+
fi
|
|
476
|
+
|
|
477
|
+
# Fallback: kill streamlit processes
|
|
478
|
+
pkill -f "streamlit run studio_app.py" 2>/dev/null || true
|
|
479
|
+
|
|
480
|
+
echo "CrewAI Studio stopped"
|
|
481
|
+
EOF
|
|
482
|
+
chmod +x "$SCRIPTS_DIR/stop-crewai-studio.sh"
|
|
483
|
+
|
|
484
|
+
# Create status script
|
|
485
|
+
cat > "$SCRIPTS_DIR/crewai-status.sh" << 'EOF'
|
|
486
|
+
#!/bin/bash
|
|
487
|
+
# AI DevOps Framework - CrewAI Status Script
|
|
488
|
+
|
|
489
|
+
# Get actual port (from saved file or default)
|
|
490
|
+
if [[ -f /tmp/crewai_studio_port ]]; then
|
|
491
|
+
PORT=$(cat /tmp/crewai_studio_port)
|
|
492
|
+
else
|
|
493
|
+
PORT="${CREWAI_STUDIO_PORT:-8501}"
|
|
494
|
+
fi
|
|
495
|
+
|
|
496
|
+
echo "CrewAI Status"
|
|
497
|
+
echo "============="
|
|
498
|
+
|
|
499
|
+
# Check if Studio is running
|
|
500
|
+
if curl -s "http://localhost:$PORT" >/dev/null 2>&1; then
|
|
501
|
+
echo "CrewAI Studio: Running"
|
|
502
|
+
echo "URL: http://localhost:$PORT"
|
|
503
|
+
else
|
|
504
|
+
echo "CrewAI Studio: Not running"
|
|
505
|
+
fi
|
|
506
|
+
|
|
507
|
+
echo ""
|
|
508
|
+
echo "Process Information:"
|
|
509
|
+
pgrep -f "streamlit.*studio_app" && ps aux | grep -E "streamlit.*studio_app" | grep -v grep || echo "No CrewAI Studio processes found"
|
|
510
|
+
|
|
511
|
+
# Check CrewAI CLI
|
|
512
|
+
echo ""
|
|
513
|
+
echo "CrewAI CLI:"
|
|
514
|
+
if command -v crewai &> /dev/null; then
|
|
515
|
+
crewai --version 2>/dev/null || echo "CrewAI CLI available"
|
|
516
|
+
else
|
|
517
|
+
echo "CrewAI CLI not in PATH (activate venv first)"
|
|
518
|
+
fi
|
|
519
|
+
EOF
|
|
520
|
+
chmod +x "$SCRIPTS_DIR/crewai-status.sh"
|
|
521
|
+
|
|
522
|
+
print_success "Management scripts created in $SCRIPTS_DIR"
|
|
523
|
+
return 0
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
# Create a new crew project
|
|
527
|
+
create_crew() {
|
|
528
|
+
local project_name="${1:-my-crew}"
|
|
529
|
+
|
|
530
|
+
print_info "Creating new crew project: $project_name"
|
|
531
|
+
|
|
532
|
+
if [[ ! -d "$CREWAI_DIR/venv" ]]; then
|
|
533
|
+
print_error "CrewAI not set up. Run 'setup' first."
|
|
534
|
+
return 1
|
|
535
|
+
fi
|
|
536
|
+
|
|
537
|
+
cd "$CREWAI_DIR" || exit 1
|
|
538
|
+
# shellcheck source=/dev/null
|
|
539
|
+
source venv/bin/activate
|
|
540
|
+
|
|
541
|
+
crewai create crew "$project_name"
|
|
542
|
+
|
|
543
|
+
print_success "Created crew project: $project_name"
|
|
544
|
+
print_info "Next steps:"
|
|
545
|
+
echo " cd $CREWAI_DIR/$project_name"
|
|
546
|
+
echo " crewai install"
|
|
547
|
+
echo " crewai run"
|
|
548
|
+
|
|
549
|
+
return 0
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
# Run a crew
|
|
553
|
+
run_crew() {
|
|
554
|
+
local project_dir="${1:-.}"
|
|
555
|
+
|
|
556
|
+
if [[ ! -d "$CREWAI_DIR/venv" ]]; then
|
|
557
|
+
print_error "CrewAI not set up. Run 'setup' first."
|
|
558
|
+
return 1
|
|
559
|
+
fi
|
|
560
|
+
|
|
561
|
+
# shellcheck source=/dev/null
|
|
562
|
+
source "$CREWAI_DIR/venv/bin/activate"
|
|
563
|
+
|
|
564
|
+
cd "$project_dir" || exit 1
|
|
565
|
+
|
|
566
|
+
if [[ -f "pyproject.toml" ]]; then
|
|
567
|
+
crewai run
|
|
568
|
+
else
|
|
569
|
+
print_error "Not a CrewAI project directory (no pyproject.toml found)"
|
|
570
|
+
return 1
|
|
571
|
+
fi
|
|
572
|
+
|
|
573
|
+
return 0
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
# Start CrewAI Studio
|
|
577
|
+
start_studio() {
|
|
578
|
+
if [[ -f "$SCRIPTS_DIR/start-crewai-studio.sh" ]]; then
|
|
579
|
+
"$SCRIPTS_DIR/start-crewai-studio.sh"
|
|
580
|
+
else
|
|
581
|
+
print_error "CrewAI not set up. Run 'setup' first."
|
|
582
|
+
return 1
|
|
583
|
+
fi
|
|
584
|
+
return 0
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
# Stop CrewAI Studio
|
|
588
|
+
stop_studio() {
|
|
589
|
+
if [[ -f "$SCRIPTS_DIR/stop-crewai-studio.sh" ]]; then
|
|
590
|
+
"$SCRIPTS_DIR/stop-crewai-studio.sh"
|
|
591
|
+
else
|
|
592
|
+
pkill -f "streamlit run studio_app.py" 2>/dev/null || true
|
|
593
|
+
fi
|
|
594
|
+
return 0
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
# Check status
|
|
598
|
+
check_status() {
|
|
599
|
+
if [[ -f "$SCRIPTS_DIR/crewai-status.sh" ]]; then
|
|
600
|
+
"$SCRIPTS_DIR/crewai-status.sh"
|
|
601
|
+
else
|
|
602
|
+
if curl -s "http://localhost:$CREWAI_STUDIO_PORT" >/dev/null 2>&1; then
|
|
603
|
+
print_success "CrewAI Studio is running at http://localhost:$CREWAI_STUDIO_PORT"
|
|
604
|
+
else
|
|
605
|
+
print_warning "CrewAI Studio is not running"
|
|
606
|
+
fi
|
|
607
|
+
fi
|
|
608
|
+
return 0
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
# Show usage
|
|
612
|
+
show_usage() {
|
|
613
|
+
echo "AI DevOps Framework - CrewAI Helper"
|
|
614
|
+
echo ""
|
|
615
|
+
echo "Usage: $0 [action] [options]"
|
|
616
|
+
echo ""
|
|
617
|
+
echo "Actions:"
|
|
618
|
+
echo " setup Complete setup of CrewAI"
|
|
619
|
+
echo " start Start CrewAI Studio"
|
|
620
|
+
echo " stop Stop CrewAI Studio"
|
|
621
|
+
echo " status Check CrewAI status"
|
|
622
|
+
echo " check Check prerequisites"
|
|
623
|
+
echo " create Create a new crew project"
|
|
624
|
+
echo " run Run a crew (in current directory)"
|
|
625
|
+
echo " help Show this help message"
|
|
626
|
+
echo ""
|
|
627
|
+
echo "Examples:"
|
|
628
|
+
echo " $0 setup # Full setup"
|
|
629
|
+
echo " $0 start # Start Studio"
|
|
630
|
+
echo " $0 create my-research-crew # Create new project"
|
|
631
|
+
echo " $0 run # Run crew in current dir"
|
|
632
|
+
echo ""
|
|
633
|
+
echo "URLs (after start):"
|
|
634
|
+
echo " CrewAI Studio: http://localhost:8501"
|
|
635
|
+
return 0
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
# Main function
|
|
639
|
+
main() {
|
|
640
|
+
local action="${1:-help}"
|
|
641
|
+
shift || true
|
|
642
|
+
|
|
643
|
+
case "$action" in
|
|
644
|
+
"setup")
|
|
645
|
+
if check_prerequisites; then
|
|
646
|
+
setup_crewai
|
|
647
|
+
echo ""
|
|
648
|
+
print_success "CrewAI setup complete!"
|
|
649
|
+
echo ""
|
|
650
|
+
echo "Next Steps:"
|
|
651
|
+
echo "1. Configure API keys in $CREWAI_DIR/.env"
|
|
652
|
+
echo "2. Start CrewAI Studio: $SCRIPTS_DIR/start-crewai-studio.sh"
|
|
653
|
+
echo "3. Or create a project: crewai create crew my-project"
|
|
654
|
+
fi
|
|
655
|
+
;;
|
|
656
|
+
"start")
|
|
657
|
+
start_studio
|
|
658
|
+
;;
|
|
659
|
+
"stop")
|
|
660
|
+
stop_studio
|
|
661
|
+
;;
|
|
662
|
+
"status")
|
|
663
|
+
check_status
|
|
664
|
+
;;
|
|
665
|
+
"check")
|
|
666
|
+
check_prerequisites
|
|
667
|
+
;;
|
|
668
|
+
"create")
|
|
669
|
+
create_crew "$@"
|
|
670
|
+
;;
|
|
671
|
+
"run")
|
|
672
|
+
run_crew "$@"
|
|
673
|
+
;;
|
|
674
|
+
"help"|*)
|
|
675
|
+
show_usage
|
|
676
|
+
;;
|
|
677
|
+
esac
|
|
678
|
+
return 0
|
|
679
|
+
}
|
|
680
|
+
|
|
681
|
+
main "$@"
|