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,341 @@
1
+ #!/bin/bash
2
+ # shellcheck disable=SC2329
3
+ # =============================================================================
4
+ # Ralph Upstream Check - Compare with Claude Code Plugin
5
+ # =============================================================================
6
+ # Checks for updates to the upstream Claude Code ralph-wiggum plugin
7
+ # and reports any significant changes we might want to incorporate.
8
+ #
9
+ # Usage:
10
+ # ralph-upstream-check.sh [--verbose]
11
+ #
12
+ # This script is called automatically when starting an OpenCode session
13
+ # in the aidevops repository.
14
+ #
15
+ # Author: AI DevOps Framework
16
+ # =============================================================================
17
+
18
+ set -euo pipefail
19
+
20
+ # =============================================================================
21
+ # Constants
22
+ # =============================================================================
23
+
24
+ readonly UPSTREAM_REPO="anthropics/claude-code"
25
+ readonly UPSTREAM_PATH="plugins/ralph-wiggum"
26
+ readonly UPSTREAM_API="https://api.github.com/repos/${UPSTREAM_REPO}/contents/${UPSTREAM_PATH}"
27
+ readonly CACHE_DIR="$HOME/.cache/aidevops"
28
+ readonly CACHE_FILE="${CACHE_DIR}/ralph-upstream-check.json"
29
+ readonly CACHE_TTL=86400 # 24 hours in seconds
30
+
31
+ # Colors
32
+ readonly GREEN='\033[0;32m'
33
+ readonly YELLOW='\033[1;33m'
34
+ readonly BLUE='\033[0;34m'
35
+ readonly NC='\033[0m'
36
+
37
+ # =============================================================================
38
+ # Helper Functions
39
+ # =============================================================================
40
+
41
+ verbose=false
42
+
43
+ log_info() {
44
+ echo -e "${BLUE}[ralph-upstream]${NC} $1"
45
+ return 0
46
+ }
47
+
48
+ log_success() {
49
+ echo -e "${GREEN}[ralph-upstream]${NC} $1"
50
+ return 0
51
+ }
52
+
53
+ log_warning() {
54
+ echo -e "${YELLOW}[ralph-upstream]${NC} $1"
55
+ return 0
56
+ }
57
+
58
+ log_verbose() {
59
+ if [[ "$verbose" == "true" ]]; then
60
+ echo -e "${BLUE}[ralph-upstream]${NC} $1"
61
+ fi
62
+ return 0
63
+ }
64
+
65
+ # =============================================================================
66
+ # Cache Functions
67
+ # =============================================================================
68
+
69
+ ensure_cache_dir() {
70
+ mkdir -p "$CACHE_DIR"
71
+ return 0
72
+ }
73
+
74
+ is_cache_valid() {
75
+ if [[ ! -f "$CACHE_FILE" ]]; then
76
+ return 1
77
+ fi
78
+
79
+ local cache_time
80
+ cache_time=$(stat -f %m "$CACHE_FILE" 2>/dev/null || stat -c %Y "$CACHE_FILE" 2>/dev/null || echo 0)
81
+ local current_time
82
+ current_time=$(date +%s)
83
+ local age=$((current_time - cache_time))
84
+
85
+ if [[ $age -lt $CACHE_TTL ]]; then
86
+ return 0
87
+ fi
88
+ return 1
89
+ }
90
+
91
+ read_cache() {
92
+ if [[ -f "$CACHE_FILE" ]]; then
93
+ cat "$CACHE_FILE"
94
+ fi
95
+ return 0
96
+ }
97
+
98
+ write_cache() {
99
+ local data="$1"
100
+ ensure_cache_dir
101
+ echo "$data" > "$CACHE_FILE"
102
+ return 0
103
+ }
104
+
105
+ # =============================================================================
106
+ # API Functions
107
+ # =============================================================================
108
+
109
+ fetch_upstream_info() {
110
+ local response
111
+
112
+ # Try to fetch from GitHub API
113
+ if ! response=$(curl -sf -H "Accept: application/vnd.github.v3+json" "$UPSTREAM_API" 2>/dev/null); then
114
+ log_verbose "Failed to fetch upstream info (network error or rate limit)"
115
+ return 1
116
+ fi
117
+
118
+ echo "$response"
119
+ }
120
+
121
+ get_file_sha() {
122
+ local json="$1"
123
+ local filename="$2"
124
+
125
+ echo "$json" | jq -r ".[] | select(.name == \"$filename\") | .sha" 2>/dev/null || echo ""
126
+ return 0
127
+ }
128
+
129
+ fetch_file_content() {
130
+ local filename="$1"
131
+ local url="https://raw.githubusercontent.com/${UPSTREAM_REPO}/main/${UPSTREAM_PATH}/${filename}"
132
+
133
+ curl -sf "$url" 2>/dev/null || echo ""
134
+ return 0
135
+ }
136
+
137
+ # =============================================================================
138
+ # Comparison Functions
139
+ # =============================================================================
140
+
141
+ extract_version() {
142
+ local content="$1"
143
+ # Try to extract version from plugin.json or package.json
144
+ echo "$content" | jq -r '.version // empty' 2>/dev/null || echo "unknown"
145
+ return 0
146
+ }
147
+
148
+ compare_implementations() {
149
+ local upstream_readme
150
+ local upstream_setup
151
+ local changes_found=false
152
+
153
+ log_verbose "Fetching upstream README.md..." >&2
154
+ upstream_readme=$(fetch_file_content "README.md")
155
+
156
+ log_verbose "Fetching upstream setup script..." >&2
157
+ upstream_setup=$(fetch_file_content "scripts/setup-ralph-loop.sh")
158
+
159
+ # Check for new features in README
160
+ if [[ -n "$upstream_readme" ]]; then
161
+ # Look for new options we don't have
162
+ local new_options
163
+ new_options=$(echo "$upstream_readme" | grep -oE '\-\-[a-z-]+' | sort -u | grep -vE 'max-iterations|completion-promise|help' || true)
164
+ if [[ -n "$new_options" ]]; then
165
+ log_warning "Upstream may have new command-line options:" >&2
166
+ echo "$new_options" | head -5 >&2
167
+ changes_found=true
168
+ fi
169
+
170
+ # Check for new sections
171
+ local new_sections
172
+ new_sections=$(echo "$upstream_readme" | grep -E '^## ' | grep -vE 'What is Ralph|Quick Start|Commands|Philosophy|When to Use|Learn More|Prompt Writing|Completion Promise|State File|Cross-Tool|Monitoring|Real-World|For Help' || true)
173
+ if [[ -n "$new_sections" ]]; then
174
+ log_warning "Upstream has new documentation sections:" >&2
175
+ echo "$new_sections" | head -5 >&2
176
+ changes_found=true
177
+ fi
178
+ fi
179
+
180
+ # Check for new features in setup script
181
+ if [[ -n "$upstream_setup" ]]; then
182
+ # Look for new case options
183
+ local upstream_options
184
+ upstream_options=$(echo "$upstream_setup" | grep -E '^\s+--[a-z-]+\)' | sed 's/)//' | tr -d ' ' || true)
185
+
186
+ local our_options="max-iterations completion-promise help"
187
+
188
+ for opt in $upstream_options; do
189
+ # Strip leading dashes for comparison
190
+ local opt_name="${opt#--}"
191
+ if ! echo "$our_options" | grep -qF "$opt_name"; then
192
+ log_warning "Upstream has new option: $opt" >&2
193
+ changes_found=true
194
+ fi
195
+ done
196
+ fi
197
+
198
+ if [[ "$changes_found" == "false" ]]; then
199
+ log_success "No significant upstream changes detected" >&2
200
+ fi
201
+
202
+ echo "$changes_found"
203
+ return 0
204
+ }
205
+
206
+ # =============================================================================
207
+ # Main Check Function
208
+ # =============================================================================
209
+
210
+ check_upstream() {
211
+ log_info "Checking for upstream ralph-wiggum plugin updates..."
212
+
213
+ # Check cache first
214
+ if is_cache_valid; then
215
+ local cached
216
+ cached=$(read_cache)
217
+ local cached_result
218
+ cached_result=$(echo "$cached" | jq -r '.result // "unknown"' 2>/dev/null || echo "unknown")
219
+
220
+ if [[ "$cached_result" == "no_changes" ]]; then
221
+ log_verbose "Cache valid, no changes (checked within 24h)"
222
+ return 0
223
+ elif [[ "$cached_result" == "changes_found" ]]; then
224
+ log_warning "Upstream changes detected (from cache). Run with --verbose for details."
225
+ return 0
226
+ fi
227
+ fi
228
+
229
+ # Fetch upstream info
230
+ local upstream_info
231
+ if ! upstream_info=$(fetch_upstream_info); then
232
+ log_verbose "Could not check upstream (offline or rate limited)"
233
+ return 0
234
+ fi
235
+
236
+ # Get current SHAs
237
+ local readme_sha
238
+ local setup_sha
239
+ readme_sha=$(get_file_sha "$upstream_info" "README.md")
240
+ setup_sha=$(get_file_sha "$upstream_info" "scripts")
241
+
242
+ # Check against cached SHAs
243
+ local cached_readme_sha=""
244
+ local cached_setup_sha=""
245
+ if [[ -f "$CACHE_FILE" ]]; then
246
+ cached_readme_sha=$(jq -r '.readme_sha // ""' "$CACHE_FILE" 2>/dev/null || echo "")
247
+ cached_setup_sha=$(jq -r '.setup_sha // ""' "$CACHE_FILE" 2>/dev/null || echo "")
248
+ fi
249
+
250
+ # If SHAs match, no changes
251
+ if [[ "$readme_sha" == "$cached_readme_sha" ]] && [[ "$setup_sha" == "$cached_setup_sha" ]] && [[ -n "$cached_readme_sha" ]]; then
252
+ log_verbose "Upstream unchanged since last check"
253
+ write_cache "{\"result\": \"no_changes\", \"readme_sha\": \"$readme_sha\", \"setup_sha\": \"$setup_sha\", \"checked\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}"
254
+ return 0
255
+ fi
256
+
257
+ # SHAs differ or first check - do detailed comparison
258
+ log_info "Upstream files have changed, analyzing..."
259
+ local changes_found
260
+ changes_found=$(compare_implementations)
261
+
262
+ # Update cache
263
+ local result="no_changes"
264
+ if [[ "$changes_found" == "true" ]]; then
265
+ result="changes_found"
266
+ log_warning "Review upstream changes: https://github.com/${UPSTREAM_REPO}/tree/main/${UPSTREAM_PATH}"
267
+ fi
268
+
269
+ write_cache "{\"result\": \"$result\", \"readme_sha\": \"$readme_sha\", \"setup_sha\": \"$setup_sha\", \"checked\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}"
270
+
271
+ return 0
272
+ }
273
+
274
+ show_help() {
275
+ cat << 'EOF'
276
+ Ralph Upstream Check - Compare with Claude Code Plugin
277
+
278
+ USAGE:
279
+ ralph-upstream-check.sh [OPTIONS]
280
+
281
+ OPTIONS:
282
+ --verbose, -v Show detailed output
283
+ --force, -f Force check (ignore cache)
284
+ --help, -h Show this help
285
+
286
+ DESCRIPTION:
287
+ Checks for updates to the upstream Claude Code ralph-wiggum plugin
288
+ and reports any significant changes we might want to incorporate.
289
+
290
+ Results are cached for 24 hours to avoid excessive API calls.
291
+
292
+ This script runs automatically when starting an OpenCode session
293
+ in the aidevops repository.
294
+
295
+ UPSTREAM:
296
+ https://github.com/anthropics/claude-code/tree/main/plugins/ralph-wiggum
297
+ EOF
298
+ return 0
299
+ }
300
+
301
+ # =============================================================================
302
+ # Main
303
+ # =============================================================================
304
+
305
+ main() {
306
+ local force=false
307
+
308
+ while [[ $# -gt 0 ]]; do
309
+ case $1 in
310
+ --verbose|-v)
311
+ verbose=true
312
+ shift
313
+ ;;
314
+ --force|-f)
315
+ force=true
316
+ shift
317
+ ;;
318
+ --help|-h)
319
+ show_help
320
+ return 0
321
+ ;;
322
+ *)
323
+ echo "Unknown option: $1" >&2
324
+ show_help
325
+ return 1
326
+ ;;
327
+ esac
328
+ done
329
+
330
+ # Clear cache if force
331
+ if [[ "$force" == "true" ]] && [[ -f "$CACHE_FILE" ]]; then
332
+ rm -f "$CACHE_FILE"
333
+ fi
334
+
335
+ check_upstream
336
+
337
+ return 0
338
+ }
339
+
340
+ main "$@"
341
+ exit $?