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,340 @@
|
|
|
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
|
+
# System Cleanup & Maintenance Script
|
|
5
|
+
#
|
|
6
|
+
# Performs garbage collection, removes cruft, and maintains system hygiene
|
|
7
|
+
# for the AI DevOps Framework. Includes lock file protection and 90-day logging.
|
|
8
|
+
#
|
|
9
|
+
# Usage: ./system-cleanup.sh [--force] [--dry-run]
|
|
10
|
+
#
|
|
11
|
+
# Author: AI DevOps Framework
|
|
12
|
+
# Version: 1.0.0
|
|
13
|
+
|
|
14
|
+
# Strict mode
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
|
|
17
|
+
# Constants
|
|
18
|
+
readonly SCRIPT_NAME="system-cleanup"
|
|
19
|
+
# VERSION is kept for reference and future use
|
|
20
|
+
readonly VERSION="1.0.0"
|
|
21
|
+
readonly LOG_DIR="$HOME/.agent/logs"
|
|
22
|
+
readonly LOG_FILE="${LOG_DIR}/operations.log"
|
|
23
|
+
readonly LOCK_FILE="/tmp/aidevops-${SCRIPT_NAME}.lock"
|
|
24
|
+
readonly TMP_DIR="$HOME/.agent/tmp"
|
|
25
|
+
readonly AGENT_DIR="$HOME/.agent"
|
|
26
|
+
readonly PROJECT_DIR="$HOME/git/aidevops"
|
|
27
|
+
readonly RETENTION_DAYS_LOGS=90
|
|
28
|
+
readonly RETENTION_DAYS_TMP=7
|
|
29
|
+
|
|
30
|
+
# Colors for output
|
|
31
|
+
readonly RED='\033[0;31m'
|
|
32
|
+
readonly GREEN='\033[0;32m'
|
|
33
|
+
readonly YELLOW='\033[1;33m'
|
|
34
|
+
readonly BLUE='\033[0;34m'
|
|
35
|
+
readonly NC='\033[0m' # No Color
|
|
36
|
+
|
|
37
|
+
# Global state
|
|
38
|
+
DRY_RUN=true
|
|
39
|
+
|
|
40
|
+
# -----------------------------------------------------------------------------
|
|
41
|
+
# Logging & Output
|
|
42
|
+
# -----------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
setup_logging() {
|
|
45
|
+
# Create log directory if it doesn't exist
|
|
46
|
+
if [[ ! -d "$LOG_DIR" ]]; then
|
|
47
|
+
mkdir -p "$LOG_DIR"
|
|
48
|
+
fi
|
|
49
|
+
return 0
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
log() {
|
|
53
|
+
local level="$1"
|
|
54
|
+
local message="$2"
|
|
55
|
+
local timestamp
|
|
56
|
+
timestamp=$(date "+%Y-%m-%dT%H:%M:%S%z")
|
|
57
|
+
|
|
58
|
+
# Console output
|
|
59
|
+
local color="$NC"
|
|
60
|
+
case "$level" in
|
|
61
|
+
"INFO") color="$GREEN" ;;
|
|
62
|
+
"WARN") color="$YELLOW" ;;
|
|
63
|
+
"ERROR") color="$RED" ;;
|
|
64
|
+
"DEBUG") color="$BLUE" ;;
|
|
65
|
+
*) color="$NC" ;;
|
|
66
|
+
esac
|
|
67
|
+
|
|
68
|
+
echo -e "${color}[${level}] ${message}${NC}"
|
|
69
|
+
|
|
70
|
+
# File output (append)
|
|
71
|
+
if [[ -d "$LOG_DIR" ]]; then
|
|
72
|
+
echo "${timestamp} [${level}] ${message}" >> "$LOG_FILE"
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
return 0
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
rotate_logs() {
|
|
79
|
+
log "INFO" "Checking log retention policy (${RETENTION_DAYS_LOGS} days)..."
|
|
80
|
+
|
|
81
|
+
if [[ ! -f "$LOG_FILE" ]]; then
|
|
82
|
+
return 0
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
# Use a temporary file to filter logs
|
|
86
|
+
local temp_log="${LOG_FILE}.tmp"
|
|
87
|
+
local cutoff_date
|
|
88
|
+
|
|
89
|
+
# Calculate cutoff date timestamp for comparison (cross-platform compatible approximation)
|
|
90
|
+
# Note: Precise date math in bash across OS versions is tricky.
|
|
91
|
+
# Here we'll rely on finding lines that don't match old dates if possible,
|
|
92
|
+
# or simply use find to remove archived log files if we were rotating files.
|
|
93
|
+
# Since we are appending to a single file, we'll inspect the file content.
|
|
94
|
+
|
|
95
|
+
# For this implementation, we will archive the log file if it gets too large
|
|
96
|
+
# or just rely on the user to not have massive logs.
|
|
97
|
+
# A simpler robust approach for a single file is difficult without external tools.
|
|
98
|
+
# Let's stick to the requirement: "keeps 90 days of records".
|
|
99
|
+
|
|
100
|
+
# We will use a simple grep strategy assuming ISO dates: YYYY-MM-DD
|
|
101
|
+
# Current date minus 90 days
|
|
102
|
+
if date -v -90d > /dev/null 2>&1; then
|
|
103
|
+
# BSD/macOS date
|
|
104
|
+
cutoff_date=$(date -v -${RETENTION_DAYS_LOGS}d +%Y-%m-%d)
|
|
105
|
+
else
|
|
106
|
+
# GNU date
|
|
107
|
+
cutoff_date=$(date -d "${RETENTION_DAYS_LOGS} days ago" +%Y-%m-%d)
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
log "DEBUG" "Pruning logs older than $cutoff_date"
|
|
111
|
+
|
|
112
|
+
# Filter the log file: Keep lines where date >= cutoff_date
|
|
113
|
+
# This is a string comparison which works for ISO 8601 dates
|
|
114
|
+
awk -v cutoff="$cutoff_date" '$_arg1 >= cutoff' "$LOG_FILE" > "$temp_log"
|
|
115
|
+
|
|
116
|
+
mv "$temp_log" "$LOG_FILE"
|
|
117
|
+
|
|
118
|
+
return 0
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
# -----------------------------------------------------------------------------
|
|
122
|
+
# Lock File Management
|
|
123
|
+
# -----------------------------------------------------------------------------
|
|
124
|
+
|
|
125
|
+
acquire_lock() {
|
|
126
|
+
if [[ -f "$LOCK_FILE" ]]; then
|
|
127
|
+
# Check if process is still running
|
|
128
|
+
local pid
|
|
129
|
+
pid=$(cat "$LOCK_FILE")
|
|
130
|
+
if ps -p "$pid" > /dev/null 2>&1; then
|
|
131
|
+
log "ERROR" "Script is already running (PID: $pid). Lock file exists at $LOCK_FILE"
|
|
132
|
+
return 1
|
|
133
|
+
else
|
|
134
|
+
log "WARN" "Found stale lock file from PID $pid. Removing..."
|
|
135
|
+
rm -f "$LOCK_FILE"
|
|
136
|
+
fi
|
|
137
|
+
fi
|
|
138
|
+
|
|
139
|
+
echo $$ > "$LOCK_FILE"
|
|
140
|
+
return 0
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
release_lock() {
|
|
144
|
+
if [[ -f "$LOCK_FILE" ]]; then
|
|
145
|
+
rm -f "$LOCK_FILE"
|
|
146
|
+
fi
|
|
147
|
+
return 0
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
cleanup_exit() {
|
|
151
|
+
local exit_code=$?
|
|
152
|
+
release_lock
|
|
153
|
+
if [[ $exit_code -eq 0 ]]; then
|
|
154
|
+
log "INFO" "Cleanup completed successfully"
|
|
155
|
+
else
|
|
156
|
+
log "ERROR" "Cleanup finished with error (Code: $exit_code)"
|
|
157
|
+
fi
|
|
158
|
+
exit "$exit_code"
|
|
159
|
+
return 0
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
# -----------------------------------------------------------------------------
|
|
163
|
+
# Garbage Collection
|
|
164
|
+
# -----------------------------------------------------------------------------
|
|
165
|
+
|
|
166
|
+
cleanup_directory() {
|
|
167
|
+
local dir="$1"
|
|
168
|
+
local pattern="$2"
|
|
169
|
+
local days="${3:-0}" # 0 means ignore age
|
|
170
|
+
local desc="$4"
|
|
171
|
+
|
|
172
|
+
if [[ ! -d "$dir" ]]; then
|
|
173
|
+
log "DEBUG" "Directory not found, skipping: $dir"
|
|
174
|
+
return 0
|
|
175
|
+
fi
|
|
176
|
+
|
|
177
|
+
log "INFO" "Scanning $desc ($dir)..."
|
|
178
|
+
|
|
179
|
+
local find_cmd="find \"$dir\" -name \"$pattern\""
|
|
180
|
+
|
|
181
|
+
# Add depth limit to avoid scanning entire system if path is wrong
|
|
182
|
+
find_cmd="$find_cmd -maxdepth 4"
|
|
183
|
+
|
|
184
|
+
# Add age filter if specified
|
|
185
|
+
if [[ "$days" -gt 0 ]]; then
|
|
186
|
+
# BSD/macOS find uses +7d, GNU uses -mtime +7
|
|
187
|
+
find_cmd="$find_cmd -mtime +${days}"
|
|
188
|
+
fi
|
|
189
|
+
|
|
190
|
+
# Exclude common directories
|
|
191
|
+
find_cmd="$find_cmd -not -path \"*/.git/*\" -not -path \"*/node_modules/*\""
|
|
192
|
+
|
|
193
|
+
# Execute find
|
|
194
|
+
local files_found
|
|
195
|
+
files_found=$(eval "$find_cmd" || echo "")
|
|
196
|
+
|
|
197
|
+
if [[ -z "$files_found" ]]; then
|
|
198
|
+
log "DEBUG" "No matching files found for $desc"
|
|
199
|
+
return 0
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
# Process matches
|
|
203
|
+
local count=0
|
|
204
|
+
while IFS= read -r file; do
|
|
205
|
+
if [[ -z "$file" ]]; then continue; fi
|
|
206
|
+
|
|
207
|
+
if [[ "$DRY_RUN" == "true" ]]; then
|
|
208
|
+
log "INFO" "[DRY-RUN] Would delete: $file"
|
|
209
|
+
else
|
|
210
|
+
if rm -f "$file"; then
|
|
211
|
+
log "INFO" "Deleted: $file"
|
|
212
|
+
else
|
|
213
|
+
log "ERROR" "Failed to delete: $file"
|
|
214
|
+
fi
|
|
215
|
+
fi
|
|
216
|
+
count=$((count + 1))
|
|
217
|
+
done <<< "$files_found"
|
|
218
|
+
|
|
219
|
+
if [[ "$count" -gt 0 ]]; then
|
|
220
|
+
log "INFO" "Processed $count files in $desc"
|
|
221
|
+
fi
|
|
222
|
+
|
|
223
|
+
return 0
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
cleanup_tmp_dir() {
|
|
227
|
+
# Special handling for tmp directory to clean everything older than X days
|
|
228
|
+
# Not just specific patterns
|
|
229
|
+
|
|
230
|
+
if [[ ! -d "$TMP_DIR" ]]; then return 0; fi
|
|
231
|
+
|
|
232
|
+
log "INFO" "Cleaning temporary directory ($TMP_DIR) - items older than $RETENTION_DAYS_TMP days..."
|
|
233
|
+
|
|
234
|
+
# Using -mindepth 1 to not delete the dir itself
|
|
235
|
+
local find_cmd="find \"$TMP_DIR\" -mindepth 1 -mtime +${RETENTION_DAYS_TMP}"
|
|
236
|
+
|
|
237
|
+
# Exclude README.md
|
|
238
|
+
find_cmd="$find_cmd -not -name \"README.md\""
|
|
239
|
+
|
|
240
|
+
local items
|
|
241
|
+
items=$(eval "$find_cmd" || echo "")
|
|
242
|
+
|
|
243
|
+
if [[ -z "$items" ]]; then
|
|
244
|
+
log "DEBUG" "No old temporary items found"
|
|
245
|
+
return 0
|
|
246
|
+
fi
|
|
247
|
+
|
|
248
|
+
while IFS= read -r item; do
|
|
249
|
+
if [[ -z "$item" ]]; then continue; fi
|
|
250
|
+
|
|
251
|
+
if [[ "$DRY_RUN" == "true" ]]; then
|
|
252
|
+
log "INFO" "[DRY-RUN] Would delete: $item"
|
|
253
|
+
else
|
|
254
|
+
# Use rm -rf for directories
|
|
255
|
+
if rm -rf "$item"; then
|
|
256
|
+
log "INFO" "Deleted: $item"
|
|
257
|
+
else
|
|
258
|
+
log "ERROR" "Failed to delete: $item"
|
|
259
|
+
fi
|
|
260
|
+
fi
|
|
261
|
+
done <<< "$items"
|
|
262
|
+
|
|
263
|
+
return 0
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
# -----------------------------------------------------------------------------
|
|
267
|
+
# Main Execution
|
|
268
|
+
# -----------------------------------------------------------------------------
|
|
269
|
+
|
|
270
|
+
show_help() {
|
|
271
|
+
echo "Usage: $0 [options]"
|
|
272
|
+
echo
|
|
273
|
+
echo "Options:"
|
|
274
|
+
echo " --force Execute deletions (disable dry-run)"
|
|
275
|
+
echo " --dry-run Simulate deletions (default)"
|
|
276
|
+
echo " --help Show this help message"
|
|
277
|
+
echo
|
|
278
|
+
return 0
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
main() {
|
|
282
|
+
# Parse arguments
|
|
283
|
+
while [[ $# -gt 0 ]]; do
|
|
284
|
+
case "$_arg1" in
|
|
285
|
+
--force)
|
|
286
|
+
DRY_RUN=false
|
|
287
|
+
shift
|
|
288
|
+
;;
|
|
289
|
+
--dry-run)
|
|
290
|
+
DRY_RUN=true
|
|
291
|
+
shift
|
|
292
|
+
;;
|
|
293
|
+
--help|-h)
|
|
294
|
+
show_help
|
|
295
|
+
exit 0
|
|
296
|
+
;;
|
|
297
|
+
*)
|
|
298
|
+
log "ERROR" "Unknown option: $_arg1"
|
|
299
|
+
show_help
|
|
300
|
+
exit 1
|
|
301
|
+
;;
|
|
302
|
+
esac
|
|
303
|
+
done
|
|
304
|
+
|
|
305
|
+
setup_logging
|
|
306
|
+
|
|
307
|
+
# Trap signals for cleanup
|
|
308
|
+
trap cleanup_exit INT TERM EXIT
|
|
309
|
+
|
|
310
|
+
log "INFO" "Starting System Cleanup (Dry Run: $DRY_RUN)"
|
|
311
|
+
|
|
312
|
+
if ! acquire_lock; then
|
|
313
|
+
exit 1
|
|
314
|
+
fi
|
|
315
|
+
|
|
316
|
+
# 1. Log Rotation
|
|
317
|
+
rotate_logs
|
|
318
|
+
|
|
319
|
+
# 2. Clean Agent Directory Cruft
|
|
320
|
+
cleanup_directory "$AGENT_DIR" ".DS_Store" 0 "Agent Directory System Files"
|
|
321
|
+
cleanup_directory "$AGENT_DIR" "*.backup.*" 0 "Agent Directory Backups"
|
|
322
|
+
cleanup_directory "$AGENT_DIR" "*.bak" 0 "Agent Directory Bak Files"
|
|
323
|
+
|
|
324
|
+
# 3. Clean Project Directory Cruft
|
|
325
|
+
cleanup_directory "$PROJECT_DIR" ".DS_Store" 0 "Project Directory System Files"
|
|
326
|
+
cleanup_directory "$PROJECT_DIR" "*.backup" 0 "Project Directory Backups"
|
|
327
|
+
cleanup_directory "$PROJECT_DIR" "*.bak" 0 "Project Directory Bak Files"
|
|
328
|
+
cleanup_directory "$PROJECT_DIR" "*~" 0 "Project Directory Swap Files"
|
|
329
|
+
|
|
330
|
+
# 4. Clean Temporary Directory (Age-based)
|
|
331
|
+
cleanup_tmp_dir
|
|
332
|
+
|
|
333
|
+
# 5. Clean Stale Lock Files (globally in /tmp related to this project)
|
|
334
|
+
# Be careful here, only target our specific locks
|
|
335
|
+
cleanup_directory "/tmp" "aidevops-*.lock" 1 "Stale Lock Files (>24h)"
|
|
336
|
+
|
|
337
|
+
return 0
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
main "$@"
|