openqodex 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +35 -0
  3. package/README.md +160 -0
  4. package/demo/baseline/.github/workflows/ci.yml +18 -0
  5. package/demo/baseline/Dockerfile +12 -0
  6. package/demo/baseline/app/__init__.py +0 -0
  7. package/demo/baseline/app/server.py +37 -0
  8. package/demo/baseline/package-lock.json +21 -0
  9. package/demo/baseline/package.json +9 -0
  10. package/demo/baseline/requirements.txt +1 -0
  11. package/demo/baseline/scripts/deploy.sh +13 -0
  12. package/demo/expected.json +126 -0
  13. package/demo/planted/.github/workflows/ci.yml +20 -0
  14. package/demo/planted/Dockerfile +11 -0
  15. package/demo/planted/app/config.py +3 -0
  16. package/demo/planted/app/search.py +17 -0
  17. package/demo/planted/app/server.py +40 -0
  18. package/demo/planted/package-lock.json +21 -0
  19. package/demo/planted/package.json +9 -0
  20. package/demo/planted/scripts/deploy.sh +13 -0
  21. package/dist/bin.js +42546 -0
  22. package/docs/agents.md +121 -0
  23. package/docs/cli.md +161 -0
  24. package/docs/config.md +165 -0
  25. package/docs/custom-scanners.md +164 -0
  26. package/docs/faq.md +54 -0
  27. package/docs/github-action.md +73 -0
  28. package/docs/index.md +29 -0
  29. package/docs/llms.txt +13 -0
  30. package/docs/quickstart.md +82 -0
  31. package/docs/scanners.md +148 -0
  32. package/docs/security.md +74 -0
  33. package/docs/telemetry.md +9 -0
  34. package/lenses/a11y-icon-only-button-no-aria-label.md +51 -0
  35. package/lenses/array-iteration-missing-key-prop.md +31 -0
  36. package/lenses/async-await-in-loop-n-plus-one.md +42 -0
  37. package/lenses/async-click-double-fire-race.md +59 -0
  38. package/lenses/async-floating-promise.md +40 -0
  39. package/lenses/async-promise-all-swallows-errors.md +42 -0
  40. package/lenses/async-unhandled-rejection-in-handler.md +42 -0
  41. package/lenses/auth-missing-on-state-change-route.md +60 -0
  42. package/lenses/auth-role-from-user-input.md +49 -0
  43. package/lenses/auth-timing-attack-password-compare.md +59 -0
  44. package/lenses/cookie-missing-secure-httponly.md +46 -0
  45. package/lenses/cors-wildcard-with-credentials.md +47 -0
  46. package/lenses/crypto-jwt-verify-without-algo-allowlist.md +41 -0
  47. package/lenses/crypto-math-random-for-tokens.md +53 -0
  48. package/lenses/crypto-md5-sha1-for-secrets.md +60 -0
  49. package/lenses/env-vars-read-at-module-top.md +42 -0
  50. package/lenses/eval-on-user-input.md +51 -0
  51. package/lenses/fetch-without-timeout.md +41 -0
  52. package/lenses/id-enumeration-sequential.md +49 -0
  53. package/lenses/interactive-state-decoupled-from-output.md +67 -0
  54. package/lenses/json-parse-no-try-catch.md +41 -0
  55. package/lenses/missing-rate-limit-on-auth.md +49 -0
  56. package/lenses/oauth-scope-wider-than-use.md +79 -0
  57. package/lenses/object-spread-clobber.md +44 -0
  58. package/lenses/open-redirect-from-untrusted-host.md +55 -0
  59. package/lenses/orm-drizzle-on-conflict-clobber.md +47 -0
  60. package/lenses/path-traversal-in-fs-access.md +59 -0
  61. package/lenses/pii-in-url-or-log.md +48 -0
  62. package/lenses/race-check-then-act.md +49 -0
  63. package/lenses/react-dangerously-set-inner-html.md +32 -0
  64. package/lenses/react-fetch-in-effect-without-abort.md +31 -0
  65. package/lenses/react-stale-closure-in-callback.md +28 -0
  66. package/lenses/react-state-set-in-render.md +33 -0
  67. package/lenses/react-use-effect-missing-cleanup.md +29 -0
  68. package/lenses/react-use-effect-missing-deps.md +30 -0
  69. package/lenses/regexp-from-user-input.md +43 -0
  70. package/lenses/return-shape-contract-break.md +71 -0
  71. package/lenses/secrets-logged-in-error-path.md +60 -0
  72. package/lenses/sql-migration-references-later-object.md +47 -0
  73. package/lenses/sql-string-concatenation.md +63 -0
  74. package/lenses/ssrf-server-side-fetch.md +69 -0
  75. package/lenses/supabase-comment-on-function-unqualified.md +37 -0
  76. package/lenses/supabase-function-default-public-execute.md +50 -0
  77. package/lenses/supabase-security-definer-no-search-path.md +34 -0
  78. package/lenses/supabase-single-500-on-no-match.md +65 -0
  79. package/lenses/upsert-state-column.md +57 -0
  80. package/lenses/url-not-encoded-for-user-id.md +78 -0
  81. package/lenses/use-state-default-not-functional.md +30 -0
  82. package/package.json +57 -0
  83. package/skills/openqodex/SKILL.md +141 -0
  84. package/templates/README.md +67 -0
  85. package/templates/claude-code/settings-hook.json +16 -0
  86. package/templates/cline/openqodex.md +9 -0
  87. package/templates/codex/AGENTS-section.md +8 -0
  88. package/templates/codex/hooks.json +16 -0
  89. package/templates/cursor/openqodex.mdc +15 -0
  90. package/toolchain.json +345 -0
