aidevops 2.52.1 → 2.53.2
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,773 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# =============================================================================
|
|
3
|
-
# Full Development Loop Orchestrator
|
|
4
|
-
# =============================================================================
|
|
5
|
-
# Chains the complete development workflow:
|
|
6
|
-
# Task → Preflight → PR Create → PR Review → Postflight → Deploy
|
|
7
|
-
#
|
|
8
|
-
# This implements the "holy grail" of AI-assisted development - taking an idea
|
|
9
|
-
# from conception through to availability with minimal human intervention.
|
|
10
|
-
#
|
|
11
|
-
# Usage:
|
|
12
|
-
# full-loop-helper.sh start "<prompt>" [options]
|
|
13
|
-
# full-loop-helper.sh status
|
|
14
|
-
# full-loop-helper.sh cancel
|
|
15
|
-
# full-loop-helper.sh resume
|
|
16
|
-
#
|
|
17
|
-
# Options:
|
|
18
|
-
# --max-task-iterations N Max iterations for task development (default: 50)
|
|
19
|
-
# --max-preflight-iterations N Max iterations for preflight (default: 5)
|
|
20
|
-
# --max-pr-iterations N Max iterations for PR review (default: 20)
|
|
21
|
-
# --skip-preflight Skip preflight checks (not recommended)
|
|
22
|
-
# --skip-postflight Skip postflight monitoring
|
|
23
|
-
# --no-auto-pr Don't auto-create PR, pause for human
|
|
24
|
-
# --no-auto-deploy Don't auto-run setup.sh (aidevops only)
|
|
25
|
-
# --dry-run Show what would happen without executing
|
|
26
|
-
#
|
|
27
|
-
# Human Decision Points:
|
|
28
|
-
# - Initial task definition (before start)
|
|
29
|
-
# - Merge approval (if repo requires human approval)
|
|
30
|
-
# - Rollback decision (if postflight detects issues)
|
|
31
|
-
#
|
|
32
|
-
# Author: AI DevOps Framework
|
|
33
|
-
# =============================================================================
|
|
34
|
-
|
|
35
|
-
set -euo pipefail
|
|
36
|
-
|
|
37
|
-
# =============================================================================
|
|
38
|
-
# Constants
|
|
39
|
-
# =============================================================================
|
|
40
|
-
|
|
41
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || exit
|
|
42
|
-
readonly SCRIPT_DIR
|
|
43
|
-
readonly STATE_DIR=".agent/loop-state"
|
|
44
|
-
readonly STATE_FILE="${STATE_DIR}/full-loop.local.md"
|
|
45
|
-
|
|
46
|
-
# Legacy state directory (for backward compatibility during migration)
|
|
47
|
-
# shellcheck disable=SC2034 # Defined for documentation, used in cancel checks
|
|
48
|
-
readonly LEGACY_STATE_DIR=".claude"
|
|
49
|
-
# shellcheck disable=SC2034 # Defined for backward compatibility path reference
|
|
50
|
-
readonly LEGACY_STATE_FILE="${LEGACY_STATE_DIR}/full-loop.local.md"
|
|
51
|
-
|
|
52
|
-
# Default settings
|
|
53
|
-
readonly DEFAULT_MAX_TASK_ITERATIONS=50
|
|
54
|
-
readonly DEFAULT_MAX_PREFLIGHT_ITERATIONS=5
|
|
55
|
-
readonly DEFAULT_MAX_PR_ITERATIONS=20
|
|
56
|
-
|
|
57
|
-
# Phase names
|
|
58
|
-
readonly PHASE_TASK="task"
|
|
59
|
-
readonly PHASE_PREFLIGHT="preflight"
|
|
60
|
-
readonly PHASE_PR_CREATE="pr-create"
|
|
61
|
-
readonly PHASE_PR_REVIEW="pr-review"
|
|
62
|
-
readonly PHASE_POSTFLIGHT="postflight"
|
|
63
|
-
readonly PHASE_DEPLOY="deploy"
|
|
64
|
-
readonly PHASE_COMPLETE="complete"
|
|
65
|
-
|
|
66
|
-
# Colors
|
|
67
|
-
readonly RED='\033[0;31m'
|
|
68
|
-
readonly GREEN='\033[0;32m'
|
|
69
|
-
readonly YELLOW='\033[1;33m'
|
|
70
|
-
readonly BLUE='\033[0;34m'
|
|
71
|
-
readonly CYAN='\033[0;36m'
|
|
72
|
-
readonly BOLD='\033[1m'
|
|
73
|
-
readonly NC='\033[0m'
|
|
74
|
-
|
|
75
|
-
# =============================================================================
|
|
76
|
-
# Helper Functions
|
|
77
|
-
# =============================================================================
|
|
78
|
-
|
|
79
|
-
print_error() {
|
|
80
|
-
local message="$1"
|
|
81
|
-
echo -e "${RED}[full-loop] Error:${NC} ${message}" >&2
|
|
82
|
-
return 0
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
print_success() {
|
|
86
|
-
local message="$1"
|
|
87
|
-
echo -e "${GREEN}[full-loop]${NC} ${message}"
|
|
88
|
-
return 0
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
print_warning() {
|
|
92
|
-
local message="$1"
|
|
93
|
-
echo -e "${YELLOW}[full-loop]${NC} ${message}"
|
|
94
|
-
return 0
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
print_info() {
|
|
98
|
-
local message="$1"
|
|
99
|
-
echo -e "${BLUE}[full-loop]${NC} ${message}"
|
|
100
|
-
return 0
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
print_phase() {
|
|
104
|
-
local phase="$1"
|
|
105
|
-
local description="$2"
|
|
106
|
-
echo ""
|
|
107
|
-
echo -e "${BOLD}${CYAN}=== Phase: ${phase} ===${NC}"
|
|
108
|
-
echo -e "${CYAN}${description}${NC}"
|
|
109
|
-
echo ""
|
|
110
|
-
return 0
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
# =============================================================================
|
|
114
|
-
# State Management
|
|
115
|
-
# =============================================================================
|
|
116
|
-
|
|
117
|
-
init_state_dir() {
|
|
118
|
-
mkdir -p "$STATE_DIR"
|
|
119
|
-
return 0
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
save_state() {
|
|
123
|
-
local phase="$1"
|
|
124
|
-
local prompt="$2"
|
|
125
|
-
local pr_number="${3:-}"
|
|
126
|
-
local started_at="${4:-$(date -u '+%Y-%m-%dT%H:%M:%SZ')}"
|
|
127
|
-
|
|
128
|
-
init_state_dir
|
|
129
|
-
|
|
130
|
-
cat > "$STATE_FILE" << EOF
|
|
131
|
-
---
|
|
132
|
-
active: true
|
|
133
|
-
phase: ${phase}
|
|
134
|
-
started_at: "${started_at}"
|
|
135
|
-
updated_at: "$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
|
|
136
|
-
pr_number: "${pr_number}"
|
|
137
|
-
max_task_iterations: ${MAX_TASK_ITERATIONS:-$DEFAULT_MAX_TASK_ITERATIONS}
|
|
138
|
-
max_preflight_iterations: ${MAX_PREFLIGHT_ITERATIONS:-$DEFAULT_MAX_PREFLIGHT_ITERATIONS}
|
|
139
|
-
max_pr_iterations: ${MAX_PR_ITERATIONS:-$DEFAULT_MAX_PR_ITERATIONS}
|
|
140
|
-
skip_preflight: ${SKIP_PREFLIGHT:-false}
|
|
141
|
-
skip_postflight: ${SKIP_POSTFLIGHT:-false}
|
|
142
|
-
no_auto_pr: ${NO_AUTO_PR:-false}
|
|
143
|
-
no_auto_deploy: ${NO_AUTO_DEPLOY:-false}
|
|
144
|
-
---
|
|
145
|
-
|
|
146
|
-
${prompt}
|
|
147
|
-
EOF
|
|
148
|
-
return 0
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
load_state() {
|
|
152
|
-
if [[ ! -f "$STATE_FILE" ]]; then
|
|
153
|
-
return 1
|
|
154
|
-
fi
|
|
155
|
-
|
|
156
|
-
# Parse YAML frontmatter
|
|
157
|
-
CURRENT_PHASE=$(grep '^phase:' "$STATE_FILE" | cut -d: -f2 | tr -d ' "')
|
|
158
|
-
STARTED_AT=$(grep '^started_at:' "$STATE_FILE" | cut -d: -f2- | tr -d ' "')
|
|
159
|
-
PR_NUMBER=$(grep '^pr_number:' "$STATE_FILE" | cut -d: -f2 | tr -d ' "')
|
|
160
|
-
MAX_TASK_ITERATIONS=$(grep '^max_task_iterations:' "$STATE_FILE" | cut -d: -f2 | tr -d ' ')
|
|
161
|
-
MAX_PREFLIGHT_ITERATIONS=$(grep '^max_preflight_iterations:' "$STATE_FILE" | cut -d: -f2 | tr -d ' ')
|
|
162
|
-
MAX_PR_ITERATIONS=$(grep '^max_pr_iterations:' "$STATE_FILE" | cut -d: -f2 | tr -d ' ')
|
|
163
|
-
SKIP_PREFLIGHT=$(grep '^skip_preflight:' "$STATE_FILE" | cut -d: -f2 | tr -d ' ')
|
|
164
|
-
SKIP_POSTFLIGHT=$(grep '^skip_postflight:' "$STATE_FILE" | cut -d: -f2 | tr -d ' ')
|
|
165
|
-
NO_AUTO_PR=$(grep '^no_auto_pr:' "$STATE_FILE" | cut -d: -f2 | tr -d ' ')
|
|
166
|
-
NO_AUTO_DEPLOY=$(grep '^no_auto_deploy:' "$STATE_FILE" | cut -d: -f2 | tr -d ' ')
|
|
167
|
-
|
|
168
|
-
# Extract prompt (everything after the second ---)
|
|
169
|
-
SAVED_PROMPT=$(sed -n '/^---$/,/^---$/d; p' "$STATE_FILE")
|
|
170
|
-
|
|
171
|
-
return 0
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
clear_state() {
|
|
175
|
-
rm -f "$STATE_FILE"
|
|
176
|
-
return 0
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
is_loop_active() {
|
|
180
|
-
[[ -f "$STATE_FILE" ]] && grep -q '^active: true' "$STATE_FILE"
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
# =============================================================================
|
|
184
|
-
# Detection Functions
|
|
185
|
-
# =============================================================================
|
|
186
|
-
|
|
187
|
-
is_aidevops_repo() {
|
|
188
|
-
local repo_root
|
|
189
|
-
repo_root=$(git rev-parse --show-toplevel 2>/dev/null || echo "")
|
|
190
|
-
|
|
191
|
-
# Check if repo name contains aidevops
|
|
192
|
-
if [[ "$repo_root" == *"/aidevops"* ]]; then
|
|
193
|
-
return 0
|
|
194
|
-
fi
|
|
195
|
-
|
|
196
|
-
# Check for marker file
|
|
197
|
-
if [[ -f "$repo_root/.aidevops-repo" ]]; then
|
|
198
|
-
return 0
|
|
199
|
-
fi
|
|
200
|
-
|
|
201
|
-
# Check if setup.sh exists and contains aidevops marker
|
|
202
|
-
if [[ -f "$repo_root/setup.sh" ]] && grep -q "aidevops" "$repo_root/setup.sh" 2>/dev/null; then
|
|
203
|
-
return 0
|
|
204
|
-
fi
|
|
205
|
-
|
|
206
|
-
return 1
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
get_current_branch() {
|
|
210
|
-
git branch --show-current 2>/dev/null || echo ""
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
is_on_feature_branch() {
|
|
214
|
-
local branch
|
|
215
|
-
branch=$(get_current_branch)
|
|
216
|
-
[[ -n "$branch" && "$branch" != "main" && "$branch" != "master" ]]
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
# =============================================================================
|
|
220
|
-
# Phase Execution Functions
|
|
221
|
-
# =============================================================================
|
|
222
|
-
|
|
223
|
-
run_task_phase() {
|
|
224
|
-
local prompt="$1"
|
|
225
|
-
local max_iterations="${MAX_TASK_ITERATIONS:-$DEFAULT_MAX_TASK_ITERATIONS}"
|
|
226
|
-
local tool="${RALPH_TOOL:-opencode}"
|
|
227
|
-
|
|
228
|
-
print_phase "Task Development" "Running Ralph loop for task implementation"
|
|
229
|
-
|
|
230
|
-
# Check if ralph-loop-helper.sh exists
|
|
231
|
-
if [[ ! -x "$SCRIPT_DIR/ralph-loop-helper.sh" ]]; then
|
|
232
|
-
print_error "ralph-loop-helper.sh not found or not executable"
|
|
233
|
-
return 1
|
|
234
|
-
fi
|
|
235
|
-
|
|
236
|
-
# Check if loop-common.sh exists (v2 infrastructure)
|
|
237
|
-
local use_v2=false
|
|
238
|
-
if [[ -f "$SCRIPT_DIR/loop-common.sh" ]]; then
|
|
239
|
-
use_v2=true
|
|
240
|
-
fi
|
|
241
|
-
|
|
242
|
-
if [[ "$use_v2" == "true" ]] && command -v "$tool" &>/dev/null; then
|
|
243
|
-
# v2: External loop with fresh sessions per iteration
|
|
244
|
-
print_info "Using v2 architecture (fresh context per iteration)"
|
|
245
|
-
"$SCRIPT_DIR/ralph-loop-helper.sh" run "$prompt" \
|
|
246
|
-
--tool "$tool" \
|
|
247
|
-
--max-iterations "$max_iterations" \
|
|
248
|
-
--completion-promise "TASK_COMPLETE"
|
|
249
|
-
else
|
|
250
|
-
# Legacy: Same-session loop
|
|
251
|
-
print_warning "Using legacy mode (same session). Consider installing $tool for v2."
|
|
252
|
-
"$SCRIPT_DIR/ralph-loop-helper.sh" setup "$prompt" \
|
|
253
|
-
--max-iterations "$max_iterations" \
|
|
254
|
-
--completion-promise "TASK_COMPLETE"
|
|
255
|
-
|
|
256
|
-
print_info "Task loop initialized. AI will iterate until TASK_COMPLETE promise."
|
|
257
|
-
print_info "After task completion, run: full-loop-helper.sh resume"
|
|
258
|
-
fi
|
|
259
|
-
|
|
260
|
-
return 0
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
run_preflight_phase() {
|
|
264
|
-
print_phase "Preflight" "Running quality checks before commit"
|
|
265
|
-
|
|
266
|
-
if [[ "${SKIP_PREFLIGHT:-false}" == "true" ]]; then
|
|
267
|
-
print_warning "Preflight skipped by user request"
|
|
268
|
-
echo "<promise>PREFLIGHT_PASS</promise>"
|
|
269
|
-
return 0
|
|
270
|
-
fi
|
|
271
|
-
|
|
272
|
-
# Run quality loop for preflight
|
|
273
|
-
local preflight_ran=false
|
|
274
|
-
if [[ -x "$SCRIPT_DIR/quality-loop-helper.sh" ]]; then
|
|
275
|
-
"$SCRIPT_DIR/quality-loop-helper.sh" preflight --auto-fix --max-iterations "${MAX_PREFLIGHT_ITERATIONS:-$DEFAULT_MAX_PREFLIGHT_ITERATIONS}"
|
|
276
|
-
preflight_ran=true
|
|
277
|
-
else
|
|
278
|
-
# Fallback to linters-local.sh
|
|
279
|
-
if [[ -x "$SCRIPT_DIR/linters-local.sh" ]]; then
|
|
280
|
-
"$SCRIPT_DIR/linters-local.sh"
|
|
281
|
-
preflight_ran=true
|
|
282
|
-
else
|
|
283
|
-
print_warning "No preflight script found, skipping checks"
|
|
284
|
-
print_info "Proceeding without preflight validation"
|
|
285
|
-
fi
|
|
286
|
-
fi
|
|
287
|
-
|
|
288
|
-
# Only emit promise if checks actually ran
|
|
289
|
-
if [[ "$preflight_ran" == "true" ]]; then
|
|
290
|
-
echo "<promise>PREFLIGHT_PASS</promise>"
|
|
291
|
-
else
|
|
292
|
-
echo "<promise>PREFLIGHT_SKIPPED</promise>"
|
|
293
|
-
fi
|
|
294
|
-
return 0
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
run_pr_create_phase() {
|
|
298
|
-
print_phase "PR Creation" "Creating pull request"
|
|
299
|
-
|
|
300
|
-
if [[ "${NO_AUTO_PR:-false}" == "true" ]]; then
|
|
301
|
-
print_warning "Auto PR creation disabled. Please create PR manually."
|
|
302
|
-
print_info "Run: gh pr create --fill"
|
|
303
|
-
print_info "Then run: full-loop-helper.sh resume"
|
|
304
|
-
return 0
|
|
305
|
-
fi
|
|
306
|
-
|
|
307
|
-
# Ensure we're on a feature branch
|
|
308
|
-
if ! is_on_feature_branch; then
|
|
309
|
-
print_error "Not on a feature branch. Cannot create PR from main/master."
|
|
310
|
-
return 1
|
|
311
|
-
fi
|
|
312
|
-
|
|
313
|
-
# Push branch if needed
|
|
314
|
-
local branch
|
|
315
|
-
branch=$(get_current_branch)
|
|
316
|
-
|
|
317
|
-
if ! git ls-remote --exit-code --heads origin "$branch" &>/dev/null; then
|
|
318
|
-
print_info "Pushing branch to origin..."
|
|
319
|
-
git push -u origin "$branch"
|
|
320
|
-
fi
|
|
321
|
-
|
|
322
|
-
# Create PR
|
|
323
|
-
print_info "Creating pull request..."
|
|
324
|
-
local pr_url
|
|
325
|
-
pr_url=$(gh pr create --fill 2>&1) || {
|
|
326
|
-
# PR might already exist
|
|
327
|
-
pr_url=$(gh pr view --json url --jq '.url' 2>/dev/null || echo "")
|
|
328
|
-
if [[ -z "$pr_url" ]]; then
|
|
329
|
-
print_error "Failed to create PR"
|
|
330
|
-
return 1
|
|
331
|
-
fi
|
|
332
|
-
print_info "PR already exists: $pr_url"
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
# Extract PR number
|
|
336
|
-
local pr_number
|
|
337
|
-
pr_number=$(echo "$pr_url" | grep -oE '[0-9]+$' || gh pr view --json number --jq '.number')
|
|
338
|
-
|
|
339
|
-
print_success "PR created: $pr_url"
|
|
340
|
-
|
|
341
|
-
# Update state with PR number
|
|
342
|
-
save_state "$PHASE_PR_REVIEW" "$SAVED_PROMPT" "$pr_number" "$STARTED_AT"
|
|
343
|
-
|
|
344
|
-
return 0
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
run_pr_review_phase() {
|
|
348
|
-
print_phase "PR Review" "Monitoring PR for approval and CI checks"
|
|
349
|
-
|
|
350
|
-
local pr_number="${PR_NUMBER:-}"
|
|
351
|
-
|
|
352
|
-
if [[ -z "$pr_number" ]]; then
|
|
353
|
-
# Try to get PR number from current branch
|
|
354
|
-
pr_number=$(gh pr view --json number --jq '.number' 2>/dev/null || echo "")
|
|
355
|
-
fi
|
|
356
|
-
|
|
357
|
-
if [[ -z "$pr_number" ]]; then
|
|
358
|
-
print_error "No PR number found. Create PR first."
|
|
359
|
-
return 1
|
|
360
|
-
fi
|
|
361
|
-
|
|
362
|
-
print_info "Monitoring PR #$pr_number..."
|
|
363
|
-
|
|
364
|
-
# Run quality loop for PR review
|
|
365
|
-
if [[ -x "$SCRIPT_DIR/quality-loop-helper.sh" ]]; then
|
|
366
|
-
"$SCRIPT_DIR/quality-loop-helper.sh" pr-review --pr "$pr_number" --wait-for-ci --max-iterations "${MAX_PR_ITERATIONS:-$DEFAULT_MAX_PR_ITERATIONS}"
|
|
367
|
-
|
|
368
|
-
# Verify PR was actually merged before emitting promise
|
|
369
|
-
local pr_state
|
|
370
|
-
pr_state=$(gh pr view "$pr_number" --json state --jq '.state' 2>/dev/null || echo "UNKNOWN")
|
|
371
|
-
if [[ "$pr_state" == "MERGED" ]]; then
|
|
372
|
-
echo "<promise>PR_MERGED</promise>"
|
|
373
|
-
else
|
|
374
|
-
print_warning "PR #$pr_number is $pr_state (not merged yet)"
|
|
375
|
-
print_info "Merge PR manually, then run: full-loop-helper.sh resume"
|
|
376
|
-
echo "<promise>PR_APPROVED</promise>"
|
|
377
|
-
fi
|
|
378
|
-
else
|
|
379
|
-
print_warning "quality-loop-helper.sh not found, waiting for manual merge"
|
|
380
|
-
print_info "Merge PR manually, then run: full-loop-helper.sh resume"
|
|
381
|
-
echo "<promise>PR_WAITING</promise>"
|
|
382
|
-
fi
|
|
383
|
-
|
|
384
|
-
return 0
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
run_postflight_phase() {
|
|
388
|
-
print_phase "Postflight" "Verifying release health"
|
|
389
|
-
|
|
390
|
-
if [[ "${SKIP_POSTFLIGHT:-false}" == "true" ]]; then
|
|
391
|
-
print_warning "Postflight skipped by user request"
|
|
392
|
-
echo "<promise>POSTFLIGHT_SKIPPED</promise>"
|
|
393
|
-
return 0
|
|
394
|
-
fi
|
|
395
|
-
|
|
396
|
-
# Run quality loop for postflight
|
|
397
|
-
local postflight_ran=false
|
|
398
|
-
if [[ -x "$SCRIPT_DIR/quality-loop-helper.sh" ]]; then
|
|
399
|
-
"$SCRIPT_DIR/quality-loop-helper.sh" postflight --monitor-duration 5m
|
|
400
|
-
postflight_ran=true
|
|
401
|
-
else
|
|
402
|
-
# Fallback to postflight-check.sh
|
|
403
|
-
if [[ -x "$SCRIPT_DIR/postflight-check.sh" ]]; then
|
|
404
|
-
"$SCRIPT_DIR/postflight-check.sh"
|
|
405
|
-
postflight_ran=true
|
|
406
|
-
else
|
|
407
|
-
print_warning "No postflight script found, skipping verification"
|
|
408
|
-
print_info "Proceeding without postflight validation"
|
|
409
|
-
fi
|
|
410
|
-
fi
|
|
411
|
-
|
|
412
|
-
# Only emit promise if checks actually ran
|
|
413
|
-
if [[ "$postflight_ran" == "true" ]]; then
|
|
414
|
-
echo "<promise>RELEASE_HEALTHY</promise>"
|
|
415
|
-
else
|
|
416
|
-
echo "<promise>POSTFLIGHT_SKIPPED</promise>"
|
|
417
|
-
fi
|
|
418
|
-
return 0
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
run_deploy_phase() {
|
|
422
|
-
print_phase "Deploy" "Deploying changes locally"
|
|
423
|
-
|
|
424
|
-
if ! is_aidevops_repo; then
|
|
425
|
-
print_info "Not an aidevops repo, skipping deploy phase"
|
|
426
|
-
return 0
|
|
427
|
-
fi
|
|
428
|
-
|
|
429
|
-
if [[ "${NO_AUTO_DEPLOY:-false}" == "true" ]]; then
|
|
430
|
-
print_warning "Auto deploy disabled. Run manually: ./setup.sh"
|
|
431
|
-
return 0
|
|
432
|
-
fi
|
|
433
|
-
|
|
434
|
-
local repo_root
|
|
435
|
-
repo_root=$(git rev-parse --show-toplevel)
|
|
436
|
-
|
|
437
|
-
print_info "Running setup.sh to deploy changes..."
|
|
438
|
-
|
|
439
|
-
if [[ -x "$repo_root/setup.sh" ]]; then
|
|
440
|
-
(cd "$repo_root" && ./setup.sh)
|
|
441
|
-
print_success "Deployment complete!"
|
|
442
|
-
echo "<promise>DEPLOYED</promise>"
|
|
443
|
-
else
|
|
444
|
-
print_warning "setup.sh not found or not executable"
|
|
445
|
-
fi
|
|
446
|
-
|
|
447
|
-
return 0
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
# =============================================================================
|
|
451
|
-
# Main Commands
|
|
452
|
-
# =============================================================================
|
|
453
|
-
|
|
454
|
-
cmd_start() {
|
|
455
|
-
local prompt="$1"
|
|
456
|
-
shift
|
|
457
|
-
|
|
458
|
-
# Parse options
|
|
459
|
-
while [[ $# -gt 0 ]]; do
|
|
460
|
-
case "$1" in
|
|
461
|
-
--max-task-iterations)
|
|
462
|
-
MAX_TASK_ITERATIONS="$2"
|
|
463
|
-
shift 2
|
|
464
|
-
;;
|
|
465
|
-
--max-preflight-iterations)
|
|
466
|
-
MAX_PREFLIGHT_ITERATIONS="$2"
|
|
467
|
-
shift 2
|
|
468
|
-
;;
|
|
469
|
-
--max-pr-iterations)
|
|
470
|
-
MAX_PR_ITERATIONS="$2"
|
|
471
|
-
shift 2
|
|
472
|
-
;;
|
|
473
|
-
--skip-preflight)
|
|
474
|
-
SKIP_PREFLIGHT=true
|
|
475
|
-
shift
|
|
476
|
-
;;
|
|
477
|
-
--skip-postflight)
|
|
478
|
-
SKIP_POSTFLIGHT=true
|
|
479
|
-
shift
|
|
480
|
-
;;
|
|
481
|
-
--no-auto-pr)
|
|
482
|
-
NO_AUTO_PR=true
|
|
483
|
-
shift
|
|
484
|
-
;;
|
|
485
|
-
--no-auto-deploy)
|
|
486
|
-
NO_AUTO_DEPLOY=true
|
|
487
|
-
shift
|
|
488
|
-
;;
|
|
489
|
-
--dry-run)
|
|
490
|
-
DRY_RUN=true
|
|
491
|
-
shift
|
|
492
|
-
;;
|
|
493
|
-
*)
|
|
494
|
-
print_error "Unknown option: $1"
|
|
495
|
-
return 1
|
|
496
|
-
;;
|
|
497
|
-
esac
|
|
498
|
-
done
|
|
499
|
-
|
|
500
|
-
if [[ -z "$prompt" ]]; then
|
|
501
|
-
print_error "No prompt provided"
|
|
502
|
-
echo "Usage: full-loop-helper.sh start \"<prompt>\" [options]"
|
|
503
|
-
return 1
|
|
504
|
-
fi
|
|
505
|
-
|
|
506
|
-
if is_loop_active; then
|
|
507
|
-
print_warning "A loop is already active. Use 'resume' to continue or 'cancel' to stop."
|
|
508
|
-
return 1
|
|
509
|
-
fi
|
|
510
|
-
|
|
511
|
-
# Check we're on a feature branch
|
|
512
|
-
if ! is_on_feature_branch; then
|
|
513
|
-
print_error "Must be on a feature branch to start full loop"
|
|
514
|
-
print_info "Create a branch first: git checkout -b feature/your-feature"
|
|
515
|
-
return 1
|
|
516
|
-
fi
|
|
517
|
-
|
|
518
|
-
echo ""
|
|
519
|
-
echo -e "${BOLD}${BLUE}╔════════════════════════════════════════════════════════════╗${NC}"
|
|
520
|
-
echo -e "${BOLD}${BLUE}║ FULL DEVELOPMENT LOOP - STARTING ║${NC}"
|
|
521
|
-
echo -e "${BOLD}${BLUE}╚════════════════════════════════════════════════════════════╝${NC}"
|
|
522
|
-
echo ""
|
|
523
|
-
echo -e "${CYAN}Task:${NC} $prompt"
|
|
524
|
-
echo -e "${CYAN}Branch:${NC} $(get_current_branch)"
|
|
525
|
-
echo ""
|
|
526
|
-
echo -e "${CYAN}Phases:${NC}"
|
|
527
|
-
echo " 1. Task Development (Ralph loop)"
|
|
528
|
-
echo " 2. Preflight (quality checks)"
|
|
529
|
-
echo " 3. PR Creation"
|
|
530
|
-
echo " 4. PR Review (CI + approval)"
|
|
531
|
-
echo " 5. Postflight (release health)"
|
|
532
|
-
if is_aidevops_repo; then
|
|
533
|
-
echo " 6. Deploy (setup.sh)"
|
|
534
|
-
fi
|
|
535
|
-
echo ""
|
|
536
|
-
|
|
537
|
-
if [[ "${DRY_RUN:-false}" == "true" ]]; then
|
|
538
|
-
print_info "Dry run - no changes made"
|
|
539
|
-
return 0
|
|
540
|
-
fi
|
|
541
|
-
|
|
542
|
-
# Save initial state
|
|
543
|
-
save_state "$PHASE_TASK" "$prompt"
|
|
544
|
-
SAVED_PROMPT="$prompt"
|
|
545
|
-
|
|
546
|
-
# Start task phase
|
|
547
|
-
run_task_phase "$prompt"
|
|
548
|
-
|
|
549
|
-
return 0
|
|
550
|
-
}
|
|
551
|
-
|
|
552
|
-
cmd_resume() {
|
|
553
|
-
if ! is_loop_active; then
|
|
554
|
-
print_error "No active loop to resume"
|
|
555
|
-
return 1
|
|
556
|
-
fi
|
|
557
|
-
|
|
558
|
-
load_state
|
|
559
|
-
|
|
560
|
-
print_info "Resuming from phase: $CURRENT_PHASE"
|
|
561
|
-
|
|
562
|
-
case "$CURRENT_PHASE" in
|
|
563
|
-
"$PHASE_TASK")
|
|
564
|
-
# Check if task is complete (check both new and legacy locations)
|
|
565
|
-
if [[ -f ".agent/loop-state/ralph-loop.local.md" ]] || [[ -f ".claude/ralph-loop.local.md" ]]; then
|
|
566
|
-
print_info "Task loop still active. Complete it first."
|
|
567
|
-
return 0
|
|
568
|
-
fi
|
|
569
|
-
save_state "$PHASE_PREFLIGHT" "$SAVED_PROMPT" "" "$STARTED_AT"
|
|
570
|
-
run_preflight_phase
|
|
571
|
-
save_state "$PHASE_PR_CREATE" "$SAVED_PROMPT" "" "$STARTED_AT"
|
|
572
|
-
run_pr_create_phase
|
|
573
|
-
;;
|
|
574
|
-
"$PHASE_PREFLIGHT")
|
|
575
|
-
run_preflight_phase
|
|
576
|
-
save_state "$PHASE_PR_CREATE" "$SAVED_PROMPT" "" "$STARTED_AT"
|
|
577
|
-
run_pr_create_phase
|
|
578
|
-
;;
|
|
579
|
-
"$PHASE_PR_CREATE")
|
|
580
|
-
run_pr_create_phase
|
|
581
|
-
;;
|
|
582
|
-
"$PHASE_PR_REVIEW")
|
|
583
|
-
run_pr_review_phase
|
|
584
|
-
save_state "$PHASE_POSTFLIGHT" "$SAVED_PROMPT" "$PR_NUMBER" "$STARTED_AT"
|
|
585
|
-
run_postflight_phase
|
|
586
|
-
save_state "$PHASE_DEPLOY" "$SAVED_PROMPT" "$PR_NUMBER" "$STARTED_AT"
|
|
587
|
-
run_deploy_phase
|
|
588
|
-
save_state "$PHASE_COMPLETE" "$SAVED_PROMPT" "$PR_NUMBER" "$STARTED_AT"
|
|
589
|
-
cmd_complete
|
|
590
|
-
;;
|
|
591
|
-
"$PHASE_POSTFLIGHT")
|
|
592
|
-
run_postflight_phase
|
|
593
|
-
save_state "$PHASE_DEPLOY" "$SAVED_PROMPT" "$PR_NUMBER" "$STARTED_AT"
|
|
594
|
-
run_deploy_phase
|
|
595
|
-
save_state "$PHASE_COMPLETE" "$SAVED_PROMPT" "$PR_NUMBER" "$STARTED_AT"
|
|
596
|
-
cmd_complete
|
|
597
|
-
;;
|
|
598
|
-
"$PHASE_DEPLOY")
|
|
599
|
-
run_deploy_phase
|
|
600
|
-
save_state "$PHASE_COMPLETE" "$SAVED_PROMPT" "$PR_NUMBER" "$STARTED_AT"
|
|
601
|
-
cmd_complete
|
|
602
|
-
;;
|
|
603
|
-
"$PHASE_COMPLETE")
|
|
604
|
-
cmd_complete
|
|
605
|
-
;;
|
|
606
|
-
*)
|
|
607
|
-
print_error "Unknown phase: $CURRENT_PHASE"
|
|
608
|
-
return 1
|
|
609
|
-
;;
|
|
610
|
-
esac
|
|
611
|
-
|
|
612
|
-
return 0
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
cmd_status() {
|
|
616
|
-
if ! is_loop_active; then
|
|
617
|
-
echo "No active full loop"
|
|
618
|
-
return 0
|
|
619
|
-
fi
|
|
620
|
-
|
|
621
|
-
load_state
|
|
622
|
-
|
|
623
|
-
echo ""
|
|
624
|
-
echo -e "${BOLD}Full Development Loop Status${NC}"
|
|
625
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
626
|
-
echo -e "Phase: ${CYAN}$CURRENT_PHASE${NC}"
|
|
627
|
-
echo -e "Started: $STARTED_AT"
|
|
628
|
-
echo -e "PR: ${PR_NUMBER:-none}"
|
|
629
|
-
echo ""
|
|
630
|
-
echo "Prompt:"
|
|
631
|
-
echo "$SAVED_PROMPT" | head -5
|
|
632
|
-
echo ""
|
|
633
|
-
|
|
634
|
-
return 0
|
|
635
|
-
}
|
|
636
|
-
|
|
637
|
-
cmd_cancel() {
|
|
638
|
-
if ! is_loop_active; then
|
|
639
|
-
print_warning "No active loop to cancel"
|
|
640
|
-
return 0
|
|
641
|
-
fi
|
|
642
|
-
|
|
643
|
-
clear_state
|
|
644
|
-
|
|
645
|
-
# Also cancel any sub-loops (both new and legacy locations)
|
|
646
|
-
rm -f ".agent/loop-state/ralph-loop.local.md" 2>/dev/null
|
|
647
|
-
rm -f ".agent/loop-state/quality-loop.local.md" 2>/dev/null
|
|
648
|
-
rm -f ".claude/ralph-loop.local.md" 2>/dev/null
|
|
649
|
-
rm -f ".claude/quality-loop.local.md" 2>/dev/null
|
|
650
|
-
|
|
651
|
-
print_success "Full loop cancelled"
|
|
652
|
-
return 0
|
|
653
|
-
}
|
|
654
|
-
|
|
655
|
-
cmd_complete() {
|
|
656
|
-
echo ""
|
|
657
|
-
echo -e "${BOLD}${GREEN}╔════════════════════════════════════════════════════════════╗${NC}"
|
|
658
|
-
echo -e "${BOLD}${GREEN}║ FULL DEVELOPMENT LOOP - COMPLETE ║${NC}"
|
|
659
|
-
echo -e "${BOLD}${GREEN}╚════════════════════════════════════════════════════════════╝${NC}"
|
|
660
|
-
echo ""
|
|
661
|
-
|
|
662
|
-
load_state 2>/dev/null || true
|
|
663
|
-
|
|
664
|
-
echo -e "${GREEN}All phases completed successfully!${NC}"
|
|
665
|
-
echo ""
|
|
666
|
-
echo "Summary:"
|
|
667
|
-
echo " - Task: Implemented"
|
|
668
|
-
echo " - Preflight: Passed"
|
|
669
|
-
echo " - PR: #${PR_NUMBER:-unknown} merged"
|
|
670
|
-
echo " - Postflight: Healthy"
|
|
671
|
-
if is_aidevops_repo; then
|
|
672
|
-
echo " - Deploy: Complete"
|
|
673
|
-
fi
|
|
674
|
-
echo ""
|
|
675
|
-
|
|
676
|
-
clear_state
|
|
677
|
-
|
|
678
|
-
echo "<promise>FULL_LOOP_COMPLETE</promise>"
|
|
679
|
-
|
|
680
|
-
return 0
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
show_help() {
|
|
684
|
-
cat << 'EOF'
|
|
685
|
-
Full Development Loop Orchestrator
|
|
686
|
-
|
|
687
|
-
Chains the complete development workflow from task to deployment.
|
|
688
|
-
|
|
689
|
-
USAGE:
|
|
690
|
-
full-loop-helper.sh <command> [options]
|
|
691
|
-
|
|
692
|
-
COMMANDS:
|
|
693
|
-
start "<prompt>" Start a new full development loop
|
|
694
|
-
resume Resume from the current phase
|
|
695
|
-
status Show current loop status
|
|
696
|
-
cancel Cancel the active loop
|
|
697
|
-
help Show this help
|
|
698
|
-
|
|
699
|
-
OPTIONS:
|
|
700
|
-
--max-task-iterations N Max iterations for task development (default: 50)
|
|
701
|
-
--max-preflight-iterations N Max iterations for preflight (default: 5)
|
|
702
|
-
--max-pr-iterations N Max iterations for PR review (default: 20)
|
|
703
|
-
--skip-preflight Skip preflight checks (not recommended)
|
|
704
|
-
--skip-postflight Skip postflight monitoring
|
|
705
|
-
--no-auto-pr Don't auto-create PR, pause for human
|
|
706
|
-
--no-auto-deploy Don't auto-run setup.sh (aidevops only)
|
|
707
|
-
--dry-run Show what would happen without executing
|
|
708
|
-
|
|
709
|
-
PHASES:
|
|
710
|
-
1. Task Development - Ralph loop for implementation
|
|
711
|
-
2. Preflight - Quality checks before commit
|
|
712
|
-
3. PR Creation - Auto-create pull request
|
|
713
|
-
4. PR Review - Monitor CI and approval
|
|
714
|
-
5. Postflight - Verify release health
|
|
715
|
-
6. Deploy - Run setup.sh (aidevops repos only)
|
|
716
|
-
|
|
717
|
-
HUMAN DECISION POINTS:
|
|
718
|
-
- Initial task definition (before start)
|
|
719
|
-
- Merge approval (if repo requires human approval)
|
|
720
|
-
- Rollback decision (if postflight detects issues)
|
|
721
|
-
|
|
722
|
-
EXAMPLES:
|
|
723
|
-
# Start full loop for a feature
|
|
724
|
-
full-loop-helper.sh start "Implement user authentication with JWT"
|
|
725
|
-
|
|
726
|
-
# Start with custom iterations
|
|
727
|
-
full-loop-helper.sh start "Fix all TypeScript errors" --max-task-iterations 30
|
|
728
|
-
|
|
729
|
-
# Resume after manual intervention
|
|
730
|
-
full-loop-helper.sh resume
|
|
731
|
-
|
|
732
|
-
# Check current status
|
|
733
|
-
full-loop-helper.sh status
|
|
734
|
-
|
|
735
|
-
EOF
|
|
736
|
-
return 0
|
|
737
|
-
}
|
|
738
|
-
|
|
739
|
-
# =============================================================================
|
|
740
|
-
# Main Entry Point
|
|
741
|
-
# =============================================================================
|
|
742
|
-
|
|
743
|
-
main() {
|
|
744
|
-
local command="${1:-help}"
|
|
745
|
-
shift || true
|
|
746
|
-
|
|
747
|
-
case "$command" in
|
|
748
|
-
start)
|
|
749
|
-
cmd_start "$@"
|
|
750
|
-
;;
|
|
751
|
-
resume)
|
|
752
|
-
cmd_resume
|
|
753
|
-
;;
|
|
754
|
-
status)
|
|
755
|
-
cmd_status
|
|
756
|
-
;;
|
|
757
|
-
cancel)
|
|
758
|
-
cmd_cancel
|
|
759
|
-
;;
|
|
760
|
-
help|--help|-h)
|
|
761
|
-
show_help
|
|
762
|
-
;;
|
|
763
|
-
*)
|
|
764
|
-
print_error "Unknown command: $command"
|
|
765
|
-
show_help
|
|
766
|
-
return 1
|
|
767
|
-
;;
|
|
768
|
-
esac
|
|
769
|
-
|
|
770
|
-
return 0
|
|
771
|
-
}
|
|
772
|
-
|
|
773
|
-
main "$@"
|