@redential/cli 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.
- package/LICENSE +202 -0
- package/README.md +217 -0
- package/dist/build-bundle.js +37 -0
- package/dist/categorize.js +25 -0
- package/dist/churn-exclusions.js +51 -0
- package/dist/cli.js +87 -0
- package/dist/config.js +13 -0
- package/dist/credentials.js +26 -0
- package/dist/errors.js +20 -0
- package/dist/git.js +141 -0
- package/dist/hash.js +4 -0
- package/dist/http-client.js +129 -0
- package/dist/import-detect.js +281 -0
- package/dist/login.js +133 -0
- package/dist/logout.js +6 -0
- package/dist/merkle.js +20 -0
- package/dist/prompt.js +70 -0
- package/dist/public-remote.js +43 -0
- package/dist/salt.js +20 -0
- package/dist/scan-command.js +24 -0
- package/dist/scan.js +145 -0
- package/dist/secret-scan.js +37 -0
- package/dist/skill-detect.js +234 -0
- package/dist/submit-command.js +49 -0
- package/dist/submit.js +71 -0
- package/dist/summary.js +148 -0
- package/dist/types.js +12 -0
- package/dist/version-check.js +62 -0
- package/package.json +48 -0
- package/signatures/ai/vector-search.json +39 -0
- package/signatures/ai/whisper.json +36 -0
- package/signatures/auth/firebase-auth.json +43 -0
- package/signatures/auth/oauth-oidc.json +41 -0
- package/signatures/auth/supabase-auth.json +29 -0
- package/signatures/backend/axum.json +24 -0
- package/signatures/db/activerecord.json +21 -0
- package/signatures/db/eloquent.json +22 -0
- package/signatures/db/supabase.json +31 -0
- package/signatures/frontend/tailwind.json +28 -0
- package/signatures/infra/docker.json +20 -0
- package/signatures/infra/github-actions.json +19 -0
- package/signatures/infra/kubernetes.json +21 -0
- package/signatures/infra/terraform.json +22 -0
- package/signatures/package-map.json +483 -0
- package/signatures/testing/jest.json +25 -0
- package/taxonomy.json +119 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Tier 1 of skill detection (docs/signatures.md): flat package-name -> taxonomy slug map. Every key is a normalized package name as ACTUALLY produced by src/import-detect.ts (scope+first-segment for JS, first-dot-segment for Python, first-segment for Ruby, version-stripped path for Go, composer.json's literal keys or PHP `use`'s lowercased first namespace segment) — a Python/Ruby *distribution* name that differs from its *import* name (e.g. PyPI's beautifulsoup4 vs `import bs4`) is a dead key that can never match, not a valid entry. A package deliberately absent here (e.g. @supabase/supabase-js, firebase, @xenova/transformers) is intentionally left to a Tier 2 signature instead, because the bare import doesn't disambiguate which slug applies, or is used for too many unrelated purposes to safely commit to one slug — see docs/signatures.md.",
|
|
3
|
+
"map": {
|
|
4
|
+
"@supabase/auth-helpers-nextjs": "auth/supabase-auth",
|
|
5
|
+
"@supabase/auth-helpers-react": "auth/supabase-auth",
|
|
6
|
+
"@supabase/auth-helpers-shared": "auth/supabase-auth",
|
|
7
|
+
"@supabase/ssr": "auth/supabase-auth",
|
|
8
|
+
"@supabase/auth-ui-react": "auth/supabase-auth",
|
|
9
|
+
"next-auth": "auth/nextauth",
|
|
10
|
+
"@auth/core": "auth/nextauth",
|
|
11
|
+
"@auth/nextjs": "auth/nextauth",
|
|
12
|
+
"@auth/express": "auth/nextauth",
|
|
13
|
+
"@auth0/nextjs-auth0": "auth/auth0",
|
|
14
|
+
"@auth0/auth0-react": "auth/auth0",
|
|
15
|
+
"@auth0/auth0-spa-js": "auth/auth0",
|
|
16
|
+
"auth0": "auth/auth0",
|
|
17
|
+
"@clerk/nextjs": "auth/clerk",
|
|
18
|
+
"@clerk/clerk-react": "auth/clerk",
|
|
19
|
+
"@clerk/clerk-sdk-node": "auth/clerk",
|
|
20
|
+
"@clerk/clerk-js": "auth/clerk",
|
|
21
|
+
"@clerk/backend": "auth/clerk",
|
|
22
|
+
"@clerk/express": "auth/clerk",
|
|
23
|
+
"openid-client": "auth/oauth-oidc",
|
|
24
|
+
"oauth4webapi": "auth/oauth-oidc",
|
|
25
|
+
"simple-oauth2": "auth/oauth-oidc",
|
|
26
|
+
"jsonwebtoken": "auth/jwt",
|
|
27
|
+
"jose": "auth/jwt",
|
|
28
|
+
"jwt-decode": "auth/jwt",
|
|
29
|
+
"@types/jsonwebtoken": "auth/jwt",
|
|
30
|
+
"jwt": "auth/jwt",
|
|
31
|
+
"lucia": "auth/lucia",
|
|
32
|
+
"@lucia-auth/adapter-postgresql": "auth/lucia",
|
|
33
|
+
"@lucia-auth/adapter-sqlite": "auth/lucia",
|
|
34
|
+
"@lucia-auth/adapter-drizzle": "auth/lucia",
|
|
35
|
+
"passport": "auth/passport",
|
|
36
|
+
"passport-local": "auth/passport",
|
|
37
|
+
"passport-jwt": "auth/passport",
|
|
38
|
+
"passport-google-oauth20": "auth/passport",
|
|
39
|
+
"passport-github2": "auth/passport",
|
|
40
|
+
"@react-native-firebase/auth": "auth/firebase-auth",
|
|
41
|
+
"@workos-inc/node": "auth/workos",
|
|
42
|
+
"devise": "auth/devise",
|
|
43
|
+
|
|
44
|
+
"stripe": "payments/stripe",
|
|
45
|
+
"@stripe/stripe-js": "payments/stripe",
|
|
46
|
+
"@stripe/react-stripe-js": "payments/stripe",
|
|
47
|
+
"paypal-rest-sdk": "payments/paypal",
|
|
48
|
+
"@paypal/checkout-server-sdk": "payments/paypal",
|
|
49
|
+
"@paypal/react-paypal-js": "payments/paypal",
|
|
50
|
+
"@paypal/paypal-server-sdk": "payments/paypal",
|
|
51
|
+
"mercadopago": "payments/mercadopago",
|
|
52
|
+
"@lemonsqueezy/lemonsqueezy.js": "payments/lemonsqueezy",
|
|
53
|
+
"@paddle/paddle-js": "payments/paddle",
|
|
54
|
+
"@paddle/paddle-node-sdk": "payments/paddle",
|
|
55
|
+
|
|
56
|
+
"openai": "ai/openai-api",
|
|
57
|
+
"@azure/openai": "ai/openai-api",
|
|
58
|
+
"openai-edge": "ai/openai-api",
|
|
59
|
+
"tiktoken": "ai/openai-api",
|
|
60
|
+
"@anthropic-ai/sdk": "ai/anthropic-api",
|
|
61
|
+
"@anthropic-ai/bedrock-sdk": "ai/anthropic-api",
|
|
62
|
+
"@anthropic-ai/vertex-sdk": "ai/anthropic-api",
|
|
63
|
+
"anthropic": "ai/anthropic-api",
|
|
64
|
+
"langchain": "ai/langchain",
|
|
65
|
+
"@langchain/core": "ai/langchain",
|
|
66
|
+
"@langchain/openai": "ai/langchain",
|
|
67
|
+
"@langchain/anthropic": "ai/langchain",
|
|
68
|
+
"@langchain/community": "ai/langchain",
|
|
69
|
+
"@langchain/textsplitters": "ai/langchain",
|
|
70
|
+
"langchain_core": "ai/langchain",
|
|
71
|
+
"langchain_openai": "ai/langchain",
|
|
72
|
+
"langchain_community": "ai/langchain",
|
|
73
|
+
"@langchain/langgraph": "ai/langgraph",
|
|
74
|
+
"@langchain/langgraph-sdk": "ai/langgraph",
|
|
75
|
+
"langgraph": "ai/langgraph",
|
|
76
|
+
"llamaindex": "ai/llamaindex",
|
|
77
|
+
"llama_index": "ai/llamaindex",
|
|
78
|
+
"@ai-sdk/openai": "ai/vercel-ai-sdk",
|
|
79
|
+
"@ai-sdk/anthropic": "ai/vercel-ai-sdk",
|
|
80
|
+
"@ai-sdk/google": "ai/vercel-ai-sdk",
|
|
81
|
+
"@ai-sdk/mistral": "ai/vercel-ai-sdk",
|
|
82
|
+
"@ai-sdk/cohere": "ai/vercel-ai-sdk",
|
|
83
|
+
"@ai-sdk/groq": "ai/vercel-ai-sdk",
|
|
84
|
+
"@ai-sdk/react": "ai/vercel-ai-sdk",
|
|
85
|
+
"@ai-sdk/svelte": "ai/vercel-ai-sdk",
|
|
86
|
+
"@ai-sdk/vue": "ai/vercel-ai-sdk",
|
|
87
|
+
"@huggingface/inference": "ai/huggingface",
|
|
88
|
+
"transformers": "ai/huggingface",
|
|
89
|
+
"sentence_transformers": "ai/huggingface",
|
|
90
|
+
"huggingface_hub": "ai/huggingface",
|
|
91
|
+
"datasets": "ai/huggingface",
|
|
92
|
+
"accelerate": "ai/huggingface",
|
|
93
|
+
"diffusers": "ai/huggingface",
|
|
94
|
+
"tokenizers": "ai/huggingface",
|
|
95
|
+
"ollama": "ai/ollama",
|
|
96
|
+
"replicate": "ai/replicate",
|
|
97
|
+
"groq-sdk": "ai/groq",
|
|
98
|
+
"groq": "ai/groq",
|
|
99
|
+
"@google/generative-ai": "ai/gemini",
|
|
100
|
+
"@google/genai": "ai/gemini",
|
|
101
|
+
"@google-cloud/vertexai": "ai/gemini",
|
|
102
|
+
"vertexai": "ai/gemini",
|
|
103
|
+
"cohere-ai": "ai/cohere",
|
|
104
|
+
"cohere": "ai/cohere",
|
|
105
|
+
"@pinecone-database/pinecone": "ai/pinecone",
|
|
106
|
+
"pinecone": "ai/pinecone",
|
|
107
|
+
"weaviate-client": "ai/weaviate",
|
|
108
|
+
"weaviate-ts-client": "ai/weaviate",
|
|
109
|
+
"weaviate": "ai/weaviate",
|
|
110
|
+
"chromadb": "ai/chroma",
|
|
111
|
+
"mistralai": "ai/mistral",
|
|
112
|
+
"@mistralai/mistralai": "ai/mistral",
|
|
113
|
+
"qdrant_client": "ai/vector-search",
|
|
114
|
+
|
|
115
|
+
"pg": "db/postgres",
|
|
116
|
+
"postgres": "db/postgres",
|
|
117
|
+
"pg-promise": "db/postgres",
|
|
118
|
+
"psycopg2": "db/postgres",
|
|
119
|
+
"psycopg": "db/postgres",
|
|
120
|
+
"asyncpg": "db/postgres",
|
|
121
|
+
"aiopg": "db/postgres",
|
|
122
|
+
"pg-hstore": "db/postgres",
|
|
123
|
+
"@prisma/client": "db/prisma",
|
|
124
|
+
"@prisma/extension-accelerate": "db/prisma",
|
|
125
|
+
"@prisma/migrate": "db/prisma",
|
|
126
|
+
"drizzle-orm": "db/drizzle",
|
|
127
|
+
"drizzle-kit": "db/drizzle",
|
|
128
|
+
"drizzle-zod": "db/drizzle",
|
|
129
|
+
"drizzle-seed": "db/drizzle",
|
|
130
|
+
"mongodb": "db/mongodb",
|
|
131
|
+
"mongoose": "db/mongodb",
|
|
132
|
+
"pymongo": "db/mongodb",
|
|
133
|
+
"mongoengine": "db/mongodb",
|
|
134
|
+
"mongodb-memory-server": "db/mongodb",
|
|
135
|
+
"redis": "db/redis",
|
|
136
|
+
"ioredis": "db/redis",
|
|
137
|
+
"@upstash/redis": "db/redis",
|
|
138
|
+
"@upstash/ratelimit": "db/redis",
|
|
139
|
+
"redis-om": "db/redis",
|
|
140
|
+
"connect-redis": "db/redis",
|
|
141
|
+
"mysql2": "db/mysql",
|
|
142
|
+
"mysql": "db/mysql",
|
|
143
|
+
"MySQLdb": "db/mysql",
|
|
144
|
+
"pymysql": "db/mysql",
|
|
145
|
+
"better-sqlite3": "db/sqlite",
|
|
146
|
+
"sqlite3": "db/sqlite",
|
|
147
|
+
"node:sqlite": "db/sqlite",
|
|
148
|
+
"expo-sqlite": "db/sqlite",
|
|
149
|
+
"sql.js": "db/sqlite",
|
|
150
|
+
"@planetscale/database": "db/planetscale",
|
|
151
|
+
"@neondatabase/serverless": "db/neon",
|
|
152
|
+
"@libsql/client": "db/turso",
|
|
153
|
+
"typeorm": "db/typeorm",
|
|
154
|
+
"sequelize": "db/sequelize",
|
|
155
|
+
"sequelize-typescript": "db/sequelize",
|
|
156
|
+
"knex": "db/knex",
|
|
157
|
+
"objection": "db/knex",
|
|
158
|
+
"sqlalchemy": "db/sqlalchemy",
|
|
159
|
+
"sqlalchemy_utils": "db/sqlalchemy",
|
|
160
|
+
"alembic": "db/sqlalchemy",
|
|
161
|
+
"flask_sqlalchemy": "db/sqlalchemy",
|
|
162
|
+
"gorm.io/gorm": "db/gorm",
|
|
163
|
+
"gorm.io/driver/postgres": "db/gorm",
|
|
164
|
+
"gorm.io/driver/mysql": "db/gorm",
|
|
165
|
+
"gorm.io/driver/sqlite": "db/gorm",
|
|
166
|
+
|
|
167
|
+
"react": "frontend/react",
|
|
168
|
+
"react-dom": "frontend/react",
|
|
169
|
+
"react-is": "frontend/react",
|
|
170
|
+
"react-router": "frontend/react",
|
|
171
|
+
"react-router-dom": "frontend/react",
|
|
172
|
+
"react-hook-form": "frontend/react",
|
|
173
|
+
"swr": "frontend/react",
|
|
174
|
+
"@types/react": "frontend/react",
|
|
175
|
+
"@types/react-dom": "frontend/react",
|
|
176
|
+
"next": "frontend/nextjs",
|
|
177
|
+
"@next/font": "frontend/nextjs",
|
|
178
|
+
"@next/bundle-analyzer": "frontend/nextjs",
|
|
179
|
+
"next-intl": "frontend/nextjs",
|
|
180
|
+
"next-seo": "frontend/nextjs",
|
|
181
|
+
"next-themes": "frontend/nextjs",
|
|
182
|
+
"vue": "frontend/vue",
|
|
183
|
+
"vue-router": "frontend/vue",
|
|
184
|
+
"vuex": "frontend/vue",
|
|
185
|
+
"pinia": "frontend/vue",
|
|
186
|
+
"nuxt": "frontend/vue",
|
|
187
|
+
"vue-i18n": "frontend/vue",
|
|
188
|
+
"vue-tsc": "frontend/vue",
|
|
189
|
+
"@vueuse/core": "frontend/vue",
|
|
190
|
+
"@vitejs/plugin-vue": "frontend/vue",
|
|
191
|
+
"tailwindcss": "frontend/tailwind",
|
|
192
|
+
"@tailwindcss/typography": "frontend/tailwind",
|
|
193
|
+
"@tailwindcss/forms": "frontend/tailwind",
|
|
194
|
+
"tailwind-merge": "frontend/tailwind",
|
|
195
|
+
"tailwind-variants": "frontend/tailwind",
|
|
196
|
+
"svelte": "frontend/svelte",
|
|
197
|
+
"@sveltejs/kit": "frontend/svelte",
|
|
198
|
+
"svelte-check": "frontend/svelte",
|
|
199
|
+
"svelte-preprocess": "frontend/svelte",
|
|
200
|
+
"@sveltejs/adapter-node": "frontend/svelte",
|
|
201
|
+
"@sveltejs/adapter-auto": "frontend/svelte",
|
|
202
|
+
"@angular/core": "frontend/angular",
|
|
203
|
+
"@angular/common": "frontend/angular",
|
|
204
|
+
"@angular/router": "frontend/angular",
|
|
205
|
+
"@angular/forms": "frontend/angular",
|
|
206
|
+
"@angular/material": "frontend/angular",
|
|
207
|
+
"@angular/cli": "frontend/angular",
|
|
208
|
+
"@angular/animations": "frontend/angular",
|
|
209
|
+
"astro": "frontend/astro",
|
|
210
|
+
"@astrojs/react": "frontend/astro",
|
|
211
|
+
"@astrojs/vue": "frontend/astro",
|
|
212
|
+
"@astrojs/tailwind": "frontend/astro",
|
|
213
|
+
"@astrojs/mdx": "frontend/astro",
|
|
214
|
+
"@astrojs/sitemap": "frontend/astro",
|
|
215
|
+
"@remix-run/react": "frontend/remix",
|
|
216
|
+
"@remix-run/node": "frontend/remix",
|
|
217
|
+
"@remix-run/dev": "frontend/remix",
|
|
218
|
+
"@remix-run/serve": "frontend/remix",
|
|
219
|
+
"@remix-run/eslint-config": "frontend/remix",
|
|
220
|
+
"@remix-run/css-bundle": "frontend/remix",
|
|
221
|
+
"react-native": "frontend/react-native",
|
|
222
|
+
"expo": "frontend/react-native",
|
|
223
|
+
"expo-router": "frontend/react-native",
|
|
224
|
+
"expo-status-bar": "frontend/react-native",
|
|
225
|
+
"expo-constants": "frontend/react-native",
|
|
226
|
+
"expo-linking": "frontend/react-native",
|
|
227
|
+
"expo-splash-screen": "frontend/react-native",
|
|
228
|
+
"@react-native-async-storage/async-storage": "frontend/react-native",
|
|
229
|
+
"react-native-reanimated": "frontend/react-native",
|
|
230
|
+
"react-native-gesture-handler": "frontend/react-native",
|
|
231
|
+
"react-native-screens": "frontend/react-native",
|
|
232
|
+
"@react-navigation/native": "frontend/react-native",
|
|
233
|
+
"zustand": "frontend/zustand",
|
|
234
|
+
"redux": "frontend/redux",
|
|
235
|
+
"@reduxjs/toolkit": "frontend/redux",
|
|
236
|
+
"react-redux": "frontend/redux",
|
|
237
|
+
"redux-thunk": "frontend/redux",
|
|
238
|
+
"redux-saga": "frontend/redux",
|
|
239
|
+
"redux-persist": "frontend/redux",
|
|
240
|
+
"@tanstack/react-query": "frontend/tanstack-query",
|
|
241
|
+
"@tanstack/vue-query": "frontend/tanstack-query",
|
|
242
|
+
"@tanstack/svelte-query": "frontend/tanstack-query",
|
|
243
|
+
"@tanstack/query-core": "frontend/tanstack-query",
|
|
244
|
+
"@tanstack/react-query-devtools": "frontend/tanstack-query",
|
|
245
|
+
|
|
246
|
+
"express": "backend/express",
|
|
247
|
+
"express-session": "backend/express",
|
|
248
|
+
"cors": "backend/express",
|
|
249
|
+
"helmet": "backend/express",
|
|
250
|
+
"morgan": "backend/express",
|
|
251
|
+
"body-parser": "backend/express",
|
|
252
|
+
"cookie-parser": "backend/express",
|
|
253
|
+
"express-rate-limit": "backend/express",
|
|
254
|
+
"express-validator": "backend/express",
|
|
255
|
+
"fastify": "backend/fastify",
|
|
256
|
+
"@fastify/cors": "backend/fastify",
|
|
257
|
+
"@fastify/cookie": "backend/fastify",
|
|
258
|
+
"@fastify/jwt": "backend/fastify",
|
|
259
|
+
"@fastify/static": "backend/fastify",
|
|
260
|
+
"@fastify/swagger": "backend/fastify",
|
|
261
|
+
"fastify-plugin": "backend/fastify",
|
|
262
|
+
"hono": "backend/hono",
|
|
263
|
+
"@hono/node-server": "backend/hono",
|
|
264
|
+
"@hono/zod-validator": "backend/hono",
|
|
265
|
+
"@hono/swagger-ui": "backend/hono",
|
|
266
|
+
"@nestjs/core": "backend/nestjs",
|
|
267
|
+
"@nestjs/common": "backend/nestjs",
|
|
268
|
+
"@nestjs/platform-express": "backend/nestjs",
|
|
269
|
+
"@nestjs/graphql": "backend/nestjs",
|
|
270
|
+
"@nestjs/typeorm": "backend/nestjs",
|
|
271
|
+
"@nestjs/config": "backend/nestjs",
|
|
272
|
+
"@nestjs/jwt": "backend/nestjs",
|
|
273
|
+
"@nestjs/passport": "backend/nestjs",
|
|
274
|
+
"@nestjs/swagger": "backend/nestjs",
|
|
275
|
+
"@nestjs/mongoose": "backend/nestjs",
|
|
276
|
+
"@nestjs/cli": "backend/nestjs",
|
|
277
|
+
"django": "backend/django",
|
|
278
|
+
"rest_framework": "backend/django",
|
|
279
|
+
"corsheaders": "backend/django",
|
|
280
|
+
"rest_framework_simplejwt": "backend/django",
|
|
281
|
+
"django_filters": "backend/django",
|
|
282
|
+
"django_extensions": "backend/django",
|
|
283
|
+
"channels": "backend/django",
|
|
284
|
+
"flask": "backend/flask",
|
|
285
|
+
"flask_cors": "backend/flask",
|
|
286
|
+
"flask_migrate": "backend/flask",
|
|
287
|
+
"flask_login": "backend/flask",
|
|
288
|
+
"flask_restful": "backend/flask",
|
|
289
|
+
"flask_jwt_extended": "backend/flask",
|
|
290
|
+
"fastapi": "backend/fastapi",
|
|
291
|
+
"fastapi_users": "backend/fastapi",
|
|
292
|
+
"sqlmodel": "backend/fastapi",
|
|
293
|
+
"rails": "backend/rails",
|
|
294
|
+
"laravel/framework": "backend/laravel",
|
|
295
|
+
"illuminate": "backend/laravel",
|
|
296
|
+
"graphql": "backend/graphql",
|
|
297
|
+
"graphql-yoga": "backend/graphql",
|
|
298
|
+
"@apollo/server": "backend/graphql",
|
|
299
|
+
"apollo-server": "backend/graphql",
|
|
300
|
+
"apollo-server-express": "backend/graphql",
|
|
301
|
+
"graphene": "backend/graphql",
|
|
302
|
+
"ariadne": "backend/graphql",
|
|
303
|
+
"strawberry": "backend/graphql",
|
|
304
|
+
"graphql-tag": "backend/graphql",
|
|
305
|
+
"graphql-request": "backend/graphql",
|
|
306
|
+
"@graphql-tools/schema": "backend/graphql",
|
|
307
|
+
"type-graphql": "backend/graphql",
|
|
308
|
+
"@grpc/grpc-js": "backend/grpc",
|
|
309
|
+
"@grpc/proto-loader": "backend/grpc",
|
|
310
|
+
"grpc": "backend/grpc",
|
|
311
|
+
"grpc-web": "backend/grpc",
|
|
312
|
+
"protobufjs": "backend/grpc",
|
|
313
|
+
"ws": "backend/websockets",
|
|
314
|
+
"socket.io": "backend/websockets",
|
|
315
|
+
"socket.io-client": "backend/websockets",
|
|
316
|
+
"socket.io-redis": "backend/websockets",
|
|
317
|
+
"socket.io-msgpack-parser": "backend/websockets",
|
|
318
|
+
"websockets": "backend/websockets",
|
|
319
|
+
"uWebSockets.js": "backend/websockets",
|
|
320
|
+
|
|
321
|
+
"@aws-sdk/client-dynamodb": "infra/aws-sdk",
|
|
322
|
+
"@aws-sdk/client-lambda": "infra/aws-sdk",
|
|
323
|
+
"@aws-sdk/client-ec2": "infra/aws-sdk",
|
|
324
|
+
"@aws-sdk/client-cloudwatch": "infra/aws-sdk",
|
|
325
|
+
"@aws-sdk/client-secrets-manager": "infra/aws-sdk",
|
|
326
|
+
"@aws-sdk/client-ssm": "infra/aws-sdk",
|
|
327
|
+
"@aws-sdk/credential-providers": "infra/aws-sdk",
|
|
328
|
+
"@aws-sdk/client-iam": "infra/aws-sdk",
|
|
329
|
+
"@aws-sdk/client-sts": "infra/aws-sdk",
|
|
330
|
+
"@aws-sdk/client-cloudformation": "infra/aws-sdk",
|
|
331
|
+
"aws-cdk-lib": "infra/aws-sdk",
|
|
332
|
+
"aws-sdk": "infra/aws-sdk",
|
|
333
|
+
"boto3": "infra/aws-sdk",
|
|
334
|
+
"botocore": "infra/aws-sdk",
|
|
335
|
+
"dockerode": "infra/docker",
|
|
336
|
+
"docker": "infra/docker",
|
|
337
|
+
"@pulumi/pulumi": "infra/pulumi",
|
|
338
|
+
"@pulumi/aws": "infra/pulumi",
|
|
339
|
+
"@pulumi/gcp": "infra/pulumi",
|
|
340
|
+
"@pulumi/azure-native": "infra/pulumi",
|
|
341
|
+
"@pulumi/kubernetes": "infra/pulumi",
|
|
342
|
+
"@pulumi/docker": "infra/pulumi",
|
|
343
|
+
"@pulumi/cloudflare": "infra/pulumi",
|
|
344
|
+
"pulumi": "infra/pulumi",
|
|
345
|
+
"ansible": "infra/ansible",
|
|
346
|
+
"ansible_runner": "infra/ansible",
|
|
347
|
+
"molecule": "infra/ansible",
|
|
348
|
+
"@cloudflare/workers-types": "infra/cloudflare-workers",
|
|
349
|
+
"@cloudflare/kv-asset-handler": "infra/cloudflare-workers",
|
|
350
|
+
"@cloudflare/next-on-pages": "infra/cloudflare-workers",
|
|
351
|
+
"miniflare": "infra/cloudflare-workers",
|
|
352
|
+
|
|
353
|
+
"@trigger.dev/sdk": "queues/trigger-dev",
|
|
354
|
+
"@trigger.dev/nextjs": "queues/trigger-dev",
|
|
355
|
+
"@trigger.dev/react": "queues/trigger-dev",
|
|
356
|
+
"@trigger.dev/react-hooks": "queues/trigger-dev",
|
|
357
|
+
"bullmq": "queues/bullmq",
|
|
358
|
+
"bull": "queues/bullmq",
|
|
359
|
+
"@bull-board/api": "queues/bullmq",
|
|
360
|
+
"@bull-board/express": "queues/bullmq",
|
|
361
|
+
"amqplib": "queues/rabbitmq",
|
|
362
|
+
"amqp-connection-manager": "queues/rabbitmq",
|
|
363
|
+
"pika": "queues/rabbitmq",
|
|
364
|
+
"rascal": "queues/rabbitmq",
|
|
365
|
+
"celery": "queues/celery",
|
|
366
|
+
"django_celery_beat": "queues/celery",
|
|
367
|
+
"flower": "queues/celery",
|
|
368
|
+
"sidekiq": "queues/sidekiq",
|
|
369
|
+
"sidekiq-cron": "queues/sidekiq",
|
|
370
|
+
"sidekiq-scheduler": "queues/sidekiq",
|
|
371
|
+
"sidekiq-unique-jobs": "queues/sidekiq",
|
|
372
|
+
"kafkajs": "queues/kafka",
|
|
373
|
+
"kafka": "queues/kafka",
|
|
374
|
+
"confluent_kafka": "queues/kafka",
|
|
375
|
+
"node-rdkafka": "queues/kafka",
|
|
376
|
+
"@aws-sdk/client-sqs": "queues/sqs",
|
|
377
|
+
"sqs-consumer": "queues/sqs",
|
|
378
|
+
"sqs-producer": "queues/sqs",
|
|
379
|
+
"@aws-sdk/client-sns": "queues/sqs",
|
|
380
|
+
"sns-sqs-big-payload": "queues/sqs",
|
|
381
|
+
|
|
382
|
+
"@sentry/node": "observability/sentry",
|
|
383
|
+
"@sentry/nextjs": "observability/sentry",
|
|
384
|
+
"@sentry/react": "observability/sentry",
|
|
385
|
+
"@sentry/browser": "observability/sentry",
|
|
386
|
+
"@sentry/vue": "observability/sentry",
|
|
387
|
+
"@sentry/remix": "observability/sentry",
|
|
388
|
+
"@sentry/svelte": "observability/sentry",
|
|
389
|
+
"@sentry/angular": "observability/sentry",
|
|
390
|
+
"@sentry/tracing": "observability/sentry",
|
|
391
|
+
"sentry_sdk": "observability/sentry",
|
|
392
|
+
"posthog-js": "observability/posthog",
|
|
393
|
+
"posthog-node": "observability/posthog",
|
|
394
|
+
"posthog-react-native": "observability/posthog",
|
|
395
|
+
"posthog": "observability/posthog",
|
|
396
|
+
"dd-trace": "observability/datadog",
|
|
397
|
+
"ddtrace": "observability/datadog",
|
|
398
|
+
"datadog_api_client": "observability/datadog",
|
|
399
|
+
"datadog-lambda-js": "observability/datadog",
|
|
400
|
+
"@datadog/browser-rum": "observability/datadog",
|
|
401
|
+
"@datadog/browser-logs": "observability/datadog",
|
|
402
|
+
"@opentelemetry/api": "observability/opentelemetry",
|
|
403
|
+
"@opentelemetry/sdk-node": "observability/opentelemetry",
|
|
404
|
+
"@opentelemetry/sdk-trace-node": "observability/opentelemetry",
|
|
405
|
+
"@opentelemetry/exporter-trace-otlp-http": "observability/opentelemetry",
|
|
406
|
+
"@opentelemetry/instrumentation": "observability/opentelemetry",
|
|
407
|
+
"@opentelemetry/exporter-jaeger": "observability/opentelemetry",
|
|
408
|
+
"@opentelemetry/instrumentation-http": "observability/opentelemetry",
|
|
409
|
+
"@opentelemetry/instrumentation-express": "observability/opentelemetry",
|
|
410
|
+
"@opentelemetry/resources": "observability/opentelemetry",
|
|
411
|
+
"opentelemetry": "observability/opentelemetry",
|
|
412
|
+
"logrocket": "observability/logrocket",
|
|
413
|
+
"logrocket-react": "observability/logrocket",
|
|
414
|
+
"logrocket-redux": "observability/logrocket",
|
|
415
|
+
|
|
416
|
+
"jest": "testing/jest",
|
|
417
|
+
"jest-environment-jsdom": "testing/jest",
|
|
418
|
+
"babel-jest": "testing/jest",
|
|
419
|
+
"ts-jest": "testing/jest",
|
|
420
|
+
"jest-mock-extended": "testing/jest",
|
|
421
|
+
"vitest": "testing/vitest",
|
|
422
|
+
"@vitest/ui": "testing/vitest",
|
|
423
|
+
"@vitest/coverage-v8": "testing/vitest",
|
|
424
|
+
"@vitest/browser": "testing/vitest",
|
|
425
|
+
"@playwright/test": "testing/playwright",
|
|
426
|
+
"playwright": "testing/playwright",
|
|
427
|
+
"playwright-core": "testing/playwright",
|
|
428
|
+
"@playwright/experimental-ct-react": "testing/playwright",
|
|
429
|
+
"playwright-chromium": "testing/playwright",
|
|
430
|
+
"cypress": "testing/cypress",
|
|
431
|
+
"cypress-file-upload": "testing/cypress",
|
|
432
|
+
"@cypress/vite-dev-server": "testing/cypress",
|
|
433
|
+
"cypress-axe": "testing/cypress",
|
|
434
|
+
"pytest": "testing/pytest",
|
|
435
|
+
"rspec": "testing/rspec",
|
|
436
|
+
"rspec-rails": "testing/rspec",
|
|
437
|
+
"capybara": "testing/rspec",
|
|
438
|
+
"factory_bot": "testing/rspec",
|
|
439
|
+
"shoulda-matchers": "testing/rspec",
|
|
440
|
+
"@testing-library/react": "testing/testing-library",
|
|
441
|
+
"@testing-library/vue": "testing/testing-library",
|
|
442
|
+
"@testing-library/svelte": "testing/testing-library",
|
|
443
|
+
"@testing-library/jest-dom": "testing/testing-library",
|
|
444
|
+
"@testing-library/user-event": "testing/testing-library",
|
|
445
|
+
"@testing-library/dom": "testing/testing-library",
|
|
446
|
+
"@testing-library/react-hooks": "testing/testing-library",
|
|
447
|
+
"@testing-library/react-native": "testing/testing-library",
|
|
448
|
+
"@testing-library/cypress": "testing/testing-library",
|
|
449
|
+
|
|
450
|
+
"pandas": "data/pandas",
|
|
451
|
+
"pandas-stubs": "data/pandas",
|
|
452
|
+
|
|
453
|
+
"resend": "email/resend",
|
|
454
|
+
"@react-email/render": "email/resend",
|
|
455
|
+
"@react-email/components": "email/resend",
|
|
456
|
+
"@sendgrid/mail": "email/sendgrid",
|
|
457
|
+
"@sendgrid/client": "email/sendgrid",
|
|
458
|
+
"@sendgrid/eventwebhook": "email/sendgrid",
|
|
459
|
+
"sendgrid": "email/sendgrid",
|
|
460
|
+
"nodemailer": "email/nodemailer",
|
|
461
|
+
"nodemailer-sendgrid": "email/nodemailer",
|
|
462
|
+
"nodemailer-smtp-transport": "email/nodemailer",
|
|
463
|
+
|
|
464
|
+
"@aws-sdk/client-s3": "storage/s3",
|
|
465
|
+
"@aws-sdk/lib-storage": "storage/s3",
|
|
466
|
+
"@aws-sdk/s3-request-presigner": "storage/s3",
|
|
467
|
+
"@aws-sdk/cloudfront-signer": "storage/s3",
|
|
468
|
+
"multer-s3": "storage/s3",
|
|
469
|
+
"s3fs": "storage/s3",
|
|
470
|
+
"cloudinary": "storage/cloudinary",
|
|
471
|
+
"cloudinary-react": "storage/cloudinary",
|
|
472
|
+
"cloudinary-core": "storage/cloudinary",
|
|
473
|
+
"next-cloudinary": "storage/cloudinary",
|
|
474
|
+
"uploadthing": "storage/uploadthing",
|
|
475
|
+
"@uploadthing/react": "storage/uploadthing",
|
|
476
|
+
|
|
477
|
+
"pusher": "realtime/pusher",
|
|
478
|
+
"pusher-js": "realtime/pusher",
|
|
479
|
+
"pusher-websocket-react-native": "realtime/pusher",
|
|
480
|
+
"laravel-echo": "realtime/pusher",
|
|
481
|
+
"ably": "realtime/ably"
|
|
482
|
+
}
|
|
483
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "testing/jest",
|
|
3
|
+
"importPatterns": [
|
|
4
|
+
"from\\s+[\"']@jest/globals[\"']"
|
|
5
|
+
],
|
|
6
|
+
"apiPatterns": [
|
|
7
|
+
"\\bjest\\.(fn|mock|spyOn)\\("
|
|
8
|
+
],
|
|
9
|
+
"configFilePatterns": [
|
|
10
|
+
"(^|/)jest\\.config\\.(js|ts|cjs|mjs|json)$"
|
|
11
|
+
],
|
|
12
|
+
"fixtures": {
|
|
13
|
+
"positive": [
|
|
14
|
+
{ "path": "jest.config.ts", "diff": "export default { testEnvironment: \"node\" };" },
|
|
15
|
+
{ "path": "src/foo.test.ts", "diff": "import { describe, it, expect, jest } from \"@jest/globals\";\nconst spy = jest.spyOn(console, \"log\");\njest.mock(\"./foo\");\nconst mockFn = jest.fn();\nexpect(result).toMatchSnapshot();" }
|
|
16
|
+
],
|
|
17
|
+
"negative": [
|
|
18
|
+
{ "path": "README.md", "diff": "We currently use jest for unit tests but are evaluating a migration to a faster runner." },
|
|
19
|
+
{
|
|
20
|
+
"path": "src/foo.test.ts",
|
|
21
|
+
"diff": "import { describe, it, expect } from \"vitest\";\nit(\"matches the snapshot\", () => {\n expect(result).toMatchSnapshot();\n});"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
25
|
+
}
|
package/taxonomy.json
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Closed public vocabulary of skill slugs. This file is the ONLY source of valid values for detected_skills[].slug in the bundle: a slug not listed here makes the bundle invalid. Detection maps signatures/*.json matches to these slugs — deterministically, locally, with zero network calls. Adding a slug requires a PR to this file (and a signature definition); slugs are never hardcoded in the CLI. Placeholder set, to be expanded.",
|
|
3
|
+
"version": "1.2.0",
|
|
4
|
+
"skills": [
|
|
5
|
+
{ "slug": "auth/supabase-auth", "label": "Supabase Auth" },
|
|
6
|
+
{ "slug": "auth/nextauth", "label": "NextAuth / Auth.js" },
|
|
7
|
+
{ "slug": "auth/auth0", "label": "Auth0" },
|
|
8
|
+
{ "slug": "auth/clerk", "label": "Clerk" },
|
|
9
|
+
{ "slug": "auth/oauth-oidc", "label": "OAuth 2.0 / OIDC" },
|
|
10
|
+
{ "slug": "auth/jwt", "label": "JWT session handling" },
|
|
11
|
+
{ "slug": "auth/lucia", "label": "Lucia Auth" },
|
|
12
|
+
{ "slug": "auth/passport", "label": "Passport.js" },
|
|
13
|
+
{ "slug": "auth/firebase-auth", "label": "Firebase Authentication" },
|
|
14
|
+
{ "slug": "auth/workos", "label": "WorkOS" },
|
|
15
|
+
{ "slug": "auth/devise", "label": "Devise (Rails)" },
|
|
16
|
+
{ "slug": "payments/stripe", "label": "Stripe" },
|
|
17
|
+
{ "slug": "payments/paypal", "label": "PayPal" },
|
|
18
|
+
{ "slug": "payments/mercadopago", "label": "Mercado Pago" },
|
|
19
|
+
{ "slug": "payments/lemonsqueezy", "label": "Lemon Squeezy" },
|
|
20
|
+
{ "slug": "payments/paddle", "label": "Paddle" },
|
|
21
|
+
{ "slug": "ai/openai-api", "label": "OpenAI API" },
|
|
22
|
+
{ "slug": "ai/anthropic-api", "label": "Anthropic API" },
|
|
23
|
+
{ "slug": "ai/langchain", "label": "LangChain" },
|
|
24
|
+
{ "slug": "ai/langgraph", "label": "LangGraph" },
|
|
25
|
+
{ "slug": "ai/llamaindex", "label": "LlamaIndex" },
|
|
26
|
+
{ "slug": "ai/vercel-ai-sdk", "label": "Vercel AI SDK" },
|
|
27
|
+
{ "slug": "ai/whisper", "label": "Whisper (speech-to-text)" },
|
|
28
|
+
{ "slug": "ai/vector-search", "label": "Vector search / embeddings" },
|
|
29
|
+
{ "slug": "ai/huggingface", "label": "Hugging Face Transformers" },
|
|
30
|
+
{ "slug": "ai/ollama", "label": "Ollama" },
|
|
31
|
+
{ "slug": "ai/replicate", "label": "Replicate" },
|
|
32
|
+
{ "slug": "ai/groq", "label": "Groq" },
|
|
33
|
+
{ "slug": "ai/gemini", "label": "Google Gemini API" },
|
|
34
|
+
{ "slug": "ai/cohere", "label": "Cohere" },
|
|
35
|
+
{ "slug": "ai/pinecone", "label": "Pinecone" },
|
|
36
|
+
{ "slug": "ai/weaviate", "label": "Weaviate" },
|
|
37
|
+
{ "slug": "ai/chroma", "label": "Chroma" },
|
|
38
|
+
{ "slug": "ai/mistral", "label": "Mistral AI" },
|
|
39
|
+
{ "slug": "db/postgres", "label": "PostgreSQL" },
|
|
40
|
+
{ "slug": "db/prisma", "label": "Prisma ORM" },
|
|
41
|
+
{ "slug": "db/drizzle", "label": "Drizzle ORM" },
|
|
42
|
+
{ "slug": "db/mongodb", "label": "MongoDB" },
|
|
43
|
+
{ "slug": "db/redis", "label": "Redis" },
|
|
44
|
+
{ "slug": "db/supabase", "label": "Supabase (Postgres client)" },
|
|
45
|
+
{ "slug": "db/mysql", "label": "MySQL" },
|
|
46
|
+
{ "slug": "db/sqlite", "label": "SQLite" },
|
|
47
|
+
{ "slug": "db/planetscale", "label": "PlanetScale" },
|
|
48
|
+
{ "slug": "db/neon", "label": "Neon" },
|
|
49
|
+
{ "slug": "db/turso", "label": "Turso" },
|
|
50
|
+
{ "slug": "db/typeorm", "label": "TypeORM" },
|
|
51
|
+
{ "slug": "db/sequelize", "label": "Sequelize" },
|
|
52
|
+
{ "slug": "db/knex", "label": "Knex.js" },
|
|
53
|
+
{ "slug": "db/activerecord", "label": "Active Record (Rails)" },
|
|
54
|
+
{ "slug": "db/eloquent", "label": "Eloquent (Laravel)" },
|
|
55
|
+
{ "slug": "db/sqlalchemy", "label": "SQLAlchemy" },
|
|
56
|
+
{ "slug": "db/gorm", "label": "GORM (Go)" },
|
|
57
|
+
{ "slug": "frontend/react", "label": "React" },
|
|
58
|
+
{ "slug": "frontend/nextjs", "label": "Next.js" },
|
|
59
|
+
{ "slug": "frontend/vue", "label": "Vue" },
|
|
60
|
+
{ "slug": "frontend/tailwind", "label": "Tailwind CSS" },
|
|
61
|
+
{ "slug": "frontend/svelte", "label": "Svelte" },
|
|
62
|
+
{ "slug": "frontend/angular", "label": "Angular" },
|
|
63
|
+
{ "slug": "frontend/astro", "label": "Astro" },
|
|
64
|
+
{ "slug": "frontend/remix", "label": "Remix" },
|
|
65
|
+
{ "slug": "frontend/react-native", "label": "React Native / Expo" },
|
|
66
|
+
{ "slug": "frontend/zustand", "label": "Zustand" },
|
|
67
|
+
{ "slug": "frontend/redux", "label": "Redux" },
|
|
68
|
+
{ "slug": "frontend/tanstack-query", "label": "TanStack Query" },
|
|
69
|
+
{ "slug": "backend/express", "label": "Express" },
|
|
70
|
+
{ "slug": "backend/fastapi", "label": "FastAPI" },
|
|
71
|
+
{ "slug": "backend/graphql", "label": "GraphQL" },
|
|
72
|
+
{ "slug": "backend/grpc", "label": "gRPC" },
|
|
73
|
+
{ "slug": "backend/websockets", "label": "WebSockets" },
|
|
74
|
+
{ "slug": "backend/fastify", "label": "Fastify" },
|
|
75
|
+
{ "slug": "backend/hono", "label": "Hono" },
|
|
76
|
+
{ "slug": "backend/nestjs", "label": "NestJS" },
|
|
77
|
+
{ "slug": "backend/django", "label": "Django" },
|
|
78
|
+
{ "slug": "backend/flask", "label": "Flask" },
|
|
79
|
+
{ "slug": "backend/rails", "label": "Ruby on Rails" },
|
|
80
|
+
{ "slug": "backend/laravel", "label": "Laravel" },
|
|
81
|
+
{ "slug": "backend/axum", "label": "Axum (Rust)" },
|
|
82
|
+
{ "slug": "infra/docker", "label": "Docker" },
|
|
83
|
+
{ "slug": "infra/kubernetes", "label": "Kubernetes" },
|
|
84
|
+
{ "slug": "infra/terraform", "label": "Terraform" },
|
|
85
|
+
{ "slug": "infra/github-actions", "label": "GitHub Actions" },
|
|
86
|
+
{ "slug": "infra/aws-sdk", "label": "AWS SDK" },
|
|
87
|
+
{ "slug": "infra/pulumi", "label": "Pulumi" },
|
|
88
|
+
{ "slug": "infra/ansible", "label": "Ansible" },
|
|
89
|
+
{ "slug": "infra/cloudflare-workers", "label": "Cloudflare Workers" },
|
|
90
|
+
{ "slug": "queues/trigger-dev", "label": "Trigger.dev" },
|
|
91
|
+
{ "slug": "queues/bullmq", "label": "BullMQ" },
|
|
92
|
+
{ "slug": "queues/rabbitmq", "label": "RabbitMQ" },
|
|
93
|
+
{ "slug": "queues/celery", "label": "Celery" },
|
|
94
|
+
{ "slug": "queues/sidekiq", "label": "Sidekiq" },
|
|
95
|
+
{ "slug": "queues/kafka", "label": "Kafka" },
|
|
96
|
+
{ "slug": "queues/sqs", "label": "AWS SQS" },
|
|
97
|
+
{ "slug": "observability/sentry", "label": "Sentry" },
|
|
98
|
+
{ "slug": "observability/posthog", "label": "PostHog" },
|
|
99
|
+
{ "slug": "observability/datadog", "label": "Datadog" },
|
|
100
|
+
{ "slug": "observability/opentelemetry", "label": "OpenTelemetry" },
|
|
101
|
+
{ "slug": "observability/logrocket", "label": "LogRocket" },
|
|
102
|
+
{ "slug": "testing/jest", "label": "Jest" },
|
|
103
|
+
{ "slug": "testing/vitest", "label": "Vitest" },
|
|
104
|
+
{ "slug": "testing/playwright", "label": "Playwright" },
|
|
105
|
+
{ "slug": "testing/cypress", "label": "Cypress" },
|
|
106
|
+
{ "slug": "testing/pytest", "label": "pytest" },
|
|
107
|
+
{ "slug": "testing/rspec", "label": "RSpec" },
|
|
108
|
+
{ "slug": "testing/testing-library", "label": "Testing Library" },
|
|
109
|
+
{ "slug": "data/pandas", "label": "pandas" },
|
|
110
|
+
{ "slug": "email/resend", "label": "Resend" },
|
|
111
|
+
{ "slug": "email/sendgrid", "label": "SendGrid" },
|
|
112
|
+
{ "slug": "email/nodemailer", "label": "Nodemailer" },
|
|
113
|
+
{ "slug": "storage/s3", "label": "Amazon S3" },
|
|
114
|
+
{ "slug": "storage/cloudinary", "label": "Cloudinary" },
|
|
115
|
+
{ "slug": "storage/uploadthing", "label": "UploadThing" },
|
|
116
|
+
{ "slug": "realtime/pusher", "label": "Pusher" },
|
|
117
|
+
{ "slug": "realtime/ably", "label": "Ably" }
|
|
118
|
+
]
|
|
119
|
+
}
|