aidevops 2.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/.agent/AGENTS.md +614 -0
  2. package/.agent/accounts.md +65 -0
  3. package/.agent/aidevops/add-new-mcp-to-aidevops.md +456 -0
  4. package/.agent/aidevops/api-integrations.md +335 -0
  5. package/.agent/aidevops/architecture.md +510 -0
  6. package/.agent/aidevops/configs.md +274 -0
  7. package/.agent/aidevops/docs.md +244 -0
  8. package/.agent/aidevops/extension.md +311 -0
  9. package/.agent/aidevops/mcp-integrations.md +340 -0
  10. package/.agent/aidevops/mcp-troubleshooting.md +162 -0
  11. package/.agent/aidevops/memory-patterns.md +172 -0
  12. package/.agent/aidevops/providers.md +217 -0
  13. package/.agent/aidevops/recommendations.md +321 -0
  14. package/.agent/aidevops/requirements.md +301 -0
  15. package/.agent/aidevops/resources.md +214 -0
  16. package/.agent/aidevops/security-requirements.md +174 -0
  17. package/.agent/aidevops/security.md +350 -0
  18. package/.agent/aidevops/service-links.md +400 -0
  19. package/.agent/aidevops/services.md +357 -0
  20. package/.agent/aidevops/setup.md +153 -0
  21. package/.agent/aidevops/troubleshooting.md +389 -0
  22. package/.agent/aidevops.md +124 -0
  23. package/.agent/build-plus.md +244 -0
  24. package/.agent/content/guidelines.md +109 -0
  25. package/.agent/content.md +87 -0
  26. package/.agent/health.md +59 -0
  27. package/.agent/legal.md +59 -0
  28. package/.agent/loop-state/full-loop.local.md +16 -0
  29. package/.agent/loop-state/ralph-loop.local.md +10 -0
  30. package/.agent/marketing.md +440 -0
  31. package/.agent/memory/README.md +260 -0
  32. package/.agent/onboarding.md +796 -0
  33. package/.agent/plan-plus.md +245 -0
  34. package/.agent/research.md +100 -0
  35. package/.agent/sales.md +333 -0
  36. package/.agent/scripts/101domains-helper.sh +701 -0
  37. package/.agent/scripts/add-missing-returns.sh +140 -0
  38. package/.agent/scripts/agent-browser-helper.sh +311 -0
  39. package/.agent/scripts/agno-setup.sh +712 -0
  40. package/.agent/scripts/ahrefs-mcp-wrapper.js +168 -0
  41. package/.agent/scripts/aidevops-update-check.sh +71 -0
  42. package/.agent/scripts/ampcode-cli.sh +522 -0
  43. package/.agent/scripts/auto-version-bump.sh +156 -0
  44. package/.agent/scripts/autogen-helper.sh +512 -0
  45. package/.agent/scripts/beads-sync-helper.sh +596 -0
  46. package/.agent/scripts/closte-helper.sh +5 -0
  47. package/.agent/scripts/cloudron-helper.sh +321 -0
  48. package/.agent/scripts/codacy-cli-chunked.sh +581 -0
  49. package/.agent/scripts/codacy-cli.sh +442 -0
  50. package/.agent/scripts/code-audit-helper.sh +5 -0
  51. package/.agent/scripts/coderabbit-cli.sh +417 -0
  52. package/.agent/scripts/coderabbit-pro-analysis.sh +238 -0
  53. package/.agent/scripts/commands/code-simplifier.md +86 -0
  54. package/.agent/scripts/commands/full-loop.md +246 -0
  55. package/.agent/scripts/commands/postflight-loop.md +103 -0
  56. package/.agent/scripts/commands/recall.md +182 -0
  57. package/.agent/scripts/commands/remember.md +132 -0
  58. package/.agent/scripts/commands/save-todo.md +175 -0
  59. package/.agent/scripts/commands/session-review.md +154 -0
  60. package/.agent/scripts/comprehensive-quality-fix.sh +106 -0
  61. package/.agent/scripts/context-builder-helper.sh +522 -0
  62. package/.agent/scripts/coolify-cli-helper.sh +674 -0
  63. package/.agent/scripts/coolify-helper.sh +380 -0
  64. package/.agent/scripts/crawl4ai-examples.sh +401 -0
  65. package/.agent/scripts/crawl4ai-helper.sh +1078 -0
  66. package/.agent/scripts/crewai-helper.sh +681 -0
  67. package/.agent/scripts/dev-browser-helper.sh +513 -0
  68. package/.agent/scripts/dns-helper.sh +396 -0
  69. package/.agent/scripts/domain-research-helper.sh +917 -0
  70. package/.agent/scripts/dspy-helper.sh +285 -0
  71. package/.agent/scripts/dspyground-helper.sh +291 -0
  72. package/.agent/scripts/eeat-score-helper.sh +1242 -0
  73. package/.agent/scripts/efficient-return-fix.sh +92 -0
  74. package/.agent/scripts/extract-opencode-prompts.sh +128 -0
  75. package/.agent/scripts/find-missing-returns.sh +113 -0
  76. package/.agent/scripts/fix-auth-headers.sh +104 -0
  77. package/.agent/scripts/fix-common-strings.sh +254 -0
  78. package/.agent/scripts/fix-content-type.sh +100 -0
  79. package/.agent/scripts/fix-error-messages.sh +130 -0
  80. package/.agent/scripts/fix-misplaced-returns.sh +74 -0
  81. package/.agent/scripts/fix-remaining-literals.sh +152 -0
  82. package/.agent/scripts/fix-return-statements.sh +41 -0
  83. package/.agent/scripts/fix-s131-default-cases.sh +249 -0
  84. package/.agent/scripts/fix-sc2155-simple.sh +102 -0
  85. package/.agent/scripts/fix-shellcheck-critical.sh +187 -0
  86. package/.agent/scripts/fix-string-literals.sh +273 -0
  87. package/.agent/scripts/full-loop-helper.sh +773 -0
  88. package/.agent/scripts/generate-opencode-agents.sh +497 -0
  89. package/.agent/scripts/generate-opencode-commands.sh +1629 -0
  90. package/.agent/scripts/generate-skills.sh +366 -0
  91. package/.agent/scripts/git-platforms-helper.sh +640 -0
  92. package/.agent/scripts/gitea-cli-helper.sh +743 -0
  93. package/.agent/scripts/github-cli-helper.sh +702 -0
  94. package/.agent/scripts/gitlab-cli-helper.sh +682 -0
  95. package/.agent/scripts/gsc-add-user-helper.sh +325 -0
  96. package/.agent/scripts/gsc-sitemap-helper.sh +678 -0
  97. package/.agent/scripts/hetzner-helper.sh +485 -0
  98. package/.agent/scripts/hostinger-helper.sh +229 -0
  99. package/.agent/scripts/keyword-research-helper.sh +1815 -0
  100. package/.agent/scripts/langflow-helper.sh +544 -0
  101. package/.agent/scripts/linkedin-automation.py +241 -0
  102. package/.agent/scripts/linter-manager.sh +599 -0
  103. package/.agent/scripts/linters-local.sh +434 -0
  104. package/.agent/scripts/list-keys-helper.sh +488 -0
  105. package/.agent/scripts/local-browser-automation.py +339 -0
  106. package/.agent/scripts/localhost-helper.sh +744 -0
  107. package/.agent/scripts/loop-common.sh +806 -0
  108. package/.agent/scripts/mainwp-helper.sh +728 -0
  109. package/.agent/scripts/markdown-formatter.sh +338 -0
  110. package/.agent/scripts/markdown-lint-fix.sh +311 -0
  111. package/.agent/scripts/mass-fix-returns.sh +58 -0
  112. package/.agent/scripts/mcp-diagnose.sh +167 -0
  113. package/.agent/scripts/mcp-inspector-helper.sh +449 -0
  114. package/.agent/scripts/memory-helper.sh +650 -0
  115. package/.agent/scripts/monitor-code-review.sh +255 -0
  116. package/.agent/scripts/onboarding-helper.sh +706 -0
  117. package/.agent/scripts/opencode-github-setup-helper.sh +797 -0
  118. package/.agent/scripts/opencode-test-helper.sh +213 -0
  119. package/.agent/scripts/pagespeed-helper.sh +464 -0
  120. package/.agent/scripts/pandoc-helper.sh +362 -0
  121. package/.agent/scripts/postflight-check.sh +555 -0
  122. package/.agent/scripts/pre-commit-hook.sh +259 -0
  123. package/.agent/scripts/pre-edit-check.sh +169 -0
  124. package/.agent/scripts/qlty-cli.sh +356 -0
  125. package/.agent/scripts/quality-cli-manager.sh +525 -0
  126. package/.agent/scripts/quality-feedback-helper.sh +462 -0
  127. package/.agent/scripts/quality-fix.sh +263 -0
  128. package/.agent/scripts/quality-loop-helper.sh +1108 -0
  129. package/.agent/scripts/ralph-loop-helper.sh +836 -0
  130. package/.agent/scripts/ralph-upstream-check.sh +341 -0
  131. package/.agent/scripts/secretlint-helper.sh +847 -0
  132. package/.agent/scripts/servers-helper.sh +241 -0
  133. package/.agent/scripts/ses-helper.sh +619 -0
  134. package/.agent/scripts/session-review-helper.sh +404 -0
  135. package/.agent/scripts/setup-linters-wizard.sh +379 -0
  136. package/.agent/scripts/setup-local-api-keys.sh +330 -0
  137. package/.agent/scripts/setup-mcp-integrations.sh +472 -0
  138. package/.agent/scripts/shared-constants.sh +246 -0
  139. package/.agent/scripts/site-crawler-helper.sh +1487 -0
  140. package/.agent/scripts/snyk-helper.sh +940 -0
  141. package/.agent/scripts/sonarcloud-autofix.sh +193 -0
  142. package/.agent/scripts/sonarcloud-cli.sh +191 -0
  143. package/.agent/scripts/sonarscanner-cli.sh +455 -0
  144. package/.agent/scripts/spaceship-helper.sh +747 -0
  145. package/.agent/scripts/stagehand-helper.sh +321 -0
  146. package/.agent/scripts/stagehand-python-helper.sh +321 -0
  147. package/.agent/scripts/stagehand-python-setup.sh +441 -0
  148. package/.agent/scripts/stagehand-setup.sh +439 -0
  149. package/.agent/scripts/system-cleanup.sh +340 -0
  150. package/.agent/scripts/terminal-title-helper.sh +388 -0
  151. package/.agent/scripts/terminal-title-setup.sh +549 -0
  152. package/.agent/scripts/test-stagehand-both-integration.sh +317 -0
  153. package/.agent/scripts/test-stagehand-integration.sh +309 -0
  154. package/.agent/scripts/test-stagehand-python-integration.sh +341 -0
  155. package/.agent/scripts/todo-ready.sh +263 -0
  156. package/.agent/scripts/tool-version-check.sh +362 -0
  157. package/.agent/scripts/toon-helper.sh +469 -0
  158. package/.agent/scripts/twilio-helper.sh +917 -0
  159. package/.agent/scripts/updown-helper.sh +279 -0
  160. package/.agent/scripts/validate-mcp-integrations.sh +250 -0
  161. package/.agent/scripts/validate-version-consistency.sh +131 -0
  162. package/.agent/scripts/vaultwarden-helper.sh +597 -0
  163. package/.agent/scripts/vercel-cli-helper.sh +816 -0
  164. package/.agent/scripts/verify-mirrors.sh +169 -0
  165. package/.agent/scripts/version-manager.sh +831 -0
  166. package/.agent/scripts/webhosting-helper.sh +471 -0
  167. package/.agent/scripts/webhosting-verify.sh +238 -0
  168. package/.agent/scripts/wordpress-mcp-helper.sh +508 -0
  169. package/.agent/scripts/worktree-helper.sh +595 -0
  170. package/.agent/scripts/worktree-sessions.sh +577 -0
  171. package/.agent/seo/dataforseo.md +215 -0
  172. package/.agent/seo/domain-research.md +532 -0
  173. package/.agent/seo/eeat-score.md +659 -0
  174. package/.agent/seo/google-search-console.md +366 -0
  175. package/.agent/seo/gsc-sitemaps.md +282 -0
  176. package/.agent/seo/keyword-research.md +521 -0
  177. package/.agent/seo/serper.md +278 -0
  178. package/.agent/seo/site-crawler.md +387 -0
  179. package/.agent/seo.md +236 -0
  180. package/.agent/services/accounting/quickfile.md +159 -0
  181. package/.agent/services/communications/telfon.md +470 -0
  182. package/.agent/services/communications/twilio.md +569 -0
  183. package/.agent/services/crm/fluentcrm.md +449 -0
  184. package/.agent/services/email/ses.md +399 -0
  185. package/.agent/services/hosting/101domains.md +378 -0
  186. package/.agent/services/hosting/closte.md +177 -0
  187. package/.agent/services/hosting/cloudflare.md +251 -0
  188. package/.agent/services/hosting/cloudron.md +478 -0
  189. package/.agent/services/hosting/dns-providers.md +335 -0
  190. package/.agent/services/hosting/domain-purchasing.md +344 -0
  191. package/.agent/services/hosting/hetzner.md +327 -0
  192. package/.agent/services/hosting/hostinger.md +287 -0
  193. package/.agent/services/hosting/localhost.md +419 -0
  194. package/.agent/services/hosting/spaceship.md +353 -0
  195. package/.agent/services/hosting/webhosting.md +330 -0
  196. package/.agent/social-media.md +69 -0
  197. package/.agent/templates/plans-template.md +114 -0
  198. package/.agent/templates/prd-template.md +129 -0
  199. package/.agent/templates/tasks-template.md +108 -0
  200. package/.agent/templates/todo-template.md +89 -0
  201. package/.agent/tools/ai-assistants/agno.md +471 -0
  202. package/.agent/tools/ai-assistants/capsolver.md +326 -0
  203. package/.agent/tools/ai-assistants/configuration.md +221 -0
  204. package/.agent/tools/ai-assistants/overview.md +209 -0
  205. package/.agent/tools/ai-assistants/status.md +171 -0
  206. package/.agent/tools/ai-assistants/windsurf.md +193 -0
  207. package/.agent/tools/ai-orchestration/autogen.md +406 -0
  208. package/.agent/tools/ai-orchestration/crewai.md +445 -0
  209. package/.agent/tools/ai-orchestration/langflow.md +405 -0
  210. package/.agent/tools/ai-orchestration/openprose.md +487 -0
  211. package/.agent/tools/ai-orchestration/overview.md +362 -0
  212. package/.agent/tools/ai-orchestration/packaging.md +647 -0
  213. package/.agent/tools/browser/agent-browser.md +464 -0
  214. package/.agent/tools/browser/browser-automation.md +400 -0
  215. package/.agent/tools/browser/chrome-devtools.md +282 -0
  216. package/.agent/tools/browser/crawl4ai-integration.md +422 -0
  217. package/.agent/tools/browser/crawl4ai-resources.md +277 -0
  218. package/.agent/tools/browser/crawl4ai-usage.md +416 -0
  219. package/.agent/tools/browser/crawl4ai.md +585 -0
  220. package/.agent/tools/browser/dev-browser.md +341 -0
  221. package/.agent/tools/browser/pagespeed.md +260 -0
  222. package/.agent/tools/browser/playwright.md +266 -0
  223. package/.agent/tools/browser/playwriter.md +310 -0
  224. package/.agent/tools/browser/stagehand-examples.md +456 -0
  225. package/.agent/tools/browser/stagehand-python.md +483 -0
  226. package/.agent/tools/browser/stagehand.md +421 -0
  227. package/.agent/tools/build-agent/agent-review.md +224 -0
  228. package/.agent/tools/build-agent/build-agent.md +784 -0
  229. package/.agent/tools/build-mcp/aidevops-plugin.md +476 -0
  230. package/.agent/tools/build-mcp/api-wrapper.md +445 -0
  231. package/.agent/tools/build-mcp/build-mcp.md +240 -0
  232. package/.agent/tools/build-mcp/deployment.md +401 -0
  233. package/.agent/tools/build-mcp/server-patterns.md +632 -0
  234. package/.agent/tools/build-mcp/transports.md +366 -0
  235. package/.agent/tools/code-review/auditing.md +383 -0
  236. package/.agent/tools/code-review/automation.md +219 -0
  237. package/.agent/tools/code-review/best-practices.md +203 -0
  238. package/.agent/tools/code-review/codacy.md +151 -0
  239. package/.agent/tools/code-review/code-simplifier.md +174 -0
  240. package/.agent/tools/code-review/code-standards.md +309 -0
  241. package/.agent/tools/code-review/coderabbit.md +101 -0
  242. package/.agent/tools/code-review/management.md +155 -0
  243. package/.agent/tools/code-review/qlty.md +248 -0
  244. package/.agent/tools/code-review/secretlint.md +565 -0
  245. package/.agent/tools/code-review/setup.md +250 -0
  246. package/.agent/tools/code-review/snyk.md +563 -0
  247. package/.agent/tools/code-review/tools.md +230 -0
  248. package/.agent/tools/content/summarize.md +353 -0
  249. package/.agent/tools/context/augment-context-engine.md +468 -0
  250. package/.agent/tools/context/context-builder-agent.md +76 -0
  251. package/.agent/tools/context/context-builder.md +375 -0
  252. package/.agent/tools/context/context7.md +371 -0
  253. package/.agent/tools/context/dspy.md +302 -0
  254. package/.agent/tools/context/dspyground.md +374 -0
  255. package/.agent/tools/context/llm-tldr.md +219 -0
  256. package/.agent/tools/context/osgrep.md +488 -0
  257. package/.agent/tools/context/prompt-optimization.md +338 -0
  258. package/.agent/tools/context/toon.md +292 -0
  259. package/.agent/tools/conversion/pandoc.md +304 -0
  260. package/.agent/tools/credentials/api-key-management.md +154 -0
  261. package/.agent/tools/credentials/api-key-setup.md +224 -0
  262. package/.agent/tools/credentials/environment-variables.md +180 -0
  263. package/.agent/tools/credentials/vaultwarden.md +382 -0
  264. package/.agent/tools/data-extraction/outscraper.md +974 -0
  265. package/.agent/tools/deployment/coolify-cli.md +388 -0
  266. package/.agent/tools/deployment/coolify-setup.md +353 -0
  267. package/.agent/tools/deployment/coolify.md +345 -0
  268. package/.agent/tools/deployment/vercel.md +390 -0
  269. package/.agent/tools/git/authentication.md +132 -0
  270. package/.agent/tools/git/gitea-cli.md +193 -0
  271. package/.agent/tools/git/github-actions.md +207 -0
  272. package/.agent/tools/git/github-cli.md +223 -0
  273. package/.agent/tools/git/gitlab-cli.md +190 -0
  274. package/.agent/tools/git/opencode-github-security.md +350 -0
  275. package/.agent/tools/git/opencode-github.md +328 -0
  276. package/.agent/tools/git/opencode-gitlab.md +252 -0
  277. package/.agent/tools/git/security.md +196 -0
  278. package/.agent/tools/git.md +207 -0
  279. package/.agent/tools/opencode/oh-my-opencode.md +375 -0
  280. package/.agent/tools/opencode/opencode-anthropic-auth.md +446 -0
  281. package/.agent/tools/opencode/opencode.md +651 -0
  282. package/.agent/tools/social-media/bird.md +437 -0
  283. package/.agent/tools/task-management/beads.md +336 -0
  284. package/.agent/tools/terminal/terminal-title.md +251 -0
  285. package/.agent/tools/ui/shadcn.md +196 -0
  286. package/.agent/tools/ui/ui-skills.md +115 -0
  287. package/.agent/tools/wordpress/localwp.md +311 -0
  288. package/.agent/tools/wordpress/mainwp.md +391 -0
  289. package/.agent/tools/wordpress/scf.md +527 -0
  290. package/.agent/tools/wordpress/wp-admin.md +729 -0
  291. package/.agent/tools/wordpress/wp-dev.md +940 -0
  292. package/.agent/tools/wordpress/wp-preferred.md +398 -0
  293. package/.agent/tools/wordpress.md +95 -0
  294. package/.agent/workflows/branch/bugfix.md +63 -0
  295. package/.agent/workflows/branch/chore.md +95 -0
  296. package/.agent/workflows/branch/experiment.md +115 -0
  297. package/.agent/workflows/branch/feature.md +59 -0
  298. package/.agent/workflows/branch/hotfix.md +98 -0
  299. package/.agent/workflows/branch/refactor.md +92 -0
  300. package/.agent/workflows/branch/release.md +96 -0
  301. package/.agent/workflows/branch.md +347 -0
  302. package/.agent/workflows/bug-fixing.md +267 -0
  303. package/.agent/workflows/changelog.md +129 -0
  304. package/.agent/workflows/code-audit-remote.md +279 -0
  305. package/.agent/workflows/conversation-starter.md +69 -0
  306. package/.agent/workflows/error-feedback.md +578 -0
  307. package/.agent/workflows/feature-development.md +355 -0
  308. package/.agent/workflows/git-workflow.md +702 -0
  309. package/.agent/workflows/multi-repo-workspace.md +268 -0
  310. package/.agent/workflows/plans.md +709 -0
  311. package/.agent/workflows/postflight.md +604 -0
  312. package/.agent/workflows/pr.md +571 -0
  313. package/.agent/workflows/preflight.md +278 -0
  314. package/.agent/workflows/ralph-loop.md +773 -0
  315. package/.agent/workflows/release.md +498 -0
  316. package/.agent/workflows/session-manager.md +254 -0
  317. package/.agent/workflows/session-review.md +311 -0
  318. package/.agent/workflows/sql-migrations.md +631 -0
  319. package/.agent/workflows/version-bump.md +283 -0
  320. package/.agent/workflows/wiki-update.md +333 -0
  321. package/.agent/workflows/worktree.md +477 -0
  322. package/LICENSE +21 -0
  323. package/README.md +1446 -0
  324. package/VERSION +1 -0
  325. package/aidevops.sh +1746 -0
  326. package/bin/aidevops +21 -0
  327. package/package.json +75 -0
  328. package/scripts/npm-postinstall.js +60 -0
  329. package/setup.sh +2366 -0
@@ -0,0 +1,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 "$@"