aidevops 2.52.1 → 2.53.2
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,565 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Secretlint for detecting exposed secrets
|
|
3
|
-
mode: subagent
|
|
4
|
-
tools:
|
|
5
|
-
read: true
|
|
6
|
-
write: false
|
|
7
|
-
edit: false
|
|
8
|
-
bash: true
|
|
9
|
-
glob: true
|
|
10
|
-
grep: true
|
|
11
|
-
webfetch: false
|
|
12
|
-
task: true
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# Secretlint - Secret Detection Tool
|
|
16
|
-
|
|
17
|
-
<!-- AI-CONTEXT-START -->
|
|
18
|
-
|
|
19
|
-
## Quick Reference
|
|
20
|
-
|
|
21
|
-
- **Type**: Pluggable linting tool to prevent committing credentials and secrets
|
|
22
|
-
- **Install**: `npm install secretlint @secretlint/secretlint-rule-preset-recommend --save-dev`
|
|
23
|
-
- **Quick start**: `npx @secretlint/quick-start "**/*"` (no install) or `docker run -v $(pwd):$(pwd) -w $(pwd) --rm secretlint/secretlint secretlint "**/*"`
|
|
24
|
-
- **Init**: `npx secretlint --init` creates `.secretlintrc.json`
|
|
25
|
-
- **Config**: `.secretlintrc.json` (rules), `.secretlintignore` (exclusions)
|
|
26
|
-
- **Commands**: `secretlint-helper.sh [install|init|scan|quick|docker|mask|sarif|hook|status|help]`
|
|
27
|
-
- **Exit codes**: 0=clean, 1=secrets found, 2=error
|
|
28
|
-
- **Output formats**: stylish (default), json, compact, table, sarif, mask-result
|
|
29
|
-
- **Detected secrets**: AWS, GCP, GitHub, OpenAI, Anthropic, Slack, npm, private keys, database strings, and more
|
|
30
|
-
- **Pre-commit**: Husky+lint-staged or native git hooks supported
|
|
31
|
-
|
|
32
|
-
<!-- AI-CONTEXT-END -->
|
|
33
|
-
|
|
34
|
-
Secretlint is a pluggable linting tool designed to prevent committing credentials and secrets to repositories. It provides an opt-in approach with comprehensive documentation for each detection rule.
|
|
35
|
-
|
|
36
|
-
## Overview
|
|
37
|
-
|
|
38
|
-
| Feature | Description |
|
|
39
|
-
|---------|-------------|
|
|
40
|
-
| **Secret Scanner** | Finds credentials in projects and reports them |
|
|
41
|
-
| **Project-Friendly** | Easy setup per-project with CI service integration |
|
|
42
|
-
| **Pre-Commit Hooks** | Prevents committing credential files |
|
|
43
|
-
| **Pluggable** | Custom rules and flexible configuration |
|
|
44
|
-
| **Documentation** | Each rule describes why it detects something as secret |
|
|
45
|
-
|
|
46
|
-
## Quick Start
|
|
47
|
-
|
|
48
|
-
### Installation Options
|
|
49
|
-
|
|
50
|
-
```bash
|
|
51
|
-
# Option 1: Local installation (recommended for projects)
|
|
52
|
-
./.agent/scripts/secretlint-helper.sh install
|
|
53
|
-
|
|
54
|
-
# Option 2: Quick scan without installation
|
|
55
|
-
./.agent/scripts/secretlint-helper.sh quick
|
|
56
|
-
|
|
57
|
-
# Option 3: Docker (no Node.js required)
|
|
58
|
-
./.agent/scripts/secretlint-helper.sh docker
|
|
59
|
-
|
|
60
|
-
# Option 4: Global installation
|
|
61
|
-
./.agent/scripts/secretlint-helper.sh install global
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Basic Usage
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
# Check installation status
|
|
68
|
-
./.agent/scripts/secretlint-helper.sh status
|
|
69
|
-
|
|
70
|
-
# Initialize configuration
|
|
71
|
-
./.agent/scripts/secretlint-helper.sh init
|
|
72
|
-
|
|
73
|
-
# Scan all files
|
|
74
|
-
./.agent/scripts/secretlint-helper.sh scan
|
|
75
|
-
|
|
76
|
-
# Scan specific directory
|
|
77
|
-
./.agent/scripts/secretlint-helper.sh scan "src/**/*"
|
|
78
|
-
|
|
79
|
-
# Quick scan (no installation needed)
|
|
80
|
-
./.agent/scripts/secretlint-helper.sh quick
|
|
81
|
-
|
|
82
|
-
# Scan via Docker
|
|
83
|
-
./.agent/scripts/secretlint-helper.sh docker
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
## Detected Secret Types
|
|
87
|
-
|
|
88
|
-
Secretlint's recommended preset detects:
|
|
89
|
-
|
|
90
|
-
| Secret Type | Rule |
|
|
91
|
-
|-------------|------|
|
|
92
|
-
| AWS Access Keys & Secret Keys | `@secretlint/secretlint-rule-aws` |
|
|
93
|
-
| GCP Service Account Keys | `@secretlint/secretlint-rule-gcp` |
|
|
94
|
-
| GitHub Tokens (PAT, OAuth, App) | `@secretlint/secretlint-rule-github` |
|
|
95
|
-
| npm Tokens | `@secretlint/secretlint-rule-npm` |
|
|
96
|
-
| Private Keys (RSA, DSA, EC, OpenSSH) | `@secretlint/secretlint-rule-privatekey` |
|
|
97
|
-
| Basic Auth in URLs | `@secretlint/secretlint-rule-basicauth` |
|
|
98
|
-
| Slack Tokens & Webhooks | `@secretlint/secretlint-rule-slack` |
|
|
99
|
-
| SendGrid API Keys | `@secretlint/secretlint-rule-sendgrid` |
|
|
100
|
-
| Shopify API Keys | `@secretlint/secretlint-rule-shopify` |
|
|
101
|
-
| OpenAI API Keys | `@secretlint/secretlint-rule-openai` |
|
|
102
|
-
| Anthropic/Claude API Keys | `@secretlint/secretlint-rule-anthropic` |
|
|
103
|
-
| Linear API Keys | `@secretlint/secretlint-rule-linear` |
|
|
104
|
-
| 1Password Service Account Tokens | `@secretlint/secretlint-rule-1password` |
|
|
105
|
-
| Database Connection Strings | `@secretlint/secretlint-rule-database-connection-string` |
|
|
106
|
-
|
|
107
|
-
### Additional Rules
|
|
108
|
-
|
|
109
|
-
| Rule | Description |
|
|
110
|
-
|------|-------------|
|
|
111
|
-
| `@secretlint/secretlint-rule-pattern` | Custom regex patterns |
|
|
112
|
-
| `@secretlint/secretlint-rule-secp256k1-privatekey` | Cryptocurrency private keys |
|
|
113
|
-
| `@secretlint/secretlint-rule-no-k8s-kind-secret` | Kubernetes Secret manifests |
|
|
114
|
-
| `@secretlint/secretlint-rule-no-homedir` | Home directory paths |
|
|
115
|
-
| `@secretlint/secretlint-rule-no-dotenv` | .env file detection |
|
|
116
|
-
| `@secretlint/secretlint-rule-filter-comments` | Comment-based ignoring |
|
|
117
|
-
|
|
118
|
-
## Configuration
|
|
119
|
-
|
|
120
|
-
### Basic Configuration (.secretlintrc.json)
|
|
121
|
-
|
|
122
|
-
```json
|
|
123
|
-
{
|
|
124
|
-
"rules": [
|
|
125
|
-
{
|
|
126
|
-
"id": "@secretlint/secretlint-rule-preset-recommend"
|
|
127
|
-
}
|
|
128
|
-
]
|
|
129
|
-
}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Advanced Configuration
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"rules": [
|
|
137
|
-
{
|
|
138
|
-
"id": "@secretlint/secretlint-rule-preset-recommend",
|
|
139
|
-
"rules": [
|
|
140
|
-
{
|
|
141
|
-
"id": "@secretlint/secretlint-rule-aws",
|
|
142
|
-
"options": {
|
|
143
|
-
"allows": ["/test-key-/i", "AKIAIOSFODNN7EXAMPLE"]
|
|
144
|
-
},
|
|
145
|
-
"allowMessageIds": ["AWSAccountID"]
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
"id": "@secretlint/secretlint-rule-github",
|
|
149
|
-
"disabled": false
|
|
150
|
-
}
|
|
151
|
-
]
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
"id": "@secretlint/secretlint-rule-pattern",
|
|
155
|
-
"options": {
|
|
156
|
-
"patterns": [
|
|
157
|
-
{
|
|
158
|
-
"name": "custom-api-key",
|
|
159
|
-
"patterns": ["/MY_CUSTOM_KEY=[A-Za-z0-9]{32}/"]
|
|
160
|
-
}
|
|
161
|
-
]
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
]
|
|
165
|
-
}
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
### Rule Options
|
|
169
|
-
|
|
170
|
-
| Option | Type | Description |
|
|
171
|
-
|--------|------|-------------|
|
|
172
|
-
| `id` | string | Rule package name |
|
|
173
|
-
| `options` | object | Rule-specific options |
|
|
174
|
-
| `disabled` | boolean | Disable the rule |
|
|
175
|
-
| `allowMessageIds` | string[] | Message IDs to suppress |
|
|
176
|
-
| `allows` | string[] | Patterns to allow (RegExp-like strings) |
|
|
177
|
-
|
|
178
|
-
### Ignore File (.secretlintignore)
|
|
179
|
-
|
|
180
|
-
Uses `.gitignore` syntax:
|
|
181
|
-
|
|
182
|
-
```text
|
|
183
|
-
# Dependencies
|
|
184
|
-
**/node_modules/**
|
|
185
|
-
**/vendor/**
|
|
186
|
-
|
|
187
|
-
# Build outputs
|
|
188
|
-
**/dist/**
|
|
189
|
-
**/build/**
|
|
190
|
-
|
|
191
|
-
# Test fixtures (may contain fake secrets)
|
|
192
|
-
**/test/fixtures/**
|
|
193
|
-
**/testdata/**
|
|
194
|
-
|
|
195
|
-
# Generated files
|
|
196
|
-
**/package-lock.json
|
|
197
|
-
**/pnpm-lock.yaml
|
|
198
|
-
|
|
199
|
-
# Binary files
|
|
200
|
-
**/*.png
|
|
201
|
-
**/*.jpg
|
|
202
|
-
**/*.pdf
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
## Ignoring by Comments
|
|
206
|
-
|
|
207
|
-
Use inline comments to ignore specific lines:
|
|
208
|
-
|
|
209
|
-
```javascript
|
|
210
|
-
// secretlint-disable-next-line
|
|
211
|
-
const API_KEY = "sk-test-12345";
|
|
212
|
-
|
|
213
|
-
const config = {
|
|
214
|
-
key: "secret-value" // secretlint-disable-line
|
|
215
|
-
};
|
|
216
|
-
|
|
217
|
-
// secretlint-disable
|
|
218
|
-
// Block of code with test secrets
|
|
219
|
-
const TEST_KEYS = {
|
|
220
|
-
aws: "AKIAIOSFODNN7EXAMPLE",
|
|
221
|
-
github: "ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
222
|
-
};
|
|
223
|
-
// secretlint-enable
|
|
224
|
-
|
|
225
|
-
/* secretlint-disable @secretlint/secretlint-rule-github -- test credentials */
|
|
226
|
-
const testToken = "ghs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
|
|
227
|
-
/* secretlint-enable @secretlint/secretlint-rule-github */
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
## Output Formats
|
|
231
|
-
|
|
232
|
-
### Stylish (default)
|
|
233
|
-
|
|
234
|
-
```bash
|
|
235
|
-
secretlint "**/*"
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### JSON
|
|
239
|
-
|
|
240
|
-
```bash
|
|
241
|
-
secretlint "**/*" --format json
|
|
242
|
-
# or
|
|
243
|
-
./.agent/scripts/secretlint-helper.sh scan . json
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
### SARIF (for CI/CD)
|
|
247
|
-
|
|
248
|
-
```bash
|
|
249
|
-
# Install SARIF formatter
|
|
250
|
-
npm install @secretlint/secretlint-formatter-sarif --save-dev
|
|
251
|
-
|
|
252
|
-
# Generate SARIF
|
|
253
|
-
secretlint "**/*" --format @secretlint/secretlint-formatter-sarif > results.sarif
|
|
254
|
-
# or
|
|
255
|
-
./.agent/scripts/secretlint-helper.sh sarif
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
### Mask Result (fix secrets)
|
|
259
|
-
|
|
260
|
-
```bash
|
|
261
|
-
# Mask secrets in a file and overwrite
|
|
262
|
-
secretlint .zsh_history --format=mask-result --output=.zsh_history
|
|
263
|
-
# or
|
|
264
|
-
./.agent/scripts/secretlint-helper.sh mask .env.example
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
## Pre-commit Integration
|
|
268
|
-
|
|
269
|
-
### Option 1: Native Git Hook
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
# Setup via helper
|
|
273
|
-
./.agent/scripts/secretlint-helper.sh hook
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
### Option 2: Husky + lint-staged (Node.js projects)
|
|
277
|
-
|
|
278
|
-
```bash
|
|
279
|
-
# Setup via helper
|
|
280
|
-
./.agent/scripts/secretlint-helper.sh husky
|
|
281
|
-
```
|
|
282
|
-
|
|
283
|
-
Or manually:
|
|
284
|
-
|
|
285
|
-
```bash
|
|
286
|
-
# Install
|
|
287
|
-
npx husky-init && npm install lint-staged --save-dev
|
|
288
|
-
|
|
289
|
-
# Configure lint-staged in package.json
|
|
290
|
-
{
|
|
291
|
-
"lint-staged": {
|
|
292
|
-
"*": ["secretlint"]
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
# Add hook
|
|
297
|
-
npx husky add .husky/pre-commit "npx --no-install lint-staged"
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
### Option 3: pre-commit Framework (Docker)
|
|
301
|
-
|
|
302
|
-
```yaml
|
|
303
|
-
# .pre-commit-config.yaml
|
|
304
|
-
- repo: local
|
|
305
|
-
hooks:
|
|
306
|
-
- id: secretlint
|
|
307
|
-
name: secretlint
|
|
308
|
-
language: docker_image
|
|
309
|
-
entry: secretlint/secretlint:latest secretlint
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
## CI/CD Integration
|
|
313
|
-
|
|
314
|
-
### GitHub Actions
|
|
315
|
-
|
|
316
|
-
```yaml
|
|
317
|
-
name: Secretlint
|
|
318
|
-
on: [push, pull_request]
|
|
319
|
-
permissions:
|
|
320
|
-
contents: read
|
|
321
|
-
jobs:
|
|
322
|
-
secretlint:
|
|
323
|
-
runs-on: ubuntu-latest
|
|
324
|
-
steps:
|
|
325
|
-
- uses: actions/checkout@v4
|
|
326
|
-
- uses: actions/setup-node@v4
|
|
327
|
-
with:
|
|
328
|
-
node-version: 20
|
|
329
|
-
- run: npm ci
|
|
330
|
-
- run: npx secretlint "**/*"
|
|
331
|
-
```
|
|
332
|
-
|
|
333
|
-
### GitHub Actions (Diff Only)
|
|
334
|
-
|
|
335
|
-
```yaml
|
|
336
|
-
name: Secretlint Diff
|
|
337
|
-
on: [push, pull_request]
|
|
338
|
-
jobs:
|
|
339
|
-
secretlint-diff:
|
|
340
|
-
runs-on: ubuntu-latest
|
|
341
|
-
steps:
|
|
342
|
-
- uses: actions/checkout@v4
|
|
343
|
-
with:
|
|
344
|
-
fetch-depth: 0
|
|
345
|
-
- uses: tj-actions/changed-files@v44
|
|
346
|
-
id: changed-files
|
|
347
|
-
- uses: actions/setup-node@v4
|
|
348
|
-
with:
|
|
349
|
-
node-version: 20
|
|
350
|
-
- if: steps.changed-files.outputs.any_changed == 'true'
|
|
351
|
-
run: |
|
|
352
|
-
npm ci
|
|
353
|
-
npx secretlint ${{ steps.changed-files.outputs.all_changed_files }}
|
|
354
|
-
```
|
|
355
|
-
|
|
356
|
-
### GitLab CI
|
|
357
|
-
|
|
358
|
-
```yaml
|
|
359
|
-
secretlint:
|
|
360
|
-
image: secretlint/secretlint:latest
|
|
361
|
-
script:
|
|
362
|
-
- secretlint "**/*"
|
|
363
|
-
rules:
|
|
364
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
365
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
### Generic CI Script
|
|
369
|
-
|
|
370
|
-
```bash
|
|
371
|
-
#!/bin/bash
|
|
372
|
-
set -e
|
|
373
|
-
|
|
374
|
-
# Install
|
|
375
|
-
npm ci
|
|
376
|
-
|
|
377
|
-
# Run secretlint
|
|
378
|
-
npx secretlint "**/*" --format json > secretlint-results.json || true
|
|
379
|
-
|
|
380
|
-
# Check for issues
|
|
381
|
-
if jq -e '.messages | length > 0' secretlint-results.json > /dev/null; then
|
|
382
|
-
echo "Secrets detected!"
|
|
383
|
-
jq '.messages[] | "\(.filePath):\(.line):\(.column) \(.ruleId): \(.message)"' secretlint-results.json
|
|
384
|
-
exit 1
|
|
385
|
-
fi
|
|
386
|
-
|
|
387
|
-
echo "No secrets found"
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
## Docker Usage
|
|
391
|
-
|
|
392
|
-
### Quick Scan
|
|
393
|
-
|
|
394
|
-
```bash
|
|
395
|
-
docker run -v "$(pwd)":"$(pwd)" -w "$(pwd)" --rm -it secretlint/secretlint secretlint "**/*"
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
### With Custom Config
|
|
399
|
-
|
|
400
|
-
```bash
|
|
401
|
-
docker run -v "$(pwd)":"$(pwd)" -w "$(pwd)" --rm -it \
|
|
402
|
-
secretlint/secretlint secretlint "**/*" \
|
|
403
|
-
--secretlintrc .secretlintrc.json
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
### Built-in Docker Packages
|
|
407
|
-
|
|
408
|
-
The Docker image includes:
|
|
409
|
-
- `@secretlint/secretlint-rule-preset-recommend`
|
|
410
|
-
- `@secretlint/secretlint-rule-pattern`
|
|
411
|
-
- `@secretlint/secretlint-formatter-sarif`
|
|
412
|
-
|
|
413
|
-
## Comparison with Other Tools
|
|
414
|
-
|
|
415
|
-
| Feature | Secretlint | git-secrets | detect-secrets | Gitleaks |
|
|
416
|
-
|---------|------------|-------------|----------------|----------|
|
|
417
|
-
| Approach | Opt-in | Opt-out | Opt-out | Opt-out |
|
|
418
|
-
| Custom Rules | npm packages | Shell patterns | Python plugins | TOML config |
|
|
419
|
-
| Pre-commit | Yes | Yes | Yes | Yes |
|
|
420
|
-
| CI/CD | Yes | Yes | Yes | Yes |
|
|
421
|
-
| Documentation | Per-rule docs | Limited | Limited | Limited |
|
|
422
|
-
| Node.js Required | Yes (or Docker) | No | Python | No |
|
|
423
|
-
| False Positives | Lower (opt-in) | Higher | Medium | Medium |
|
|
424
|
-
|
|
425
|
-
## Best Practices
|
|
426
|
-
|
|
427
|
-
### For Development Teams
|
|
428
|
-
|
|
429
|
-
1. **Install locally** in each project for consistent behavior
|
|
430
|
-
2. **Initialize configuration** early in project setup
|
|
431
|
-
3. **Use pre-commit hooks** to catch secrets before they're committed
|
|
432
|
-
4. **Configure allowlists** for known safe patterns (test credentials)
|
|
433
|
-
5. **Document exceptions** with `secretlint-disable` comments
|
|
434
|
-
|
|
435
|
-
### For CI/CD
|
|
436
|
-
|
|
437
|
-
1. **Fail builds** when secrets are detected
|
|
438
|
-
2. **Generate SARIF** for security dashboard integration
|
|
439
|
-
3. **Scan diff only** in PRs for performance
|
|
440
|
-
4. **Use Docker** for consistent, dependency-free scanning
|
|
441
|
-
|
|
442
|
-
### Handling False Positives
|
|
443
|
-
|
|
444
|
-
1. **Allow specific patterns** in rule options:
|
|
445
|
-
|
|
446
|
-
```json
|
|
447
|
-
{
|
|
448
|
-
"options": {
|
|
449
|
-
"allows": ["/test-/i", "example-key"]
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
```
|
|
453
|
-
|
|
454
|
-
2. **Suppress specific message IDs**:
|
|
455
|
-
|
|
456
|
-
```json
|
|
457
|
-
{
|
|
458
|
-
"allowMessageIds": ["AWSAccountID"]
|
|
459
|
-
}
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
3. **Use inline comments** for one-off exceptions:
|
|
463
|
-
|
|
464
|
-
```javascript
|
|
465
|
-
const key = "test-key"; // secretlint-disable-line
|
|
466
|
-
```
|
|
467
|
-
|
|
468
|
-
4. **Add to ignore file** for entire files/directories
|
|
469
|
-
|
|
470
|
-
## Integration with AI DevOps Framework
|
|
471
|
-
|
|
472
|
-
### Helper Script Commands
|
|
473
|
-
|
|
474
|
-
```bash
|
|
475
|
-
# Installation
|
|
476
|
-
./.agent/scripts/secretlint-helper.sh install # Local install
|
|
477
|
-
./.agent/scripts/secretlint-helper.sh install global # Global install
|
|
478
|
-
./.agent/scripts/secretlint-helper.sh install-rules all # Additional rules
|
|
479
|
-
|
|
480
|
-
# Configuration
|
|
481
|
-
./.agent/scripts/secretlint-helper.sh init # Initialize config
|
|
482
|
-
./.agent/scripts/secretlint-helper.sh status # Check status
|
|
483
|
-
|
|
484
|
-
# Scanning
|
|
485
|
-
./.agent/scripts/secretlint-helper.sh scan # Scan all files
|
|
486
|
-
./.agent/scripts/secretlint-helper.sh scan "src/**/*" # Scan specific
|
|
487
|
-
./.agent/scripts/secretlint-helper.sh quick # Quick scan (npx)
|
|
488
|
-
./.agent/scripts/secretlint-helper.sh docker # Docker scan
|
|
489
|
-
|
|
490
|
-
# Output
|
|
491
|
-
./.agent/scripts/secretlint-helper.sh scan . json # JSON output
|
|
492
|
-
./.agent/scripts/secretlint-helper.sh sarif # SARIF output
|
|
493
|
-
./.agent/scripts/secretlint-helper.sh mask file.txt # Mask secrets
|
|
494
|
-
|
|
495
|
-
# Hooks
|
|
496
|
-
./.agent/scripts/secretlint-helper.sh hook # Git hook
|
|
497
|
-
./.agent/scripts/secretlint-helper.sh husky # Husky setup
|
|
498
|
-
```
|
|
499
|
-
|
|
500
|
-
### Quality Pipeline Integration
|
|
501
|
-
|
|
502
|
-
Secretlint integrates with the framework's quality pipeline:
|
|
503
|
-
|
|
504
|
-
```bash
|
|
505
|
-
# Run as part of quality checks
|
|
506
|
-
./.agent/scripts/linters-local.sh # Includes secretlint
|
|
507
|
-
|
|
508
|
-
# Pre-commit validation
|
|
509
|
-
./.agent/scripts/pre-commit-hook.sh # Includes secretlint
|
|
510
|
-
```
|
|
511
|
-
|
|
512
|
-
## Troubleshooting
|
|
513
|
-
|
|
514
|
-
### Common Issues
|
|
515
|
-
|
|
516
|
-
**"No configuration file found"**
|
|
517
|
-
|
|
518
|
-
```bash
|
|
519
|
-
./.agent/scripts/secretlint-helper.sh init
|
|
520
|
-
```
|
|
521
|
-
|
|
522
|
-
**"secretlint command not found"**
|
|
523
|
-
|
|
524
|
-
```bash
|
|
525
|
-
# Use npx
|
|
526
|
-
npx secretlint "**/*"
|
|
527
|
-
# Or install globally
|
|
528
|
-
npm install -g secretlint @secretlint/secretlint-rule-preset-recommend
|
|
529
|
-
```
|
|
530
|
-
|
|
531
|
-
**Performance issues with large repos**
|
|
532
|
-
|
|
533
|
-
```bash
|
|
534
|
-
# Configure .secretlintignore to exclude:
|
|
535
|
-
**/node_modules/**
|
|
536
|
-
**/dist/**
|
|
537
|
-
**/*.lock
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
**False positives**
|
|
541
|
-
|
|
542
|
-
```json
|
|
543
|
-
{
|
|
544
|
-
"rules": [{
|
|
545
|
-
"id": "@secretlint/secretlint-rule-preset-recommend",
|
|
546
|
-
"rules": [{
|
|
547
|
-
"id": "@secretlint/secretlint-rule-<rule-name>",
|
|
548
|
-
"options": {
|
|
549
|
-
"allows": ["/pattern-to-allow/i"]
|
|
550
|
-
}
|
|
551
|
-
}]
|
|
552
|
-
}]
|
|
553
|
-
}
|
|
554
|
-
```
|
|
555
|
-
|
|
556
|
-
## Resources
|
|
557
|
-
|
|
558
|
-
- **GitHub**: [https://github.com/secretlint/secretlint](https://github.com/secretlint/secretlint)
|
|
559
|
-
- **npm**: [https://www.npmjs.com/package/secretlint](https://www.npmjs.com/package/secretlint)
|
|
560
|
-
- **Docker Hub**: [https://hub.docker.com/r/secretlint/secretlint](https://hub.docker.com/r/secretlint/secretlint)
|
|
561
|
-
- **Demo**: [https://secretlint.github.io/](https://secretlint.github.io/)
|
|
562
|
-
|
|
563
|
-
---
|
|
564
|
-
|
|
565
|
-
**Secretlint provides a secure, developer-friendly approach to preventing credential leaks with its opt-in rule system and comprehensive documentation.**
|