iflow-mcp_anton-prosterity-documentation-search-enhanced 1.9.0__py3-none-any.whl

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 (26) hide show
  1. documentation_search_enhanced/__init__.py +14 -0
  2. documentation_search_enhanced/__main__.py +6 -0
  3. documentation_search_enhanced/config.json +1674 -0
  4. documentation_search_enhanced/config_manager.py +233 -0
  5. documentation_search_enhanced/config_validator.py +79 -0
  6. documentation_search_enhanced/content_enhancer.py +578 -0
  7. documentation_search_enhanced/docker_manager.py +87 -0
  8. documentation_search_enhanced/logger.py +179 -0
  9. documentation_search_enhanced/main.py +2170 -0
  10. documentation_search_enhanced/project_generator.py +260 -0
  11. documentation_search_enhanced/project_scanner.py +85 -0
  12. documentation_search_enhanced/reranker.py +230 -0
  13. documentation_search_enhanced/site_index_builder.py +274 -0
  14. documentation_search_enhanced/site_index_downloader.py +222 -0
  15. documentation_search_enhanced/site_search.py +1325 -0
  16. documentation_search_enhanced/smart_search.py +473 -0
  17. documentation_search_enhanced/snyk_integration.py +657 -0
  18. documentation_search_enhanced/vector_search.py +303 -0
  19. documentation_search_enhanced/version_resolver.py +189 -0
  20. documentation_search_enhanced/vulnerability_scanner.py +545 -0
  21. documentation_search_enhanced/web_scraper.py +117 -0
  22. iflow_mcp_anton_prosterity_documentation_search_enhanced-1.9.0.dist-info/METADATA +195 -0
  23. iflow_mcp_anton_prosterity_documentation_search_enhanced-1.9.0.dist-info/RECORD +26 -0
  24. iflow_mcp_anton_prosterity_documentation_search_enhanced-1.9.0.dist-info/WHEEL +4 -0
  25. iflow_mcp_anton_prosterity_documentation_search_enhanced-1.9.0.dist-info/entry_points.txt +2 -0
  26. iflow_mcp_anton_prosterity_documentation_search_enhanced-1.9.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,1674 @@
