proagents 1.6.17 → 1.6.18
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/.claude/settings.local.json +169 -0
- package/COMMANDS.md +595 -0
- package/README.md +13 -23
- package/package.json +2 -7
- package/.proagents/ai-models/README.md +0 -141
- package/.proagents/ai-models/cost-management.md +0 -362
- package/.proagents/ai-models/fallbacks.md +0 -342
- package/.proagents/ai-models/model-config.md +0 -318
- package/.proagents/ai-models/task-routing.md +0 -503
- package/.proagents/ai-training/README.md +0 -155
- package/.proagents/ai-training/continuous-learning.md +0 -413
- package/.proagents/ai-training/domain-knowledge.md +0 -378
- package/.proagents/ai-training/pattern-learning.md +0 -455
- package/.proagents/ai-training/training-data.md +0 -337
- package/.proagents/ai-training/user-preferences.md +0 -346
- package/.proagents/approval-workflows/README.md +0 -146
- package/.proagents/approval-workflows/approval-config.md +0 -332
- package/.proagents/approval-workflows/approval-stages.md +0 -503
- package/.proagents/approval-workflows/emergency-bypass.md +0 -351
- package/.proagents/approval-workflows/examples.md +0 -859
- package/.proagents/approval-workflows/notifications.md +0 -320
- package/.proagents/compliance/README.md +0 -206
- package/.proagents/compliance/access-control.md +0 -310
- package/.proagents/compliance/audit-logging.md +0 -444
- package/.proagents/compliance/compliance-frameworks.md +0 -429
- package/.proagents/compliance/reports.md +0 -491
- package/.proagents/compliance/retention-policies.md +0 -454
- package/.proagents/config-versioning/README.md +0 -120
- package/.proagents/config-versioning/changelog.md +0 -300
- package/.proagents/config-versioning/rollback.md +0 -283
- package/.proagents/config-versioning/versioning.md +0 -330
- package/.proagents/contract-testing/README.md +0 -223
- package/.proagents/contract-testing/contract-testing.md +0 -614
- package/.proagents/contract-testing/pact-integration.md +0 -507
- package/.proagents/contract-testing/schema-validation.md +0 -565
- package/.proagents/dependency-management/README.md +0 -140
- package/.proagents/dependency-management/automation.md +0 -363
- package/.proagents/dependency-management/compatibility.md +0 -319
- package/.proagents/dependency-management/security-scanning.md +0 -413
- package/.proagents/dependency-management/update-policies.md +0 -374
- package/.proagents/disaster-recovery/README.md +0 -247
- package/.proagents/disaster-recovery/automation.md +0 -366
- package/.proagents/disaster-recovery/backup-recovery.md +0 -571
- package/.proagents/disaster-recovery/incident-response.md +0 -565
- package/.proagents/disaster-recovery/rollback-procedures.md +0 -499
- package/.proagents/disaster-recovery/runbooks.md +0 -603
- package/.proagents/disaster-recovery/scenarios.md +0 -892
- package/.proagents/disaster-recovery/testing.md +0 -438
- package/.proagents/environments/README.md +0 -244
- package/.proagents/environments/configuration.md +0 -437
- package/.proagents/environments/promotion.md +0 -434
- package/.proagents/environments/setup.md +0 -420
- package/.proagents/examples/README.md +0 -55
- package/.proagents/examples/backend-nodejs/README.md +0 -188
- package/.proagents/examples/backend-nodejs/complete-conversation.md +0 -601
- package/.proagents/examples/backend-nodejs/proagents.config.yaml +0 -415
- package/.proagents/examples/backend-nodejs/workflow-example.md +0 -909
- package/.proagents/examples/fullstack-nextjs/README.md +0 -155
- package/.proagents/examples/fullstack-nextjs/complete-conversation.md +0 -604
- package/.proagents/examples/fullstack-nextjs/proagents.config.yaml +0 -287
- package/.proagents/examples/fullstack-nextjs/workflow-example.md +0 -553
- package/.proagents/examples/mobile-react-native/README.md +0 -171
- package/.proagents/examples/mobile-react-native/complete-conversation.md +0 -825
- package/.proagents/examples/mobile-react-native/proagents.config.yaml +0 -330
- package/.proagents/examples/mobile-react-native/workflow-example.md +0 -723
- package/.proagents/examples/web-frontend-react/README.md +0 -125
- package/.proagents/examples/web-frontend-react/complete-conversation.md +0 -556
- package/.proagents/examples/web-frontend-react/proagents.config.yaml +0 -183
- package/.proagents/examples/web-frontend-react/workflow-example.md +0 -603
- package/.proagents/existing-projects/README.md +0 -65
- package/.proagents/existing-projects/challenges.md +0 -861
- package/.proagents/existing-projects/coexistence-mode.md +0 -483
- package/.proagents/existing-projects/compatibility-assessment.md +0 -541
- package/.proagents/existing-projects/gradual-adoption.md +0 -515
- package/.proagents/existing-projects/migration-strategies.md +0 -788
- package/.proagents/existing-projects/pattern-reconciliation.md +0 -489
- package/.proagents/existing-projects/team-onboarding.md +0 -617
- package/.proagents/existing-projects/technical-debt-handling.md +0 -644
- package/.proagents/feature-flags/README.md +0 -263
- package/.proagents/feature-flags/ab-testing.md +0 -413
- package/.proagents/feature-flags/configuration.md +0 -420
- package/.proagents/feature-flags/kill-switches.md +0 -444
- package/.proagents/feature-flags/rollout-strategies.md +0 -392
- package/.proagents/history.log +0 -12
- package/.proagents/i18n/README.md +0 -133
- package/.proagents/i18n/extraction.md +0 -433
- package/.proagents/i18n/tms-integration.md +0 -332
- package/.proagents/i18n/translation-workflow.md +0 -413
- package/.proagents/i18n/validation.md +0 -355
- package/.proagents/logging/README.md +0 -276
- package/.proagents/logging/aggregation.md +0 -475
- package/.proagents/logging/log-levels.md +0 -376
- package/.proagents/logging/sensitive-data.md +0 -423
- package/.proagents/logging/structured-logging.md +0 -406
- package/.proagents/metrics/README.md +0 -69
- package/.proagents/metrics/code-quality-kpis.md +0 -461
- package/.proagents/metrics/deployment-metrics.md +0 -517
- package/.proagents/metrics/developer-productivity.md +0 -368
- package/.proagents/metrics/learning-effectiveness.md +0 -478
- package/.proagents/migrations/README.md +0 -77
- package/.proagents/migrations/from-claude-projects.md +0 -313
- package/.proagents/migrations/from-cursor-rules.md +0 -345
- package/.proagents/migrations/from-custom-workflows.md +0 -410
- package/.proagents/monitoring/README.md +0 -308
- package/.proagents/monitoring/alerting.md +0 -449
- package/.proagents/monitoring/dashboards.md +0 -454
- package/.proagents/monitoring/health-checks.md +0 -436
- package/.proagents/monitoring/metrics.md +0 -434
- package/.proagents/multi-project/README.md +0 -170
- package/.proagents/multi-project/coordinated-deploy.md +0 -510
- package/.proagents/multi-project/cross-project-deps.md +0 -395
- package/.proagents/multi-project/unified-changelog.md +0 -477
- package/.proagents/multi-project/walkthroughs/monorepo-setup.md +0 -787
- package/.proagents/multi-project/workspace-config.md +0 -408
- package/.proagents/notifications/README.md +0 -151
- package/.proagents/notifications/channels.md +0 -457
- package/.proagents/notifications/preferences.md +0 -415
- package/.proagents/notifications/routing.md +0 -449
- package/.proagents/notifications/scheduling.md +0 -425
- package/.proagents/notifications/templates.md +0 -446
- package/.proagents/offline-mode/README.md +0 -145
- package/.proagents/offline-mode/caching.md +0 -344
- package/.proagents/offline-mode/offline-operations.md +0 -312
- package/.proagents/offline-mode/queue-specifications.md +0 -679
- package/.proagents/offline-mode/sync.md +0 -475
- package/.proagents/parallel-features/README.md +0 -85
- package/.proagents/parallel-features/conflict-detection.md +0 -226
- package/.proagents/parallel-features/dependency-management.md +0 -392
- package/.proagents/parallel-features/merge-coordination.md +0 -506
- package/.proagents/parallel-features/tracking-system.md +0 -416
- package/.proagents/performance/README.md +0 -59
- package/.proagents/performance/bundle-analysis.md +0 -375
- package/.proagents/performance/load-testing.md +0 -563
- package/.proagents/performance/runtime-metrics.md +0 -489
- package/.proagents/performance/web-vitals.md +0 -425
- package/.proagents/plugins/README.md +0 -139
- package/.proagents/plugins/creating-plugins.md +0 -504
- package/.proagents/plugins/plugin-api.md +0 -467
- package/.proagents/plugins/plugin-registry.md +0 -276
- package/.proagents/reporting/README.md +0 -158
- package/.proagents/reporting/dashboards.md +0 -366
- package/.proagents/reporting/exports.md +0 -524
- package/.proagents/reporting/quality-metrics.md +0 -385
- package/.proagents/reporting/templates/README.md +0 -56
- package/.proagents/reporting/templates/dashboard-config.json +0 -187
- package/.proagents/reporting/templates/metrics-queries.md +0 -427
- package/.proagents/reporting/templates/react-dashboard.tsx +0 -544
- package/.proagents/reporting/templates/widgets.md +0 -451
- package/.proagents/reporting/velocity-metrics.md +0 -340
- package/.proagents/reverse-engineering/README.md +0 -151
- package/.proagents/reverse-engineering/architecture-extraction.md +0 -325
- package/.proagents/reverse-engineering/code-analysis.md +0 -377
- package/.proagents/reverse-engineering/dependency-mapping.md +0 -567
- package/.proagents/reverse-engineering/diagram-generation.md +0 -586
- package/.proagents/reverse-engineering/documentation-generation.md +0 -468
- package/.proagents/reverse-engineering/pattern-detection.md +0 -569
- package/.proagents/reverse-engineering/quality-assessment.md +0 -733
- package/.proagents/secrets/README.md +0 -278
- package/.proagents/secrets/access-control.md +0 -443
- package/.proagents/secrets/rotation.md +0 -403
- package/.proagents/secrets/scanning.md +0 -487
- package/.proagents/secrets/storage.md +0 -394
- package/.proagents/webhooks/README.md +0 -126
- package/.proagents/webhooks/endpoints.md +0 -298
- package/.proagents/webhooks/events.md +0 -316
- package/.proagents/webhooks/payloads.md +0 -325
- package/.proagents/webhooks/reliability.md +0 -363
- package/.proagents/webhooks/security.md +0 -380
|
@@ -1,487 +0,0 @@
|
|
|
1
|
-
# Secret Scanning
|
|
2
|
-
|
|
3
|
-
Detecting exposed secrets in code and configurations.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Scanning Types
|
|
8
|
-
|
|
9
|
-
| Type | When | Purpose |
|
|
10
|
-
|------|------|---------|
|
|
11
|
-
| **Pre-commit** | Before commit | Prevent secrets from entering repo |
|
|
12
|
-
| **CI/CD** | On push/PR | Catch secrets that slip through |
|
|
13
|
-
| **Repository** | Scheduled | Find historical secrets |
|
|
14
|
-
| **Runtime** | Continuous | Detect secrets in logs/outputs |
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
## Configuration
|
|
19
|
-
|
|
20
|
-
### Basic Setup
|
|
21
|
-
|
|
22
|
-
```yaml
|
|
23
|
-
# proagents.config.yaml
|
|
24
|
-
secrets:
|
|
25
|
-
scanning:
|
|
26
|
-
enabled: true
|
|
27
|
-
|
|
28
|
-
# Scan stages
|
|
29
|
-
stages:
|
|
30
|
-
pre_commit: true
|
|
31
|
-
ci_cd: true
|
|
32
|
-
repository: true
|
|
33
|
-
runtime: true
|
|
34
|
-
|
|
35
|
-
# Patterns to detect
|
|
36
|
-
patterns:
|
|
37
|
-
builtin:
|
|
38
|
-
- "aws_access_key"
|
|
39
|
-
- "aws_secret_key"
|
|
40
|
-
- "github_token"
|
|
41
|
-
- "slack_webhook"
|
|
42
|
-
- "stripe_api_key"
|
|
43
|
-
- "google_api_key"
|
|
44
|
-
- "jwt_token"
|
|
45
|
-
- "private_key"
|
|
46
|
-
- "password_in_url"
|
|
47
|
-
|
|
48
|
-
# Actions on detection
|
|
49
|
-
actions:
|
|
50
|
-
pre_commit:
|
|
51
|
-
block: true
|
|
52
|
-
message: "Potential secret detected. Please remove before committing."
|
|
53
|
-
|
|
54
|
-
ci_cd:
|
|
55
|
-
fail_build: true
|
|
56
|
-
notify: ["security@company.com"]
|
|
57
|
-
|
|
58
|
-
repository:
|
|
59
|
-
create_issue: true
|
|
60
|
-
notify: ["security@company.com"]
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Custom Patterns
|
|
64
|
-
|
|
65
|
-
```yaml
|
|
66
|
-
secrets:
|
|
67
|
-
scanning:
|
|
68
|
-
custom_patterns:
|
|
69
|
-
# Company-specific patterns
|
|
70
|
-
- name: "internal_api_key"
|
|
71
|
-
pattern: 'MYCOMPANY_[A-Z0-9]{32}'
|
|
72
|
-
description: "Internal API key"
|
|
73
|
-
severity: "high"
|
|
74
|
-
|
|
75
|
-
- name: "database_connection"
|
|
76
|
-
pattern: '(mysql|postgres|mongodb)://[^:]+:[^@]+@'
|
|
77
|
-
description: "Database connection string with credentials"
|
|
78
|
-
severity: "critical"
|
|
79
|
-
|
|
80
|
-
- name: "internal_token"
|
|
81
|
-
pattern: 'int_[a-zA-Z0-9]{40}'
|
|
82
|
-
description: "Internal service token"
|
|
83
|
-
severity: "high"
|
|
84
|
-
|
|
85
|
-
# Entropy-based detection
|
|
86
|
-
entropy:
|
|
87
|
-
enabled: true
|
|
88
|
-
min_length: 20
|
|
89
|
-
threshold: 4.5 # Shannon entropy threshold
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## Pre-commit Scanning
|
|
95
|
-
|
|
96
|
-
### Git Hooks
|
|
97
|
-
|
|
98
|
-
```yaml
|
|
99
|
-
secrets:
|
|
100
|
-
scanning:
|
|
101
|
-
pre_commit:
|
|
102
|
-
enabled: true
|
|
103
|
-
|
|
104
|
-
# Hook configuration
|
|
105
|
-
hook:
|
|
106
|
-
type: "pre-commit"
|
|
107
|
-
tool: "gitleaks"
|
|
108
|
-
|
|
109
|
-
# Files to scan
|
|
110
|
-
include:
|
|
111
|
-
- "**/*.ts"
|
|
112
|
-
- "**/*.js"
|
|
113
|
-
- "**/*.json"
|
|
114
|
-
- "**/*.yaml"
|
|
115
|
-
- "**/*.yml"
|
|
116
|
-
- "**/*.env*"
|
|
117
|
-
|
|
118
|
-
# Files to skip
|
|
119
|
-
exclude:
|
|
120
|
-
- "node_modules/**"
|
|
121
|
-
- "*.test.ts"
|
|
122
|
-
- "**/*.min.js"
|
|
123
|
-
|
|
124
|
-
# Allow specific patterns
|
|
125
|
-
allowlist:
|
|
126
|
-
- pattern: "EXAMPLE_API_KEY"
|
|
127
|
-
reason: "Documentation example"
|
|
128
|
-
- path: "docs/examples/**"
|
|
129
|
-
reason: "Example files"
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Pre-commit Config
|
|
133
|
-
|
|
134
|
-
```yaml
|
|
135
|
-
# .pre-commit-config.yaml
|
|
136
|
-
repos:
|
|
137
|
-
- repo: https://github.com/gitleaks/gitleaks
|
|
138
|
-
rev: v8.18.0
|
|
139
|
-
hooks:
|
|
140
|
-
- id: gitleaks
|
|
141
|
-
|
|
142
|
-
- repo: local
|
|
143
|
-
hooks:
|
|
144
|
-
- id: proagents-secret-scan
|
|
145
|
-
name: ProAgents Secret Scan
|
|
146
|
-
entry: proagents secrets scan --staged
|
|
147
|
-
language: system
|
|
148
|
-
pass_filenames: false
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
---
|
|
152
|
-
|
|
153
|
-
## CI/CD Scanning
|
|
154
|
-
|
|
155
|
-
### GitHub Actions
|
|
156
|
-
|
|
157
|
-
```yaml
|
|
158
|
-
# .github/workflows/security.yml
|
|
159
|
-
name: Secret Scanning
|
|
160
|
-
|
|
161
|
-
on:
|
|
162
|
-
push:
|
|
163
|
-
branches: [main, develop]
|
|
164
|
-
pull_request:
|
|
165
|
-
|
|
166
|
-
jobs:
|
|
167
|
-
scan:
|
|
168
|
-
runs-on: ubuntu-latest
|
|
169
|
-
steps:
|
|
170
|
-
- uses: actions/checkout@v4
|
|
171
|
-
with:
|
|
172
|
-
fetch-depth: 0
|
|
173
|
-
|
|
174
|
-
- name: Run Gitleaks
|
|
175
|
-
uses: gitleaks/gitleaks-action@v2
|
|
176
|
-
env:
|
|
177
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
178
|
-
|
|
179
|
-
- name: Run TruffleHog
|
|
180
|
-
uses: trufflesecurity/trufflehog@main
|
|
181
|
-
with:
|
|
182
|
-
path: ./
|
|
183
|
-
base: ${{ github.event.repository.default_branch }}
|
|
184
|
-
head: HEAD
|
|
185
|
-
|
|
186
|
-
- name: ProAgents Secret Scan
|
|
187
|
-
run: |
|
|
188
|
-
npx proagents secrets scan --ci
|
|
189
|
-
env:
|
|
190
|
-
PROAGENTS_FAIL_ON_SECRETS: true
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### GitLab CI
|
|
194
|
-
|
|
195
|
-
```yaml
|
|
196
|
-
# .gitlab-ci.yml
|
|
197
|
-
secret_scan:
|
|
198
|
-
stage: security
|
|
199
|
-
image: zricethezav/gitleaks:latest
|
|
200
|
-
script:
|
|
201
|
-
- gitleaks detect --source . --verbose
|
|
202
|
-
rules:
|
|
203
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
204
|
-
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
---
|
|
208
|
-
|
|
209
|
-
## Repository Scanning
|
|
210
|
-
|
|
211
|
-
### Full History Scan
|
|
212
|
-
|
|
213
|
-
```yaml
|
|
214
|
-
secrets:
|
|
215
|
-
scanning:
|
|
216
|
-
repository:
|
|
217
|
-
# Schedule
|
|
218
|
-
schedule: "0 2 * * *" # Daily at 2 AM
|
|
219
|
-
|
|
220
|
-
# Scan options
|
|
221
|
-
options:
|
|
222
|
-
full_history: true
|
|
223
|
-
include_branches: ["main", "develop"]
|
|
224
|
-
depth: 0 # All commits
|
|
225
|
-
|
|
226
|
-
# Reporting
|
|
227
|
-
report:
|
|
228
|
-
format: "sarif"
|
|
229
|
-
output: "secret-scan-report.sarif"
|
|
230
|
-
upload_to: "github-security"
|
|
231
|
-
|
|
232
|
-
# On finding
|
|
233
|
-
on_finding:
|
|
234
|
-
severity_high:
|
|
235
|
-
- create_issue: true
|
|
236
|
-
- notify: ["security-team"]
|
|
237
|
-
- block_deploy: true
|
|
238
|
-
|
|
239
|
-
severity_medium:
|
|
240
|
-
- create_issue: true
|
|
241
|
-
- notify: ["tech-leads"]
|
|
242
|
-
|
|
243
|
-
severity_low:
|
|
244
|
-
- log_only: true
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
### Remediation Workflow
|
|
248
|
-
|
|
249
|
-
```yaml
|
|
250
|
-
secrets:
|
|
251
|
-
scanning:
|
|
252
|
-
remediation:
|
|
253
|
-
# Automatic issue creation
|
|
254
|
-
create_issue:
|
|
255
|
-
enabled: true
|
|
256
|
-
template: |
|
|
257
|
-
## Secret Detected
|
|
258
|
-
|
|
259
|
-
**Type:** {{secret_type}}
|
|
260
|
-
**File:** {{file_path}}
|
|
261
|
-
**Line:** {{line_number}}
|
|
262
|
-
**Commit:** {{commit_hash}}
|
|
263
|
-
**Author:** {{commit_author}}
|
|
264
|
-
|
|
265
|
-
### Required Actions
|
|
266
|
-
1. Rotate the exposed secret immediately
|
|
267
|
-
2. Remove the secret from git history
|
|
268
|
-
3. Update the secret in secrets manager
|
|
269
|
-
4. Verify no unauthorized access occurred
|
|
270
|
-
|
|
271
|
-
### Commands
|
|
272
|
-
```bash
|
|
273
|
-
# Remove from history
|
|
274
|
-
git filter-branch --force --index-filter \
|
|
275
|
-
"git rm --cached --ignore-unmatch {{file_path}}" \
|
|
276
|
-
--prune-empty --tag-name-filter cat -- --all
|
|
277
|
-
|
|
278
|
-
# Or use BFG
|
|
279
|
-
bfg --replace-text secrets.txt
|
|
280
|
-
```
|
|
281
|
-
|
|
282
|
-
labels:
|
|
283
|
-
- "security"
|
|
284
|
-
- "secret-exposure"
|
|
285
|
-
- "priority:high"
|
|
286
|
-
|
|
287
|
-
assignees:
|
|
288
|
-
- "{{commit_author}}"
|
|
289
|
-
- "@security-team"
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
---
|
|
293
|
-
|
|
294
|
-
## Runtime Scanning
|
|
295
|
-
|
|
296
|
-
### Log Scanning
|
|
297
|
-
|
|
298
|
-
```yaml
|
|
299
|
-
secrets:
|
|
300
|
-
scanning:
|
|
301
|
-
runtime:
|
|
302
|
-
logs:
|
|
303
|
-
enabled: true
|
|
304
|
-
|
|
305
|
-
# Scan log output
|
|
306
|
-
sources:
|
|
307
|
-
- stdout
|
|
308
|
-
- stderr
|
|
309
|
-
- log_files
|
|
310
|
-
|
|
311
|
-
# Patterns to detect
|
|
312
|
-
patterns:
|
|
313
|
-
- "password"
|
|
314
|
-
- "secret"
|
|
315
|
-
- "token"
|
|
316
|
-
- "api_key"
|
|
317
|
-
- "private_key"
|
|
318
|
-
|
|
319
|
-
# Actions
|
|
320
|
-
on_detection:
|
|
321
|
-
- redact_in_output: true
|
|
322
|
-
- alert: ["security-team"]
|
|
323
|
-
- metric: "secret_in_log_detected"
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
### Implementation
|
|
327
|
-
|
|
328
|
-
```typescript
|
|
329
|
-
// scanning/runtime.ts
|
|
330
|
-
import { secretPatterns } from './patterns';
|
|
331
|
-
|
|
332
|
-
export function scanForSecrets(text: string): SecretFinding[] {
|
|
333
|
-
const findings: SecretFinding[] = [];
|
|
334
|
-
|
|
335
|
-
for (const pattern of secretPatterns) {
|
|
336
|
-
const matches = text.matchAll(pattern.regex);
|
|
337
|
-
for (const match of matches) {
|
|
338
|
-
findings.push({
|
|
339
|
-
type: pattern.name,
|
|
340
|
-
value: mask(match[0]),
|
|
341
|
-
position: match.index,
|
|
342
|
-
severity: pattern.severity,
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
return findings;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
// Logger wrapper that scans output
|
|
351
|
-
export function createSecurLogger(baseLogger: Logger): Logger {
|
|
352
|
-
return {
|
|
353
|
-
log: (level: string, message: string, data?: object) => {
|
|
354
|
-
const combined = JSON.stringify({ message, data });
|
|
355
|
-
const findings = scanForSecrets(combined);
|
|
356
|
-
|
|
357
|
-
if (findings.length > 0) {
|
|
358
|
-
alertSecurityTeam(findings);
|
|
359
|
-
// Redact and log warning
|
|
360
|
-
const redacted = redactSecrets(combined, findings);
|
|
361
|
-
baseLogger.warn('Potential secret in log output detected', {
|
|
362
|
-
original_redacted: redacted,
|
|
363
|
-
findings: findings.map(f => ({ type: f.type, severity: f.severity })),
|
|
364
|
-
});
|
|
365
|
-
} else {
|
|
366
|
-
baseLogger.log(level, message, data);
|
|
367
|
-
}
|
|
368
|
-
},
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
---
|
|
374
|
-
|
|
375
|
-
## Detection Patterns
|
|
376
|
-
|
|
377
|
-
### Common Secret Patterns
|
|
378
|
-
|
|
379
|
-
```yaml
|
|
380
|
-
secrets:
|
|
381
|
-
scanning:
|
|
382
|
-
patterns:
|
|
383
|
-
# AWS
|
|
384
|
-
aws_access_key:
|
|
385
|
-
pattern: '(?:A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}'
|
|
386
|
-
severity: "critical"
|
|
387
|
-
|
|
388
|
-
aws_secret_key:
|
|
389
|
-
pattern: '(?i)aws(.{0,20})?(?-i)['\''"][0-9a-zA-Z\/+]{40}['\''"]'
|
|
390
|
-
severity: "critical"
|
|
391
|
-
|
|
392
|
-
# GitHub
|
|
393
|
-
github_token:
|
|
394
|
-
pattern: '(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9_]{36,}'
|
|
395
|
-
severity: "critical"
|
|
396
|
-
|
|
397
|
-
# Stripe
|
|
398
|
-
stripe_key:
|
|
399
|
-
pattern: '(?:sk|pk)_(test|live)_[0-9a-zA-Z]{24,}'
|
|
400
|
-
severity: "critical"
|
|
401
|
-
|
|
402
|
-
# Generic
|
|
403
|
-
private_key:
|
|
404
|
-
pattern: '-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----'
|
|
405
|
-
severity: "critical"
|
|
406
|
-
|
|
407
|
-
password_in_url:
|
|
408
|
-
pattern: '://[^:]+:[^@]+@'
|
|
409
|
-
severity: "high"
|
|
410
|
-
|
|
411
|
-
jwt_token:
|
|
412
|
-
pattern: 'eyJ[A-Za-z0-9-_=]+\.eyJ[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*'
|
|
413
|
-
severity: "high"
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
---
|
|
417
|
-
|
|
418
|
-
## Reporting
|
|
419
|
-
|
|
420
|
-
### Report Format
|
|
421
|
-
|
|
422
|
-
```json
|
|
423
|
-
{
|
|
424
|
-
"scan_id": "scan-abc123",
|
|
425
|
-
"timestamp": "2024-01-15T10:30:00Z",
|
|
426
|
-
"repository": "myorg/myrepo",
|
|
427
|
-
"branch": "main",
|
|
428
|
-
"findings": [
|
|
429
|
-
{
|
|
430
|
-
"type": "aws_access_key",
|
|
431
|
-
"severity": "critical",
|
|
432
|
-
"file": "config/aws.js",
|
|
433
|
-
"line": 15,
|
|
434
|
-
"commit": "abc123",
|
|
435
|
-
"author": "developer@company.com",
|
|
436
|
-
"date": "2024-01-10T09:00:00Z",
|
|
437
|
-
"snippet": "const AWS_KEY = 'AKIA**************';"
|
|
438
|
-
}
|
|
439
|
-
],
|
|
440
|
-
"summary": {
|
|
441
|
-
"total_findings": 1,
|
|
442
|
-
"critical": 1,
|
|
443
|
-
"high": 0,
|
|
444
|
-
"medium": 0,
|
|
445
|
-
"low": 0
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
---
|
|
451
|
-
|
|
452
|
-
## Commands
|
|
453
|
-
|
|
454
|
-
```bash
|
|
455
|
-
# Scan staged files
|
|
456
|
-
proagents secrets scan --staged
|
|
457
|
-
|
|
458
|
-
# Scan entire repository
|
|
459
|
-
proagents secrets scan --full-history
|
|
460
|
-
|
|
461
|
-
# Scan specific path
|
|
462
|
-
proagents secrets scan ./src
|
|
463
|
-
|
|
464
|
-
# Generate report
|
|
465
|
-
proagents secrets scan --report sarif > report.sarif
|
|
466
|
-
|
|
467
|
-
# Test patterns
|
|
468
|
-
proagents secrets test-pattern "AKIA1234567890ABCDEF"
|
|
469
|
-
|
|
470
|
-
# List detected secret types
|
|
471
|
-
proagents secrets patterns list
|
|
472
|
-
|
|
473
|
-
# Add custom pattern
|
|
474
|
-
proagents secrets patterns add --name "my_token" --pattern "MTK_[a-z0-9]{32}"
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
---
|
|
478
|
-
|
|
479
|
-
## Best Practices
|
|
480
|
-
|
|
481
|
-
1. **Shift Left**: Scan before commit, not just in CI
|
|
482
|
-
2. **Full History**: Periodically scan complete git history
|
|
483
|
-
3. **Custom Patterns**: Add patterns for your specific secrets
|
|
484
|
-
4. **Allowlists**: Document and review allowlisted patterns
|
|
485
|
-
5. **Immediate Response**: Rotate exposed secrets immediately
|
|
486
|
-
6. **Education**: Train developers on secret hygiene
|
|
487
|
-
7. **Runtime Scanning**: Monitor logs for accidental exposure
|