aidevops 2.52.1 → 2.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/VERSION +1 -1
- package/aidevops.sh +15 -9
- package/package.json +4 -4
- package/scripts/npm-postinstall.js +6 -7
- package/setup.sh +1 -1
- package/templates/deploy-templates.sh +144 -0
- package/templates/home/.agent/README.md +33 -0
- package/templates/home/AGENTS.md +96 -0
- package/templates/home/git/.agent/README.md +48 -0
- package/templates/home/git/AGENTS.md +97 -0
- package/templates/standard-functions.sh +179 -0
- package/templates/wordpress-performance-workflow.md +217 -0
- package/.agent/AGENTS.md +0 -614
- package/.agent/accounts.md +0 -65
- package/.agent/aidevops/add-new-mcp-to-aidevops.md +0 -456
- package/.agent/aidevops/api-integrations.md +0 -335
- package/.agent/aidevops/architecture.md +0 -510
- package/.agent/aidevops/configs.md +0 -274
- package/.agent/aidevops/docs.md +0 -244
- package/.agent/aidevops/extension.md +0 -311
- package/.agent/aidevops/mcp-integrations.md +0 -340
- package/.agent/aidevops/mcp-troubleshooting.md +0 -162
- package/.agent/aidevops/memory-patterns.md +0 -172
- package/.agent/aidevops/providers.md +0 -217
- package/.agent/aidevops/recommendations.md +0 -321
- package/.agent/aidevops/requirements.md +0 -301
- package/.agent/aidevops/resources.md +0 -214
- package/.agent/aidevops/security-requirements.md +0 -174
- package/.agent/aidevops/security.md +0 -350
- package/.agent/aidevops/service-links.md +0 -400
- package/.agent/aidevops/services.md +0 -357
- package/.agent/aidevops/setup.md +0 -153
- package/.agent/aidevops/troubleshooting.md +0 -389
- package/.agent/aidevops.md +0 -124
- package/.agent/build-plus.md +0 -244
- package/.agent/content/guidelines.md +0 -109
- package/.agent/content.md +0 -87
- package/.agent/health.md +0 -59
- package/.agent/legal.md +0 -59
- package/.agent/loop-state/full-loop.local.md +0 -16
- package/.agent/loop-state/ralph-loop.local.md +0 -10
- package/.agent/marketing.md +0 -440
- package/.agent/memory/README.md +0 -260
- package/.agent/onboarding.md +0 -796
- package/.agent/plan-plus.md +0 -245
- package/.agent/research.md +0 -100
- package/.agent/sales.md +0 -333
- package/.agent/scripts/101domains-helper.sh +0 -701
- package/.agent/scripts/add-missing-returns.sh +0 -140
- package/.agent/scripts/agent-browser-helper.sh +0 -311
- package/.agent/scripts/agno-setup.sh +0 -712
- package/.agent/scripts/ahrefs-mcp-wrapper.js +0 -168
- package/.agent/scripts/aidevops-update-check.sh +0 -71
- package/.agent/scripts/ampcode-cli.sh +0 -522
- package/.agent/scripts/auto-version-bump.sh +0 -156
- package/.agent/scripts/autogen-helper.sh +0 -512
- package/.agent/scripts/beads-sync-helper.sh +0 -596
- package/.agent/scripts/closte-helper.sh +0 -5
- package/.agent/scripts/cloudron-helper.sh +0 -321
- package/.agent/scripts/codacy-cli-chunked.sh +0 -581
- package/.agent/scripts/codacy-cli.sh +0 -442
- package/.agent/scripts/code-audit-helper.sh +0 -5
- package/.agent/scripts/coderabbit-cli.sh +0 -417
- package/.agent/scripts/coderabbit-pro-analysis.sh +0 -238
- package/.agent/scripts/commands/code-simplifier.md +0 -86
- package/.agent/scripts/commands/full-loop.md +0 -246
- package/.agent/scripts/commands/postflight-loop.md +0 -103
- package/.agent/scripts/commands/recall.md +0 -182
- package/.agent/scripts/commands/remember.md +0 -132
- package/.agent/scripts/commands/save-todo.md +0 -175
- package/.agent/scripts/commands/session-review.md +0 -154
- package/.agent/scripts/comprehensive-quality-fix.sh +0 -106
- package/.agent/scripts/context-builder-helper.sh +0 -522
- package/.agent/scripts/coolify-cli-helper.sh +0 -674
- package/.agent/scripts/coolify-helper.sh +0 -380
- package/.agent/scripts/crawl4ai-examples.sh +0 -401
- package/.agent/scripts/crawl4ai-helper.sh +0 -1078
- package/.agent/scripts/crewai-helper.sh +0 -681
- package/.agent/scripts/dev-browser-helper.sh +0 -513
- package/.agent/scripts/dns-helper.sh +0 -396
- package/.agent/scripts/domain-research-helper.sh +0 -917
- package/.agent/scripts/dspy-helper.sh +0 -285
- package/.agent/scripts/dspyground-helper.sh +0 -291
- package/.agent/scripts/eeat-score-helper.sh +0 -1242
- package/.agent/scripts/efficient-return-fix.sh +0 -92
- package/.agent/scripts/extract-opencode-prompts.sh +0 -128
- package/.agent/scripts/find-missing-returns.sh +0 -113
- package/.agent/scripts/fix-auth-headers.sh +0 -104
- package/.agent/scripts/fix-common-strings.sh +0 -254
- package/.agent/scripts/fix-content-type.sh +0 -100
- package/.agent/scripts/fix-error-messages.sh +0 -130
- package/.agent/scripts/fix-misplaced-returns.sh +0 -74
- package/.agent/scripts/fix-remaining-literals.sh +0 -152
- package/.agent/scripts/fix-return-statements.sh +0 -41
- package/.agent/scripts/fix-s131-default-cases.sh +0 -249
- package/.agent/scripts/fix-sc2155-simple.sh +0 -102
- package/.agent/scripts/fix-shellcheck-critical.sh +0 -187
- package/.agent/scripts/fix-string-literals.sh +0 -273
- package/.agent/scripts/full-loop-helper.sh +0 -773
- package/.agent/scripts/generate-opencode-agents.sh +0 -497
- package/.agent/scripts/generate-opencode-commands.sh +0 -1629
- package/.agent/scripts/generate-skills.sh +0 -366
- package/.agent/scripts/git-platforms-helper.sh +0 -640
- package/.agent/scripts/gitea-cli-helper.sh +0 -743
- package/.agent/scripts/github-cli-helper.sh +0 -702
- package/.agent/scripts/gitlab-cli-helper.sh +0 -682
- package/.agent/scripts/gsc-add-user-helper.sh +0 -325
- package/.agent/scripts/gsc-sitemap-helper.sh +0 -678
- package/.agent/scripts/hetzner-helper.sh +0 -485
- package/.agent/scripts/hostinger-helper.sh +0 -229
- package/.agent/scripts/keyword-research-helper.sh +0 -1815
- package/.agent/scripts/langflow-helper.sh +0 -544
- package/.agent/scripts/linkedin-automation.py +0 -241
- package/.agent/scripts/linter-manager.sh +0 -599
- package/.agent/scripts/linters-local.sh +0 -434
- package/.agent/scripts/list-keys-helper.sh +0 -488
- package/.agent/scripts/local-browser-automation.py +0 -339
- package/.agent/scripts/localhost-helper.sh +0 -744
- package/.agent/scripts/loop-common.sh +0 -806
- package/.agent/scripts/mainwp-helper.sh +0 -728
- package/.agent/scripts/markdown-formatter.sh +0 -338
- package/.agent/scripts/markdown-lint-fix.sh +0 -311
- package/.agent/scripts/mass-fix-returns.sh +0 -58
- package/.agent/scripts/mcp-diagnose.sh +0 -167
- package/.agent/scripts/mcp-inspector-helper.sh +0 -449
- package/.agent/scripts/memory-helper.sh +0 -650
- package/.agent/scripts/monitor-code-review.sh +0 -255
- package/.agent/scripts/onboarding-helper.sh +0 -706
- package/.agent/scripts/opencode-github-setup-helper.sh +0 -797
- package/.agent/scripts/opencode-test-helper.sh +0 -213
- package/.agent/scripts/pagespeed-helper.sh +0 -464
- package/.agent/scripts/pandoc-helper.sh +0 -362
- package/.agent/scripts/postflight-check.sh +0 -555
- package/.agent/scripts/pre-commit-hook.sh +0 -259
- package/.agent/scripts/pre-edit-check.sh +0 -169
- package/.agent/scripts/qlty-cli.sh +0 -356
- package/.agent/scripts/quality-cli-manager.sh +0 -525
- package/.agent/scripts/quality-feedback-helper.sh +0 -462
- package/.agent/scripts/quality-fix.sh +0 -263
- package/.agent/scripts/quality-loop-helper.sh +0 -1108
- package/.agent/scripts/ralph-loop-helper.sh +0 -836
- package/.agent/scripts/ralph-upstream-check.sh +0 -341
- package/.agent/scripts/secretlint-helper.sh +0 -847
- package/.agent/scripts/servers-helper.sh +0 -241
- package/.agent/scripts/ses-helper.sh +0 -619
- package/.agent/scripts/session-review-helper.sh +0 -404
- package/.agent/scripts/setup-linters-wizard.sh +0 -379
- package/.agent/scripts/setup-local-api-keys.sh +0 -330
- package/.agent/scripts/setup-mcp-integrations.sh +0 -472
- package/.agent/scripts/shared-constants.sh +0 -246
- package/.agent/scripts/site-crawler-helper.sh +0 -1487
- package/.agent/scripts/snyk-helper.sh +0 -940
- package/.agent/scripts/sonarcloud-autofix.sh +0 -193
- package/.agent/scripts/sonarcloud-cli.sh +0 -191
- package/.agent/scripts/sonarscanner-cli.sh +0 -455
- package/.agent/scripts/spaceship-helper.sh +0 -747
- package/.agent/scripts/stagehand-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-helper.sh +0 -321
- package/.agent/scripts/stagehand-python-setup.sh +0 -441
- package/.agent/scripts/stagehand-setup.sh +0 -439
- package/.agent/scripts/system-cleanup.sh +0 -340
- package/.agent/scripts/terminal-title-helper.sh +0 -388
- package/.agent/scripts/terminal-title-setup.sh +0 -549
- package/.agent/scripts/test-stagehand-both-integration.sh +0 -317
- package/.agent/scripts/test-stagehand-integration.sh +0 -309
- package/.agent/scripts/test-stagehand-python-integration.sh +0 -341
- package/.agent/scripts/todo-ready.sh +0 -263
- package/.agent/scripts/tool-version-check.sh +0 -362
- package/.agent/scripts/toon-helper.sh +0 -469
- package/.agent/scripts/twilio-helper.sh +0 -917
- package/.agent/scripts/updown-helper.sh +0 -279
- package/.agent/scripts/validate-mcp-integrations.sh +0 -250
- package/.agent/scripts/validate-version-consistency.sh +0 -131
- package/.agent/scripts/vaultwarden-helper.sh +0 -597
- package/.agent/scripts/vercel-cli-helper.sh +0 -816
- package/.agent/scripts/verify-mirrors.sh +0 -169
- package/.agent/scripts/version-manager.sh +0 -831
- package/.agent/scripts/webhosting-helper.sh +0 -471
- package/.agent/scripts/webhosting-verify.sh +0 -238
- package/.agent/scripts/wordpress-mcp-helper.sh +0 -508
- package/.agent/scripts/worktree-helper.sh +0 -595
- package/.agent/scripts/worktree-sessions.sh +0 -577
- package/.agent/seo/dataforseo.md +0 -215
- package/.agent/seo/domain-research.md +0 -532
- package/.agent/seo/eeat-score.md +0 -659
- package/.agent/seo/google-search-console.md +0 -366
- package/.agent/seo/gsc-sitemaps.md +0 -282
- package/.agent/seo/keyword-research.md +0 -521
- package/.agent/seo/serper.md +0 -278
- package/.agent/seo/site-crawler.md +0 -387
- package/.agent/seo.md +0 -236
- package/.agent/services/accounting/quickfile.md +0 -159
- package/.agent/services/communications/telfon.md +0 -470
- package/.agent/services/communications/twilio.md +0 -569
- package/.agent/services/crm/fluentcrm.md +0 -449
- package/.agent/services/email/ses.md +0 -399
- package/.agent/services/hosting/101domains.md +0 -378
- package/.agent/services/hosting/closte.md +0 -177
- package/.agent/services/hosting/cloudflare.md +0 -251
- package/.agent/services/hosting/cloudron.md +0 -478
- package/.agent/services/hosting/dns-providers.md +0 -335
- package/.agent/services/hosting/domain-purchasing.md +0 -344
- package/.agent/services/hosting/hetzner.md +0 -327
- package/.agent/services/hosting/hostinger.md +0 -287
- package/.agent/services/hosting/localhost.md +0 -419
- package/.agent/services/hosting/spaceship.md +0 -353
- package/.agent/services/hosting/webhosting.md +0 -330
- package/.agent/social-media.md +0 -69
- package/.agent/templates/plans-template.md +0 -114
- package/.agent/templates/prd-template.md +0 -129
- package/.agent/templates/tasks-template.md +0 -108
- package/.agent/templates/todo-template.md +0 -89
- package/.agent/tools/ai-assistants/agno.md +0 -471
- package/.agent/tools/ai-assistants/capsolver.md +0 -326
- package/.agent/tools/ai-assistants/configuration.md +0 -221
- package/.agent/tools/ai-assistants/overview.md +0 -209
- package/.agent/tools/ai-assistants/status.md +0 -171
- package/.agent/tools/ai-assistants/windsurf.md +0 -193
- package/.agent/tools/ai-orchestration/autogen.md +0 -406
- package/.agent/tools/ai-orchestration/crewai.md +0 -445
- package/.agent/tools/ai-orchestration/langflow.md +0 -405
- package/.agent/tools/ai-orchestration/openprose.md +0 -487
- package/.agent/tools/ai-orchestration/overview.md +0 -362
- package/.agent/tools/ai-orchestration/packaging.md +0 -647
- package/.agent/tools/browser/agent-browser.md +0 -464
- package/.agent/tools/browser/browser-automation.md +0 -400
- package/.agent/tools/browser/chrome-devtools.md +0 -282
- package/.agent/tools/browser/crawl4ai-integration.md +0 -422
- package/.agent/tools/browser/crawl4ai-resources.md +0 -277
- package/.agent/tools/browser/crawl4ai-usage.md +0 -416
- package/.agent/tools/browser/crawl4ai.md +0 -585
- package/.agent/tools/browser/dev-browser.md +0 -341
- package/.agent/tools/browser/pagespeed.md +0 -260
- package/.agent/tools/browser/playwright.md +0 -266
- package/.agent/tools/browser/playwriter.md +0 -310
- package/.agent/tools/browser/stagehand-examples.md +0 -456
- package/.agent/tools/browser/stagehand-python.md +0 -483
- package/.agent/tools/browser/stagehand.md +0 -421
- package/.agent/tools/build-agent/agent-review.md +0 -224
- package/.agent/tools/build-agent/build-agent.md +0 -784
- package/.agent/tools/build-mcp/aidevops-plugin.md +0 -476
- package/.agent/tools/build-mcp/api-wrapper.md +0 -445
- package/.agent/tools/build-mcp/build-mcp.md +0 -240
- package/.agent/tools/build-mcp/deployment.md +0 -401
- package/.agent/tools/build-mcp/server-patterns.md +0 -632
- package/.agent/tools/build-mcp/transports.md +0 -366
- package/.agent/tools/code-review/auditing.md +0 -383
- package/.agent/tools/code-review/automation.md +0 -219
- package/.agent/tools/code-review/best-practices.md +0 -203
- package/.agent/tools/code-review/codacy.md +0 -151
- package/.agent/tools/code-review/code-simplifier.md +0 -174
- package/.agent/tools/code-review/code-standards.md +0 -309
- package/.agent/tools/code-review/coderabbit.md +0 -101
- package/.agent/tools/code-review/management.md +0 -155
- package/.agent/tools/code-review/qlty.md +0 -248
- package/.agent/tools/code-review/secretlint.md +0 -565
- package/.agent/tools/code-review/setup.md +0 -250
- package/.agent/tools/code-review/snyk.md +0 -563
- package/.agent/tools/code-review/tools.md +0 -230
- package/.agent/tools/content/summarize.md +0 -353
- package/.agent/tools/context/augment-context-engine.md +0 -468
- package/.agent/tools/context/context-builder-agent.md +0 -76
- package/.agent/tools/context/context-builder.md +0 -375
- package/.agent/tools/context/context7.md +0 -371
- package/.agent/tools/context/dspy.md +0 -302
- package/.agent/tools/context/dspyground.md +0 -374
- package/.agent/tools/context/llm-tldr.md +0 -219
- package/.agent/tools/context/osgrep.md +0 -488
- package/.agent/tools/context/prompt-optimization.md +0 -338
- package/.agent/tools/context/toon.md +0 -292
- package/.agent/tools/conversion/pandoc.md +0 -304
- package/.agent/tools/credentials/api-key-management.md +0 -154
- package/.agent/tools/credentials/api-key-setup.md +0 -224
- package/.agent/tools/credentials/environment-variables.md +0 -180
- package/.agent/tools/credentials/vaultwarden.md +0 -382
- package/.agent/tools/data-extraction/outscraper.md +0 -974
- package/.agent/tools/deployment/coolify-cli.md +0 -388
- package/.agent/tools/deployment/coolify-setup.md +0 -353
- package/.agent/tools/deployment/coolify.md +0 -345
- package/.agent/tools/deployment/vercel.md +0 -390
- package/.agent/tools/git/authentication.md +0 -132
- package/.agent/tools/git/gitea-cli.md +0 -193
- package/.agent/tools/git/github-actions.md +0 -207
- package/.agent/tools/git/github-cli.md +0 -223
- package/.agent/tools/git/gitlab-cli.md +0 -190
- package/.agent/tools/git/opencode-github-security.md +0 -350
- package/.agent/tools/git/opencode-github.md +0 -328
- package/.agent/tools/git/opencode-gitlab.md +0 -252
- package/.agent/tools/git/security.md +0 -196
- package/.agent/tools/git.md +0 -207
- package/.agent/tools/opencode/oh-my-opencode.md +0 -375
- package/.agent/tools/opencode/opencode-anthropic-auth.md +0 -446
- package/.agent/tools/opencode/opencode.md +0 -651
- package/.agent/tools/social-media/bird.md +0 -437
- package/.agent/tools/task-management/beads.md +0 -336
- package/.agent/tools/terminal/terminal-title.md +0 -251
- package/.agent/tools/ui/shadcn.md +0 -196
- package/.agent/tools/ui/ui-skills.md +0 -115
- package/.agent/tools/wordpress/localwp.md +0 -311
- package/.agent/tools/wordpress/mainwp.md +0 -391
- package/.agent/tools/wordpress/scf.md +0 -527
- package/.agent/tools/wordpress/wp-admin.md +0 -729
- package/.agent/tools/wordpress/wp-dev.md +0 -940
- package/.agent/tools/wordpress/wp-preferred.md +0 -398
- package/.agent/tools/wordpress.md +0 -95
- package/.agent/workflows/branch/bugfix.md +0 -63
- package/.agent/workflows/branch/chore.md +0 -95
- package/.agent/workflows/branch/experiment.md +0 -115
- package/.agent/workflows/branch/feature.md +0 -59
- package/.agent/workflows/branch/hotfix.md +0 -98
- package/.agent/workflows/branch/refactor.md +0 -92
- package/.agent/workflows/branch/release.md +0 -96
- package/.agent/workflows/branch.md +0 -347
- package/.agent/workflows/bug-fixing.md +0 -267
- package/.agent/workflows/changelog.md +0 -129
- package/.agent/workflows/code-audit-remote.md +0 -279
- package/.agent/workflows/conversation-starter.md +0 -69
- package/.agent/workflows/error-feedback.md +0 -578
- package/.agent/workflows/feature-development.md +0 -355
- package/.agent/workflows/git-workflow.md +0 -702
- package/.agent/workflows/multi-repo-workspace.md +0 -268
- package/.agent/workflows/plans.md +0 -709
- package/.agent/workflows/postflight.md +0 -604
- package/.agent/workflows/pr.md +0 -571
- package/.agent/workflows/preflight.md +0 -278
- package/.agent/workflows/ralph-loop.md +0 -773
- package/.agent/workflows/release.md +0 -498
- package/.agent/workflows/session-manager.md +0 -254
- package/.agent/workflows/session-review.md +0 -311
- package/.agent/workflows/sql-migrations.md +0 -631
- package/.agent/workflows/version-bump.md +0 -283
- package/.agent/workflows/wiki-update.md +0 -333
- package/.agent/workflows/worktree.md +0 -477
|
@@ -1,379 +0,0 @@
|
|
|
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
|
-
# Interactive Linter Setup Wizard
|
|
5
|
-
# Intelligent assessment of user needs for targeted linter installation
|
|
6
|
-
# Based on CodeFactor's comprehensive linter collection
|
|
7
|
-
#
|
|
8
|
-
# Author: AI DevOps Framework
|
|
9
|
-
# Version: 1.1.1
|
|
10
|
-
|
|
11
|
-
# Colors for output
|
|
12
|
-
readonly GREEN='\033[0;32m'
|
|
13
|
-
readonly RED='\033[0;31m'
|
|
14
|
-
readonly YELLOW='\033[1;33m'
|
|
15
|
-
readonly BLUE='\033[0;34m'
|
|
16
|
-
readonly PURPLE='\033[0;35m'
|
|
17
|
-
readonly CYAN='\033[0;36m'
|
|
18
|
-
readonly NC='\033[0m'
|
|
19
|
-
|
|
20
|
-
# Common constants
|
|
21
|
-
readonly ERROR_UNKNOWN_COMMAND="Unknown command:"
|
|
22
|
-
print_success() {
|
|
23
|
-
local _arg1="$1"
|
|
24
|
-
echo -e "${GREEN}✅ $_arg1${NC}"
|
|
25
|
-
return 0
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
print_error() {
|
|
29
|
-
local _arg1="$1"
|
|
30
|
-
echo -e "${RED}❌ $_arg1${NC}" >&2
|
|
31
|
-
return 0
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
print_warning() {
|
|
35
|
-
local _arg1="$1"
|
|
36
|
-
echo -e "${YELLOW}⚠️ $_arg1${NC}"
|
|
37
|
-
return 0
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
print_info() {
|
|
41
|
-
local _arg1="$1"
|
|
42
|
-
echo -e "${BLUE}ℹ️ $_arg1${NC}"
|
|
43
|
-
return 0
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
print_question() {
|
|
47
|
-
local _arg1="$1"
|
|
48
|
-
echo -e "${CYAN}❓ $_arg1${NC}"
|
|
49
|
-
return 0
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
print_header() {
|
|
53
|
-
local _arg1="$1"
|
|
54
|
-
echo -e "${PURPLE}🔧 $_arg1${NC}"
|
|
55
|
-
echo "=========================================="
|
|
56
|
-
return 0
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
# Ask yes/no question
|
|
60
|
-
ask_yes_no() {
|
|
61
|
-
local question="$1"
|
|
62
|
-
local default="${2:-n}"
|
|
63
|
-
local response
|
|
64
|
-
|
|
65
|
-
while true; do
|
|
66
|
-
if [[ "$default" == "y" ]]; then
|
|
67
|
-
print_question "$question [Y/n]: "
|
|
68
|
-
else
|
|
69
|
-
print_question "$question [y/N]: "
|
|
70
|
-
fi
|
|
71
|
-
|
|
72
|
-
read -r response
|
|
73
|
-
response=${response:-$default}
|
|
74
|
-
|
|
75
|
-
case "$response" in
|
|
76
|
-
[Yy]|[Yy][Ee][Ss])
|
|
77
|
-
return 0
|
|
78
|
-
;;
|
|
79
|
-
[Nn]|[Nn][Oo])
|
|
80
|
-
return 1
|
|
81
|
-
;;
|
|
82
|
-
*)
|
|
83
|
-
print_warning "Please answer yes (y) or no (n)"
|
|
84
|
-
;;
|
|
85
|
-
esac
|
|
86
|
-
done
|
|
87
|
-
return 0
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
# Ask multiple choice question
|
|
91
|
-
ask_choice() {
|
|
92
|
-
local question="$1"
|
|
93
|
-
shift
|
|
94
|
-
local options=("$@")
|
|
95
|
-
local choice
|
|
96
|
-
|
|
97
|
-
print_question "$question"
|
|
98
|
-
for i in "${!options[@]}"; do
|
|
99
|
-
echo " $((i+1)). ${options[i]}"
|
|
100
|
-
done
|
|
101
|
-
|
|
102
|
-
while true; do
|
|
103
|
-
print_question "Enter choice (1-${#options[@]}): "
|
|
104
|
-
read -r choice
|
|
105
|
-
|
|
106
|
-
if [[ "$choice" =~ ^[0-9]+$ ]] && [[ "$choice" -ge 1 ]] && [[ "$choice" -le "${#options[@]}" ]]; then
|
|
107
|
-
echo "${options[$((choice-1))]}"
|
|
108
|
-
return 0
|
|
109
|
-
else
|
|
110
|
-
print_warning "Please enter a number between 1 and ${#options[@]}"
|
|
111
|
-
fi
|
|
112
|
-
done
|
|
113
|
-
return 0
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
# Assess development environment and needs
|
|
117
|
-
assess_development_needs() {
|
|
118
|
-
print_header "Development Environment Assessment"
|
|
119
|
-
|
|
120
|
-
local languages=()
|
|
121
|
-
local development_type=""
|
|
122
|
-
local team_size=""
|
|
123
|
-
local quality_focus=""
|
|
124
|
-
|
|
125
|
-
# Development type assessment
|
|
126
|
-
print_info "Let's understand your development environment..."
|
|
127
|
-
echo ""
|
|
128
|
-
|
|
129
|
-
development_type=$(ask_choice "What type of development do you primarily do?" \
|
|
130
|
-
"Web Development (Frontend/Backend)" \
|
|
131
|
-
"Data Science/Machine Learning" \
|
|
132
|
-
"DevOps/Infrastructure" \
|
|
133
|
-
"Mobile Development" \
|
|
134
|
-
"Desktop Applications" \
|
|
135
|
-
"Full-Stack Development" \
|
|
136
|
-
"Other/Mixed")
|
|
137
|
-
|
|
138
|
-
echo ""
|
|
139
|
-
print_info "Development type: $development_type"
|
|
140
|
-
echo ""
|
|
141
|
-
|
|
142
|
-
# Team size assessment
|
|
143
|
-
team_size=$(ask_choice "What's your team size?" \
|
|
144
|
-
"Solo developer" \
|
|
145
|
-
"Small team (2-5 people)" \
|
|
146
|
-
"Medium team (6-15 people)" \
|
|
147
|
-
"Large team (16+ people)")
|
|
148
|
-
|
|
149
|
-
echo ""
|
|
150
|
-
print_info "Team size: $team_size"
|
|
151
|
-
echo ""
|
|
152
|
-
|
|
153
|
-
# Quality focus assessment
|
|
154
|
-
quality_focus=$(ask_choice "What's your primary quality focus?" \
|
|
155
|
-
"Code style and formatting" \
|
|
156
|
-
"Security and vulnerabilities" \
|
|
157
|
-
"Performance optimization" \
|
|
158
|
-
"Maintainability and complexity" \
|
|
159
|
-
"All of the above")
|
|
160
|
-
|
|
161
|
-
echo ""
|
|
162
|
-
print_info "Quality focus: $quality_focus"
|
|
163
|
-
echo ""
|
|
164
|
-
|
|
165
|
-
# Language-specific assessment
|
|
166
|
-
print_header "Language and Technology Assessment"
|
|
167
|
-
|
|
168
|
-
# Python
|
|
169
|
-
if ask_yes_no "Do you work with Python?" "n"; then
|
|
170
|
-
languages+=("python")
|
|
171
|
-
print_info "Python linters: pycodestyle (PEP 8), Pylint (comprehensive), Bandit (security), Ruff (fast)"
|
|
172
|
-
fi
|
|
173
|
-
|
|
174
|
-
# JavaScript/TypeScript
|
|
175
|
-
if ask_yes_no "Do you work with JavaScript or TypeScript?" "n"; then
|
|
176
|
-
languages+=("javascript")
|
|
177
|
-
print_info "JavaScript linters: ESLint (standard), TypeScript ESLint (TS support)"
|
|
178
|
-
fi
|
|
179
|
-
|
|
180
|
-
# CSS/SCSS/Less
|
|
181
|
-
if ask_yes_no "Do you work with CSS, SCSS, or Less?" "n"; then
|
|
182
|
-
languages+=("css")
|
|
183
|
-
print_info "CSS linters: Stylelint (comprehensive CSS/SCSS/Less)"
|
|
184
|
-
fi
|
|
185
|
-
|
|
186
|
-
# Shell scripting
|
|
187
|
-
if ask_yes_no "Do you write shell scripts?" "y"; then
|
|
188
|
-
languages+=("shell")
|
|
189
|
-
print_info "Shell linters: ShellCheck (comprehensive shell script analysis)"
|
|
190
|
-
fi
|
|
191
|
-
|
|
192
|
-
# Docker
|
|
193
|
-
if ask_yes_no "Do you work with Docker?" "n"; then
|
|
194
|
-
languages+=("docker")
|
|
195
|
-
print_info "Docker linters: Hadolint (Dockerfile best practices)"
|
|
196
|
-
fi
|
|
197
|
-
|
|
198
|
-
# YAML
|
|
199
|
-
if ask_yes_no "Do you work with YAML files (configs, CI/CD)?" "y"; then
|
|
200
|
-
languages+=("yaml")
|
|
201
|
-
print_info "YAML linters: yamllint (YAML syntax and style)"
|
|
202
|
-
fi
|
|
203
|
-
|
|
204
|
-
# Security scanning
|
|
205
|
-
if ask_yes_no "Do you want security vulnerability scanning?" "y"; then
|
|
206
|
-
languages+=("security")
|
|
207
|
-
print_info "Security linters: Trivy (comprehensive vulnerability scanning)"
|
|
208
|
-
fi
|
|
209
|
-
|
|
210
|
-
# Store assessment results
|
|
211
|
-
echo "$development_type" > .linter-setup-cache
|
|
212
|
-
echo "$team_size" >> .linter-setup-cache
|
|
213
|
-
echo "$quality_focus" >> .linter-setup-cache
|
|
214
|
-
printf '%s\n' "${languages[@]}" >> .linter-setup-cache
|
|
215
|
-
|
|
216
|
-
echo ""
|
|
217
|
-
print_success "Assessment complete! Selected languages: ${languages[*]}"
|
|
218
|
-
|
|
219
|
-
return 0
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
# Install selected linters with recommendations
|
|
223
|
-
install_selected_linters() {
|
|
224
|
-
print_header "Installing Selected Linters"
|
|
225
|
-
|
|
226
|
-
if [[ ! -f ".linter-setup-cache" ]]; then
|
|
227
|
-
print_error "No assessment data found. Run assessment first."
|
|
228
|
-
return 1
|
|
229
|
-
fi
|
|
230
|
-
|
|
231
|
-
local lines=()
|
|
232
|
-
while IFS= read -r line; do
|
|
233
|
-
lines+=("$line")
|
|
234
|
-
done < .linter-setup-cache
|
|
235
|
-
|
|
236
|
-
local development_type="${lines[0]}"
|
|
237
|
-
local team_size="${lines[1]}"
|
|
238
|
-
local quality_focus="${lines[2]}"
|
|
239
|
-
local languages=("${lines[@]:3}")
|
|
240
|
-
|
|
241
|
-
print_info "Installing linters for: ${languages[*]}"
|
|
242
|
-
echo ""
|
|
243
|
-
|
|
244
|
-
# Provide CodeFactor-based recommendations
|
|
245
|
-
print_header "CodeFactor Recommendations"
|
|
246
|
-
|
|
247
|
-
case "$quality_focus" in
|
|
248
|
-
"Code style and formatting")
|
|
249
|
-
print_info "Focus: Code Style & Formatting"
|
|
250
|
-
print_info "Recommended: ESLint (JS), Pylint (Python), Stylelint (CSS)"
|
|
251
|
-
;;
|
|
252
|
-
"Security and vulnerabilities")
|
|
253
|
-
print_info "Focus: Security & Vulnerabilities"
|
|
254
|
-
print_info "Recommended: Bandit (Python), Trivy (containers), ESLint security rules"
|
|
255
|
-
;;
|
|
256
|
-
"Performance optimization")
|
|
257
|
-
print_info "Focus: Performance Optimization"
|
|
258
|
-
print_info "Recommended: Ruff (fast Python), ESLint performance rules"
|
|
259
|
-
;;
|
|
260
|
-
"Maintainability and complexity")
|
|
261
|
-
print_info "Focus: Maintainability & Complexity"
|
|
262
|
-
print_info "Recommended: Pylint (complexity), ESLint complexity rules"
|
|
263
|
-
;;
|
|
264
|
-
"All of the above"|*)
|
|
265
|
-
print_info "Focus: Comprehensive Quality"
|
|
266
|
-
print_info "Recommended: Full CodeFactor suite for selected languages"
|
|
267
|
-
;;
|
|
268
|
-
esac
|
|
269
|
-
|
|
270
|
-
echo ""
|
|
271
|
-
|
|
272
|
-
# Install linters for each selected language
|
|
273
|
-
local total_failures=0
|
|
274
|
-
|
|
275
|
-
for lang in "${languages[@]}"; do
|
|
276
|
-
print_info "Installing $lang linters..."
|
|
277
|
-
if bash "$(dirname "$0")/linter-manager.sh" install "$lang"; then
|
|
278
|
-
print_success "$lang linters installed successfully"
|
|
279
|
-
else
|
|
280
|
-
print_warning "Some $lang linters failed to install"
|
|
281
|
-
((total_failures++))
|
|
282
|
-
fi
|
|
283
|
-
echo ""
|
|
284
|
-
done
|
|
285
|
-
|
|
286
|
-
# Clean up cache
|
|
287
|
-
rm -f .linter-setup-cache
|
|
288
|
-
|
|
289
|
-
# Provide next steps
|
|
290
|
-
print_header "Next Steps & AI Agent Knowledge"
|
|
291
|
-
|
|
292
|
-
print_info "✅ Linter installation complete!"
|
|
293
|
-
echo ""
|
|
294
|
-
print_info "🤖 AI Agent Knowledge Updated:"
|
|
295
|
-
print_info "- Your development type: $development_type"
|
|
296
|
-
print_info "- Team size: $team_size"
|
|
297
|
-
print_info "- Quality focus: $quality_focus"
|
|
298
|
-
print_info "- Installed linters: ${languages[*]}"
|
|
299
|
-
echo ""
|
|
300
|
-
print_info "📚 Available Commands:"
|
|
301
|
-
print_info "- Run analysis: bash .agent/scripts/quality-cli-manager.sh analyze all"
|
|
302
|
-
print_info "- Auto-fix issues: bash .agent/scripts/codacy-cli.sh analyze --fix"
|
|
303
|
-
print_info "- Universal formatting: bash .agent/scripts/qlty-cli.sh fmt --all"
|
|
304
|
-
print_info "- Install additional linters: bash .agent/scripts/linter-manager.sh install LANGUAGE"
|
|
305
|
-
echo ""
|
|
306
|
-
print_info "🔧 CodeFactor Integration:"
|
|
307
|
-
print_info "- Your setup follows CodeFactor's professional linter collection"
|
|
308
|
-
print_info "- Additional languages can be added as needs arise"
|
|
309
|
-
print_info "- AI agents have knowledge of all CodeFactor-recommended tools"
|
|
310
|
-
|
|
311
|
-
return $total_failures
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
# Show help
|
|
315
|
-
show_help() {
|
|
316
|
-
echo "Interactive Linter Setup Wizard"
|
|
317
|
-
echo ""
|
|
318
|
-
echo "Usage: $0 <command>"
|
|
319
|
-
echo ""
|
|
320
|
-
echo "Commands:"
|
|
321
|
-
echo " assess - Assess development needs and recommend linters"
|
|
322
|
-
echo " install - Install linters based on assessment"
|
|
323
|
-
echo " full-setup - Complete assessment and installation"
|
|
324
|
-
echo " help - Show this help message"
|
|
325
|
-
echo ""
|
|
326
|
-
echo "Features:"
|
|
327
|
-
echo " 🎯 Intelligent needs assessment"
|
|
328
|
-
echo " 🔧 CodeFactor-based recommendations"
|
|
329
|
-
echo " 📊 Development type optimization"
|
|
330
|
-
echo " 🤖 AI agent knowledge integration"
|
|
331
|
-
echo " ⚡ Install only what you need"
|
|
332
|
-
echo ""
|
|
333
|
-
echo "Examples:"
|
|
334
|
-
echo " $0 full-setup # Complete guided setup"
|
|
335
|
-
echo " $0 assess # Just assess needs"
|
|
336
|
-
echo " $0 install # Install based on previous assessment"
|
|
337
|
-
echo ""
|
|
338
|
-
echo "Based on CodeFactor's professional linter collection:"
|
|
339
|
-
echo "https://docs.codefactor.io/bootcamp/analysis-tools/"
|
|
340
|
-
return 0
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
# Main execution
|
|
344
|
-
main() {
|
|
345
|
-
local command="$1"
|
|
346
|
-
|
|
347
|
-
case "$command" in
|
|
348
|
-
"assess")
|
|
349
|
-
assess_development_needs
|
|
350
|
-
;;
|
|
351
|
-
"install")
|
|
352
|
-
install_selected_linters
|
|
353
|
-
;;
|
|
354
|
-
"full-setup")
|
|
355
|
-
print_header "Complete Linter Setup Wizard"
|
|
356
|
-
echo ""
|
|
357
|
-
if assess_development_needs; then
|
|
358
|
-
echo ""
|
|
359
|
-
if ask_yes_no "Proceed with installation?" "y"; then
|
|
360
|
-
install_selected_linters
|
|
361
|
-
else
|
|
362
|
-
print_info "Assessment saved. Run '$0 install' when ready."
|
|
363
|
-
fi
|
|
364
|
-
fi
|
|
365
|
-
;;
|
|
366
|
-
"help"|"--help"|"-h"|"")
|
|
367
|
-
show_help
|
|
368
|
-
;;
|
|
369
|
-
*)
|
|
370
|
-
print_error "$ERROR_UNKNOWN_COMMAND $command"
|
|
371
|
-
echo ""
|
|
372
|
-
show_help
|
|
373
|
-
return 1
|
|
374
|
-
;;
|
|
375
|
-
esac
|
|
376
|
-
return 0
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
main "$@"
|
|
@@ -1,330 +0,0 @@
|
|
|
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
|
-
# Setup Local API Keys - Secure User-Private Storage
|
|
5
|
-
# Manage API keys in ~/.config/aidevops/mcp-env.sh (sourced by shell configs)
|
|
6
|
-
#
|
|
7
|
-
# Author: AI DevOps Framework
|
|
8
|
-
# Version: 2.1.0
|
|
9
|
-
|
|
10
|
-
# Colors for output
|
|
11
|
-
readonly GREEN='\033[0;32m'
|
|
12
|
-
readonly BLUE='\033[0;34m'
|
|
13
|
-
readonly YELLOW='\033[1;33m'
|
|
14
|
-
readonly RED='\033[0;31m'
|
|
15
|
-
readonly NC='\033[0m'
|
|
16
|
-
|
|
17
|
-
# Common constants
|
|
18
|
-
readonly ERROR_UNKNOWN_COMMAND="Unknown command:"
|
|
19
|
-
print_success() {
|
|
20
|
-
local _arg1="$1"
|
|
21
|
-
echo -e "${GREEN}[OK] $_arg1${NC}"
|
|
22
|
-
return 0
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
print_info() {
|
|
26
|
-
local _arg1="$1"
|
|
27
|
-
echo -e "${BLUE}[INFO] $_arg1${NC}"
|
|
28
|
-
return 0
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
print_warning() {
|
|
32
|
-
local _arg1="$1"
|
|
33
|
-
echo -e "${YELLOW}[WARN] $_arg1${NC}"
|
|
34
|
-
return 0
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
print_error() {
|
|
38
|
-
local _arg1="$1"
|
|
39
|
-
echo -e "${RED}[ERROR] $_arg1${NC}" >&2
|
|
40
|
-
return 0
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
# Secure API key directory and file
|
|
44
|
-
readonly API_KEY_DIR="$HOME/.config/aidevops"
|
|
45
|
-
readonly MCP_ENV_FILE="$API_KEY_DIR/mcp-env.sh"
|
|
46
|
-
|
|
47
|
-
# Shell config files to check/update
|
|
48
|
-
SHELL_CONFIGS=(
|
|
49
|
-
"$HOME/.zshrc"
|
|
50
|
-
"$HOME/.bashrc"
|
|
51
|
-
"$HOME/.bash_profile"
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
# Create secure API key directory
|
|
55
|
-
setup_secure_directory() {
|
|
56
|
-
if [[ ! -d "$API_KEY_DIR" ]]; then
|
|
57
|
-
mkdir -p "$API_KEY_DIR"
|
|
58
|
-
chmod 700 "$API_KEY_DIR"
|
|
59
|
-
print_success "Created secure API key directory: $API_KEY_DIR"
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
# Ensure proper permissions
|
|
63
|
-
chmod 700 "$API_KEY_DIR"
|
|
64
|
-
|
|
65
|
-
# Create mcp-env.sh if it doesn't exist
|
|
66
|
-
if [[ ! -f "$MCP_ENV_FILE" ]]; then
|
|
67
|
-
cat > "$MCP_ENV_FILE" << 'EOF'
|
|
68
|
-
#!/bin/bash
|
|
69
|
-
# ------------------------------------------------------------------------------
|
|
70
|
-
# API Keys & Tokens - Single Source of Truth
|
|
71
|
-
# This file is sourced by shell configs (zsh, bash) for all processes
|
|
72
|
-
# File permissions should be 600 (owner read/write only)
|
|
73
|
-
# Location: ~/.config/aidevops/mcp-env.sh
|
|
74
|
-
#
|
|
75
|
-
# Usage: Add keys with setup-local-api-keys.sh or manually:
|
|
76
|
-
# export SERVICE_NAME_API_KEY="your-key-here"
|
|
77
|
-
# ------------------------------------------------------------------------------
|
|
78
|
-
|
|
79
|
-
EOF
|
|
80
|
-
chmod 600 "$MCP_ENV_FILE"
|
|
81
|
-
print_success "Created mcp-env.sh"
|
|
82
|
-
fi
|
|
83
|
-
|
|
84
|
-
return 0
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
# Ensure shell configs source mcp-env.sh
|
|
88
|
-
setup_shell_integration() {
|
|
89
|
-
local source_line='[[ -f ~/.config/aidevops/mcp-env.sh ]] && source ~/.config/aidevops/mcp-env.sh'
|
|
90
|
-
local updated=0
|
|
91
|
-
|
|
92
|
-
for config in "${SHELL_CONFIGS[@]}"; do
|
|
93
|
-
if [[ -f "$config" ]] && ! grep -q "mcp-env.sh" "$config" 2>/dev/null; then
|
|
94
|
-
echo "" >> "$config"
|
|
95
|
-
echo "# AI DevOps API Keys (single source of truth)" >> "$config"
|
|
96
|
-
echo "$source_line" >> "$config"
|
|
97
|
-
print_success "Added mcp-env.sh sourcing to $config"
|
|
98
|
-
((updated++))
|
|
99
|
-
fi
|
|
100
|
-
done
|
|
101
|
-
|
|
102
|
-
if [[ $updated -eq 0 ]]; then
|
|
103
|
-
print_info "Shell configs already configured"
|
|
104
|
-
fi
|
|
105
|
-
|
|
106
|
-
return 0
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
# Convert service name to env var name (e.g., "updown-api-key" -> "UPDOWN_API_KEY")
|
|
110
|
-
service_to_env_var() {
|
|
111
|
-
local service="$1"
|
|
112
|
-
echo "$service" | tr '[:lower:]-' '[:upper:]_'
|
|
113
|
-
return 0
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
# Parse export command (e.g., 'export VERCEL_TOKEN="xxx"' -> extracts var name and value)
|
|
117
|
-
parse_export_command() {
|
|
118
|
-
local input="$1"
|
|
119
|
-
|
|
120
|
-
# Remove 'export ' prefix if present
|
|
121
|
-
input="${input#export }"
|
|
122
|
-
|
|
123
|
-
# Extract var name and value
|
|
124
|
-
local var_name="${input%%=*}"
|
|
125
|
-
local value="${input#*=}"
|
|
126
|
-
|
|
127
|
-
# Remove quotes from value
|
|
128
|
-
value="${value#\"}"
|
|
129
|
-
value="${value%\"}"
|
|
130
|
-
value="${value#\'}"
|
|
131
|
-
value="${value%\'}"
|
|
132
|
-
|
|
133
|
-
echo "$var_name"
|
|
134
|
-
echo "$value"
|
|
135
|
-
return 0
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
# Set API key securely
|
|
139
|
-
set_api_key() {
|
|
140
|
-
local service="$1"
|
|
141
|
-
local key="$2"
|
|
142
|
-
|
|
143
|
-
if [[ -z "$service" ]]; then
|
|
144
|
-
print_warning "Usage: $0 set <service> <api_key>"
|
|
145
|
-
print_info "Or paste an export command: $0 add 'export TOKEN=\"xxx\"'"
|
|
146
|
-
return 1
|
|
147
|
-
fi
|
|
148
|
-
|
|
149
|
-
# If only one argument and it looks like an export command
|
|
150
|
-
if [[ -z "$key" && "$service" == export* ]]; then
|
|
151
|
-
local parsed
|
|
152
|
-
parsed=$(parse_export_command "$service")
|
|
153
|
-
service=$(echo "$parsed" | head -1)
|
|
154
|
-
key=$(echo "$parsed" | tail -1)
|
|
155
|
-
print_info "Parsed export command: $service"
|
|
156
|
-
fi
|
|
157
|
-
|
|
158
|
-
if [[ -z "$key" ]]; then
|
|
159
|
-
print_warning "Usage: $0 set <service> <api_key>"
|
|
160
|
-
return 1
|
|
161
|
-
fi
|
|
162
|
-
|
|
163
|
-
setup_secure_directory
|
|
164
|
-
|
|
165
|
-
local env_var
|
|
166
|
-
# If service is already UPPER_CASE, use it directly
|
|
167
|
-
if [[ "$service" =~ ^[A-Z_]+$ ]]; then
|
|
168
|
-
env_var="$service"
|
|
169
|
-
else
|
|
170
|
-
env_var=$(service_to_env_var "$service")
|
|
171
|
-
fi
|
|
172
|
-
|
|
173
|
-
# Check if the env var already exists in the file
|
|
174
|
-
if grep -q "^export ${env_var}=" "$MCP_ENV_FILE" 2>/dev/null; then
|
|
175
|
-
# Update existing entry
|
|
176
|
-
local tmp_file="${MCP_ENV_FILE}.tmp"
|
|
177
|
-
sed "s|^export ${env_var}=.*|export ${env_var}=\"${key}\"|" "$MCP_ENV_FILE" > "$tmp_file"
|
|
178
|
-
mv "$tmp_file" "$MCP_ENV_FILE"
|
|
179
|
-
chmod 600 "$MCP_ENV_FILE"
|
|
180
|
-
print_success "Updated $env_var in mcp-env.sh"
|
|
181
|
-
else
|
|
182
|
-
# Append new entry
|
|
183
|
-
echo "export ${env_var}=\"${key}\"" >> "$MCP_ENV_FILE"
|
|
184
|
-
chmod 600 "$MCP_ENV_FILE"
|
|
185
|
-
print_success "Added $env_var to mcp-env.sh"
|
|
186
|
-
fi
|
|
187
|
-
|
|
188
|
-
# Also export to current shell
|
|
189
|
-
export "${env_var}=${key}"
|
|
190
|
-
print_info "Exported to current shell. Run 'source ~/.zshrc' (or ~/.bashrc) for other terminals."
|
|
191
|
-
|
|
192
|
-
return 0
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
# Add command - alias for set, better for pasting export commands
|
|
196
|
-
add_api_key() {
|
|
197
|
-
set_api_key "$@"
|
|
198
|
-
return 0
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
# Get API key
|
|
202
|
-
get_api_key() {
|
|
203
|
-
local service="$1"
|
|
204
|
-
|
|
205
|
-
if [[ -z "$service" ]]; then
|
|
206
|
-
print_warning "Usage: $0 get <service>"
|
|
207
|
-
return 1
|
|
208
|
-
fi
|
|
209
|
-
|
|
210
|
-
if [[ ! -f "$MCP_ENV_FILE" ]]; then
|
|
211
|
-
print_warning "No API keys configured. Run '$0 setup' first."
|
|
212
|
-
return 1
|
|
213
|
-
fi
|
|
214
|
-
|
|
215
|
-
local env_var
|
|
216
|
-
# If service is already UPPER_CASE, use it directly
|
|
217
|
-
if [[ "$service" =~ ^[A-Z_]+$ ]]; then
|
|
218
|
-
env_var="$service"
|
|
219
|
-
else
|
|
220
|
-
env_var=$(service_to_env_var "$service")
|
|
221
|
-
fi
|
|
222
|
-
|
|
223
|
-
# First check environment (already loaded)
|
|
224
|
-
local key="${!env_var}"
|
|
225
|
-
|
|
226
|
-
# If not in env, try to extract from file
|
|
227
|
-
if [[ -z "$key" ]]; then
|
|
228
|
-
key=$(grep "^export ${env_var}=" "$MCP_ENV_FILE" 2>/dev/null | sed 's/^export [^=]*="//' | sed 's/"$//')
|
|
229
|
-
fi
|
|
230
|
-
|
|
231
|
-
if [[ -n "$key" ]]; then
|
|
232
|
-
echo "$key"
|
|
233
|
-
return 0
|
|
234
|
-
else
|
|
235
|
-
print_warning "API key for $service ($env_var) not found"
|
|
236
|
-
return 1
|
|
237
|
-
fi
|
|
238
|
-
return 0
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
# List configured services (without showing keys)
|
|
242
|
-
list_services() {
|
|
243
|
-
if [[ ! -f "$MCP_ENV_FILE" ]]; then
|
|
244
|
-
print_info "No API keys configured"
|
|
245
|
-
return 0
|
|
246
|
-
fi
|
|
247
|
-
|
|
248
|
-
print_info "Configured API keys in mcp-env.sh:"
|
|
249
|
-
echo ""
|
|
250
|
-
grep "^export " "$MCP_ENV_FILE" | sed 's/=.*//' | sed 's/export / /' | sort
|
|
251
|
-
echo ""
|
|
252
|
-
print_info "File: $MCP_ENV_FILE"
|
|
253
|
-
|
|
254
|
-
return 0
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
# Show help
|
|
258
|
-
show_help() {
|
|
259
|
-
print_info "AI DevOps - Secure Local API Key Management"
|
|
260
|
-
echo ""
|
|
261
|
-
print_info "Manages API keys in: $MCP_ENV_FILE"
|
|
262
|
-
print_info "This file is sourced by shell configs (zsh & bash) for all processes."
|
|
263
|
-
echo ""
|
|
264
|
-
print_info "Usage: $0 <command> [args]"
|
|
265
|
-
echo ""
|
|
266
|
-
print_info "Commands:"
|
|
267
|
-
echo " setup - Initialize storage and shell integration"
|
|
268
|
-
echo " set <service> <key> - Store API key for service"
|
|
269
|
-
echo " add 'export X=\"y\"' - Parse and store from export command"
|
|
270
|
-
echo " get <service> - Retrieve API key for service"
|
|
271
|
-
echo " list - List configured services"
|
|
272
|
-
echo ""
|
|
273
|
-
print_info "Examples:"
|
|
274
|
-
echo " $0 setup"
|
|
275
|
-
echo " $0 set vercel-token YOUR_TOKEN"
|
|
276
|
-
echo " $0 add 'export VERCEL_TOKEN=\"abc123\"' # Paste from service"
|
|
277
|
-
echo " $0 set SUPABASE_KEY abc123 # Direct env var name"
|
|
278
|
-
echo " $0 get vercel-token"
|
|
279
|
-
echo " $0 list"
|
|
280
|
-
echo ""
|
|
281
|
-
print_info "When a service gives you 'export TOKEN=xxx', use:"
|
|
282
|
-
echo " $0 add 'export TOKEN=\"xxx\"'"
|
|
283
|
-
echo ""
|
|
284
|
-
print_info "Service names are converted to env vars:"
|
|
285
|
-
echo " vercel-token -> VERCEL_TOKEN"
|
|
286
|
-
echo " supabase-key -> SUPABASE_KEY"
|
|
287
|
-
echo " DIRECT_NAME -> DIRECT_NAME (kept as-is)"
|
|
288
|
-
return 0
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
# Main execution
|
|
292
|
-
main() {
|
|
293
|
-
local command="$1"
|
|
294
|
-
shift 2>/dev/null || true
|
|
295
|
-
|
|
296
|
-
case "$command" in
|
|
297
|
-
"set")
|
|
298
|
-
set_api_key "$@"
|
|
299
|
-
;;
|
|
300
|
-
"add")
|
|
301
|
-
add_api_key "$@"
|
|
302
|
-
;;
|
|
303
|
-
"get")
|
|
304
|
-
get_api_key "$@"
|
|
305
|
-
;;
|
|
306
|
-
"list")
|
|
307
|
-
list_services
|
|
308
|
-
;;
|
|
309
|
-
"setup")
|
|
310
|
-
setup_secure_directory
|
|
311
|
-
setup_shell_integration
|
|
312
|
-
print_success "Secure API key storage ready"
|
|
313
|
-
echo ""
|
|
314
|
-
show_help
|
|
315
|
-
;;
|
|
316
|
-
"help"|"--help"|"-h"|"")
|
|
317
|
-
show_help
|
|
318
|
-
;;
|
|
319
|
-
*)
|
|
320
|
-
print_error "$ERROR_UNKNOWN_COMMAND $command"
|
|
321
|
-
echo ""
|
|
322
|
-
show_help
|
|
323
|
-
return 1
|
|
324
|
-
;;
|
|
325
|
-
esac
|
|
326
|
-
|
|
327
|
-
return 0
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
main "$@"
|