@securityreviewai/securityreview-kit 0.1.48 → 0.1.50

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 (78) hide show
  1. package/dist/api.js +44 -0
  2. package/dist/commands/guardrails.js +13 -0
  3. package/dist/commands/init.js +88 -0
  4. package/dist/commands/profile.js +14 -0
  5. package/dist/commands/status.js +27 -0
  6. package/dist/commands/sync.js +6 -0
  7. package/dist/config.js +18 -0
  8. package/dist/fs.js +43 -0
  9. package/dist/index.js +44 -0
  10. package/dist/profile.js +113 -0
  11. package/dist/scaffold/claude-code.js +43 -0
  12. package/dist/scaffold/codex.js +41 -0
  13. package/dist/scaffold/cursor.js +45 -0
  14. package/dist/scaffold/gemini.js +10 -0
  15. package/dist/scaffold/index.js +22 -0
  16. package/dist/scaffold/mcp.js +15 -0
  17. package/dist/scaffold/rules.js +191 -0
  18. package/dist/scaffold/vibreview.js +30 -0
  19. package/dist/scaffold/vscode.js +28 -0
  20. package/dist/scaffold/windsurf.js +10 -0
  21. package/dist/sync/index.js +34 -0
  22. package/dist/sync/payload.js +23 -0
  23. package/dist/sync/state.js +12 -0
  24. package/dist/types.js +1 -0
  25. package/package.json +24 -30
  26. package/templates/claude/CLAUDE.md +13 -0
  27. package/templates/claude/agents/guardrail_profiler.md +12 -0
  28. package/templates/claude/agents/threat_modeler.md +5 -0
  29. package/templates/claude/skills/vibreview/SKILL.md +21 -0
  30. package/templates/claude/skills/vibreview/guardrail_patterns.md +12 -0
  31. package/templates/cursor/rules/vibreview-security.mdc +8 -0
  32. package/README.md +0 -105
  33. package/bin/securityreview-kit.js +0 -5
  34. package/src/cli.js +0 -109
  35. package/src/commands/init.js +0 -851
  36. package/src/commands/status.js +0 -99
  37. package/src/commands/switch-project.js +0 -207
  38. package/src/generators/mcp/claude.js +0 -85
  39. package/src/generators/mcp/claude.test.js +0 -64
  40. package/src/generators/mcp/codex.js +0 -70
  41. package/src/generators/mcp/codex.test.js +0 -43
  42. package/src/generators/mcp/cursor.js +0 -29
  43. package/src/generators/mcp/cursor.test.js +0 -50
  44. package/src/generators/mcp/gemini.js +0 -28
  45. package/src/generators/mcp/vscode.js +0 -29
  46. package/src/generators/mcp/windsurf.js +0 -27
  47. package/src/generators/rules/antigravity.js +0 -22
  48. package/src/generators/rules/claude.js +0 -87
  49. package/src/generators/rules/claude.test.js +0 -60
  50. package/src/generators/rules/codex.js +0 -141
  51. package/src/generators/rules/codex.test.js +0 -59
  52. package/src/generators/rules/content.js +0 -110
  53. package/src/generators/rules/cursor.js +0 -128
  54. package/src/generators/rules/gemini.js +0 -13
  55. package/src/generators/rules/guardrails-init-profile.md +0 -56
  56. package/src/generators/rules/guardrails-profiler/SKILL.md +0 -130
  57. package/src/generators/rules/guardrails-profiler/references/signal-registry.json +0 -514
  58. package/src/generators/rules/guardrails-selection/references/category-threat-map.md +0 -232
  59. package/src/generators/rules/guardrails_rule.md +0 -94
  60. package/src/generators/rules/hooks.json +0 -11
  61. package/src/generators/rules/srai-profile.md +0 -32
  62. package/src/generators/rules/vscode.js +0 -101
  63. package/src/generators/rules/vscode.test.js +0 -54
  64. package/src/generators/rules/windsurf.js +0 -13
  65. package/src/utils/constants.js +0 -95
  66. package/src/utils/cursor-agent-path.js +0 -67
  67. package/src/utils/cursor-cli-permissions.js +0 -28
  68. package/src/utils/detect.js +0 -27
  69. package/src/utils/fs-helpers.js +0 -82
  70. package/src/utils/guardrails-profiler-bundle.js +0 -84
  71. package/src/utils/ide-cli-install.js +0 -138
  72. package/src/utils/profiler-agent.js +0 -446
  73. package/src/utils/profiler-agent.test.js +0 -81
  74. package/src/utils/srai.js +0 -252
  75. /package/{src/generators/rules → templates/shared}/content.md +0 -0
  76. /package/{src/generators/rules/guardrails-selection/SKILL.md → templates/shared/guardrails-selection.md} +0 -0
  77. /package/{src/generators/rules/skill.md → templates/shared/threat-modelling.md} +0 -0
  78. /package/{src/generators/rules → templates/shared}/vibereview-sync/SKILL.md +0 -0
