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,597 @@
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
+ # Vaultwarden (Self-hosted Bitwarden) Helper Script
5
+ # Secure password and secrets management for AI assistants
6
+
7
+ # Colors for output
8
+ # String literal constants
9
+ readonly ERROR_CONFIG_NOT_FOUND="Configuration file not found"
10
+ readonly ERROR_JQ_REQUIRED="jq is required but not installed"
11
+ readonly INFO_JQ_INSTALL_MACOS="Install with: brew install jq"
12
+ readonly INFO_JQ_INSTALL_UBUNTU="Install with: apt-get install jq"
13
+ readonly ERROR_CURL_REQUIRED="curl is required but not installed"
14
+
15
+ GREEN='\033[0;32m'
16
+ BLUE='\033[0;34m'
17
+ YELLOW='\033[1;33m'
18
+ RED='\033[0;31m'
19
+ NC='\033[0m' # No Color
20
+
21
+ # Common message constants
22
+ readonly HELP_SHOW_MESSAGE="Show this help"
23
+ readonly USAGE_COMMAND_OPTIONS="Usage: $0 <command> [options]"
24
+
25
+ print_info() {
26
+ local msg="$1"
27
+ echo -e "${BLUE}[INFO]${NC} $msg"
28
+ return 0
29
+ }
30
+
31
+ print_success() {
32
+ local msg="$1"
33
+ echo -e "${GREEN}[SUCCESS]${NC} $msg"
34
+ return 0
35
+ }
36
+
37
+ print_warning() {
38
+ local msg="$1"
39
+ echo -e "${YELLOW}[WARNING]${NC} $msg"
40
+ return 0
41
+ }
42
+
43
+ print_error() {
44
+ local msg="$1"
45
+ echo -e "${RED}[ERROR]${NC} $msg" >&2
46
+ return 0
47
+ }
48
+
49
+ CONFIG_FILE="../configs/vaultwarden-config.json"
50
+
51
+ # Check dependencies
52
+ check_dependencies() {
53
+ if ! command -v curl &> /dev/null; then
54
+ print_error "$ERROR_CURL_REQUIRED"
55
+ exit 1
56
+ fi
57
+
58
+ if ! command -v jq &> /dev/null; then
59
+ print_error "$ERROR_JQ_REQUIRED"
60
+ echo "$INFO_JQ_INSTALL_MACOS"
61
+ echo "$INFO_JQ_INSTALL_UBUNTU"
62
+ exit 1
63
+ fi
64
+
65
+ if ! command -v bw &> /dev/null; then
66
+ print_warning "Bitwarden CLI not found. Install with:"
67
+ echo " npm install -g @bitwarden/cli"
68
+ echo " Or download from: https://bitwarden.com/download/"
69
+ fi
70
+ return 0
71
+ }
72
+
73
+ # Load configuration
74
+ load_config() {
75
+ if [[ ! -f "$CONFIG_FILE" ]]; then
76
+ print_error "$ERROR_CONFIG_NOT_FOUND"
77
+ print_info "Copy and customize: cp ../configs/vaultwarden-config.json.txt $CONFIG_FILE"
78
+ exit 1
79
+ fi
80
+ return 0
81
+ }
82
+
83
+ # Get instance configuration
84
+ get_instance_config() {
85
+ local instance_name="$command"
86
+
87
+ if [[ -z "$instance_name" ]]; then
88
+ print_error "Instance name is required"
89
+ list_instances
90
+ exit 1
91
+ fi
92
+
93
+ local instance_config
94
+ instance_config=$(jq -r ".instances.\"$instance_name\"" "$CONFIG_FILE")
95
+ if [[ "$instance_config" == "null" ]]; then
96
+ print_error "Instance '$instance_name' not found in configuration"
97
+ list_instances
98
+ exit 1
99
+ fi
100
+
101
+ echo "$instance_config"
102
+ return 0
103
+ }
104
+
105
+ # Configure Bitwarden CLI for instance
106
+ configure_bw_cli() {
107
+ local instance_name="$command"
108
+ local config
109
+ config=$(get_instance_config "$instance_name")
110
+ local server_url
111
+ server_url=$(echo "$config" | jq -r '.server_url')
112
+
113
+ if [[ "$server_url" != "null" ]]; then
114
+ bw config server "$server_url"
115
+ print_info "Configured Bitwarden CLI for server: $server_url"
116
+ fi
117
+ return 0
118
+ }
119
+
120
+ # Login to Bitwarden
121
+ login_bw() {
122
+ local instance_name="$command"
123
+ local email="$account_name"
124
+ local password="$target"
125
+
126
+ configure_bw_cli "$instance_name"
127
+
128
+ if [[ -n "$email" && -n "$password" ]]; then
129
+ echo "$password" | bw login "$email" --raw
130
+ else
131
+ print_info "Interactive login required"
132
+ bw login
133
+ fi
134
+ return 0
135
+ }
136
+
137
+ # Unlock vault
138
+ unlock_vault() {
139
+ local password="$command"
140
+
141
+ if [[ -n "$password" ]]; then
142
+ echo "$password" | bw unlock --raw
143
+ else
144
+ print_info "Interactive unlock required"
145
+ bw unlock
146
+ fi
147
+ return 0
148
+ }
149
+
150
+ # List all configured instances
151
+ list_instances() {
152
+ load_config
153
+ print_info "Available Vaultwarden instances:"
154
+ jq -r '.instances | keys[]' "$CONFIG_FILE" | while read instance; do
155
+ local description
156
+ description=$(jq -r ".instances.\"$instance\".description" "$CONFIG_FILE")
157
+ local server_url
158
+ server_url=$(jq -r ".instances.\"$instance\".server_url" "$CONFIG_FILE")
159
+ echo " - $instance ($server_url) - $description"
160
+ done
161
+ return 0
162
+ }
163
+
164
+ # Get vault status
165
+ get_vault_status() {
166
+ local instance_name="$command"
167
+ configure_bw_cli "$instance_name"
168
+
169
+ print_info "Vault status for instance: $instance_name"
170
+ bw status
171
+ return 0
172
+ }
173
+
174
+ # List vault items
175
+ list_vault_items() {
176
+ local instance_name="$command"
177
+ local item_type="${2:-}"
178
+
179
+ configure_bw_cli "$instance_name"
180
+
181
+ if [[ -n "$item_type" ]]; then
182
+ print_info "Listing $item_type items"
183
+ bw list items --search "$item_type" | jq -r '.[] | "\(.id): \(.name) (\(.type))"'
184
+ else
185
+ print_info "Listing all vault items"
186
+ bw list items | jq -r '.[] | "\(.id): \(.name) (\(.type))"'
187
+ fi
188
+ return 0
189
+ }
190
+
191
+ # Get specific item
192
+ get_vault_item() {
193
+ local instance_name="$command"
194
+ local item_id="$account_name"
195
+
196
+ configure_bw_cli "$instance_name"
197
+
198
+ if [[ -z "$item_id" ]]; then
199
+ print_error "Item ID is required"
200
+ exit 1
201
+ fi
202
+
203
+ print_info "Getting vault item: $item_id"
204
+ bw get item "$item_id"
205
+ return 0
206
+ }
207
+
208
+ # Search vault items
209
+ search_vault() {
210
+ local instance_name="$command"
211
+ local search_term="$account_name"
212
+
213
+ configure_bw_cli "$instance_name"
214
+
215
+ if [[ -z "$search_term" ]]; then
216
+ print_error "Search term is required"
217
+ exit 1
218
+ fi
219
+
220
+ print_info "Searching vault for: $search_term"
221
+ bw list items --search "$search_term" | jq -r '.[] | "\(.id): \(.name) - \(.login.username // .notes // "N/A")"'
222
+ return 0
223
+ }
224
+
225
+ # Get password for item
226
+ get_password() {
227
+ local instance_name="$command"
228
+ local item_name="$account_name"
229
+
230
+ configure_bw_cli "$instance_name"
231
+
232
+ if [[ -z "$item_name" ]]; then
233
+ print_error "Item name is required"
234
+ exit 1
235
+ fi
236
+
237
+ print_info "Getting password for: $item_name"
238
+ bw get password "$item_name"
239
+ return 0
240
+ }
241
+
242
+ # Get username for item
243
+ get_username() {
244
+ local instance_name="$command"
245
+ local item_name="$account_name"
246
+
247
+ configure_bw_cli "$instance_name"
248
+
249
+ if [[ -z "$item_name" ]]; then
250
+ print_error "Item name is required"
251
+ exit 1
252
+ fi
253
+
254
+ print_info "Getting username for: $item_name"
255
+ bw get username "$item_name"
256
+ return 0
257
+ }
258
+
259
+ # Create new vault item
260
+ create_vault_item() {
261
+ local instance_name="$command"
262
+ local item_name="$account_name"
263
+ local username="$target"
264
+ local password="$options"
265
+ local uri="$param5"
266
+
267
+ configure_bw_cli "$instance_name"
268
+
269
+ if [[ -z "$item_name" || -z "$username" || -z "$password" ]]; then
270
+ print_error "Item name, username, and password are required"
271
+ exit 1
272
+ fi
273
+
274
+ local item_json=$(jq -n \
275
+ --arg name "$item_name" \
276
+ --arg username "$username" \
277
+ --arg password "$password" \
278
+ --arg uri "$uri" \
279
+ '{
280
+ type: 1,
281
+ name: $name,
282
+ login: {
283
+ username: $username,
284
+ password: $password,
285
+ uris: [{ uri: $uri }]
286
+ return 0
287
+ }
288
+ }')
289
+
290
+ print_info "Creating vault item: $item_name"
291
+ echo "$item_json" | bw create item
292
+ return 0
293
+ }
294
+
295
+ # Update vault item
296
+ update_vault_item() {
297
+ local instance_name="$command"
298
+ local item_id="$account_name"
299
+ local field="$target"
300
+ local value="$options"
301
+
302
+ configure_bw_cli "$instance_name"
303
+
304
+ if [[ -z "$item_id" || -z "$field" || -z "$value" ]]; then
305
+ print_error "Item ID, field, and value are required"
306
+ exit 1
307
+ fi
308
+
309
+ print_info "Updating vault item: $item_id"
310
+ bw get item "$item_id" | jq --arg field "$field" --arg value "$value" \
311
+ 'if $field == "password" then .login.password = $value
312
+ elif $field == "username" then .login.username = $value
313
+ elif $field == "name" then .name = $value
314
+ else . end' | bw encode | bw edit item "$item_id"
315
+ return 0
316
+ }
317
+
318
+ # Delete vault item
319
+ delete_vault_item() {
320
+ local instance_name="$command"
321
+ local item_id="$account_name"
322
+
323
+ configure_bw_cli "$instance_name"
324
+
325
+ if [[ -z "$item_id" ]]; then
326
+ print_error "Item ID is required"
327
+ exit 1
328
+ fi
329
+
330
+ print_warning "Deleting vault item: $item_id"
331
+ bw delete item "$item_id"
332
+ return 0
333
+ }
334
+
335
+ # Generate secure password
336
+ generate_password() {
337
+ local length="${1:-16}"
338
+ local include_symbols="${2:-true}"
339
+
340
+ if [[ "$include_symbols" == "true" ]]; then
341
+ bw generate --length "$length" --uppercase --lowercase --number --special
342
+ else
343
+ bw generate --length "$length" --uppercase --lowercase --number
344
+ fi
345
+ return 0
346
+ }
347
+
348
+ # Sync vault
349
+ sync_vault() {
350
+ local instance_name="$command"
351
+ configure_bw_cli "$instance_name"
352
+
353
+ print_info "Syncing vault for instance: $instance_name"
354
+ bw sync
355
+ return 0
356
+ }
357
+
358
+ # Lock vault
359
+ lock_vault() {
360
+ print_info "Locking vault"
361
+ bw lock
362
+ return 0
363
+ }
364
+
365
+ # Export vault
366
+ export_vault() {
367
+ local instance_name="$command"
368
+ local format="${2:-json}"
369
+ local output_file="$target"
370
+
371
+ configure_bw_cli "$instance_name"
372
+
373
+ if [[ -z "$output_file" ]]; then
374
+ output_file="vault-export-$(date +%Y%m%d-%H%M%S).$format"
375
+ fi
376
+
377
+ print_info "Exporting vault to: $output_file"
378
+ bw export --format "$format" --output "$output_file"
379
+
380
+ # Secure the export file
381
+ chmod 600 "$output_file"
382
+ print_warning "Export file secured with 600 permissions"
383
+ return 0
384
+ }
385
+
386
+ # Get organization vault items
387
+ list_org_vault() {
388
+ local instance_name="$command"
389
+ local org_id="$account_name"
390
+
391
+ configure_bw_cli "$instance_name"
392
+
393
+ if [[ -z "$org_id" ]]; then
394
+ print_error "Organization ID is required"
395
+ exit 1
396
+ fi
397
+
398
+ print_info "Listing organization vault items"
399
+ bw list items --organizationid "$org_id" | jq -r '.[] | "\(.id): \(.name) (\(.type))"'
400
+ return 0
401
+ }
402
+
403
+ # Start MCP server for Bitwarden
404
+ start_mcp_server() {
405
+ local instance_name="$command"
406
+ local port="${2:-3002}"
407
+
408
+ configure_bw_cli "$instance_name"
409
+
410
+ print_info "Starting Bitwarden MCP server on port $port"
411
+
412
+ # Check if Bitwarden MCP server is available
413
+ if command -v bitwarden-mcp-server &> /dev/null; then
414
+ bitwarden-mcp-server --port "$port"
415
+ else
416
+ print_warning "Bitwarden MCP server not found. Install with:"
417
+ echo " npm install -g @bitwarden/mcp-server"
418
+ echo " Or clone from: https://github.com/bitwarden/mcp-server"
419
+ fi
420
+ return 0
421
+ }
422
+
423
+ # Test MCP server connection
424
+ test_mcp_connection() {
425
+ local port="${1:-3002}"
426
+
427
+ print_info "Testing MCP server connection on port $port"
428
+
429
+ if curl -s "http://localhost:$port/health" > /dev/null; then
430
+ print_success "MCP server is responding on port $port"
431
+ else
432
+ print_error "MCP server is not responding on port $port"
433
+ fi
434
+ return 0
435
+ }
436
+
437
+ # Audit vault security
438
+ audit_vault_security() {
439
+ local instance_name="$command"
440
+ configure_bw_cli "$instance_name"
441
+
442
+ print_info "Auditing vault security for instance: $instance_name"
443
+ echo ""
444
+
445
+ print_info "=== WEAK PASSWORDS ==="
446
+ bw list items | jq -r '.[] | select(.type == 1) | select(.login.password != null) | select((.login.password | length) < 8) | "\(.name): Password too short (\(.login.password | length) chars)"'
447
+
448
+ echo ""
449
+ print_info "=== DUPLICATE PASSWORDS ==="
450
+ bw list items | jq -r '.[] | select(.type == 1) | .login.password' | sort | uniq -d | while read password; do
451
+ if [[ -n "$password" ]]; then
452
+ echo "Duplicate password found (length: ${#password})"
453
+ fi
454
+ done
455
+
456
+ echo ""
457
+ print_info "=== ITEMS WITHOUT PASSWORDS ==="
458
+ bw list items | jq -r '.[] | select(.type == 1) | select(.login.password == null or .login.password == "") | "\(.name): No password set"'
459
+ return 0
460
+ }
461
+
462
+ # Show help
463
+ show_help() {
464
+ echo "Vaultwarden (Self-hosted Bitwarden) Helper Script"
465
+ echo "Usage: $0 [command] [instance] [options]"
466
+ echo ""
467
+ echo "Commands:"
468
+ echo " instances - List all configured instances"
469
+ echo " status [instance] - Get vault status"
470
+ echo " login [instance] [email] [password] - Login to vault"
471
+ echo " unlock [password] - Unlock vault"
472
+ echo " lock - Lock vault"
473
+ echo " sync [instance] - Sync vault"
474
+ echo " list [instance] [type] - List vault items"
475
+ echo " search [instance] [term] - Search vault items"
476
+ echo " get [instance] [item_id] - Get specific item"
477
+ echo " get-password [instance] [item_name] - Get password for item"
478
+ echo " get-username [instance] [item_name] - Get username for item"
479
+ echo " create [instance] [name] [username] [password] [uri] - Create new item"
480
+ echo " update [instance] [item_id] [field] [value] - Update item field"
481
+ echo " delete [instance] [item_id] - Delete item"
482
+ echo " generate [length] [include_symbols] - Generate secure password"
483
+ echo " export [instance] [format] [output_file] - Export vault"
484
+ echo " org-list [instance] [org_id] - List organization items"
485
+ echo " start-mcp [instance] [port] - Start MCP server"
486
+ echo " test-mcp [port] - Test MCP connection"
487
+ echo " audit [instance] - Audit vault security"
488
+ echo " help - $HELP_SHOW_MESSAGE"
489
+ echo ""
490
+ echo "Examples:"
491
+ echo " $0 instances"
492
+ echo " $0 login production user@example.com"
493
+ echo " $0 search production github"
494
+ echo " $0 get-password production 'GitHub Account'"
495
+ echo " $0 generate 20 true"
496
+ echo " $0 audit production"
497
+ return 0
498
+ }
499
+
500
+ # Main script logic
501
+ main() {
502
+ # Assign positional parameters to local variables
503
+ local command="${1:-help}"
504
+ local account_name="$account_name"
505
+ local target="$target"
506
+ local options="$options"
507
+ # Assign positional parameters to local variables
508
+ local command="${1:-help}"
509
+ local account_name="$account_name"
510
+ local target="$target"
511
+ local options="$options"
512
+ # Assign positional parameters to local variables
513
+ local command="${1:-help}"
514
+ local account_name="$account_name"
515
+ local target="$target"
516
+ local options="$options"
517
+ # Assign positional parameters to local variables
518
+ # Assign positional parameters to local variables
519
+ local instance_name="$account_name"
520
+ local user_email="$target"
521
+ local password_length="$options"
522
+ local param5="$param5"
523
+ local param6="$param6"
524
+
525
+ check_dependencies
526
+
527
+ case "$command" in
528
+ "instances")
529
+ list_instances
530
+ ;;
531
+ "status")
532
+ get_vault_status "$instance_name"
533
+ ;;
534
+ "login")
535
+ login_bw "$instance_name" "$user_email" "$password_length"
536
+ ;;
537
+ "unlock")
538
+ unlock_vault "$instance_name"
539
+ ;;
540
+ "lock")
541
+ lock_vault
542
+ ;;
543
+ "sync")
544
+ sync_vault "$param2"
545
+ ;;
546
+ "list")
547
+ list_vault_items "$param2" "$param3"
548
+ ;;
549
+ "search")
550
+ search_vault "$param2" "$param3"
551
+ ;;
552
+ "get")
553
+ get_vault_item "$param2" "$param3"
554
+ ;;
555
+ "get-password")
556
+ get_password "$param2" "$param3"
557
+ ;;
558
+ "get-username")
559
+ get_username "$param2" "$param3"
560
+ ;;
561
+ "create")
562
+ create_vault_item "$instance_name" "$user_email" "$password_length" "$param5" "$param6"
563
+ ;;
564
+ "update")
565
+ update_vault_item "$instance_name" "$user_email" "$password_length" "$param5"
566
+ ;;
567
+ "delete")
568
+ delete_vault_item "$param2" "$param3"
569
+ ;;
570
+ "generate")
571
+ generate_password "$param2" "$param3"
572
+ ;;
573
+ "export")
574
+ export_vault "$param2" "$param3" "$param4"
575
+ ;;
576
+ "org-list")
577
+ list_org_vault "$param2" "$param3"
578
+ ;;
579
+ "start-mcp")
580
+ start_mcp_server "$param2" "$param3"
581
+ ;;
582
+ "test-mcp")
583
+ test_mcp_connection "$param2"
584
+ ;;
585
+ "audit")
586
+ audit_vault_security "$param2"
587
+ ;;
588
+ "help"|*)
589
+ show_help
590
+ ;;
591
+ esac
592
+ return 0
593
+ }
594
+
595
+ main "$@"
596
+
597
+ return 0