package/toolchain.json ADDED
@@ -0,0 +1,345 @@
1
+ {
2
+ "schema": 1,
3
+ "tools": {
4
+ "gitleaks": {
5
+ "version": "8.21.2",
6
+ "method": "github-release",
7
+ "repo": "gitleaks/gitleaks",
8
+ "tag": "v8.21.2",
9
+ "binary": "gitleaks",
10
+ "assets": {
11
+ "darwin-arm64": {
12
+ "name": "gitleaks_8.21.2_darwin_arm64.tar.gz",
13
+ "url": "https://github.com/gitleaks/gitleaks/releases/download/v8.21.2/gitleaks_8.21.2_darwin_arm64.tar.gz",
14
+ "sha256": "cad3de5dc9a4d5447d967a70a4d49499c557f04db028274cc324f9ff983f6502",
15
+ "archive": "tar.gz",
16
+ "binaryPath": "gitleaks"
17
+ },
18
+ "darwin-x64": {
19
+ "name": "gitleaks_8.21.2_darwin_x64.tar.gz",
20
+ "url": "https://github.com/gitleaks/gitleaks/releases/download/v8.21.2/gitleaks_8.21.2_darwin_x64.tar.gz",
21
+ "sha256": "5b42c6e4b1fd693eaeb2b5b7faa5f17a1434299d4deb2de63d4b2efd7c753128",
22
+ "archive": "tar.gz",
23
+ "binaryPath": "gitleaks"
24
+ },
25
+ "linux-x64": {
26
+ "name": "gitleaks_8.21.2_linux_x64.tar.gz",
27
+ "url": "https://github.com/gitleaks/gitleaks/releases/download/v8.21.2/gitleaks_8.21.2_linux_x64.tar.gz",
28
+ "sha256": "5bc41815076e6ed6ef8fbecc9d9b75bcae31f39029ceb55da08086315316e3ba",
29
+ "archive": "tar.gz",
30
+ "binaryPath": "gitleaks"
31
+ },
32
+ "linux-arm64": {
33
+ "name": "gitleaks_8.21.2_linux_arm64.tar.gz",
34
+ "url": "https://github.com/gitleaks/gitleaks/releases/download/v8.21.2/gitleaks_8.21.2_linux_arm64.tar.gz",
35
+ "sha256": "654c935542c89f565aabe7bf7c6c500830f116c114f0aeb509d2460c1ac2e6da",
36
+ "archive": "tar.gz",
37
+ "binaryPath": "gitleaks"
38
+ }
39
+ }
40
+ },
41
+ "osv-scanner": {
42
+ "version": "1.9.2",
43
+ "method": "github-release",
44
+ "repo": "google/osv-scanner",
45
+ "tag": "v1.9.2",
46
+ "binary": "osv-scanner",
47
+ "assets": {
48
+ "darwin-arm64": {
49
+ "name": "osv-scanner_darwin_arm64",
50
+ "url": "https://github.com/google/osv-scanner/releases/download/v1.9.2/osv-scanner_darwin_arm64",
51
+ "sha256": "393f2c7089d9431bd26a3804d6e46d417b1c05abd5d49c41c7dfc174c520acf0",
52
+ "archive": "none",
53
+ "binaryPath": "osv-scanner_darwin_arm64"
54
+ },
55
+ "darwin-x64": {
56
+ "name": "osv-scanner_darwin_amd64",
57
+ "url": "https://github.com/google/osv-scanner/releases/download/v1.9.2/osv-scanner_darwin_amd64",
58
+ "sha256": "487ab433b2c2a8c80b737c0bd428a80e6d2e211b4adf775a52a6964163fa3249",
59
+ "archive": "none",
60
+ "binaryPath": "osv-scanner_darwin_amd64"
61
+ },
62
+ "linux-x64": {
63
+ "name": "osv-scanner_linux_amd64",
64
+ "url": "https://github.com/google/osv-scanner/releases/download/v1.9.2/osv-scanner_linux_amd64",
65
+ "sha256": "d6af4b67fa5de658598bd2d445efb99e90d1734b3146962418719c4350ecb74b",
66
+ "archive": "none",
67
+ "binaryPath": "osv-scanner_linux_amd64"
68
+ },
69
+ "linux-arm64": {
70
+ "name": "osv-scanner_linux_arm64",
71
+ "url": "https://github.com/google/osv-scanner/releases/download/v1.9.2/osv-scanner_linux_arm64",
72
+ "sha256": "9c6160afb26c79449a1f1b667323b989a57dda8fc19f22936c9ff920fd97ddfa",
73
+ "archive": "none",
74
+ "binaryPath": "osv-scanner_linux_arm64"
75
+ }
76
+ }
77
+ },
78
+ "actionlint": {
79
+ "version": "1.7.7",
80
+ "method": "github-release",
81
+ "repo": "rhysd/actionlint",
82
+ "tag": "v1.7.7",
83
+ "binary": "actionlint",
84
+ "assets": {
85
+ "darwin-arm64": {
86
+ "name": "actionlint_1.7.7_darwin_arm64.tar.gz",
87
+ "url": "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_darwin_arm64.tar.gz",
88
+ "sha256": "2693315b9093aeacb4ebd91a993fea54fc215057bf0da2659056b4bc033873db",
89
+ "archive": "tar.gz",
90
+ "binaryPath": "actionlint"
91
+ },
92
+ "darwin-x64": {
93
+ "name": "actionlint_1.7.7_darwin_amd64.tar.gz",
94
+ "url": "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_darwin_amd64.tar.gz",
95
+ "sha256": "28e5de5a05fc558474f638323d736d822fff183d2d492f0aecb2b73cc44584f5",
96
+ "archive": "tar.gz",
97
+ "binaryPath": "actionlint"
98
+ },
99
+ "linux-x64": {
100
+ "name": "actionlint_1.7.7_linux_amd64.tar.gz",
101
+ "url": "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_linux_amd64.tar.gz",
102
+ "sha256": "023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757",
103
+ "archive": "tar.gz",
104
+ "binaryPath": "actionlint"
105
+ },
106
+ "linux-arm64": {
107
+ "name": "actionlint_1.7.7_linux_arm64.tar.gz",
108
+ "url": "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_linux_arm64.tar.gz",
109
+ "sha256": "401942f9c24ed71e4fe71b76c7d638f66d8633575c4016efd2977ce7c28317d0",
110
+ "archive": "tar.gz",
111
+ "binaryPath": "actionlint"
112
+ }
113
+ }
114
+ },
115
+ "hadolint": {
116
+ "version": "2.15.1",
117
+ "method": "github-release",
118
+ "repo": "hadolint/hadolint",
119
+ "tag": "v2.15.1",
120
+ "binary": "hadolint",
121
+ "assets": {
122
+ "darwin-arm64": {
123
+ "name": "hadolint-macos-arm64",
124
+ "url": "https://github.com/hadolint/hadolint/releases/download/v2.15.1/hadolint-macos-arm64",
125
+ "sha256": "5c09f3213f8e40406abe048233d985eebef336d4a6a20021be47fadb6cf480a2",
126
+ "archive": "none",
127
+ "binaryPath": "hadolint-macos-arm64"
128
+ },
129
+ "darwin-x64": {
130
+ "name": "hadolint-macos-x86_64",
131
+ "url": "https://github.com/hadolint/hadolint/releases/download/v2.15.1/hadolint-macos-x86_64",
132
+ "sha256": "ffe9bb18b23d5ed1eae50237aecdbb523d016e96da0bd4e7aa432040acfc3fde",
133
+ "archive": "none",
134
+ "binaryPath": "hadolint-macos-x86_64"
135
+ },
136
+ "linux-x64": {
137
+ "name": "hadolint-linux-x86_64",
138
+ "url": "https://github.com/hadolint/hadolint/releases/download/v2.15.1/hadolint-linux-x86_64",
139
+ "sha256": "c7187db94eeeeca956519a6af171adc31453941a1e777961f6e680f697c8c507",
140
+ "archive": "none",
141
+ "binaryPath": "hadolint-linux-x86_64"
142
+ },
143
+ "linux-arm64": {
144
+ "name": "hadolint-linux-arm64",
145
+ "url": "https://github.com/hadolint/hadolint/releases/download/v2.15.1/hadolint-linux-arm64",
146
+ "sha256": "f6198ef8090f404dbb771abfee086eb8c48ac177f30da7fd3510aca35b344b5d",
147
+ "archive": "none",
148
+ "binaryPath": "hadolint-linux-arm64"
149
+ }
150
+ }
151
+ },
152
+ "shellcheck": {
153
+ "version": "0.10.0",
154
+ "method": "github-release",
155
+ "repo": "koalaman/shellcheck",
156
+ "tag": "v0.10.0",
157
+ "binary": "shellcheck",
158
+ "assets": {
159
+ "darwin-arm64": {
160
+ "name": "shellcheck-v0.10.0.darwin.aarch64.tar.xz",
161
+ "url": "https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.darwin.aarch64.tar.xz",
162
+ "sha256": "bbd2f14826328eee7679da7221f2bc3afb011f6a928b848c80c321f6046ddf81",
163
+ "archive": "tar.xz",
164
+ "binaryPath": "shellcheck-v0.10.0/shellcheck"
165
+ },
166
+ "darwin-x64": {
167
+ "name": "shellcheck-v0.10.0.darwin.x86_64.tar.xz",
168
+ "url": "https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.darwin.x86_64.tar.xz",
169
+ "sha256": "ef27684f23279d112d8ad84e0823642e43f838993bbb8c0963db9b58a90464c2",
170
+ "archive": "tar.xz",
171
+ "binaryPath": "shellcheck-v0.10.0/shellcheck"
172
+ },
173
+ "linux-x64": {
174
+ "name": "shellcheck-v0.10.0.linux.x86_64.tar.xz",
175
+ "url": "https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.linux.x86_64.tar.xz",
176
+ "sha256": "6c881ab0698e4e6ea235245f22832860544f17ba386442fe7e9d629f8cbedf87",
177
+ "archive": "tar.xz",
178
+ "binaryPath": "shellcheck-v0.10.0/shellcheck"
179
+ },
180
+ "linux-arm64": {
181
+ "name": "shellcheck-v0.10.0.linux.aarch64.tar.xz",
182
+ "url": "https://github.com/koalaman/shellcheck/releases/download/v0.10.0/shellcheck-v0.10.0.linux.aarch64.tar.xz",
183
+ "sha256": "324a7e89de8fa2aed0d0c28f3dab59cf84c6d74264022c00c22af665ed1a09bb",
184
+ "archive": "tar.xz",
185
+ "binaryPath": "shellcheck-v0.10.0/shellcheck"
186
+ }
187
+ }
188
+ },
189
+ "ruff": {
190
+ "version": "0.8.4",
191
+ "method": "github-release",
192
+ "repo": "astral-sh/ruff",
193
+ "tag": "0.8.4",
194
+ "binary": "ruff",
195
+ "assets": {
196
+ "darwin-arm64": {
197
+ "name": "ruff-aarch64-apple-darwin.tar.gz",
198
+ "url": "https://github.com/astral-sh/ruff/releases/download/0.8.4/ruff-aarch64-apple-darwin.tar.gz",
199
+ "sha256": "8893f3ede33a73740f69b10ee9356e5cf2933c0afe146f00176be12ef91bf9d9",
200
+ "archive": "tar.gz",
201
+ "binaryPath": "ruff-aarch64-apple-darwin/ruff"
202
+ },
203
+ "darwin-x64": {
204
+ "name": "ruff-x86_64-apple-darwin.tar.gz",
205
+ "url": "https://github.com/astral-sh/ruff/releases/download/0.8.4/ruff-x86_64-apple-darwin.tar.gz",
206
+ "sha256": "b47e45fe5bf128eaaeaf9f477388934586d00c2c16469034c770d93ceb655a16",
207
+ "archive": "tar.gz",
208
+ "binaryPath": "ruff-x86_64-apple-darwin/ruff"
209
+ },
210
+ "linux-x64": {
211
+ "name": "ruff-x86_64-unknown-linux-gnu.tar.gz",
212
+ "url": "https://github.com/astral-sh/ruff/releases/download/0.8.4/ruff-x86_64-unknown-linux-gnu.tar.gz",
213
+ "sha256": "c4e6591ae1bb4f15c09c9022b7bfc57e1c3a567acdc9cd76021cd1304b5868c3",
214
+ "archive": "tar.gz",
215
+ "binaryPath": "ruff-x86_64-unknown-linux-gnu/ruff"
216
+ },
217
+ "linux-arm64": {
218
+ "name": "ruff-aarch64-unknown-linux-gnu.tar.gz",
219
+ "url": "https://github.com/astral-sh/ruff/releases/download/0.8.4/ruff-aarch64-unknown-linux-gnu.tar.gz",
220
+ "sha256": "0dfe36fabb817638863375e0140ce03bf26ccc9a7fd9d2c8e8337b1a21697ed4",
221
+ "archive": "tar.gz",
222
+ "binaryPath": "ruff-aarch64-unknown-linux-gnu/ruff"
223
+ }
224
+ }
225
+ },
226
+ "golangci": {
227
+ "version": "2.12.2",
228
+ "method": "github-release",
229
+ "repo": "golangci/golangci-lint",
230
+ "tag": "v2.12.2",
231
+ "binary": "golangci-lint",
232
+ "assets": {
233
+ "darwin-arm64": {
234
+ "name": "golangci-lint-2.12.2-darwin-arm64.tar.gz",
235
+ "url": "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-darwin-arm64.tar.gz",
236
+ "sha256": "a9c54498731b3128f79e090be6110f3e5fffccc617b08142ed244d4126c73f29",
237
+ "archive": "tar.gz",
238
+ "binaryPath": "golangci-lint-2.12.2-darwin-arm64/golangci-lint"
239
+ },
240
+ "darwin-x64": {
241
+ "name": "golangci-lint-2.12.2-darwin-amd64.tar.gz",
242
+ "url": "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-darwin-amd64.tar.gz",
243
+ "sha256": "f6f06d94b6241521c53d15450c5209b028270bf966f842afb11c030c79f5bc16",
244
+ "archive": "tar.gz",
245
+ "binaryPath": "golangci-lint-2.12.2-darwin-amd64/golangci-lint"
246
+ },
247
+ "linux-x64": {
248
+ "name": "golangci-lint-2.12.2-linux-amd64.tar.gz",
249
+ "url": "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-linux-amd64.tar.gz",
250
+ "sha256": "8df580d2670fed8fa984aac0507099af8df275e665215f5c7a2ae3943893a553",
251
+ "archive": "tar.gz",
252
+ "binaryPath": "golangci-lint-2.12.2-linux-amd64/golangci-lint"
253
+ },
254
+ "linux-arm64": {
255
+ "name": "golangci-lint-2.12.2-linux-arm64.tar.gz",
256
+ "url": "https://github.com/golangci/golangci-lint/releases/download/v2.12.2/golangci-lint-2.12.2-linux-arm64.tar.gz",
257
+ "sha256": "44cd40a8c76c86755375adfeea52cfd3533cb43d7bd647771e0ae065e166df3a",
258
+ "archive": "tar.gz",
259
+ "binaryPath": "golangci-lint-2.12.2-linux-arm64/golangci-lint"
260
+ }
261
+ },
262
+ "needs": "go"
263
+ },
264
+ "uv": {
265
+ "version": "0.12.22",
266
+ "method": "github-release",
267
+ "repo": "astral-sh/uv",
268
+ "tag": "0.12.22",
269
+ "binary": "uv",
270
+ "assets": {
271
+ "darwin-arm64": {
272
+ "name": "uv-aarch64-apple-darwin.tar.gz",
273
+ "url": "https://github.com/astral-sh/uv/releases/download/0.12.22/uv-aarch64-apple-darwin.tar.gz",
274
+ "sha256": "5d714de09501a59393ceca78f4bc232a50478729640d251907160299b2a93ddd",
275
+ "archive": "tar.gz",
276
+ "binaryPath": "uv-aarch64-apple-darwin/uv"
277
+ },
278
+ "darwin-x64": {
279
+ "name": "uv-x86_64-apple-darwin.tar.gz",
280
+ "url": "https://github.com/astral-sh/uv/releases/download/0.12.22/uv-x86_64-apple-darwin.tar.gz",
281
+ "sha256": "1b8a5b316883df2daf20fb9a446e5b230e01d947d57aba2694977c5ac5a7e98c",
282
+ "archive": "tar.gz",
283
+ "binaryPath": "uv-x86_64-apple-darwin/uv"
284
+ },
285
+ "linux-x64": {
286
+ "name": "uv-x86_64-unknown-linux-gnu.tar.gz",
287
+ "url": "https://github.com/astral-sh/uv/releases/download/0.12.22/uv-x86_64-unknown-linux-gnu.tar.gz",
288
+ "sha256": "b9980552309f09c15172b8be828555e375097f16deb459795ce7bfd200380f0b",
289
+ "archive": "tar.gz",
290
+ "binaryPath": "uv-x86_64-unknown-linux-gnu/uv"
291
+ },
292
+ "linux-arm64": {
293
+ "name": "uv-aarch64-unknown-linux-gnu.tar.gz",
294
+ "url": "https://github.com/astral-sh/uv/releases/download/0.12.22/uv-aarch64-unknown-linux-gnu.tar.gz",
295
+ "sha256": "6f66a14e8239871fb477f9746c941fedfa77e8fe28a8bc7c07e1dc7f53a66712",
296
+ "archive": "tar.gz",
297
+ "binaryPath": "uv-aarch64-unknown-linux-gnu/uv"
298
+ }
299
+ }
300
+ },
301
+ "oxlint": {
302
+ "version": "1.71.0",
303
+ "method": "npm",
304
+ "package": "oxlint",
305
+ "binary": "oxlint"
306
+ },
307
+ "semgrep": {
308
+ "version": "1.94.0",
309
+ "method": "uv",
310
+ "package": "semgrep",
311
+ "python": "3.11",
312
+ "with": [
313
+ "setuptools==80.10.2"
314
+ ],
315
+ "binary": "semgrep"
316
+ },
317
+ "bandit": {
318
+ "version": "1.9.4",
319
+ "method": "uv",
320
+ "package": "bandit",
321
+ "python": "3.11",
322
+ "binary": "bandit"
323
+ },
324
+ "brakeman": {
325
+ "version": "6.2.1",
326
+ "method": "gem",
327
+ "gems": [
328
+ "brakeman:6.2.1"
329
+ ],
330
+ "needs": "ruby>=2.7",
331
+ "binary": "brakeman"
332
+ },
333
+ "rubocop": {
334
+ "version": "1.69.2",
335
+ "method": "gem",
336
+ "gems": [
337
+ "rubocop:1.69.2",
338
+ "rubocop-rails:2.28.0",
339
+ "rubocop-performance:1.23.0"
340
+ ],
341
+ "needs": "ruby>=2.7",
342
+ "binary": "rubocop"
343
+ }
344
+ }
345
+ }