@@ -1,514 +0,0 @@
1
- {
2
- "_doc": "Maps filesystem signals to guardrail pack IDs. Each entry defines what to look for and which pack to activate.",
3
-
4
- "universal": {
5
- "_doc": "Always included regardless of detection",
6
- "packs": ["owasp-asvs"]
7
- },
8
-
9
- "mobile_universal": {
10
- "_doc": "Included when any mobile platform is detected",
11
- "trigger_packs": ["flutter", "react-native", "swift", "objective-c", "kotlin"],
12
- "packs": ["owasp-masvs"]
13
- },
14
-
15
- "languages": {
16
- "typescript": {
17
- "manifest_files": ["tsconfig.json", "tsconfig.base.json"],
18
- "file_extensions": [".ts", ".tsx"],
19
- "pack": "typescript"
20
- },
21
- "nodejs": {
22
- "manifest_files": ["package.json"],
23
- "file_extensions": [".js", ".mjs", ".cjs"],
24
- "pack": "nodejs"
25
- },
26
- "python": {
27
- "manifest_files": ["requirements.txt", "pyproject.toml", "setup.py", "setup.cfg", "Pipfile", "poetry.lock"],
28
- "file_extensions": [".py"],
29
- "pack": null,
30
- "_note": "Python has no standalone pack; frameworks (django, flask, fastapi) cover it"
31
- },
32
- "go": {
33
- "manifest_files": ["go.mod", "go.sum"],
34
- "file_extensions": [".go"],
35
- "pack": "go"
36
- },
37
- "java": {
38
- "manifest_files": ["pom.xml", "build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"],
39
- "file_extensions": [".java"],
40
- "pack": null,
41
- "_note": "Java framework packs (spring-boot, java-ee) are more specific"
42
- },
43
- "kotlin": {
44
- "manifest_files": ["build.gradle.kts"],
45
- "file_extensions": [".kt", ".kts"],
46
- "dependency_signals": { "build.gradle.kts": ["kotlin"] },
47
- "pack": "kotlin"
48
- },
49
- "php": {
50
- "manifest_files": ["composer.json", "composer.lock"],
51
- "file_extensions": [".php"],
52
- "pack": "php"
53
- },
54
- "ruby": {
55
- "manifest_files": ["Gemfile", "Gemfile.lock"],
56
- "file_extensions": [".rb"],
57
- "pack": null,
58
- "_note": "Ruby framework pack (ruby-on-rails) is more specific"
59
- },
60
- "rust": {
61
- "manifest_files": ["Cargo.toml", "Cargo.lock"],
62
- "file_extensions": [".rs"],
63
- "pack": "rust"
64
- },
65
- "c": {
66
- "file_extensions": [".c", ".h"],
67
- "manifest_files": ["CMakeLists.txt", "Makefile"],
68
- "pack": "c"
69
- },
70
- "cpp": {
71
- "file_extensions": [".cpp", ".cxx", ".cc", ".hpp", ".hxx"],
72
- "manifest_files": ["CMakeLists.txt"],
73
- "pack": "cpp"
74
- },
75
- "swift": {
76
- "manifest_files": ["Package.swift"],
77
- "file_extensions": [".swift"],
78
- "config_files": ["*.xcodeproj", "*.xcworkspace"],
79
- "pack": "swift"
80
- },
81
- "objective-c": {
82
- "file_extensions": [".m", ".mm"],
83
- "pack": "objective-c"
84
- },
85
- "groovy": {
86
- "file_extensions": [".groovy"],
87
- "pack": "groovy"
88
- },
89
- "csharp": {
90
- "manifest_files": ["*.csproj", "*.sln"],
91
- "file_extensions": [".cs"],
92
- "pack": null,
93
- "_note": "C# framework pack (dotnet-aspnet-core) is more specific"
94
- }
95
- },
96
-
97
- "frameworks": {
98
- "express": {
99
- "ecosystem": "nodejs",
100
- "dependency_signals": { "package.json": ["express"] },
101
- "pack": "express"
102
- },
103
- "fastify": {
104
- "ecosystem": "nodejs",
105
- "dependency_signals": { "package.json": ["fastify"] },
106
- "pack": "fastify"
107
- },
108
- "honojs": {
109
- "ecosystem": "nodejs",
110
- "dependency_signals": { "package.json": ["hono"] },
111
- "pack": "honojs"
112
- },
113
- "nestjs": {
114
- "ecosystem": "nodejs",
115
- "dependency_signals": { "package.json": ["@nestjs/core"] },
116
- "config_files": ["nest-cli.json"],
117
- "pack": "nestjs"
118
- },
119
- "nextjs": {
120
- "ecosystem": "nodejs",
121
- "dependency_signals": { "package.json": ["next"] },
122
- "config_files": ["next.config.js", "next.config.mjs", "next.config.ts"],
123
- "pack": "nextjs"
124
- },
125
- "react": {
126
- "ecosystem": "nodejs",
127
- "dependency_signals": { "package.json": ["react", "react-dom"] },
128
- "pack": "react"
129
- },
130
- "angular": {
131
- "ecosystem": "nodejs",
132
- "dependency_signals": { "package.json": ["@angular/core"] },
133
- "config_files": ["angular.json"],
134
- "pack": "angular"
135
- },
136
- "vuejs": {
137
- "ecosystem": "nodejs",
138
- "dependency_signals": { "package.json": ["vue"] },
139
- "config_files": ["vue.config.js", "vite.config.ts", "nuxt.config.ts"],
140
- "pack": "vuejs"
141
- },
142
- "electron": {
143
- "ecosystem": "nodejs",
144
- "dependency_signals": { "package.json": ["electron"] },
145
- "pack": "electron"
146
- },
147
- "react-native": {
148
- "ecosystem": "nodejs",
149
- "dependency_signals": { "package.json": ["react-native"] },
150
- "pack": "react-native"
151
- },
152
- "django": {
153
- "ecosystem": "python",
154
- "dependency_signals": {
155
- "requirements.txt": ["django", "Django"],
156
- "pyproject.toml": ["django", "Django"],
157
- "Pipfile": ["django", "Django"]
158
- },
159
- "config_files": ["manage.py"],
160
- "directory_signals": ["*/settings.py", "*/wsgi.py"],
161
- "pack": "django"
162
- },
163
- "flask": {
164
- "ecosystem": "python",
165
- "dependency_signals": {
166
- "requirements.txt": ["flask", "Flask"],
167
- "pyproject.toml": ["flask", "Flask"]
168
- },
169
- "pack": "flask"
170
- },
171
- "fastapi": {
172
- "ecosystem": "python",
173
- "dependency_signals": {
174
- "requirements.txt": ["fastapi"],
175
- "pyproject.toml": ["fastapi"]
176
- },
177
- "pack": "fastapi"
178
- },
179
- "java-spring-boot": {
180
- "ecosystem": "java",
181
- "dependency_signals": {
182
- "pom.xml": ["spring-boot-starter"],
183
- "build.gradle": ["org.springframework.boot"]
184
- },
185
- "pack": "java-spring-boot"
186
- },
187
- "spring-security": {
188
- "ecosystem": "java",
189
- "dependency_signals": {
190
- "pom.xml": ["spring-boot-starter-security", "spring-security"],
191
- "build.gradle": ["spring-boot-starter-security", "spring-security"]
192
- },
193
- "pack": "spring-security"
194
- },
195
- "java-ee": {
196
- "ecosystem": "java",
197
- "dependency_signals": {
198
- "pom.xml": ["javax.servlet", "jakarta.servlet", "javax.enterprise", "jakarta.enterprise"],
199
- "build.gradle": ["javax.servlet", "jakarta.servlet"]
200
- },
201
- "config_files": ["web.xml"],
202
- "pack": "java-ee"
203
- },
204
- "ruby-on-rails": {
205
- "ecosystem": "ruby",
206
- "dependency_signals": { "Gemfile": ["rails"] },
207
- "config_files": ["config/routes.rb", "config/application.rb"],
208
- "pack": "ruby-on-rails"
209
- },
210
- "laravel": {
211
- "ecosystem": "php",
212
- "dependency_signals": { "composer.json": ["laravel/framework"] },
213
- "config_files": ["artisan"],
214
- "directory_signals": ["app/Http/Controllers"],
215
- "pack": "laravel"
216
- },
217
- "symfony": {
218
- "ecosystem": "php",
219
- "dependency_signals": { "composer.json": ["symfony/framework-bundle"] },
220
- "config_files": ["config/bundles.php", "symfony.lock"],
221
- "pack": "symfony"
222
- },
223
- "dotnet-aspnet-core": {
224
- "ecosystem": "csharp",
225
- "dependency_signals": { "*.csproj": ["Microsoft.AspNetCore"] },
226
- "config_files": ["Program.cs", "Startup.cs", "appsettings.json"],
227
- "pack": "dotnet-aspnet-core"
228
- },
229
- "flutter": {
230
- "ecosystem": "dart",
231
- "manifest_files": ["pubspec.yaml"],
232
- "dependency_signals": { "pubspec.yaml": ["flutter"] },
233
- "pack": "flutter"
234
- },
235
- "apollo-graphql": {
236
- "ecosystem": "nodejs",
237
- "dependency_signals": { "package.json": ["@apollo/server", "apollo-server", "apollo-server-express"] },
238
- "pack": "apollo-graphql"
239
- }
240
- },
241
-
242
- "auth_identity": {
243
- "jwt": {
244
- "dependency_signals": {
245
- "package.json": ["jsonwebtoken", "jose", "@auth/core"],
246
- "requirements.txt": ["pyjwt", "python-jose"],
247
- "pyproject.toml": ["pyjwt", "python-jose"],
248
- "Gemfile": ["jwt"],
249
- "pom.xml": ["jjwt", "nimbus-jose-jwt"]
250
- },
251
- "pack": "jwt"
252
- },
253
- "oauth-oidc": {
254
- "dependency_signals": {
255
- "package.json": ["openid-client", "passport-oauth2", "oauth4webapi"],
256
- "requirements.txt": ["authlib", "oauthlib"],
257
- "pyproject.toml": ["authlib", "oauthlib"]
258
- },
259
- "pack": "oauth-oidc"
260
- },
261
- "auth0": {
262
- "dependency_signals": {
263
- "package.json": ["@auth0/nextjs-auth0", "auth0", "express-openid-connect"],
264
- "requirements.txt": ["auth0-python"],
265
- "pyproject.toml": ["auth0-python"]
266
- },
267
- "pack": "auth0"
268
- },
269
- "okta": {
270
- "dependency_signals": {
271
- "package.json": ["@okta/okta-sdk-nodejs", "@okta/oidc-middleware"],
272
- "pom.xml": ["okta-spring-boot-starter"]
273
- },
274
- "pack": "okta"
275
- },
276
- "keycloak": {
277
- "dependency_signals": {
278
- "package.json": ["keycloak-connect", "keycloak-js"],
279
- "pom.xml": ["keycloak-spring-boot-starter"]
280
- },
281
- "config_files": ["keycloak.json"],
282
- "pack": "keycloak"
283
- }
284
- },
285
-
286
- "ai_agent": {
287
- "langchain": {
288
- "dependency_signals": {
289
- "requirements.txt": ["langchain"],
290
- "pyproject.toml": ["langchain"],
291
- "package.json": ["langchain"]
292
- },
293
- "pack": "langchain"
294
- },
295
- "langgraph": {
296
- "dependency_signals": {
297
- "requirements.txt": ["langgraph"],
298
- "pyproject.toml": ["langgraph"]
299
- },
300
- "pack": "langgraph"
301
- },
302
- "llamaindex": {
303
- "dependency_signals": {
304
- "requirements.txt": ["llama-index", "llama_index"],
305
- "pyproject.toml": ["llama-index", "llama_index"]
306
- },
307
- "pack": "llamaindex"
308
- },
309
- "crewai": {
310
- "dependency_signals": {
311
- "requirements.txt": ["crewai"],
312
- "pyproject.toml": ["crewai"]
313
- },
314
- "pack": "crewai"
315
- },
316
- "mastra": {
317
- "dependency_signals": {
318
- "package.json": ["@mastra/core", "mastra"]
319
- },
320
- "pack": "mastra"
321
- },
322
- "ai-sdk": {
323
- "dependency_signals": {
324
- "package.json": ["ai", "@ai-sdk/openai", "@ai-sdk/anthropic"]
325
- },
326
- "pack": "ai-sdk"
327
- },
328
- "claude-agent-sdk": {
329
- "dependency_signals": {
330
- "package.json": ["@anthropic-ai/sdk"],
331
- "requirements.txt": ["anthropic"],
332
- "pyproject.toml": ["anthropic"]
333
- },
334
- "pack": "claude-agent-sdk"
335
- },
336
- "openai-agents-sdk": {
337
- "dependency_signals": {
338
- "package.json": ["openai"],
339
- "requirements.txt": ["openai"],
340
- "pyproject.toml": ["openai"]
341
- },
342
- "pack": "openai-agents-sdk"
343
- },
344
- "mcp": {
345
- "dependency_signals": {
346
- "package.json": ["@modelcontextprotocol/sdk"],
347
- "requirements.txt": ["mcp"],
348
- "pyproject.toml": ["mcp"]
349
- },
350
- "pack": "mcp"
351
- }
352
- },
353
-
354
- "infrastructure": {
355
- "docker": {
356
- "config_files": ["Dockerfile", "docker-compose.yml", "docker-compose.yaml", ".dockerignore"],
357
- "pack": "docker"
358
- },
359
- "kubernetes": {
360
- "config_files": ["helmfile.yaml", "Chart.yaml", "kustomization.yaml"],
361
- "directory_signals": ["k8s/", "kubernetes/", "helm/"],
362
- "content_signals": { "*.yaml": ["apiVersion", "kind: Deployment", "kind: Service", "kind: Pod"] },
363
- "pack": "kubernetes"
364
- },
365
- "terraform-aws": {
366
- "file_extensions": [".tf"],
367
- "content_signals": { "*.tf": ["provider \"aws\"", "aws_"] },
368
- "pack": "terraform-aws"
369
- },
370
- "terraform-azure": {
371
- "file_extensions": [".tf"],
372
- "content_signals": { "*.tf": ["provider \"azurerm\"", "azurerm_"] },
373
- "pack": "terraform-azure"
374
- },
375
- "terraform-gcp": {
376
- "file_extensions": [".tf"],
377
- "content_signals": { "*.tf": ["provider \"google\"", "google_"] },
378
- "pack": "terraform-gcp"
379
- },
380
- "cloudformation": {
381
- "content_signals": { "*.yaml": ["AWSTemplateFormatVersion"], "*.json": ["AWSTemplateFormatVersion"] },
382
- "config_files": ["template.yaml", "template.json", "samconfig.toml"],
383
- "pack": "cloudformation"
384
- },
385
- "nginx": {
386
- "config_files": ["nginx.conf"],
387
- "directory_signals": ["nginx/"],
388
- "pack": "nginx"
389
- }
390
- },
391
-
392
- "ci_cd": {
393
- "github-actions": {
394
- "directory_signals": [".github/workflows/"],
395
- "pack": "github-actions"
396
- },
397
- "jenkins-pipeline": {
398
- "config_files": ["Jenkinsfile"],
399
- "pack": "jenkins-pipeline"
400
- },
401
- "argocd": {
402
- "config_files": ["argocd-cm.yaml"],
403
- "content_signals": { "*.yaml": ["argoproj.io"] },
404
- "pack": "argocd"
405
- }
406
- },
407
-
408
- "cloud_compute": {
409
- "aws-lambda": {
410
- "config_files": ["serverless.yml", "serverless.yaml", "serverless.ts", "sam.yaml", "samconfig.toml"],
411
- "content_signals": {
412
- "serverless.yml": ["provider:", "aws"],
413
- "template.yaml": ["AWS::Serverless::Function", "AWS::Lambda::Function"]
414
- },
415
- "pack": "aws-lambda"
416
- },
417
- "azure-functions": {
418
- "config_files": ["host.json", "local.settings.json"],
419
- "directory_signals": ["function_app.py"],
420
- "pack": "azure-functions"
421
- },
422
- "gcp-cloud-run": {
423
- "config_files": ["app.yaml", "cloudbuild.yaml"],
424
- "content_signals": { "*.yaml": ["gcr.io", "run.googleapis.com"] },
425
- "pack": "gcp-cloud-run"
426
- }
427
- },
428
-
429
- "databases": {
430
- "mongodb": {
431
- "dependency_signals": {
432
- "package.json": ["mongoose", "mongodb"],
433
- "requirements.txt": ["pymongo", "motor", "mongoengine"],
434
- "pyproject.toml": ["pymongo", "motor"],
435
- "Gemfile": ["mongoid"]
436
- },
437
- "pack": "mongodb"
438
- },
439
- "postgresql": {
440
- "dependency_signals": {
441
- "package.json": ["pg", "knex", "prisma", "typeorm", "sequelize"],
442
- "requirements.txt": ["psycopg2", "asyncpg", "sqlalchemy"],
443
- "pyproject.toml": ["psycopg2", "asyncpg", "sqlalchemy"],
444
- "Gemfile": ["pg"],
445
- "pom.xml": ["postgresql"]
446
- },
447
- "pack": "postgresql"
448
- },
449
- "mysql-mariadb": {
450
- "dependency_signals": {
451
- "package.json": ["mysql2", "mysql"],
452
- "requirements.txt": ["mysqlclient", "pymysql", "aiomysql"],
453
- "pyproject.toml": ["mysqlclient", "pymysql"],
454
- "pom.xml": ["mysql-connector-java"]
455
- },
456
- "pack": "mysql-mariadb"
457
- },
458
- "redis": {
459
- "dependency_signals": {
460
- "package.json": ["redis", "ioredis"],
461
- "requirements.txt": ["redis", "aioredis"],
462
- "pyproject.toml": ["redis"],
463
- "Gemfile": ["redis"]
464
- },
465
- "pack": "redis"
466
- }
467
- },
468
-
469
- "messaging": {
470
- "kafka": {
471
- "dependency_signals": {
472
- "package.json": ["kafkajs"],
473
- "requirements.txt": ["confluent-kafka", "aiokafka"],
474
- "pyproject.toml": ["confluent-kafka"],
475
- "pom.xml": ["kafka-clients", "spring-kafka"]
476
- },
477
- "pack": "kafka"
478
- },
479
- "rabbitmq": {
480
- "dependency_signals": {
481
- "package.json": ["amqplib"],
482
- "requirements.txt": ["pika", "aio-pika"],
483
- "pyproject.toml": ["pika"],
484
- "pom.xml": ["spring-boot-starter-amqp"]
485
- },
486
- "pack": "rabbitmq"
487
- }
488
- },
489
-
490
- "api_protocols": {
491
- "grpc": {
492
- "dependency_signals": {
493
- "package.json": ["@grpc/grpc-js"],
494
- "requirements.txt": ["grpcio"],
495
- "pyproject.toml": ["grpcio"],
496
- "pom.xml": ["grpc-netty"]
497
- },
498
- "file_extensions": [".proto"],
499
- "pack": "grpc"
500
- },
501
- "websockets": {
502
- "dependency_signals": {
503
- "package.json": ["ws", "socket.io"],
504
- "requirements.txt": ["websockets"],
505
- "pyproject.toml": ["websockets"]
506
- },
507
- "pack": "websockets"
508
- },
509
- "openapi-rest-api": {
510
- "config_files": ["openapi.yaml", "openapi.json", "swagger.yaml", "swagger.json"],
511
- "pack": "openapi-rest-api"
512
- }
513
- }
514
- }