1
+ {
2
+ "version": "1.9.0",
3
+ "server_config": {
4
+ "name": "documentation-search-enhanced",
5
+ "version": "1.9.0",
6
+ "logging_level": "INFO",
7
+ "max_concurrent_requests": 10,
8
+ "request_timeout_seconds": 30,
9
+ "auto_approve": {
10
+ "get_docs": true,
11
+ "suggest_libraries": true,
12
+ "health_check": true,
13
+ "get_cache_stats": true,
14
+ "clear_cache": false
15
+ },
16
+ "features": {
17
+ "caching_enabled": true,
18
+ "real_time_search": true,
19
+ "github_integration": true,
20
+ "rate_limiting": true,
21
+ "analytics": true
22
+ }
23
+ },
24
+ "cache": {
25
+ "ttl_hours": 24,
26
+ "max_entries": 1000,
27
+ "enabled": true,
28
+ "persistence_enabled": false,
29
+ "cleanup_interval_minutes": 60
30
+ },
31
+ "rate_limiting": {
32
+ "enabled": true,
33
+ "requests_per_minute": 60,
34
+ "burst_requests": 10
35
+ },
36
+ "docs_urls": {
37
+ "python": {
38
+ "url": "https://docs.python.org/3/",
39
+ "category": "language",
40
+ "learning_curve": "moderate",
41
+ "tags": ["programming-language", "backend", "data-science", "ai"],
42
+ "priority": "high",
43
+ "auto_approve": true
44
+ },
45
+ "javascript": {
46
+ "url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript",
47
+ "category": "language",
48
+ "learning_curve": "moderate",
49
+ "tags": ["programming-language", "frontend", "backend"],
50
+ "priority": "high",
51
+ "auto_approve": true
52
+ },
53
+ "react": {
54
+ "url": "https://react.dev/reference/react",
55
+ "category": "frontend-framework",
56
+ "learning_curve": "moderate",
57
+ "tags": ["frontend", "ui", "javascript", "spa"],
58
+ "priority": "high",
59
+ "auto_approve": true
60
+ },
61
+ "typescript": {
62
+ "url": "https://www.typescriptlang.org/docs/",
63
+ "category": "language",
64
+ "learning_curve": "moderate",
65
+ "tags": ["programming-language", "javascript", "static-typing", "frontend", "backend"],
66
+ "priority": "high",
67
+ "auto_approve": true
68
+ },
69
+ "svelte": {
70
+ "url": "https://svelte.dev/docs",
71
+ "category": "frontend-framework",
72
+ "learning_curve": "easy",
73
+ "tags": ["frontend", "ui", "javascript", "spa", "reactive"],
74
+ "priority": "medium",
75
+ "auto_approve": true
76
+ },
77
+ "tailwind": {
78
+ "url": "https://tailwindcss.com/docs",
79
+ "category": "css-framework",
80
+ "learning_curve": "easy",
81
+ "tags": ["css", "utility-first", "styling", "frontend", "design"],
82
+ "priority": "medium",
83
+ "auto_approve": true
84
+ },
85
+ "fastapi": {
86
+ "url": "https://fastapi.tiangolo.com/",
87
+ "category": "web-framework",
88
+ "learning_curve": "easy",
89
+ "tags": ["python", "api", "async", "modern"],
90
+ "priority": "high",
91
+ "auto_approve": true
92
+ },
93
+ "litestar": {
94
+ "url": "https://docs.litestar.dev/latest/",
95
+ "version_url_template": "https://docs.litestar.dev/{version}/",
96
+ "version_pattern": "latest|2.0|2.1|2.2|2.3",
97
+ "default_version": "latest",
98
+ "supports_versioning": true,
99
+ "category": "web-framework",
100
+ "learning_curve": "moderate",
101
+ "tags": ["python", "async", "web", "starlette"],
102
+ "priority": "medium",
103
+ "auto_approve": true
104
+ },
105
+ "django": {
106
+ "url": "https://docs.djangoproject.com/en/stable/",
107
+ "version_url_template": "https://docs.djangoproject.com/en/{version}/",
108
+ "version_pattern": "stable|5.1|5.0|4.2|4.1|4.0",
109
+ "default_version": "stable",
110
+ "supports_versioning": true,
111
+ "category": "web-framework",
112
+ "learning_curve": "steep",
113
+ "tags": ["python", "web", "orm", "full-stack"],
114
+ "priority": "high",
115
+ "auto_approve": true
116
+ },
117
+ "langchain": {
118
+ "url": "https://python.langchain.com/docs/get_started/introduction/",
119
+ "category": "ai-framework",
120
+ "learning_curve": "moderate",
121
+ "tags": ["ai", "llm", "python", "chains"],
122
+ "priority": "high",
123
+ "auto_approve": true
124
+ },
125
+ "nodejs": {
126
+ "url": "https://nodejs.org/api/documentation.html",
127
+ "category": "runtime",
128
+ "learning_curve": "moderate",
129
+ "tags": ["javascript", "runtime", "backend", "npm"],
130
+ "priority": "high",
131
+ "auto_approve": true
132
+ },
133
+ "flask": {
134
+ "url": "https://flask.palletsprojects.com/en/stable/",
135
+ "version_url_template": "https://flask.palletsprojects.com/en/{version}/",
136
+ "version_pattern": "stable|3.1|3.0|2.3|2.2",
137
+ "default_version": "stable",
138
+ "supports_versioning": true,
139
+ "category": "web-framework",
140
+ "learning_curve": "easy",
141
+ "tags": ["python", "web", "lightweight", "flexible"],
142
+ "priority": "medium",
143
+ "auto_approve": true
144
+ },
145
+ "express": {
146
+ "url": "https://expressjs.com/en/api.html",
147
+ "category": "web-framework",
148
+ "learning_curve": "easy",
149
+ "tags": ["javascript", "nodejs", "web", "api"],
150
+ "priority": "medium",
151
+ "auto_approve": true
152
+ },
153
+ "aws": {
154
+ "url": "https://docs.aws.amazon.com/index.html",
155
+ "category": "cloud-platform",
156
+ "learning_curve": "steep",
157
+ "tags": ["cloud", "infrastructure", "devops", "scalability"],
158
+ "priority": "high",
159
+ "auto_approve": false
160
+ },
161
+ "google-cloud": {
162
+ "url": "https://cloud.google.com/docs",
163
+ "category": "cloud-platform",
164
+ "learning_curve": "steep",
165
+ "tags": ["cloud", "infrastructure", "devops", "ai", "ml"],
166
+ "priority": "high",
167
+ "auto_approve": false
168
+ },
169
+ "azure": {
170
+ "url": "https://docs.microsoft.com/en-us/azure/",
171
+ "category": "cloud-platform",
172
+ "learning_curve": "steep",
173
+ "tags": ["cloud", "infrastructure", "devops", "microsoft", "enterprise"],
174
+ "priority": "high",
175
+ "auto_approve": false
176
+ },
177
+ "docker": {
178
+ "url": "https://docs.docker.com/reference/",
179
+ "category": "devops-tool",
180
+ "learning_curve": "moderate",
181
+ "tags": ["containers", "devops", "deployment", "infrastructure"],
182
+ "priority": "high",
183
+ "auto_approve": true
184
+ },
185
+ "kubernetes": {
186
+ "url": "https://kubernetes.io/docs/home/",
187
+ "category": "devops-tool",
188
+ "learning_curve": "steep",
189
+ "tags": ["orchestration", "containers", "devops", "scaling"],
190
+ "priority": "medium",
191
+ "auto_approve": false
192
+ },
193
+ "pandas": {
194
+ "url": "https://pandas.pydata.org/docs/",
195
+ "category": "data-science",
196
+ "learning_curve": "moderate",
197
+ "tags": ["python", "data-analysis", "data-science", "dataframes"],
198
+ "priority": "high",
199
+ "auto_approve": true
200
+ },
201
+ "streamlit": {
202
+ "url": "https://docs.streamlit.io/",
203
+ "category": "data-science",
204
+ "learning_curve": "easy",
205
+ "tags": ["python", "data-apps", "visualization", "prototyping"],
206
+ "priority": "medium",
207
+ "auto_approve": true
208
+ },
209
+ "openai": {
210
+ "url": "https://platform.openai.com/docs/api-reference/introduction",
211
+ "category": "ai-service",
212
+ "learning_curve": "easy",
213
+ "tags": ["ai", "llm", "gpt", "api"],
214
+ "priority": "high",
215
+ "auto_approve": true
216
+ },
217
+ "anthropic": {
218
+ "url": "https://docs.anthropic.com/en/docs/api-reference/overview",
219
+ "category": "ai-service",
220
+ "learning_curve": "easy",
221
+ "tags": ["ai", "llm", "claude", "api"],
222
+ "priority": "high",
223
+ "auto_approve": true
224
+ },
225
+ "google-ai": {
226
+ "url": "https://ai.google.dev/docs",
227
+ "category": "ai-service",
228
+ "learning_curve": "easy",
229
+ "tags": ["ai", "llm", "gemini", "google", "api"],
230
+ "priority": "high",
231
+ "auto_approve": true
232
+ },
233
+ "codex-cli": {
234
+ "url": "https://docs.codex.sh/",
235
+ "category": "ai-service",
236
+ "learning_curve": "easy",
237
+ "tags": ["ai", "cli", "mcp", "anthropic", "developer-tools"],
238
+ "priority": "medium",
239
+ "auto_approve": true
240
+ },
241
+ "langchain": {
242
+ "url": "https://python.langchain.com/docs/get_started/introduction/",
243
+ "category": "ai-framework",
244
+ "learning_curve": "moderate",
245
+ "tags": ["ai", "llm", "python", "chains"],
246
+ "priority": "high",
247
+ "auto_approve": true
248
+ },
249
+ "langgraph": {
250
+ "url": "https://langchain-ai.github.io/langgraph/",
251
+ "category": "ai-framework",
252
+ "learning_curve": "moderate",
253
+ "tags": ["ai", "agents", "workflow", "langchain"],
254
+ "priority": "medium",
255
+ "auto_approve": true
256
+ },
257
+ "llama-index": {
258
+ "url": "https://docs.llamaindex.ai/",
259
+ "category": "ai-framework",
260
+ "learning_curve": "moderate",
261
+ "tags": ["ai", "rag", "retrieval", "python"],
262
+ "priority": "high",
263
+ "auto_approve": true
264
+ },
265
+ "promptflow": {
266
+ "url": "https://microsoft.github.io/promptflow/",
267
+ "category": "ai-framework",
268
+ "learning_curve": "moderate",
269
+ "tags": ["ai", "llm", "workflows", "microsoft", "python"],
270
+ "priority": "medium",
271
+ "auto_approve": true
272
+ },
273
+ "autogen": {
274
+ "url": "https://microsoft.github.io/autogen/",
275
+ "category": "ai-framework",
276
+ "learning_curve": "moderate",
277
+ "tags": ["ai", "multi-agent", "llm", "microsoft", "python"],
278
+ "priority": "high",
279
+ "auto_approve": true
280
+ },
281
+ "numpy": {
282
+ "url": "https://numpy.org/doc/stable/",
283
+ "version_url_template": "https://numpy.org/doc/{version}/",
284
+ "version_pattern": "stable|2.2|2.1|2.0|1.26|1.25",
285
+ "default_version": "stable",
286
+ "supports_versioning": true,
287
+ "category": "data-science",
288
+ "learning_curve": "moderate",
289
+ "tags": ["python", "numerical", "arrays", "scientific-computing"],
290
+ "priority": "medium",
291
+ "auto_approve": true
292
+ },
293
+ "matplotlib": {
294
+ "url": "https://matplotlib.org/stable/contents.html",
295
+ "version_url_template": "https://matplotlib.org/{version}/contents.html",
296
+ "version_pattern": "stable|3.9|3.8|3.7|3.6",
297
+ "default_version": "stable",
298
+ "supports_versioning": true,
299
+ "category": "data-science",
300
+ "learning_curve": "moderate",
301
+ "tags": ["python", "visualization", "plotting", "charts"],
302
+ "priority": "medium",
303
+ "auto_approve": true
304
+ },
305
+ "scikit-learn": {
306
+ "url": "https://scikit-learn.org/stable/user_guide.html",
307
+ "version_url_template": "https://scikit-learn.org/{version}/user_guide.html",
308
+ "version_pattern": "stable|1.6|1.5|1.4|1.3",
309
+ "default_version": "stable",
310
+ "supports_versioning": true,
311
+ "category": "ai-framework",
312
+ "learning_curve": "moderate",
313
+ "tags": ["python", "machine-learning", "ml", "algorithms"],
314
+ "priority": "high",
315
+ "auto_approve": true
316
+ },
317
+ "transformers": {
318
+ "url": "https://huggingface.co/docs/transformers/index",
319
+ "category": "ai-framework",
320
+ "learning_curve": "moderate",
321
+ "tags": ["ai", "nlp", "transformers", "huggingface", "pytorch"],
322
+ "priority": "high",
323
+ "auto_approve": true
324
+ },
325
+ "datasets": {
326
+ "url": "https://huggingface.co/docs/datasets/index",
327
+ "category": "ai-framework",
328
+ "learning_curve": "easy",
329
+ "tags": ["ai", "data", "huggingface", "ml-datasets"],
330
+ "priority": "medium",
331
+ "auto_approve": true
332
+ },
333
+ "accelerate": {
334
+ "url": "https://huggingface.co/docs/accelerate/index",
335
+ "category": "ai-framework",
336
+ "learning_curve": "moderate",
337
+ "tags": ["ai", "pytorch", "distributed", "huggingface"],
338
+ "priority": "medium",
339
+ "auto_approve": true
340
+ },
341
+ "spacy": {
342
+ "url": "https://spacy.io/usage/spacy-101",
343
+ "category": "ai-framework",
344
+ "learning_curve": "moderate",
345
+ "tags": ["nlp", "python", "text-processing", "linguistics"],
346
+ "priority": "medium",
347
+ "auto_approve": true
348
+ },
349
+ "networkx": {
350
+ "url": "https://networkx.org/documentation/stable/",
351
+ "version_url_template": "https://networkx.org/documentation/{version}/",
352
+ "version_pattern": "stable|3.4|3.3|3.2|3.1",
353
+ "default_version": "stable",
354
+ "supports_versioning": true,
355
+ "category": "data-science",
356
+ "learning_curve": "moderate",
357
+ "tags": ["python", "graphs", "networks", "analysis"],
358
+ "priority": "low",
359
+ "auto_approve": true
360
+ },
361
+ "requests": {
362
+ "url": "https://requests.readthedocs.io/en/latest/",
363
+ "version_url_template": "https://requests.readthedocs.io/en/{version}/",
364
+ "version_pattern": "latest|stable|v2.32|v2.31|v2.30",
365
+ "default_version": "latest",
366
+ "supports_versioning": true,
367
+ "category": "python-library",
368
+ "learning_curve": "easy",
369
+ "tags": ["python", "http", "api", "web-requests"],
370
+ "priority": "high",
371
+ "auto_approve": true
372
+ },
373
+ "pillow": {
374
+ "url": "https://pillow.readthedocs.io/en/stable/",
375
+ "version_url_template": "https://pillow.readthedocs.io/en/{version}/",
376
+ "version_pattern": "stable|11.0.x|10.4.x|10.3.x",
377
+ "default_version": "stable",
378
+ "supports_versioning": true,
379
+ "category": "python-library",
380
+ "learning_curve": "easy",
381
+ "tags": ["python", "image-processing", "pil", "graphics"],
382
+ "priority": "low",
383
+ "auto_approve": true
384
+ },
385
+ "pymupdf": {
386
+ "url": "https://pymupdf.readthedocs.io/en/latest/",
387
+ "category": "python-library",
388
+ "learning_curve": "moderate",
389
+ "tags": ["python", "pdf", "document-processing", "text-extraction"],
390
+ "priority": "low",
391
+ "auto_approve": true
392
+ },
393
+ "faiss-cpu": {
394
+ "url": "https://faiss.ai/",
395
+ "category": "ai-framework",
396
+ "learning_curve": "steep",
397
+ "tags": ["ai", "vector-search", "similarity", "facebook"],
398
+ "priority": "medium",
399
+ "auto_approve": true
400
+ },
401
+ "rank-bm25": {
402
+ "url": "https://github.com/dorianbrown/rank_bm25",
403
+ "category": "ai-framework",
404
+ "learning_curve": "easy",
405
+ "tags": ["python", "information-retrieval", "ranking", "search"],
406
+ "priority": "low",
407
+ "auto_approve": true
408
+ },
409
+ "tqdm": {
410
+ "url": "https://tqdm.github.io/",
411
+ "category": "python-library",
412
+ "learning_curve": "easy",
413
+ "tags": ["python", "progress-bar", "utilities", "cli"],
414
+ "priority": "low",
415
+ "auto_approve": true
416
+ },
417
+ "ipywidgets": {
418
+ "url": "https://ipywidgets.readthedocs.io/en/stable/",
419
+ "version_url_template": "https://ipywidgets.readthedocs.io/en/{version}/",
420
+ "version_pattern": "stable|8.1|8.0|7.8|7.7",
421
+ "default_version": "stable",
422
+ "supports_versioning": true,
423
+ "category": "data-science",
424
+ "learning_curve": "easy",
425
+ "tags": ["python", "jupyter", "widgets", "interactive"],
426
+ "priority": "low",
427
+ "auto_approve": true
428
+ },
429
+ "rdflib": {
430
+ "url": "https://rdflib.readthedocs.io/en/stable/",
431
+ "category": "python-library",
432
+ "learning_curve": "steep",
433
+ "tags": ["python", "semantic-web", "rdf", "knowledge-graphs"],
434
+ "priority": "low",
435
+ "auto_approve": true
436
+ },
437
+ "pyvis": {
438
+ "url": "https://pyvis.readthedocs.io/en/latest/",
439
+ "category": "data-science",
440
+ "learning_curve": "easy",
441
+ "tags": ["python", "network-visualization", "graphs", "interactive"],
442
+ "priority": "low",
443
+ "auto_approve": true
444
+ },
445
+ "duckdb": {
446
+ "url": "https://duckdb.org/docs/",
447
+ "category": "database",
448
+ "learning_curve": "easy",
449
+ "tags": ["python", "database", "sql", "analytics", "olap", "data-analysis"],
450
+ "priority": "medium",
451
+ "auto_approve": true
452
+ },
453
+ "papermill": {
454
+ "url": "https://papermill.readthedocs.io/en/latest/",
455
+ "category": "data-science",
456
+ "learning_curve": "moderate",
457
+ "tags": ["python", "jupyter", "notebooks", "automation", "parameterization"],
458
+ "priority": "low",
459
+ "auto_approve": true
460
+ },
461
+ "openpyxl": {
462
+ "url": "https://openpyxl.readthedocs.io/en/stable/",
463
+ "category": "python-library",
464
+ "learning_curve": "easy",
465
+ "tags": ["python", "excel", "xlsx", "spreadsheet", "data-processing"],
466
+ "priority": "low",
467
+ "auto_approve": true
468
+ },
469
+ "boto3": {
470
+ "url": "https://boto3.amazonaws.com/v1/documentation/api/latest/index.html",
471
+ "category": "cloud-library",
472
+ "learning_curve": "moderate",
473
+ "tags": ["python", "aws", "cloud", "sdk", "s3", "ec2", "lambda"],
474
+ "priority": "high",
475
+ "auto_approve": false
476
+ },
477
+ "jupysql": {
478
+ "url": "https://jupysql.ploomber.io/en/latest/",
479
+ "category": "data-science",
480
+ "learning_curve": "easy",
481
+ "tags": ["python", "jupyter", "sql", "database", "notebooks", "analytics"],
482
+ "priority": "low",
483
+ "auto_approve": true
484
+ },
485
+ "protobuf": {
486
+ "url": "https://protobuf.dev/getting-started/pythontutorial/",
487
+ "category": "python-library",
488
+ "learning_curve": "moderate",
489
+ "tags": ["python", "serialization", "protocol-buffers", "data-format", "google"],
490
+ "priority": "low",
491
+ "auto_approve": true
492
+ },
493
+ "pytorch": {
494
+ "url": "https://pytorch.org/docs/stable/index.html",
495
+ "category": "ai-framework",
496
+ "learning_curve": "moderate",
497
+ "tags": ["ai", "deep-learning", "neural-networks", "python"],
498
+ "priority": "high",
499
+ "auto_approve": true
500
+ },
501
+ "tensorflow": {
502
+ "url": "https://www.tensorflow.org/api_docs/python/tf",
503
+ "category": "ai-framework",
504
+ "learning_curve": "steep",
505
+ "tags": ["ai", "deep-learning", "google", "machine-learning"],
506
+ "priority": "high",
507
+ "auto_approve": true
508
+ },
509
+ "opencv": {
510
+ "url": "https://docs.opencv.org/4.x/",
511
+ "category": "ai-framework",
512
+ "learning_curve": "moderate",
513
+ "tags": ["computer-vision", "image-processing", "ai", "python"],
514
+ "priority": "high",
515
+ "auto_approve": true
516
+ },
517
+ "polars": {
518
+ "url": "https://pola-rs.github.io/polars-book/",
519
+ "category": "data-science",
520
+ "learning_curve": "moderate",
521
+ "tags": ["python", "rust", "dataframe", "analytics"],
522
+ "priority": "medium",
523
+ "auto_approve": true
524
+ },
525
+ "ollama": {
526
+ "url": "https://ollama.com/docs",
527
+ "category": "ai-service",
528
+ "learning_curve": "easy",
529
+ "tags": ["ai", "local-llm", "self-hosted", "inference"],
530
+ "priority": "high",
531
+ "auto_approve": true
532
+ },
533
+ "nextjs": {
534
+ "url": "https://nextjs.org/docs",
535
+ "category": "frontend-framework",
536
+ "learning_curve": "moderate",
537
+ "tags": ["react", "ssr", "frontend", "fullstack", "vercel"],
538
+ "priority": "high",
539
+ "auto_approve": true
540
+ },
541
+ "vuejs": {
542
+ "url": "https://vuejs.org/guide/introduction.html",
543
+ "category": "frontend-framework",
544
+ "learning_curve": "easy",
545
+ "tags": ["frontend", "progressive", "javascript", "spa"],
546
+ "priority": "high",
547
+ "auto_approve": true
548
+ },
549
+ "angular": {
550
+ "url": "https://angular.io/docs",
551
+ "category": "frontend-framework",
552
+ "learning_curve": "steep",
553
+ "tags": ["frontend", "typescript", "spa", "google"],
554
+ "priority": "medium",
555
+ "auto_approve": true
556
+ },
557
+ "astro": {
558
+ "url": "https://docs.astro.build/en/getting-started/",
559
+ "category": "frontend-framework",
560
+ "learning_curve": "easy",
561
+ "tags": ["static-site", "performance", "modern", "islands"],
562
+ "priority": "medium",
563
+ "auto_approve": true
564
+ },
565
+ "sqlalchemy": {
566
+ "url": "https://docs.sqlalchemy.org/en/20/",
567
+ "category": "database",
568
+ "learning_curve": "moderate",
569
+ "tags": ["python", "orm", "sql", "database"],
570
+ "priority": "high",
571
+ "auto_approve": true
572
+ },
573
+ "prisma": {
574
+ "url": "https://www.prisma.io/docs",
575
+ "category": "database",
576
+ "learning_curve": "easy",
577
+ "tags": ["orm", "typescript", "javascript", "database"],
578
+ "priority": "high",
579
+ "auto_approve": true
580
+ },
581
+ "postgresql": {
582
+ "url": "https://www.postgresql.org/docs/current/",
583
+ "category": "database",
584
+ "learning_curve": "moderate",
585
+ "tags": ["sql", "relational", "database", "postgres"],
586
+ "priority": "high",
587
+ "auto_approve": true
588
+ },
589
+ "redis": {
590
+ "url": "https://redis.io/docs/",
591
+ "category": "database",
592
+ "learning_curve": "easy",
593
+ "tags": ["cache", "nosql", "in-memory", "performance"],
594
+ "priority": "medium",
595
+ "auto_approve": true
596
+ },
597
+ "pytest": {
598
+ "url": "https://docs.pytest.org/en/stable/",
599
+ "category": "testing",
600
+ "learning_curve": "easy",
601
+ "tags": ["python", "testing", "unit-tests", "fixtures"],
602
+ "priority": "high",
603
+ "auto_approve": true
604
+ },
605
+ "jest": {
606
+ "url": "https://jestjs.io/docs/getting-started",
607
+ "category": "testing",
608
+ "learning_curve": "easy",
609
+ "tags": ["javascript", "testing", "unit-tests", "mocking"],
610
+ "priority": "high",
611
+ "auto_approve": true
612
+ },
613
+ "cypress": {
614
+ "url": "https://docs.cypress.io/guides/overview/why-cypress",
615
+ "category": "testing",
616
+ "learning_curve": "easy",
617
+ "tags": ["e2e", "testing", "frontend", "automation"],
618
+ "priority": "medium",
619
+ "auto_approve": true
620
+ },
621
+ "terraform": {
622
+ "url": "https://developer.hashicorp.com/terraform/docs",
623
+ "category": "devops-tool",
624
+ "learning_curve": "moderate",
625
+ "tags": ["infrastructure", "iac", "cloud", "automation"],
626
+ "priority": "high",
627
+ "auto_approve": true
628
+ },
629
+ "terragrunt": {
630
+ "url": "https://terragrunt.gruntwork.io/docs/",
631
+ "category": "devops-tool",
632
+ "learning_curve": "moderate",
633
+ "tags": ["infrastructure", "iac", "terraform", "wrapper", "dry"],
634
+ "priority": "medium",
635
+ "auto_approve": true
636
+ },
637
+ "ansible": {
638
+ "url": "https://docs.ansible.com/ansible/latest/",
639
+ "category": "devops-tool",
640
+ "learning_curve": "moderate",
641
+ "tags": ["automation", "configuration", "deployment"],
642
+ "priority": "medium",
643
+ "auto_approve": true
644
+ },
645
+ "nginx": {
646
+ "url": "https://nginx.org/en/docs/",
647
+ "category": "devops-tool",
648
+ "learning_curve": "moderate",
649
+ "tags": ["web-server", "reverse-proxy", "load-balancer"],
650
+ "priority": "medium",
651
+ "auto_approve": true
652
+ },
653
+ "httpx": {
654
+ "url": "https://www.python-httpx.org/",
655
+ "category": "python-library",
656
+ "learning_curve": "easy",
657
+ "tags": ["python", "http", "async", "modern"],
658
+ "priority": "high",
659
+ "auto_approve": true
660
+ },
661
+ "pydantic": {
662
+ "url": "https://docs.pydantic.dev/latest/",
663
+ "category": "python-library",
664
+ "learning_curve": "easy",
665
+ "tags": ["python", "validation", "serialization", "type-safety"],
666
+ "priority": "high",
667
+ "auto_approve": true
668
+ },
669
+ "vite": {
670
+ "url": "https://vitejs.dev/guide/",
671
+ "category": "build-tool",
672
+ "learning_curve": "easy",
673
+ "tags": ["build", "bundler", "fast", "modern", "frontend"],
674
+ "priority": "high",
675
+ "auto_approve": true
676
+ },
677
+ "webpack": {
678
+ "url": "https://webpack.js.org/concepts/",
679
+ "category": "build-tool",
680
+ "learning_curve": "moderate",
681
+ "tags": ["build", "bundler", "module", "frontend"],
682
+ "priority": "high",
683
+ "auto_approve": true
684
+ },
685
+ "react-native": {
686
+ "url": "https://reactnative.dev/docs/getting-started",
687
+ "category": "mobile-framework",
688
+ "learning_curve": "moderate",
689
+ "tags": ["mobile", "cross-platform", "react", "ios", "android"],
690
+ "priority": "high",
691
+ "auto_approve": true
692
+ },
693
+ "flutter": {
694
+ "url": "https://docs.flutter.dev/",
695
+ "category": "mobile-framework",
696
+ "learning_curve": "moderate",
697
+ "tags": ["mobile", "cross-platform", "dart", "google", "ui"],
698
+ "priority": "high",
699
+ "auto_approve": true
700
+ },
701
+ "redux": {
702
+ "url": "https://redux.js.org/introduction/getting-started",
703
+ "category": "state-management",
704
+ "learning_curve": "moderate",
705
+ "tags": ["state", "react", "predictable", "flux"],
706
+ "priority": "high",
707
+ "auto_approve": true
708
+ },
709
+ "zustand": {
710
+ "url": "https://docs.pmnd.rs/zustand/getting-started/introduction",
711
+ "category": "state-management",
712
+ "learning_curve": "easy",
713
+ "tags": ["state", "react", "simple", "modern"],
714
+ "priority": "high",
715
+ "auto_approve": true
716
+ },
717
+ "bootstrap": {
718
+ "url": "https://getbootstrap.com/docs/5.3/getting-started/introduction/",
719
+ "category": "css-framework",
720
+ "learning_curve": "easy",
721
+ "tags": ["css", "responsive", "components", "popular"],
722
+ "priority": "high",
723
+ "auto_approve": true
724
+ },
725
+ "mui": {
726
+ "url": "https://mui.com/material-ui/getting-started/",
727
+ "category": "css-framework",
728
+ "learning_curve": "moderate",
729
+ "tags": ["react", "material-design", "components", "ui"],
730
+ "priority": "high",
731
+ "auto_approve": true
732
+ },
733
+ "graphql": {
734
+ "url": "https://graphql.org/learn/",
735
+ "category": "api-framework",
736
+ "learning_curve": "moderate",
737
+ "tags": ["api", "query-language", "flexible", "modern"],
738
+ "priority": "high",
739
+ "auto_approve": true
740
+ },
741
+ "apollo-client": {
742
+ "url": "https://www.apollographql.com/docs/react/",
743
+ "category": "api-framework",
744
+ "learning_curve": "moderate",
745
+ "tags": ["graphql", "client", "react", "caching"],
746
+ "priority": "high",
747
+ "auto_approve": true
748
+ },
749
+ "apollo-server": {
750
+ "url": "https://www.apollographql.com/docs/apollo-server/",
751
+ "category": "api-framework",
752
+ "learning_curve": "moderate",
753
+ "tags": ["graphql", "server", "schema", "node"],
754
+ "priority": "medium",
755
+ "auto_approve": true
756
+ },
757
+ "jsonwebtoken": {
758
+ "url": "https://github.com/auth0/node-jsonwebtoken#readme",
759
+ "category": "security",
760
+ "learning_curve": "easy",
761
+ "tags": ["jwt", "authentication", "security", "tokens"],
762
+ "priority": "high",
763
+ "auto_approve": true
764
+ },
765
+ "bcrypt": {
766
+ "url": "https://github.com/kelektiv/node.bcrypt.js#readme",
767
+ "category": "security",
768
+ "learning_curve": "easy",
769
+ "tags": ["password", "hashing", "security", "encryption"],
770
+ "priority": "high",
771
+ "auto_approve": true
772
+ },
773
+ "bandit": {
774
+ "url": "https://bandit.readthedocs.io/en/latest/",
775
+ "category": "security",
776
+ "learning_curve": "easy",
777
+ "tags": ["python", "static-analysis", "security", "lint"],
778
+ "priority": "medium",
779
+ "auto_approve": true
780
+ },
781
+ "pip-audit": {
782
+ "url": "https://pypi.org/project/pip-audit/",
783
+ "category": "security",
784
+ "learning_curve": "easy",
785
+ "tags": ["python", "vulnerability", "audit", "cli"],
786
+ "priority": "medium",
787
+ "auto_approve": true
788
+ },
789
+ "socket.io": {
790
+ "url": "https://socket.io/docs/v4/",
791
+ "category": "real-time",
792
+ "learning_curve": "easy",
793
+ "tags": ["websockets", "real-time", "communication", "events"],
794
+ "priority": "high",
795
+ "auto_approve": true
796
+ },
797
+ "firebase": {
798
+ "url": "https://firebase.google.com/docs",
799
+ "category": "backend-service",
800
+ "learning_curve": "easy",
801
+ "tags": ["google", "baas", "database", "authentication", "hosting"],
802
+ "priority": "high",
803
+ "auto_approve": false
804
+ },
805
+ "supabase": {
806
+ "url": "https://supabase.com/docs",
807
+ "category": "backend-service",
808
+ "learning_curve": "easy",
809
+ "tags": ["open-source", "baas", "postgresql", "real-time"],
810
+ "priority": "high",
811
+ "auto_approve": true
812
+ },
813
+ "electron": {
814
+ "url": "https://www.electronjs.org/docs/latest/",
815
+ "category": "desktop-framework",
816
+ "learning_curve": "moderate",
817
+ "tags": ["desktop", "cross-platform", "web-technologies"],
818
+ "priority": "high",
819
+ "auto_approve": true
820
+ },
821
+ "npm": {
822
+ "url": "https://docs.npmjs.com/",
823
+ "category": "package-manager",
824
+ "learning_curve": "easy",
825
+ "tags": ["javascript", "packages", "dependencies", "registry"],
826
+ "priority": "high",
827
+ "auto_approve": true
828
+ },
829
+ "uv": {
830
+ "url": "https://docs.astral.sh/uv/",
831
+ "category": "package-manager",
832
+ "learning_curve": "easy",
833
+ "tags": ["python", "tooling", "packaging", "uv"],
834
+ "priority": "high",
835
+ "auto_approve": true
836
+ },
837
+ "poetry": {
838
+ "url": "https://python-poetry.org/docs/",
839
+ "category": "package-manager",
840
+ "learning_curve": "moderate",
841
+ "tags": ["python", "packaging", "dependency-management", "tooling"],
842
+ "priority": "high",
843
+ "auto_approve": true
844
+ },
845
+ "pipx": {
846
+ "url": "https://pipx.pypa.io/stable/",
847
+ "category": "package-manager",
848
+ "learning_curve": "easy",
849
+ "tags": ["python", "cli", "isolation", "tooling"],
850
+ "priority": "medium",
851
+ "auto_approve": true
852
+ },
853
+ "pnpm": {
854
+ "url": "https://pnpm.io/motivation",
855
+ "category": "package-manager",
856
+ "learning_curve": "easy",
857
+ "tags": ["javascript", "packages", "workspace", "monorepo"],
858
+ "priority": "medium",
859
+ "auto_approve": true
860
+ },
861
+ "bun": {
862
+ "url": "https://bun.sh/docs",
863
+ "category": "package-manager",
864
+ "learning_curve": "easy",
865
+ "tags": ["javascript", "runtime", "bundler", "tooling"],
866
+ "priority": "medium",
867
+ "auto_approve": true
868
+ },
869
+ "go": {
870
+ "url": "https://go.dev/doc/",
871
+ "category": "language",
872
+ "learning_curve": "moderate",
873
+ "tags": ["programming-language", "google", "concurrent", "fast"],
874
+ "priority": "high",
875
+ "auto_approve": true
876
+ },
877
+ "rust": {
878
+ "url": "https://doc.rust-lang.org/book/",
879
+ "category": "language",
880
+ "learning_curve": "steep",
881
+ "tags": ["programming-language", "systems", "memory-safe", "performance"],
882
+ "priority": "high",
883
+ "auto_approve": true
884
+ },
885
+ "zod": {
886
+ "url": "https://zod.dev/",
887
+ "category": "data-validation",
888
+ "learning_curve": "easy",
889
+ "tags": ["typescript", "validation", "schema", "type-safe"],
890
+ "priority": "high",
891
+ "auto_approve": true
892
+ },
893
+ "joi": {
894
+ "url": "https://joi.dev/api/",
895
+ "category": "data-validation",
896
+ "learning_curve": "easy",
897
+ "tags": ["javascript", "validation", "schema", "object"],
898
+ "priority": "high",
899
+ "auto_approve": true
900
+ },
901
+ "axios": {
902
+ "url": "https://axios-http.com/docs/intro",
903
+ "category": "http-client",
904
+ "learning_curve": "easy",
905
+ "tags": ["http", "requests", "promise", "browser", "nodejs"],
906
+ "priority": "high",
907
+ "auto_approve": true
908
+ },
909
+ "auth0": {
910
+ "url": "https://auth0.com/docs",
911
+ "category": "authentication",
912
+ "learning_curve": "easy",
913
+ "tags": ["authentication", "identity", "oauth", "enterprise"],
914
+ "priority": "high",
915
+ "auto_approve": false
916
+ },
917
+ "nextauth": {
918
+ "url": "https://next-auth.js.org/",
919
+ "category": "authentication",
920
+ "learning_curve": "easy",
921
+ "tags": ["nextjs", "authentication", "oauth", "providers"],
922
+ "priority": "high",
923
+ "auto_approve": true
924
+ },
925
+ "dayjs": {
926
+ "url": "https://day.js.org/docs/en/installation/installation",
927
+ "category": "utility",
928
+ "learning_curve": "easy",
929
+ "tags": ["date", "time", "moment", "lightweight"],
930
+ "priority": "high",
931
+ "auto_approve": true
932
+ },
933
+ "html": {
934
+ "url": "https://developer.mozilla.org/en-US/docs/Web/HTML",
935
+ "category": "web-platform",
936
+ "learning_curve": "easy",
937
+ "tags": ["html", "markup", "elements", "semantic", "accessibility", "forms", "media"],
938
+ "priority": "high",
939
+ "auto_approve": true
940
+ },
941
+ "css": {
942
+ "url": "https://developer.mozilla.org/en-US/docs/Web/CSS",
943
+ "category": "web-platform",
944
+ "learning_curve": "moderate",
945
+ "tags": ["css", "styling", "layout", "responsive", "animations", "grid", "flexbox"],
946
+ "priority": "high",
947
+ "auto_approve": true
948
+ },
949
+ "web-apis": {
950
+ "url": "https://developer.mozilla.org/en-US/docs/Web/API",
951
+ "category": "web-platform",
952
+ "learning_curve": "moderate",
953
+ "tags": ["browser-apis", "dom", "fetch", "websockets", "webrtc", "canvas", "webgl"],
954
+ "priority": "high",
955
+ "auto_approve": true
956
+ },
957
+ "pwa": {
958
+ "url": "https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps",
959
+ "category": "web-platform",
960
+ "learning_curve": "moderate",
961
+ "tags": ["pwa", "service-workers", "offline", "mobile", "native", "manifest"],
962
+ "priority": "high",
963
+ "auto_approve": true
964
+ },
965
+ "git": {
966
+ "url": "https://git-scm.com/docs",
967
+ "category": "version-control",
968
+ "learning_curve": "moderate",
969
+ "tags": ["git", "version-control", "collaboration", "workflow", "branching", "merge"],
970
+ "priority": "high",
971
+ "auto_approve": true
972
+ },
973
+ "mongodb": {
974
+ "url": "https://docs.mongodb.com/",
975
+ "category": "database",
976
+ "learning_curve": "moderate",
977
+ "tags": ["nosql", "database", "json", "scalability", "mern", "atlas", "aggregation"],
978
+ "priority": "high",
979
+ "auto_approve": true
980
+ },
981
+ "github-actions": {
982
+ "url": "https://docs.github.com/en/actions",
983
+ "category": "ci-cd",
984
+ "learning_curve": "moderate",
985
+ "tags": ["ci", "cd", "automation", "github", "workflows", "deployment", "testing"],
986
+ "priority": "high",
987
+ "auto_approve": true
988
+ },
989
+ "openapi": {
990
+ "url": "https://swagger.io/docs/",
991
+ "category": "api-documentation",
992
+ "learning_curve": "easy",
993
+ "tags": ["api", "documentation", "swagger", "rest", "specification", "openapi"],
994
+ "priority": "high",
995
+ "auto_approve": true
996
+ },
997
+ "prometheus": {
998
+ "url": "https://prometheus.io/docs/",
999
+ "category": "monitoring",
1000
+ "learning_curve": "moderate",
1001
+ "tags": ["monitoring", "metrics", "observability", "alerting", "time-series"],
1002
+ "priority": "high",
1003
+ "auto_approve": true
1004
+ },
1005
+ "grafana": {
1006
+ "url": "https://grafana.com/docs/",
1007
+ "category": "monitoring",
1008
+ "learning_curve": "easy",
1009
+ "tags": ["visualization", "dashboards", "metrics", "monitoring", "analytics"],
1010
+ "priority": "high",
1011
+ "auto_approve": true
1012
+ },
1013
+ "opentelemetry": {
1014
+ "url": "https://opentelemetry.io/docs/",
1015
+ "category": "monitoring",
1016
+ "learning_curve": "moderate",
1017
+ "tags": ["observability", "tracing", "metrics", "otel"],
1018
+ "priority": "medium",
1019
+ "auto_approve": true
1020
+ },
1021
+ "elasticsearch": {
1022
+ "url": "https://www.elastic.co/guide/",
1023
+ "category": "search-analytics",
1024
+ "learning_curve": "moderate",
1025
+ "tags": ["search", "analytics", "full-text", "logging", "elastic", "lucene"],
1026
+ "priority": "high",
1027
+ "auto_approve": true
1028
+ },
1029
+ "celery": {
1030
+ "url": "https://docs.celeryproject.org/",
1031
+ "category": "task-queue",
1032
+ "learning_curve": "moderate",
1033
+ "tags": ["python", "async", "tasks", "queue", "background", "distributed"],
1034
+ "priority": "high",
1035
+ "auto_approve": true
1036
+ },
1037
+ "eslint": {
1038
+ "url": "https://eslint.org/docs/",
1039
+ "category": "code-quality",
1040
+ "learning_curve": "easy",
1041
+ "tags": ["javascript", "linting", "code-quality", "static-analysis", "typescript"],
1042
+ "priority": "high",
1043
+ "auto_approve": true
1044
+ },
1045
+ "ruff": {
1046
+ "url": "https://docs.astral.sh/ruff/",
1047
+ "category": "code-quality",
1048
+ "learning_curve": "easy",
1049
+ "tags": ["python", "linting", "static-analysis", "fast"],
1050
+ "priority": "high",
1051
+ "auto_approve": true
1052
+ },
1053
+ "black": {
1054
+ "url": "https://black.readthedocs.io/en/stable/",
1055
+ "category": "formatter",
1056
+ "learning_curve": "easy",
1057
+ "tags": ["python", "formatting", "opinionated", "code-style"],
1058
+ "priority": "high",
1059
+ "auto_approve": true
1060
+ },
1061
+ "nestjs": {
1062
+ "url": "https://docs.nestjs.com/",
1063
+ "category": "web-framework",
1064
+ "learning_curve": "moderate",
1065
+ "tags": ["typescript", "nodejs", "enterprise", "decorators", "dependency-injection"],
1066
+ "priority": "high",
1067
+ "auto_approve": true
1068
+ },
1069
+ "spring-boot": {
1070
+ "url": "https://docs.spring.io/spring-boot/docs/current/reference/html/",
1071
+ "category": "web-framework",
1072
+ "learning_curve": "moderate",
1073
+ "tags": ["java", "enterprise", "microservices", "spring", "jvm"],
1074
+ "priority": "high",
1075
+ "auto_approve": true
1076
+ },
1077
+ "aspnet-core": {
1078
+ "url": "https://learn.microsoft.com/en-us/aspnet/core/",
1079
+ "category": "web-framework",
1080
+ "learning_curve": "moderate",
1081
+ "tags": ["csharp", "dotnet", "microsoft", "enterprise", "web"],
1082
+ "priority": "high",
1083
+ "auto_approve": true
1084
+ },
1085
+ "mysql": {
1086
+ "url": "https://dev.mysql.com/doc/",
1087
+ "category": "database",
1088
+ "learning_curve": "moderate",
1089
+ "tags": ["sql", "relational", "database", "mysql", "mariadb"],
1090
+ "priority": "high",
1091
+ "auto_approve": true
1092
+ },
1093
+ "drizzle": {
1094
+ "url": "https://orm.drizzle.team/docs/overview",
1095
+ "category": "database",
1096
+ "learning_curve": "easy",
1097
+ "tags": ["typescript", "orm", "type-safe", "sql", "modern"],
1098
+ "priority": "high",
1099
+ "auto_approve": true
1100
+ },
1101
+ "mongoose": {
1102
+ "url": "https://mongoosejs.com/docs/",
1103
+ "category": "database",
1104
+ "learning_curve": "easy",
1105
+ "tags": ["mongodb", "nodejs", "odm", "schemas", "validation"],
1106
+ "priority": "high",
1107
+ "auto_approve": true
1108
+ },
1109
+ "pinecone": {
1110
+ "url": "https://docs.pinecone.io/",
1111
+ "category": "ai-framework",
1112
+ "learning_curve": "easy",
1113
+ "tags": ["vector-database", "ai", "embeddings", "similarity-search", "cloud"],
1114
+ "priority": "high",
1115
+ "auto_approve": true
1116
+ },
1117
+ "weaviate": {
1118
+ "url": "https://weaviate.io/developers/weaviate",
1119
+ "category": "ai-framework",
1120
+ "learning_curve": "moderate",
1121
+ "tags": ["vector-database", "ai", "open-source", "graphql", "semantic-search"],
1122
+ "priority": "high",
1123
+ "auto_approve": true
1124
+ },
1125
+ "instructor": {
1126
+ "url": "https://python.useinstructor.com/",
1127
+ "category": "ai-framework",
1128
+ "learning_curve": "easy",
1129
+ "tags": ["python", "llm", "pydantic", "structured-output", "openai"],
1130
+ "priority": "high",
1131
+ "auto_approve": true
1132
+ },
1133
+ "litellm": {
1134
+ "url": "https://docs.litellm.ai/docs/",
1135
+ "category": "ai-framework",
1136
+ "learning_curve": "easy",
1137
+ "tags": ["python", "llm", "proxy", "multi-provider", "unified-api"],
1138
+ "priority": "high",
1139
+ "auto_approve": true
1140
+ },
1141
+ "chroma": {
1142
+ "url": "https://docs.trychroma.com/",
1143
+ "category": "ai-framework",
1144
+ "learning_curve": "easy",
1145
+ "tags": ["vector-database", "ai", "embeddings", "python", "open-source"],
1146
+ "priority": "high",
1147
+ "auto_approve": true
1148
+ },
1149
+ "pgvector": {
1150
+ "url": "https://github.com/pgvector/pgvector",
1151
+ "category": "database",
1152
+ "learning_curve": "moderate",
1153
+ "tags": ["postgresql", "vector-search", "embeddings", "extension", "ai"],
1154
+ "priority": "high",
1155
+ "auto_approve": true
1156
+ },
1157
+ "vllm": {
1158
+ "url": "https://docs.vllm.ai/en/latest/",
1159
+ "category": "ai-framework",
1160
+ "learning_curve": "moderate",
1161
+ "tags": ["python", "llm", "inference", "performance", "serving"],
1162
+ "priority": "high",
1163
+ "auto_approve": true
1164
+ },
1165
+ "vitest": {
1166
+ "url": "https://vitest.dev/guide/",
1167
+ "category": "testing",
1168
+ "learning_curve": "easy",
1169
+ "tags": ["javascript", "typescript", "vite", "unit-testing", "fast"],
1170
+ "priority": "high",
1171
+ "auto_approve": true
1172
+ },
1173
+ "playwright": {
1174
+ "url": "https://playwright.dev/docs/intro",
1175
+ "category": "testing",
1176
+ "learning_curve": "easy",
1177
+ "tags": ["e2e", "testing", "browser", "automation", "cross-browser"],
1178
+ "priority": "high",
1179
+ "auto_approve": true
1180
+ },
1181
+ "testing-library": {
1182
+ "url": "https://testing-library.com/docs/",
1183
+ "category": "testing",
1184
+ "learning_curve": "easy",
1185
+ "tags": ["react", "testing", "user-centric", "dom", "accessibility"],
1186
+ "priority": "high",
1187
+ "auto_approve": true
1188
+ },
1189
+ "prettier": {
1190
+ "url": "https://prettier.io/docs/en/",
1191
+ "category": "formatter",
1192
+ "learning_curve": "easy",
1193
+ "tags": ["javascript", "typescript", "formatting", "opinionated", "code-style"],
1194
+ "priority": "high",
1195
+ "auto_approve": true
1196
+ },
1197
+ "shadcn-ui": {
1198
+ "url": "https://ui.shadcn.com/docs",
1199
+ "category": "css-framework",
1200
+ "learning_curve": "easy",
1201
+ "tags": ["react", "tailwind", "components", "radix", "typescript"],
1202
+ "priority": "high",
1203
+ "auto_approve": true
1204
+ },
1205
+ "clerk": {
1206
+ "url": "https://clerk.com/docs",
1207
+ "category": "authentication",
1208
+ "learning_curve": "easy",
1209
+ "tags": ["authentication", "react", "nextjs", "user-management", "modern"],
1210
+ "priority": "high",
1211
+ "auto_approve": true
1212
+ },
1213
+ "owasp": {
1214
+ "url": "https://owasp.org/www-project-top-ten/",
1215
+ "category": "security",
1216
+ "learning_curve": "moderate",
1217
+ "tags": ["security", "best-practices", "vulnerabilities", "web-security", "standards"],
1218
+ "priority": "high",
1219
+ "auto_approve": true
1220
+ },
1221
+ "dbt": {
1222
+ "url": "https://docs.getdbt.com/docs/introduction",
1223
+ "category": "data-engineering",
1224
+ "learning_curve": "moderate",
1225
+ "tags": ["sql", "data-transformation", "analytics", "etl", "data-warehouse"],
1226
+ "priority": "medium",
1227
+ "auto_approve": true
1228
+ },
1229
+ "apache-airflow": {
1230
+ "url": "https://airflow.apache.org/docs/",
1231
+ "category": "data-engineering",
1232
+ "learning_curve": "moderate",
1233
+ "tags": ["python", "workflow", "orchestration", "data-pipeline", "scheduling"],
1234
+ "priority": "medium",
1235
+ "auto_approve": true
1236
+ },
1237
+ "prefect": {
1238
+ "url": "https://docs.prefect.io/",
1239
+ "category": "data-engineering",
1240
+ "learning_curve": "moderate",
1241
+ "tags": ["python", "workflow", "orchestration", "data-pipeline", "modern"],
1242
+ "priority": "medium",
1243
+ "auto_approve": true
1244
+ },
1245
+ "rabbitmq": {
1246
+ "url": "https://www.rabbitmq.com/documentation.html",
1247
+ "category": "message-broker",
1248
+ "learning_curve": "moderate",
1249
+ "tags": ["message-queue", "amqp", "messaging", "distributed", "broker"],
1250
+ "priority": "medium",
1251
+ "auto_approve": true
1252
+ },
1253
+ "vercel": {
1254
+ "url": "https://vercel.com/docs",
1255
+ "category": "deployment-platform",
1256
+ "learning_curve": "easy",
1257
+ "tags": ["deployment", "nextjs", "serverless", "hosting", "frontend"],
1258
+ "priority": "medium",
1259
+ "auto_approve": true
1260
+ },
1261
+ "railway": {
1262
+ "url": "https://docs.railway.app/",
1263
+ "category": "deployment-platform",
1264
+ "learning_curve": "easy",
1265
+ "tags": ["deployment", "hosting", "docker", "database", "simple"],
1266
+ "priority": "medium",
1267
+ "auto_approve": true
1268
+ },
1269
+ "sentry": {
1270
+ "url": "https://docs.sentry.io/",
1271
+ "category": "monitoring",
1272
+ "learning_curve": "easy",
1273
+ "tags": ["error-tracking", "monitoring", "debugging", "observability", "apm"],
1274
+ "priority": "medium",
1275
+ "auto_approve": true
1276
+ },
1277
+ "gitlab-ci": {
1278
+ "url": "https://docs.gitlab.com/ee/ci/",
1279
+ "category": "ci-cd",
1280
+ "learning_curve": "moderate",
1281
+ "tags": ["ci", "cd", "gitlab", "pipelines", "automation", "devops"],
1282
+ "priority": "medium",
1283
+ "auto_approve": true
1284
+ },
1285
+ "helm": {
1286
+ "url": "https://helm.sh/docs/",
1287
+ "category": "devops-tool",
1288
+ "learning_curve": "moderate",
1289
+ "tags": ["kubernetes", "package-manager", "charts", "deployment", "k8s"],
1290
+ "priority": "medium",
1291
+ "auto_approve": true
1292
+ },
1293
+ "trpc": {
1294
+ "url": "https://trpc.io/docs",
1295
+ "category": "api-framework",
1296
+ "learning_curve": "easy",
1297
+ "tags": ["typescript", "rpc", "type-safe", "fullstack", "api"],
1298
+ "priority": "medium",
1299
+ "auto_approve": true
1300
+ },
1301
+ "grpc": {
1302
+ "url": "https://grpc.io/docs/",
1303
+ "category": "api-framework",
1304
+ "learning_curve": "moderate",
1305
+ "tags": ["rpc", "protobuf", "microservices", "google", "performance"],
1306
+ "priority": "medium",
1307
+ "auto_approve": true
1308
+ },
1309
+ "aiohttp": {
1310
+ "url": "https://docs.aiohttp.org/en/stable/",
1311
+ "category": "python-library",
1312
+ "learning_curve": "moderate",
1313
+ "tags": ["python", "async", "http", "client", "server"],
1314
+ "priority": "medium",
1315
+ "auto_approve": true
1316
+ },
1317
+ "remix": {
1318
+ "url": "https://remix.run/docs",
1319
+ "category": "frontend-framework",
1320
+ "learning_curve": "moderate",
1321
+ "tags": ["react", "fullstack", "ssr", "routing", "modern"],
1322
+ "priority": "medium",
1323
+ "auto_approve": true
1324
+ },
1325
+ "chakra-ui": {
1326
+ "url": "https://chakra-ui.com/docs/getting-started",
1327
+ "category": "css-framework",
1328
+ "learning_curve": "easy",
1329
+ "tags": ["react", "components", "ui", "accessibility", "design-system"],
1330
+ "priority": "medium",
1331
+ "auto_approve": true
1332
+ },
1333
+ "threejs": {
1334
+ "url": "https://threejs.org/docs/",
1335
+ "category": "frontend-library",
1336
+ "learning_curve": "moderate",
1337
+ "tags": ["javascript", "3d", "webgl", "graphics", "visualization"],
1338
+ "priority": "medium",
1339
+ "auto_approve": true
1340
+ },
1341
+ "neon": {
1342
+ "url": "https://neon.tech/docs/introduction",
1343
+ "category": "database",
1344
+ "learning_curve": "easy",
1345
+ "tags": ["postgresql", "serverless", "cloud", "managed", "modern"],
1346
+ "priority": "medium",
1347
+ "auto_approve": true
1348
+ },
1349
+ "lodash": {
1350
+ "url": "https://lodash.com/docs/",
1351
+ "category": "utility",
1352
+ "learning_curve": "easy",
1353
+ "tags": ["javascript", "utilities", "functional", "helpers", "popular"],
1354
+ "priority": "medium",
1355
+ "auto_approve": true
1356
+ },
1357
+ "turbo": {
1358
+ "url": "https://turbo.build/repo/docs",
1359
+ "category": "build-tool",
1360
+ "learning_curve": "moderate",
1361
+ "tags": ["monorepo", "build", "cache", "vercel", "tooling"],
1362
+ "priority": "medium",
1363
+ "auto_approve": true
1364
+ },
1365
+ "ts-node": {
1366
+ "url": "https://typestrong.org/ts-node/",
1367
+ "category": "typescript-tool",
1368
+ "learning_curve": "easy",
1369
+ "tags": ["typescript", "nodejs", "runtime", "development", "repl"],
1370
+ "priority": "medium",
1371
+ "auto_approve": true
1372
+ },
1373
+ "swc": {
1374
+ "url": "https://swc.rs/docs/getting-started",
1375
+ "category": "build-tool",
1376
+ "learning_curve": "moderate",
1377
+ "tags": ["rust", "compiler", "typescript", "javascript", "fast"],
1378
+ "priority": "medium",
1379
+ "auto_approve": true
1380
+ },
1381
+ "expo": {
1382
+ "url": "https://docs.expo.dev/",
1383
+ "category": "mobile-framework",
1384
+ "learning_curve": "easy",
1385
+ "tags": ["react-native", "mobile", "ios", "android", "cross-platform"],
1386
+ "priority": "low",
1387
+ "auto_approve": true
1388
+ },
1389
+ "swiftui": {
1390
+ "url": "https://developer.apple.com/documentation/swiftui/",
1391
+ "category": "mobile-framework",
1392
+ "learning_curve": "moderate",
1393
+ "tags": ["swift", "ios", "apple", "declarative", "native"],
1394
+ "priority": "low",
1395
+ "auto_approve": true
1396
+ },
1397
+ "jetpack-compose": {
1398
+ "url": "https://developer.android.com/jetpack/compose/documentation",
1399
+ "category": "mobile-framework",
1400
+ "learning_curve": "moderate",
1401
+ "tags": ["kotlin", "android", "google", "declarative", "native"],
1402
+ "priority": "low",
1403
+ "auto_approve": true
1404
+ },
1405
+ "tauri": {
1406
+ "url": "https://tauri.app/v1/guides/",
1407
+ "category": "desktop-framework",
1408
+ "learning_curve": "moderate",
1409
+ "tags": ["rust", "desktop", "cross-platform", "electron-alternative", "lightweight"],
1410
+ "priority": "low",
1411
+ "auto_approve": true
1412
+ },
1413
+ "strapi": {
1414
+ "url": "https://docs.strapi.io/",
1415
+ "category": "cms",
1416
+ "learning_curve": "easy",
1417
+ "tags": ["headless-cms", "nodejs", "api", "content-management", "open-source"],
1418
+ "priority": "low",
1419
+ "auto_approve": true
1420
+ },
1421
+ "sanity": {
1422
+ "url": "https://www.sanity.io/docs",
1423
+ "category": "cms",
1424
+ "learning_curve": "moderate",
1425
+ "tags": ["headless-cms", "structured-content", "real-time", "api", "modern"],
1426
+ "priority": "low",
1427
+ "auto_approve": true
1428
+ },
1429
+ "payload-cms": {
1430
+ "url": "https://payloadcms.com/docs",
1431
+ "category": "cms",
1432
+ "learning_curve": "easy",
1433
+ "tags": ["headless-cms", "typescript", "nodejs", "api", "modern"],
1434
+ "priority": "low",
1435
+ "auto_approve": true
1436
+ },
1437
+ "gin": {
1438
+ "url": "https://gin-gonic.com/docs/",
1439
+ "category": "web-framework",
1440
+ "learning_curve": "easy",
1441
+ "tags": ["go", "web", "api", "performance", "lightweight"],
1442
+ "priority": "low",
1443
+ "auto_approve": true
1444
+ },
1445
+ "actix-web": {
1446
+ "url": "https://actix.rs/docs/",
1447
+ "category": "web-framework",
1448
+ "learning_curve": "moderate",
1449
+ "tags": ["rust", "web", "api", "async", "performance"],
1450
+ "priority": "low",
1451
+ "auto_approve": true
1452
+ },
1453
+ "laravel": {
1454
+ "url": "https://laravel.com/docs",
1455
+ "category": "web-framework",
1456
+ "learning_curve": "moderate",
1457
+ "tags": ["php", "web", "fullstack", "eloquent", "popular"],
1458
+ "priority": "low",
1459
+ "auto_approve": true
1460
+ },
1461
+ "rails": {
1462
+ "url": "https://guides.rubyonrails.org/",
1463
+ "category": "web-framework",
1464
+ "learning_curve": "moderate",
1465
+ "tags": ["ruby", "web", "fullstack", "mvc", "convention"],
1466
+ "priority": "low",
1467
+ "auto_approve": true
1468
+ },
1469
+ "neo4j": {
1470
+ "url": "https://neo4j.com/docs/",
1471
+ "category": "database",
1472
+ "learning_curve": "moderate",
1473
+ "tags": ["graph-database", "cypher", "nosql", "relationships", "analytics"],
1474
+ "priority": "low",
1475
+ "auto_approve": true
1476
+ },
1477
+ "turso": {
1478
+ "url": "https://docs.turso.tech/",
1479
+ "category": "database",
1480
+ "learning_curve": "easy",
1481
+ "tags": ["sqlite", "edge", "distributed", "libsql", "serverless"],
1482
+ "priority": "low",
1483
+ "auto_approve": true
1484
+ },
1485
+ "cockroachdb": {
1486
+ "url": "https://www.cockroachlabs.com/docs/",
1487
+ "category": "database",
1488
+ "learning_curve": "moderate",
1489
+ "tags": ["sql", "distributed", "postgresql-compatible", "cloud-native", "resilient"],
1490
+ "priority": "low",
1491
+ "auto_approve": true
1492
+ },
1493
+ "dspy": {
1494
+ "url": "https://dspy-docs.vercel.app/",
1495
+ "category": "ai-framework",
1496
+ "learning_curve": "moderate",
1497
+ "tags": ["python", "llm", "prompt-optimization", "stanford", "programming"],
1498
+ "priority": "low",
1499
+ "auto_approve": true
1500
+ },
1501
+ "guidance": {
1502
+ "url": "https://github.com/guidance-ai/guidance",
1503
+ "category": "ai-framework",
1504
+ "learning_curve": "moderate",
1505
+ "tags": ["python", "llm", "prompt-engineering", "microsoft", "control"],
1506
+ "priority": "low",
1507
+ "auto_approve": true
1508
+ },
1509
+ "haystack": {
1510
+ "url": "https://docs.haystack.deepset.ai/",
1511
+ "category": "ai-framework",
1512
+ "learning_curve": "moderate",
1513
+ "tags": ["python", "nlp", "rag", "search", "deepset"],
1514
+ "priority": "low",
1515
+ "auto_approve": true
1516
+ },
1517
+ "together-ai": {
1518
+ "url": "https://docs.together.ai/docs",
1519
+ "category": "ai-service",
1520
+ "learning_curve": "easy",
1521
+ "tags": ["llm", "api", "inference", "cloud", "models"],
1522
+ "priority": "low",
1523
+ "auto_approve": true
1524
+ },
1525
+ "replicate": {
1526
+ "url": "https://replicate.com/docs",
1527
+ "category": "ai-service",
1528
+ "learning_curve": "easy",
1529
+ "tags": ["ml", "api", "model-hosting", "deployment", "inference"],
1530
+ "priority": "low",
1531
+ "auto_approve": true
1532
+ },
1533
+ "pulumi": {
1534
+ "url": "https://www.pulumi.com/docs/",
1535
+ "category": "devops-tool",
1536
+ "learning_curve": "moderate",
1537
+ "tags": ["infrastructure-as-code", "iac", "cloud", "programming", "modern"],
1538
+ "priority": "low",
1539
+ "auto_approve": true
1540
+ },
1541
+ "jenkins": {
1542
+ "url": "https://www.jenkins.io/doc/",
1543
+ "category": "ci-cd",
1544
+ "learning_curve": "moderate",
1545
+ "tags": ["ci", "cd", "automation", "pipelines", "java"],
1546
+ "priority": "low",
1547
+ "auto_approve": true
1548
+ },
1549
+ "circleci": {
1550
+ "url": "https://circleci.com/docs/",
1551
+ "category": "ci-cd",
1552
+ "learning_curve": "easy",
1553
+ "tags": ["ci", "cd", "cloud", "automation", "pipelines"],
1554
+ "priority": "low",
1555
+ "auto_approve": true
1556
+ },
1557
+ "argocd": {
1558
+ "url": "https://argo-cd.readthedocs.io/",
1559
+ "category": "devops-tool",
1560
+ "learning_curve": "moderate",
1561
+ "tags": ["gitops", "kubernetes", "cd", "deployment", "declarative"],
1562
+ "priority": "low",
1563
+ "auto_approve": true
1564
+ },
1565
+ "fluxcd": {
1566
+ "url": "https://fluxcd.io/flux/",
1567
+ "category": "devops-tool",
1568
+ "learning_curve": "moderate",
1569
+ "tags": ["gitops", "kubernetes", "cd", "deployment", "declarative", "cncf"],
1570
+ "priority": "medium",
1571
+ "auto_approve": true
1572
+ },
1573
+ "traefik": {
1574
+ "url": "https://doc.traefik.io/traefik/",
1575
+ "category": "devops-tool",
1576
+ "learning_curve": "moderate",
1577
+ "tags": ["reverse-proxy", "load-balancer", "cloud-native", "kubernetes", "docker"],
1578
+ "priority": "low",
1579
+ "auto_approve": true
1580
+ },
1581
+ "apache-spark": {
1582
+ "url": "https://spark.apache.org/docs/latest/",
1583
+ "category": "data-engineering",
1584
+ "learning_curve": "steep",
1585
+ "tags": ["big-data", "distributed", "analytics", "scala", "python"],
1586
+ "priority": "low",
1587
+ "auto_approve": true
1588
+ },
1589
+ "apache-kafka": {
1590
+ "url": "https://kafka.apache.org/documentation/",
1591
+ "category": "data-engineering",
1592
+ "learning_curve": "steep",
1593
+ "tags": ["streaming", "distributed", "messaging", "event-driven", "real-time"],
1594
+ "priority": "low",
1595
+ "auto_approve": true
1596
+ },
1597
+ "dagster": {
1598
+ "url": "https://docs.dagster.io/",
1599
+ "category": "data-engineering",
1600
+ "learning_curve": "moderate",
1601
+ "tags": ["python", "data-orchestration", "pipeline", "observability", "modern"],
1602
+ "priority": "low",
1603
+ "auto_approve": true
1604
+ },
1605
+ "nats": {
1606
+ "url": "https://docs.nats.io/",
1607
+ "category": "message-broker",
1608
+ "learning_curve": "moderate",
1609
+ "tags": ["messaging", "cloud-native", "distributed", "pubsub", "streaming"],
1610
+ "priority": "low",
1611
+ "auto_approve": true
1612
+ },
1613
+ "solidjs": {
1614
+ "url": "https://www.solidjs.com/docs/latest",
1615
+ "category": "frontend-framework",
1616
+ "learning_curve": "easy",
1617
+ "tags": ["javascript", "reactive", "performance", "jsx", "modern"],
1618
+ "priority": "low",
1619
+ "auto_approve": true
1620
+ },
1621
+ "alpinejs": {
1622
+ "url": "https://alpinejs.dev/start-here",
1623
+ "category": "frontend-library",
1624
+ "learning_curve": "easy",
1625
+ "tags": ["javascript", "lightweight", "reactive", "simple", "minimal"],
1626
+ "priority": "low",
1627
+ "auto_approve": true
1628
+ }
1629
+ },
1630
+ "categories": {
1631
+ "language": ["python", "javascript", "typescript", "go", "rust"],
1632
+ "web-platform": ["html", "css", "web-apis", "pwa"],
1633
+ "version-control": ["git"],
1634
+ "ci-cd": ["github-actions", "gitlab-ci", "jenkins", "circleci"],
1635
+ "api-documentation": ["openapi"],
1636
+ "monitoring": ["prometheus", "grafana", "opentelemetry", "sentry"],
1637
+ "search-analytics": ["elasticsearch"],
1638
+ "task-queue": ["celery"],
1639
+ "code-quality": ["eslint", "ruff"],
1640
+ "formatter": ["black", "prettier"],
1641
+ "web-framework": ["fastapi", "django", "flask", "express", "litestar", "nestjs", "spring-boot", "aspnet-core", "gin", "actix-web", "laravel", "rails"],
1642
+ "frontend-framework": ["react", "svelte", "nextjs", "vuejs", "angular", "astro", "remix", "solidjs"],
1643
+ "mobile-framework": ["react-native", "flutter", "expo", "swiftui", "jetpack-compose"],
1644
+ "css-framework": ["tailwind", "bootstrap", "mui", "shadcn-ui", "chakra-ui"],
1645
+ "build-tool": ["vite", "webpack", "turbo", "swc"],
1646
+ "state-management": ["redux", "zustand"],
1647
+ "api-framework": ["graphql", "apollo-client", "apollo-server", "trpc", "grpc"],
1648
+ "ai-framework": ["langchain", "langgraph", "llama-index", "promptflow", "autogen", "scikit-learn", "transformers", "datasets", "accelerate", "spacy", "faiss-cpu", "rank-bm25", "pytorch", "tensorflow", "opencv", "pinecone", "weaviate", "instructor", "litellm", "chroma", "vllm", "dspy", "guidance", "haystack"],
1649
+ "ai-service": ["openai", "anthropic", "google-ai", "codex-cli", "ollama", "together-ai", "replicate"],
1650
+ "runtime": ["nodejs"],
1651
+ "cloud-platform": ["aws", "google-cloud", "azure"],
1652
+ "cloud-library": ["boto3"],
1653
+ "devops-tool": ["docker", "kubernetes", "terraform", "terragrunt", "ansible", "nginx", "helm", "pulumi", "argocd", "fluxcd", "traefik"],
1654
+ "testing": ["pytest", "jest", "cypress", "vitest", "playwright", "testing-library"],
1655
+ "database": ["duckdb", "sqlalchemy", "prisma", "postgresql", "redis", "mongodb", "mysql", "drizzle", "mongoose", "pgvector", "neon", "neo4j", "turso", "cockroachdb"],
1656
+ "data-science": ["pandas", "polars", "streamlit", "numpy", "matplotlib", "networkx", "ipywidgets", "pyvis", "papermill", "jupysql"],
1657
+ "python-library": ["requests", "pillow", "pymupdf", "tqdm", "rdflib", "openpyxl", "protobuf", "httpx", "pydantic", "aiohttp"],
1658
+ "security": ["jsonwebtoken", "bcrypt", "bandit", "pip-audit", "owasp"],
1659
+ "real-time": ["socket.io"],
1660
+ "backend-service": ["firebase", "supabase"],
1661
+ "desktop-framework": ["electron", "tauri"],
1662
+ "package-manager": ["npm", "uv", "poetry", "pipx", "pnpm", "bun"],
1663
+ "data-validation": ["pydantic", "zod", "joi"],
1664
+ "http-client": ["axios"],
1665
+ "authentication": ["auth0", "nextauth", "clerk"],
1666
+ "utility": ["dayjs", "lodash"],
1667
+ "data-engineering": ["dbt", "apache-airflow", "prefect", "apache-spark", "apache-kafka", "dagster"],
1668
+ "message-broker": ["rabbitmq", "nats"],
1669
+ "deployment-platform": ["vercel", "railway"],
1670
+ "typescript-tool": ["ts-node"],
1671
+ "frontend-library": ["threejs", "alpinejs"],
1672
+ "cms": ["strapi", "sanity", "payload-cms"]
1673
+ }
1674
+ }