@vodailoc/kilo-kit-mcp 1.1.0 → 1.2.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/.mcp/kilo-kit.codex-windows.toml +5 -0
- package/LICENSE +190 -190
- package/QUICKSTART.md +265 -255
- package/README.md +321 -267
- package/mcp/README.md +64 -12
- package/mcp/dist/formatters.js +142 -1
- package/mcp/dist/orchestration-audit.js +20 -0
- package/mcp/dist/orchestration-memory.js +258 -0
- package/mcp/dist/orchestration-types.js +1 -0
- package/mcp/dist/orchestrator.js +222 -0
- package/mcp/dist/question-templates.js +249 -0
- package/mcp/dist/route-analytics.js +149 -0
- package/mcp/dist/router.js +75 -82
- package/mcp/dist/routing-policy-data.js +241 -0
- package/mcp/dist/routing-policy.js +145 -0
- package/mcp/dist/server.js +93 -4
- package/mcp/dist/smoke-env.js +18 -0
- package/mcp/dist/smoke.js +68 -1
- package/mcp/package.json +1 -2
- package/package.json +3 -2
- package/skills/README.md +647 -647
- package/skills/SKILLS_INDEX.md +139 -139
- package/skills/ai-media/ai-multimodal/.env.example +97 -97
- package/skills/ai-media/ai-multimodal/SKILL.md +357 -357
- package/skills/ai-media/ai-multimodal/references/audio-processing.md +373 -373
- package/skills/ai-media/ai-multimodal/references/image-generation.md +558 -558
- package/skills/ai-media/ai-multimodal/references/video-analysis.md +502 -502
- package/skills/ai-media/ai-multimodal/references/vision-understanding.md +483 -483
- package/skills/ai-media/ai-multimodal/scripts/document_converter.py +395 -395
- package/skills/ai-media/ai-multimodal/scripts/gemini_batch_process.py +480 -480
- package/skills/ai-media/ai-multimodal/scripts/media_optimizer.py +506 -506
- package/skills/ai-media/ai-multimodal/scripts/requirements.txt +26 -26
- package/skills/ai-media/ai-multimodal/scripts/tests/requirements.txt +20 -20
- package/skills/ai-media/ai-multimodal/scripts/tests/test_document_converter.py +299 -299
- package/skills/ai-media/ai-multimodal/scripts/tests/test_gemini_batch_process.py +362 -362
- package/skills/ai-media/ai-multimodal/scripts/tests/test_media_optimizer.py +373 -373
- package/skills/ai-media/media-processing/SKILL.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-encoding.md +358 -358
- package/skills/ai-media/media-processing/references/ffmpeg-filters.md +503 -503
- package/skills/ai-media/media-processing/references/ffmpeg-streaming.md +403 -403
- package/skills/ai-media/media-processing/references/format-compatibility.md +375 -375
- package/skills/ai-media/media-processing/references/imagemagick-batch.md +612 -612
- package/skills/ai-media/media-processing/references/imagemagick-editing.md +623 -623
- package/skills/ai-media/media-processing/scripts/batch_resize.py +342 -342
- package/skills/ai-media/media-processing/scripts/media_convert.py +311 -311
- package/skills/ai-media/media-processing/scripts/requirements.txt +24 -24
- package/skills/ai-media/media-processing/scripts/tests/requirements.txt +2 -2
- package/skills/ai-media/media-processing/scripts/tests/test_batch_resize.py +372 -372
- package/skills/ai-media/media-processing/scripts/tests/test_media_convert.py +259 -259
- package/skills/ai-media/media-processing/scripts/tests/test_video_optimize.py +397 -397
- package/skills/ai-media/media-processing/scripts/video_optimize.py +414 -414
- package/skills/ai-media/screenshot/LICENSE.txt +201 -201
- package/skills/ai-media/screenshot/SKILL.md +267 -267
- package/skills/ai-media/screenshot/agents/openai.yaml +6 -6
- package/skills/ai-media/screenshot/assets/screenshot-small.svg +5 -5
- package/skills/ai-media/screenshot/scripts/ensure_macos_permissions.sh +54 -54
- package/skills/ai-media/screenshot/scripts/macos_display_info.swift +22 -22
- package/skills/ai-media/screenshot/scripts/macos_permissions.swift +40 -40
- package/skills/ai-media/screenshot/scripts/macos_window_info.swift +126 -126
- package/skills/ai-media/screenshot/scripts/take_screenshot.ps1 +163 -163
- package/skills/ai-media/screenshot/scripts/take_screenshot.py +585 -585
- package/skills/ai-media/sora/LICENSE.txt +201 -201
- package/skills/ai-media/sora/SKILL.md +153 -153
- package/skills/ai-media/sora/agents/openai.yaml +6 -6
- package/skills/ai-media/sora/assets/sora-small.svg +4 -4
- package/skills/ai-media/sora/references/cinematic-shots.md +53 -53
- package/skills/ai-media/sora/references/cli.md +248 -248
- package/skills/ai-media/sora/references/codex-network.md +28 -28
- package/skills/ai-media/sora/references/prompting.md +137 -137
- package/skills/ai-media/sora/references/sample-prompts.md +95 -95
- package/skills/ai-media/sora/references/social-ads.md +42 -42
- package/skills/ai-media/sora/references/troubleshooting.md +58 -58
- package/skills/ai-media/sora/references/video-api.md +45 -45
- package/skills/ai-media/sora/scripts/sora.py +970 -970
- package/skills/design/aesthetic/SKILL.md +121 -121
- package/skills/design/aesthetic/assets/design-guideline-template.md +163 -163
- package/skills/design/aesthetic/assets/design-story-template.md +135 -135
- package/skills/design/aesthetic/references/design-principles.md +62 -62
- package/skills/design/aesthetic/references/design-resources.md +75 -75
- package/skills/design/aesthetic/references/micro-interactions.md +53 -53
- package/skills/design/aesthetic/references/storytelling-design.md +50 -50
- package/skills/design/figma/LICENSE.txt +202 -202
- package/skills/design/figma/SKILL.md +42 -42
- package/skills/design/figma/agents/openai.yaml +14 -14
- package/skills/design/figma/assets/figma-small.svg +3 -3
- package/skills/design/figma/assets/icon.svg +28 -28
- package/skills/design/figma/references/figma-mcp-config.md +35 -35
- package/skills/design/figma/references/figma-tools-and-prompts.md +34 -34
- package/skills/design/figma-implement-design/LICENSE.txt +202 -202
- package/skills/design/figma-implement-design/SKILL.md +264 -264
- package/skills/design/figma-implement-design/agents/openai.yaml +14 -14
- package/skills/design/figma-implement-design/assets/figma-small.svg +3 -3
- package/skills/design/figma-implement-design/assets/icon.svg +28 -28
- package/skills/design/frontend-design/SKILL.md +41 -41
- package/skills/design/frontend-design/references/animejs.md +395 -395
- package/skills/design/ui-styling/LICENSE.txt +201 -201
- package/skills/design/ui-styling/SKILL.md +321 -321
- package/skills/design/ui-styling/canvas-fonts/ArsenalSC-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BigShoulders-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Boldonse-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/BricolageGrotesque-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/CrimsonPro-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/DMMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/EricaOne-OFL.txt +94 -94
- package/skills/design/ui-styling/canvas-fonts/GeistMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Gloock-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/IBMPlexMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/InstrumentSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Italiana-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/JetBrainsMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Jura-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/LibreBaskerville-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Lora-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NationalPark-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Outfit-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PixelifySans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/PoiretOne-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/RedHatMono-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Silkscreen-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/SmoochSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/Tektur-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/WorkSans-OFL.txt +93 -93
- package/skills/design/ui-styling/canvas-fonts/YoungSerif-OFL.txt +93 -93
- package/skills/design/ui-styling/references/canvas-design-system.md +320 -320
- package/skills/design/ui-styling/references/shadcn-accessibility.md +471 -471
- package/skills/design/ui-styling/references/shadcn-components.md +424 -424
- package/skills/design/ui-styling/references/shadcn-theming.md +373 -373
- package/skills/design/ui-styling/references/tailwind-customization.md +483 -483
- package/skills/design/ui-styling/references/tailwind-responsive.md +382 -382
- package/skills/design/ui-styling/references/tailwind-utilities.md +455 -455
- package/skills/design/ui-styling/scripts/requirements.txt +17 -17
- package/skills/design/ui-styling/scripts/shadcn_add.py +292 -292
- package/skills/design/ui-styling/scripts/tailwind_config_gen.py +456 -456
- package/skills/design/ui-styling/scripts/tests/requirements.txt +3 -3
- package/skills/design/ui-styling/scripts/tests/test_shadcn_add.py +266 -266
- package/skills/design/ui-styling/scripts/tests/test_tailwind_config_gen.py +336 -336
- package/skills/engineering/aspnet-core/LICENSE.txt +201 -201
- package/skills/engineering/aspnet-core/SKILL.md +61 -61
- package/skills/engineering/aspnet-core/agents/openai.yaml +5 -5
- package/skills/engineering/aspnet-core/references/_sections.md +40 -40
- package/skills/engineering/aspnet-core/references/apis-minimal-and-controllers.md +81 -81
- package/skills/engineering/aspnet-core/references/data-state-and-services.md +69 -69
- package/skills/engineering/aspnet-core/references/program-and-pipeline.md +103 -103
- package/skills/engineering/aspnet-core/references/realtime-grpc-and-background-work.md +58 -58
- package/skills/engineering/aspnet-core/references/security-and-identity.md +75 -75
- package/skills/engineering/aspnet-core/references/source-map.md +43 -43
- package/skills/engineering/aspnet-core/references/stack-selection.md +63 -63
- package/skills/engineering/aspnet-core/references/testing-performance-and-operations.md +92 -92
- package/skills/engineering/aspnet-core/references/ui-blazor.md +53 -53
- package/skills/engineering/aspnet-core/references/ui-mvc.md +56 -56
- package/skills/engineering/aspnet-core/references/ui-razor-pages.md +55 -55
- package/skills/engineering/aspnet-core/references/versioning-and-upgrades.md +51 -51
- package/skills/engineering/backend-development/SKILL.md +95 -95
- package/skills/engineering/backend-development/references/backend-api-design.md +495 -495
- package/skills/engineering/backend-development/references/backend-architecture.md +454 -454
- package/skills/engineering/backend-development/references/backend-authentication.md +338 -338
- package/skills/engineering/backend-development/references/backend-code-quality.md +659 -659
- package/skills/engineering/backend-development/references/backend-debugging.md +904 -904
- package/skills/engineering/backend-development/references/backend-devops.md +494 -494
- package/skills/engineering/backend-development/references/backend-mindset.md +387 -387
- package/skills/engineering/backend-development/references/backend-performance.md +397 -397
- package/skills/engineering/backend-development/references/backend-security.md +290 -290
- package/skills/engineering/backend-development/references/backend-technologies.md +256 -256
- package/skills/engineering/backend-development/references/backend-testing.md +429 -429
- package/skills/engineering/better-auth/SKILL.md +204 -204
- package/skills/engineering/better-auth/references/advanced-features.md +553 -553
- package/skills/engineering/better-auth/references/database-integration.md +577 -577
- package/skills/engineering/better-auth/references/email-password-auth.md +416 -416
- package/skills/engineering/better-auth/references/oauth-providers.md +430 -430
- package/skills/engineering/better-auth/scripts/better_auth_init.py +521 -521
- package/skills/engineering/better-auth/scripts/requirements.txt +15 -15
- package/skills/engineering/better-auth/scripts/tests/test_better_auth_init.py +421 -421
- package/skills/engineering/code-review/SKILL.md +140 -140
- package/skills/engineering/code-review/references/code-review-reception.md +208 -208
- package/skills/engineering/code-review/references/requesting-code-review.md +104 -104
- package/skills/engineering/code-review/references/verification-before-completion.md +138 -138
- package/skills/engineering/context-engineering/SKILL.md +86 -86
- package/skills/engineering/context-engineering/references/context-compression.md +84 -84
- package/skills/engineering/context-engineering/references/context-degradation.md +93 -93
- package/skills/engineering/context-engineering/references/context-fundamentals.md +75 -75
- package/skills/engineering/context-engineering/references/context-optimization.md +82 -82
- package/skills/engineering/context-engineering/references/evaluation.md +89 -89
- package/skills/engineering/context-engineering/references/memory-systems.md +88 -88
- package/skills/engineering/context-engineering/references/multi-agent-patterns.md +90 -90
- package/skills/engineering/context-engineering/references/project-development.md +97 -97
- package/skills/engineering/context-engineering/references/tool-design.md +86 -86
- package/skills/engineering/context-engineering/scripts/compression_evaluator.py +329 -329
- package/skills/engineering/context-engineering/scripts/context_analyzer.py +294 -294
- package/skills/engineering/databases/SKILL.md +232 -232
- package/skills/engineering/databases/references/mongodb-aggregation.md +447 -447
- package/skills/engineering/databases/references/mongodb-atlas.md +465 -465
- package/skills/engineering/databases/references/mongodb-crud.md +408 -408
- package/skills/engineering/databases/references/mongodb-indexing.md +442 -442
- package/skills/engineering/databases/references/postgresql-administration.md +594 -594
- package/skills/engineering/databases/references/postgresql-performance.md +527 -527
- package/skills/engineering/databases/references/postgresql-psql-cli.md +467 -467
- package/skills/engineering/databases/references/postgresql-queries.md +475 -475
- package/skills/engineering/databases/scripts/db_backup.py +502 -502
- package/skills/engineering/databases/scripts/db_migrate.py +414 -414
- package/skills/engineering/databases/scripts/db_performance_check.py +444 -444
- package/skills/engineering/databases/scripts/requirements.txt +20 -20
- package/skills/engineering/databases/scripts/tests/requirements.txt +4 -4
- package/skills/engineering/databases/scripts/tests/test_db_backup.py +340 -340
- package/skills/engineering/databases/scripts/tests/test_db_migrate.py +277 -277
- package/skills/engineering/databases/scripts/tests/test_db_performance_check.py +370 -370
- package/skills/engineering/diagnose/SKILL.md +117 -117
- package/skills/engineering/diagnose/scripts/hitl-loop.template.sh +41 -41
- package/skills/engineering/docs-seeker/SKILL.md +207 -207
- package/skills/engineering/docs-seeker/WORKFLOWS.md +505 -505
- package/skills/engineering/docs-seeker/references/best-practices.md +632 -632
- package/skills/engineering/docs-seeker/references/documentation-sources.md +461 -461
- package/skills/engineering/docs-seeker/references/error-handling.md +621 -621
- package/skills/engineering/docs-seeker/references/limitations.md +821 -821
- package/skills/engineering/docs-seeker/references/performance.md +574 -574
- package/skills/engineering/docs-seeker/references/tool-selection.md +262 -262
- package/skills/engineering/frontend-development/SKILL.md +398 -398
- package/skills/engineering/frontend-development/resources/common-patterns.md +330 -330
- package/skills/engineering/frontend-development/resources/complete-examples.md +871 -871
- package/skills/engineering/frontend-development/resources/component-patterns.md +501 -501
- package/skills/engineering/frontend-development/resources/data-fetching.md +766 -766
- package/skills/engineering/frontend-development/resources/file-organization.md +501 -501
- package/skills/engineering/frontend-development/resources/loading-and-error-states.md +500 -500
- package/skills/engineering/frontend-development/resources/performance.md +405 -405
- package/skills/engineering/frontend-development/resources/routing-guide.md +363 -363
- package/skills/engineering/frontend-development/resources/styling-guide.md +427 -427
- package/skills/engineering/frontend-development/resources/typescript-standards.md +417 -417
- package/skills/engineering/improve-codebase-architecture/DEEPENING.md +37 -37
- package/skills/engineering/improve-codebase-architecture/INTERFACE-DESIGN.md +44 -44
- package/skills/engineering/improve-codebase-architecture/LANGUAGE.md +53 -53
- package/skills/engineering/improve-codebase-architecture/SKILL.md +71 -71
- package/skills/engineering/openai-docs/LICENSE.txt +201 -201
- package/skills/engineering/openai-docs/SKILL.md +69 -69
- package/skills/engineering/openai-docs/agents/openai.yaml +14 -14
- package/skills/engineering/openai-docs/assets/openai-small.svg +3 -3
- package/skills/engineering/openai-docs/references/gpt-5p4-prompting-guide.md +433 -433
- package/skills/engineering/openai-docs/references/latest-model.md +35 -35
- package/skills/engineering/openai-docs/references/upgrading-to-gpt-5p4.md +164 -164
- package/skills/engineering/playwright/LICENSE.txt +201 -201
- package/skills/engineering/playwright/NOTICE.txt +14 -14
- package/skills/engineering/playwright/SKILL.md +147 -147
- package/skills/engineering/playwright/agents/openai.yaml +6 -6
- package/skills/engineering/playwright/assets/playwright-small.svg +3 -3
- package/skills/engineering/playwright/references/cli.md +116 -116
- package/skills/engineering/playwright/references/workflows.md +95 -95
- package/skills/engineering/playwright/scripts/playwright_cli.sh +25 -25
- package/skills/engineering/playwright-interactive/LICENSE.txt +201 -201
- package/skills/engineering/playwright-interactive/NOTICE.txt +13 -13
- package/skills/engineering/playwright-interactive/SKILL.md +689 -689
- package/skills/engineering/playwright-interactive/agents/openai.yaml +6 -6
- package/skills/engineering/playwright-interactive/assets/playwright-small.svg +3 -3
- package/skills/engineering/render-deploy/LICENSE.txt +201 -201
- package/skills/engineering/render-deploy/SKILL.md +479 -479
- package/skills/engineering/render-deploy/agents/openai.yaml +14 -14
- package/skills/engineering/render-deploy/assets/docker.yaml +62 -62
- package/skills/engineering/render-deploy/assets/go-api.yaml +35 -35
- package/skills/engineering/render-deploy/assets/nextjs-postgres.yaml +35 -35
- package/skills/engineering/render-deploy/assets/node-express.yaml +25 -25
- package/skills/engineering/render-deploy/assets/python-django.yaml +89 -89
- package/skills/engineering/render-deploy/assets/render-small.svg +3 -3
- package/skills/engineering/render-deploy/assets/static-site.yaml +54 -54
- package/skills/engineering/render-deploy/references/blueprint-spec.md +718 -718
- package/skills/engineering/render-deploy/references/codebase-analysis.md +49 -49
- package/skills/engineering/render-deploy/references/configuration-guide.md +603 -603
- package/skills/engineering/render-deploy/references/deployment-details.md +224 -224
- package/skills/engineering/render-deploy/references/direct-creation.md +113 -113
- package/skills/engineering/render-deploy/references/error-patterns.md +13 -13
- package/skills/engineering/render-deploy/references/post-deploy-checks.md +36 -36
- package/skills/engineering/render-deploy/references/runtimes.md +473 -473
- package/skills/engineering/render-deploy/references/service-types.md +450 -450
- package/skills/engineering/render-deploy/references/troubleshooting-basics.md +36 -36
- package/skills/engineering/repomix/SKILL.md +215 -215
- package/skills/engineering/repomix/references/configuration.md +211 -211
- package/skills/engineering/repomix/references/usage-patterns.md +232 -232
- package/skills/engineering/repomix/scripts/README.md +179 -179
- package/skills/engineering/repomix/scripts/repomix_batch.py +455 -455
- package/skills/engineering/repomix/scripts/repos.example.json +15 -15
- package/skills/engineering/repomix/scripts/requirements.txt +15 -15
- package/skills/engineering/repomix/scripts/tests/test_repomix_batch.py +531 -531
- package/skills/engineering/setup-matt-pocock-skills/SKILL.md +121 -121
- package/skills/engineering/setup-matt-pocock-skills/domain.md +51 -51
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-github.md +22 -22
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-gitlab.md +23 -23
- package/skills/engineering/setup-matt-pocock-skills/issue-tracker-local.md +19 -19
- package/skills/engineering/setup-matt-pocock-skills/triage-labels.md +15 -15
- package/skills/engineering/shopify/README.md +66 -66
- package/skills/engineering/shopify/SKILL.md +319 -319
- package/skills/engineering/shopify/references/app-development.md +470 -470
- package/skills/engineering/shopify/references/extensions.md +493 -493
- package/skills/engineering/shopify/references/themes.md +498 -498
- package/skills/engineering/shopify/scripts/requirements.txt +19 -19
- package/skills/engineering/shopify/scripts/shopify_init.py +423 -423
- package/skills/engineering/shopify/scripts/tests/test_shopify_init.py +385 -385
- package/skills/engineering/tdd/SKILL.md +109 -109
- package/skills/engineering/tdd/deep-modules.md +33 -33
- package/skills/engineering/tdd/interface-design.md +31 -31
- package/skills/engineering/tdd/mocking.md +59 -59
- package/skills/engineering/tdd/refactoring.md +10 -10
- package/skills/engineering/tdd/tests.md +61 -61
- package/skills/engineering/to-issues/SKILL.md +81 -81
- package/skills/engineering/to-prd/SKILL.md +74 -74
- package/skills/engineering/triage/AGENT-BRIEF.md +168 -168
- package/skills/engineering/triage/OUT-OF-SCOPE.md +101 -101
- package/skills/engineering/triage/SKILL.md +103 -103
- package/skills/engineering/web-frameworks/SKILL.md +324 -324
- package/skills/engineering/web-frameworks/references/nextjs-app-router.md +465 -465
- package/skills/engineering/web-frameworks/references/nextjs-data-fetching.md +459 -459
- package/skills/engineering/web-frameworks/references/nextjs-optimization.md +511 -511
- package/skills/engineering/web-frameworks/references/nextjs-server-components.md +495 -495
- package/skills/engineering/web-frameworks/references/remix-icon-integration.md +603 -603
- package/skills/engineering/web-frameworks/references/turborepo-caching.md +551 -551
- package/skills/engineering/web-frameworks/references/turborepo-pipelines.md +517 -517
- package/skills/engineering/web-frameworks/references/turborepo-setup.md +542 -542
- package/skills/engineering/web-frameworks/scripts/nextjs_init.py +547 -547
- package/skills/engineering/web-frameworks/scripts/requirements.txt +16 -16
- package/skills/engineering/web-frameworks/scripts/tests/requirements.txt +3 -3
- package/skills/engineering/web-frameworks/scripts/tests/test_nextjs_init.py +319 -319
- package/skills/engineering/web-frameworks/scripts/tests/test_turborepo_migrate.py +374 -374
- package/skills/engineering/web-frameworks/scripts/turborepo_migrate.py +394 -394
- package/skills/engineering/write-a-skill/SKILL.md +117 -117
- package/skills/kilo-kit/SKILL.md +346 -346
- package/skills/kilo-kit/_template/SKILL.md +185 -185
- package/skills/kilo-kit/debugging/root-cause/SKILL.md +360 -360
- package/skills/kilo-kit/debugging/systematic/SKILL.md +339 -339
- package/skills/kilo-kit/debugging/verification/SKILL.md +424 -424
- package/skills/kilo-kit/development/backend/SKILL.md +540 -540
- package/skills/kilo-kit/development/security/SKILL.md +529 -529
- package/skills/kilo-kit/quality/code-review/SKILL.md +297 -297
- package/skills/kilo-kit/quality/testing/SKILL.md +540 -540
- package/skills/kilo-kit/references/output-formats.md +204 -204
- package/skills/kilo-kit/references/patterns.md +156 -156
- package/skills/kilo-kit/references/performance-benchmarks.md +90 -90
- package/skills/operations/chrome-devtools/SKILL.md +392 -392
- package/skills/operations/chrome-devtools/references/cdp-domains.md +694 -694
- package/skills/operations/chrome-devtools/references/performance-guide.md +940 -940
- package/skills/operations/chrome-devtools/references/puppeteer-reference.md +953 -953
- package/skills/operations/chrome-devtools/scripts/PERSISTENT-BROWSER.md +107 -107
- package/skills/operations/chrome-devtools/scripts/README.md +213 -213
- package/skills/operations/chrome-devtools/scripts/__tests__/selector.test.js +210 -210
- package/skills/operations/chrome-devtools/scripts/click.js +79 -79
- package/skills/operations/chrome-devtools/scripts/close-persistent.js +36 -36
- package/skills/operations/chrome-devtools/scripts/console.js +75 -75
- package/skills/operations/chrome-devtools/scripts/evaluate.js +49 -49
- package/skills/operations/chrome-devtools/scripts/fill.js +72 -72
- package/skills/operations/chrome-devtools/scripts/install-deps.sh +181 -181
- package/skills/operations/chrome-devtools/scripts/install.sh +83 -83
- package/skills/operations/chrome-devtools/scripts/launch-persistent.js +71 -71
- package/skills/operations/chrome-devtools/scripts/lib/browser.js +144 -144
- package/skills/operations/chrome-devtools/scripts/lib/selector.js +178 -178
- package/skills/operations/chrome-devtools/scripts/navigate.js +46 -46
- package/skills/operations/chrome-devtools/scripts/network.js +102 -102
- package/skills/operations/chrome-devtools/scripts/package-lock.json +1206 -1206
- package/skills/operations/chrome-devtools/scripts/package.json +15 -15
- package/skills/operations/chrome-devtools/scripts/performance.js +145 -145
- package/skills/operations/chrome-devtools/scripts/screenshot.js +180 -180
- package/skills/operations/chrome-devtools/scripts/snapshot.js +131 -131
- package/skills/operations/devops/.env.example +76 -76
- package/skills/operations/devops/SKILL.md +285 -285
- package/skills/operations/devops/references/browser-rendering.md +305 -305
- package/skills/operations/devops/references/cloudflare-d1-kv.md +123 -123
- package/skills/operations/devops/references/cloudflare-platform.md +271 -271
- package/skills/operations/devops/references/cloudflare-r2-storage.md +280 -280
- package/skills/operations/devops/references/cloudflare-workers-advanced.md +312 -312
- package/skills/operations/devops/references/cloudflare-workers-apis.md +309 -309
- package/skills/operations/devops/references/cloudflare-workers-basics.md +418 -418
- package/skills/operations/devops/references/docker-basics.md +297 -297
- package/skills/operations/devops/references/docker-compose.md +292 -292
- package/skills/operations/devops/references/gcloud-platform.md +297 -297
- package/skills/operations/devops/references/gcloud-services.md +304 -304
- package/skills/operations/devops/scripts/cloudflare_deploy.py +269 -269
- package/skills/operations/devops/scripts/docker_optimize.py +320 -320
- package/skills/operations/devops/scripts/requirements.txt +20 -20
- package/skills/operations/devops/scripts/tests/requirements.txt +3 -3
- package/skills/operations/devops/scripts/tests/test_cloudflare_deploy.py +285 -285
- package/skills/operations/devops/scripts/tests/test_docker_optimize.py +436 -436
- package/skills/operations/mcp-builder/LICENSE.txt +201 -201
- package/skills/operations/mcp-builder/SKILL.md +328 -328
- package/skills/operations/mcp-builder/reference/evaluation.md +601 -601
- package/skills/operations/mcp-builder/reference/mcp_best_practices.md +915 -915
- package/skills/operations/mcp-builder/reference/node_mcp_server.md +915 -915
- package/skills/operations/mcp-builder/reference/python_mcp_server.md +751 -751
- package/skills/operations/mcp-builder/scripts/connections.py +151 -151
- package/skills/operations/mcp-builder/scripts/evaluation.py +373 -373
- package/skills/operations/mcp-builder/scripts/example_evaluation.xml +22 -22
- package/skills/operations/mcp-builder/scripts/requirements.txt +2 -2
- package/skills/operations/mcp-management/README.md +219 -219
- package/skills/operations/mcp-management/SKILL.md +175 -175
- package/skills/operations/mcp-management/assets/tools.json +3043 -3043
- package/skills/operations/mcp-management/references/configuration.md +114 -114
- package/skills/operations/mcp-management/references/gemini-cli-integration.md +201 -201
- package/skills/operations/mcp-management/references/mcp-protocol.md +116 -116
- package/skills/operations/mcp-management/scripts/.env.example +10 -10
- package/skills/operations/mcp-management/scripts/cli.ts +155 -155
- package/skills/operations/mcp-management/scripts/dist/analyze-tools.js +70 -70
- package/skills/operations/mcp-management/scripts/dist/cli.js +131 -131
- package/skills/operations/mcp-management/scripts/dist/mcp-client.js +115 -115
- package/skills/operations/mcp-management/scripts/mcp-client.ts +163 -163
- package/skills/operations/mcp-management/scripts/package.json +18 -18
- package/skills/operations/mcp-management/scripts/tsconfig.json +15 -15
- package/skills/problem-solving/collision-zone-thinking/SKILL.md +62 -62
- package/skills/problem-solving/defense-in-depth/SKILL.md +130 -130
- package/skills/problem-solving/inversion-exercise/SKILL.md +58 -58
- package/skills/problem-solving/meta-pattern-recognition/SKILL.md +54 -54
- package/skills/problem-solving/root-cause-tracing/SKILL.md +177 -177
- package/skills/problem-solving/root-cause-tracing/find-polluter.sh +63 -63
- package/skills/problem-solving/scale-game/SKILL.md +63 -63
- package/skills/problem-solving/sequential-thinking/README.md +118 -118
- package/skills/problem-solving/sequential-thinking/SKILL.md +93 -93
- package/skills/problem-solving/sequential-thinking/references/advanced.md +122 -122
- package/skills/problem-solving/sequential-thinking/references/examples.md +274 -274
- package/skills/problem-solving/simplification-cascades/SKILL.md +76 -76
- package/skills/problem-solving/when-stuck/SKILL.md +88 -88
- package/skills/productivity/caveman/SKILL.md +49 -49
- package/skills/productivity/grill-me/SKILL.md +10 -10
- package/skills/productivity/grill-with-docs/ADR-FORMAT.md +47 -47
- package/skills/productivity/grill-with-docs/CONTEXT-FORMAT.md +77 -77
- package/skills/productivity/grill-with-docs/SKILL.md +88 -88
- package/skills/productivity/writing-skills/graphviz-conventions.dot +171 -171
- package/skills/productivity/zoom-out/SKILL.md +7 -7
- package/skills/writing-docs/doc/LICENSE.txt +201 -201
- package/skills/writing-docs/doc/SKILL.md +80 -80
- package/skills/writing-docs/doc/agents/openai.yaml +6 -6
- package/skills/writing-docs/doc/assets/doc-small.svg +3 -3
- package/skills/writing-docs/doc/scripts/render_docx.py +296 -296
- package/skills/writing-docs/docx/LICENSE.txt +30 -30
- package/skills/writing-docs/docx/SKILL.md +196 -196
- package/skills/writing-docs/docx/docx-js.md +349 -349
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/docx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/docx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/docx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/docx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/docx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/docx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/docx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/docx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/docx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/docx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/docx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/docx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/docx/ooxml.md +609 -609
- package/skills/writing-docs/docx/scripts/__init__.py +1 -1
- package/skills/writing-docs/docx/scripts/document.py +1276 -1276
- package/skills/writing-docs/docx/scripts/templates/comments.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtended.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsExtensible.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/commentsIds.xml +2 -2
- package/skills/writing-docs/docx/scripts/templates/people.xml +2 -2
- package/skills/writing-docs/docx/scripts/utilities.py +374 -374
- package/skills/writing-docs/mermaidjs-v11/SKILL.md +115 -115
- package/skills/writing-docs/mermaidjs-v11/references/cli-usage.md +228 -228
- package/skills/writing-docs/mermaidjs-v11/references/configuration.md +232 -232
- package/skills/writing-docs/mermaidjs-v11/references/diagram-types.md +315 -315
- package/skills/writing-docs/mermaidjs-v11/references/examples.md +344 -344
- package/skills/writing-docs/mermaidjs-v11/references/integration.md +310 -310
- package/skills/writing-docs/pdf/LICENSE.txt +30 -30
- package/skills/writing-docs/pdf/SKILL.md +294 -294
- package/skills/writing-docs/pdf/forms.md +205 -205
- package/skills/writing-docs/pdf/reference.md +611 -611
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes.py +70 -70
- package/skills/writing-docs/pdf/scripts/check_bounding_boxes_test.py +226 -226
- package/skills/writing-docs/pdf/scripts/check_fillable_fields.py +12 -12
- package/skills/writing-docs/pdf/scripts/convert_pdf_to_images.py +35 -35
- package/skills/writing-docs/pdf/scripts/create_validation_image.py +41 -41
- package/skills/writing-docs/pdf/scripts/extract_form_field_info.py +152 -152
- package/skills/writing-docs/pdf/scripts/fill_fillable_fields.py +114 -114
- package/skills/writing-docs/pdf/scripts/fill_pdf_form_with_annotations.py +107 -107
- package/skills/writing-docs/pptx/LICENSE.txt +30 -30
- package/skills/writing-docs/pptx/SKILL.md +483 -483
- package/skills/writing-docs/pptx/html2pptx.md +624 -624
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +1499 -1499
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +146 -146
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +1085 -1085
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +11 -11
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-main.xsd +3081 -3081
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +23 -23
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +185 -185
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +287 -287
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/pml.xsd +1676 -1676
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +28 -28
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +144 -144
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +174 -174
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +18 -18
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +59 -59
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +56 -56
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +195 -195
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-math.xsd +582 -582
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +25 -25
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/sml.xsd +4439 -4439
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-main.xsd +570 -570
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +509 -509
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +12 -12
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +108 -108
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +96 -96
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/wml.xsd +3646 -3646
- package/skills/writing-docs/pptx/ooxml/schemas/ISO-IEC29500-4_2016/xml.xsd +116 -116
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsd +42 -42
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-coreProperties.xsd +50 -50
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-digSig.xsd +49 -49
- package/skills/writing-docs/pptx/ooxml/schemas/ecma/fouth-edition/opc-relationships.xsd +33 -33
- package/skills/writing-docs/pptx/ooxml/schemas/mce/mc.xsd +75 -75
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2010.xsd +560 -560
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2012.xsd +67 -67
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-2018.xsd +14 -14
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cex-2018.xsd +20 -20
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-cid-2016.xsd +13 -13
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-sdtdatahash-2020.xsd +4 -4
- package/skills/writing-docs/pptx/ooxml/schemas/microsoft/wml-symex-2015.xsd +8 -8
- package/skills/writing-docs/pptx/ooxml/scripts/pack.py +159 -159
- package/skills/writing-docs/pptx/ooxml/scripts/unpack.py +29 -29
- package/skills/writing-docs/pptx/ooxml/scripts/validate.py +69 -69
- package/skills/writing-docs/pptx/ooxml/scripts/validation/__init__.py +15 -15
- package/skills/writing-docs/pptx/ooxml/scripts/validation/base.py +951 -951
- package/skills/writing-docs/pptx/ooxml/scripts/validation/docx.py +274 -274
- package/skills/writing-docs/pptx/ooxml/scripts/validation/pptx.py +315 -315
- package/skills/writing-docs/pptx/ooxml/scripts/validation/redlining.py +279 -279
- package/skills/writing-docs/pptx/ooxml.md +426 -426
- package/skills/writing-docs/pptx/scripts/html2pptx.js +978 -978
- package/skills/writing-docs/pptx/scripts/inventory.py +1020 -1020
- package/skills/writing-docs/pptx/scripts/rearrange.py +231 -231
- package/skills/writing-docs/pptx/scripts/replace.py +385 -385
- package/skills/writing-docs/pptx/scripts/thumbnail.py +450 -450
- package/skills/writing-docs/slides/LICENSE.txt +201 -201
- package/skills/writing-docs/slides/SKILL.md +71 -71
- package/skills/writing-docs/slides/agents/openai.yaml +6 -6
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/code.js +104 -104
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/image.js +333 -333
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/index.js +33 -33
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/latex.js +51 -51
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout.js +643 -643
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/layout_builders.js +358 -358
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/svg.js +36 -36
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/text.js +789 -789
- package/skills/writing-docs/slides/assets/pptxgenjs_helpers/util.js +24 -24
- package/skills/writing-docs/slides/assets/slides-small.svg +3 -3
- package/skills/writing-docs/slides/references/pptxgenjs-helpers.md +61 -61
- package/skills/writing-docs/slides/scripts/create_montage.py +300 -300
- package/skills/writing-docs/slides/scripts/detect_font.py +873 -873
- package/skills/writing-docs/slides/scripts/ensure_raster_image.py +202 -202
- package/skills/writing-docs/slides/scripts/render_slides.py +273 -273
- package/skills/writing-docs/slides/scripts/slides_test.py +201 -201
- package/skills/writing-docs/template-skill/SKILL.md +26 -26
- package/skills/writing-docs/xlsx/LICENSE.txt +30 -30
- package/skills/writing-docs/xlsx/SKILL.md +288 -288
- package/skills/writing-docs/xlsx/recalc.py +177 -177
- package/src/core/KILO_MASTER.md +448 -448
- package/src/tools/validate-skill.js +421 -421
|
@@ -1,290 +1,290 @@
|
|
|
1
|
-
# Backend Security
|
|
2
|
-
|
|
3
|
-
Security best practices, OWASP Top 10 mitigation, and modern security standards (2025).
|
|
4
|
-
|
|
5
|
-
## OWASP Top 10 (2025 RC1)
|
|
6
|
-
|
|
7
|
-
### New Entries (2025)
|
|
8
|
-
- **Supply Chain Failures** - Vulnerable dependencies, compromised packages
|
|
9
|
-
- **Mishandling of Exceptional Conditions** - Improper error handling exposing system info
|
|
10
|
-
|
|
11
|
-
### Top Vulnerabilities & Mitigation
|
|
12
|
-
|
|
13
|
-
#### 1. Broken Access Control
|
|
14
|
-
**Risk:** Users access unauthorized resources (28% of vulnerabilities)
|
|
15
|
-
|
|
16
|
-
**Mitigation:**
|
|
17
|
-
- Implement RBAC (Role-Based Access Control)
|
|
18
|
-
- Deny by default, explicitly allow
|
|
19
|
-
- Log access control failures
|
|
20
|
-
- Enforce authorization on backend (never client-side)
|
|
21
|
-
- Use JWT with proper claims validation
|
|
22
|
-
|
|
23
|
-
```typescript
|
|
24
|
-
// Good: Server-side authorization check
|
|
25
|
-
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
26
|
-
@Roles('admin')
|
|
27
|
-
async deleteUser(@Param('id') id: string) {
|
|
28
|
-
// Verify user can access this resource
|
|
29
|
-
return this.usersService.delete(id);
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
#### 2. Cryptographic Failures
|
|
34
|
-
**Risk:** Sensitive data exposure, weak encryption
|
|
35
|
-
|
|
36
|
-
**Mitigation:**
|
|
37
|
-
- Use Argon2id for password hashing (replaces bcrypt as of 2025)
|
|
38
|
-
- TLS 1.3 for data in transit
|
|
39
|
-
- Encrypt sensitive data at rest (AES-256)
|
|
40
|
-
- Use crypto.randomBytes() for tokens, not Math.random()
|
|
41
|
-
- Never store passwords in plain text
|
|
42
|
-
|
|
43
|
-
```python
|
|
44
|
-
# Good: Argon2id password hashing
|
|
45
|
-
from argon2 import PasswordHasher
|
|
46
|
-
|
|
47
|
-
ph = PasswordHasher()
|
|
48
|
-
hash = ph.hash("password123") # Auto-salted, memory-hard
|
|
49
|
-
ph.verify(hash, "password123") # Verify password
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
#### 3. Injection Attacks
|
|
53
|
-
**Risk:** SQL injection, NoSQL injection, command injection (6x increase 2020-2024)
|
|
54
|
-
|
|
55
|
-
**Mitigation (98% vulnerability reduction):**
|
|
56
|
-
- Use parameterized queries ALWAYS
|
|
57
|
-
- Input validation with allow-lists
|
|
58
|
-
- Escape special characters
|
|
59
|
-
- Use ORMs properly (avoid raw queries)
|
|
60
|
-
|
|
61
|
-
```typescript
|
|
62
|
-
// Bad: Vulnerable to SQL injection
|
|
63
|
-
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
|
64
|
-
|
|
65
|
-
// Good: Parameterized query
|
|
66
|
-
const query = 'SELECT * FROM users WHERE email = $1';
|
|
67
|
-
const result = await db.query(query, [email]);
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
#### 4. Insecure Design
|
|
71
|
-
**Risk:** Flawed architecture, missing security controls
|
|
72
|
-
|
|
73
|
-
**Mitigation:**
|
|
74
|
-
- Threat modeling during design phase
|
|
75
|
-
- Security requirements from start
|
|
76
|
-
- Principle of least privilege
|
|
77
|
-
- Defense in depth (multiple security layers)
|
|
78
|
-
|
|
79
|
-
#### 5. Security Misconfiguration
|
|
80
|
-
**Risk:** Default credentials, verbose errors, unnecessary features enabled
|
|
81
|
-
|
|
82
|
-
**Mitigation:**
|
|
83
|
-
- Remove default accounts
|
|
84
|
-
- Disable directory listing
|
|
85
|
-
- Use security headers (CSP, HSTS, X-Frame-Options)
|
|
86
|
-
- Minimize attack surface
|
|
87
|
-
- Regular security audits
|
|
88
|
-
|
|
89
|
-
```typescript
|
|
90
|
-
// Security headers middleware
|
|
91
|
-
app.use(helmet({
|
|
92
|
-
contentSecurityPolicy: {
|
|
93
|
-
directives: {
|
|
94
|
-
defaultSrc: ["'self'"],
|
|
95
|
-
scriptSrc: ["'self'", "'unsafe-inline'"],
|
|
96
|
-
},
|
|
97
|
-
},
|
|
98
|
-
hsts: {
|
|
99
|
-
maxAge: 31536000,
|
|
100
|
-
includeSubDomains: true,
|
|
101
|
-
},
|
|
102
|
-
}));
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
#### 6. Vulnerable Components
|
|
106
|
-
**Risk:** Outdated dependencies with known vulnerabilities
|
|
107
|
-
|
|
108
|
-
**Mitigation:**
|
|
109
|
-
- Regular dependency updates (npm audit, pip-audit)
|
|
110
|
-
- Use Dependabot/Renovate for automated updates
|
|
111
|
-
- Monitor CVE databases
|
|
112
|
-
- Software composition analysis (SCA) in CI/CD
|
|
113
|
-
- Lock file integrity checks
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
# Check for vulnerabilities
|
|
117
|
-
npm audit fix
|
|
118
|
-
pip-audit --fix
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
#### 7. Authentication Failures
|
|
122
|
-
**Risk:** Weak passwords, session hijacking, credential stuffing
|
|
123
|
-
|
|
124
|
-
**Mitigation:**
|
|
125
|
-
- MFA mandatory for admin accounts
|
|
126
|
-
- Rate limiting on login endpoints (10 attempts/minute)
|
|
127
|
-
- Strong password policies (12+ chars, complexity)
|
|
128
|
-
- Session timeout (15 mins idle, 8 hours absolute)
|
|
129
|
-
- FIDO2/WebAuthn for passwordless auth
|
|
130
|
-
|
|
131
|
-
#### 8. Software & Data Integrity Failures
|
|
132
|
-
**Risk:** CI/CD pipeline compromise, unsigned updates
|
|
133
|
-
|
|
134
|
-
**Mitigation:**
|
|
135
|
-
- Code signing for releases
|
|
136
|
-
- Verify integrity of packages (lock files)
|
|
137
|
-
- Secure CI/CD pipelines (immutable builds)
|
|
138
|
-
- Checksum verification
|
|
139
|
-
|
|
140
|
-
#### 9. Logging & Monitoring Failures
|
|
141
|
-
**Risk:** Breaches undetected, insufficient audit trail
|
|
142
|
-
|
|
143
|
-
**Mitigation:**
|
|
144
|
-
- Log authentication events (success/failure)
|
|
145
|
-
- Log access control failures
|
|
146
|
-
- Centralized logging (ELK Stack, Splunk)
|
|
147
|
-
- Alerting on suspicious patterns
|
|
148
|
-
- Log rotation and retention policies
|
|
149
|
-
|
|
150
|
-
#### 10. Server-Side Request Forgery (SSRF)
|
|
151
|
-
**Risk:** Server makes malicious requests to internal resources
|
|
152
|
-
|
|
153
|
-
**Mitigation:**
|
|
154
|
-
- Validate and sanitize URLs
|
|
155
|
-
- Allow-list for remote resources
|
|
156
|
-
- Network segmentation
|
|
157
|
-
- Disable unnecessary protocols (file://, gopher://)
|
|
158
|
-
|
|
159
|
-
## Input Validation (Prevents 70%+ Vulnerabilities)
|
|
160
|
-
|
|
161
|
-
### Validation Strategies
|
|
162
|
-
|
|
163
|
-
**1. Type Validation**
|
|
164
|
-
```typescript
|
|
165
|
-
// Use class-validator with NestJS
|
|
166
|
-
class CreateUserDto {
|
|
167
|
-
@IsEmail()
|
|
168
|
-
email: string;
|
|
169
|
-
|
|
170
|
-
@IsString()
|
|
171
|
-
@MinLength(12)
|
|
172
|
-
@Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/)
|
|
173
|
-
password: string;
|
|
174
|
-
|
|
175
|
-
@IsInt()
|
|
176
|
-
@Min(18)
|
|
177
|
-
age: number;
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**2. Sanitization**
|
|
182
|
-
```typescript
|
|
183
|
-
import DOMPurify from 'isomorphic-dompurify';
|
|
184
|
-
|
|
185
|
-
// Sanitize HTML input
|
|
186
|
-
const clean = DOMPurify.sanitize(userInput);
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
**3. Allow-lists (Preferred over Deny-lists)**
|
|
190
|
-
```typescript
|
|
191
|
-
// Good: Allow-list approach
|
|
192
|
-
const allowedFields = ['name', 'email', 'age'];
|
|
193
|
-
const sanitized = Object.keys(input)
|
|
194
|
-
.filter(key => allowedFields.includes(key))
|
|
195
|
-
.reduce((obj, key) => ({ ...obj, [key]: input[key] }), {});
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
## Rate Limiting
|
|
199
|
-
|
|
200
|
-
### Token Bucket Algorithm (Industry Standard)
|
|
201
|
-
|
|
202
|
-
```typescript
|
|
203
|
-
import rateLimit from 'express-rate-limit';
|
|
204
|
-
|
|
205
|
-
const limiter = rateLimit({
|
|
206
|
-
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
207
|
-
max: 100, // 100 requests per window
|
|
208
|
-
standardHeaders: true,
|
|
209
|
-
legacyHeaders: false,
|
|
210
|
-
message: 'Too many requests, please try again later',
|
|
211
|
-
});
|
|
212
|
-
|
|
213
|
-
app.use('/api/', limiter);
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
### API-Specific Limits
|
|
217
|
-
|
|
218
|
-
- **Authentication:** 10 attempts/15 min
|
|
219
|
-
- **Public APIs:** 100 requests/15 min
|
|
220
|
-
- **Authenticated APIs:** 1000 requests/15 min
|
|
221
|
-
- **Admin endpoints:** 50 requests/15 min
|
|
222
|
-
|
|
223
|
-
## Security Headers
|
|
224
|
-
|
|
225
|
-
```typescript
|
|
226
|
-
// Essential security headers (2025)
|
|
227
|
-
{
|
|
228
|
-
'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
|
|
229
|
-
'Content-Security-Policy': "default-src 'self'",
|
|
230
|
-
'X-Frame-Options': 'DENY',
|
|
231
|
-
'X-Content-Type-Options': 'nosniff',
|
|
232
|
-
'Referrer-Policy': 'strict-origin-when-cross-origin',
|
|
233
|
-
'Permissions-Policy': 'geolocation=(), microphone=()',
|
|
234
|
-
}
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
## Secrets Management
|
|
238
|
-
|
|
239
|
-
### Best Practices
|
|
240
|
-
|
|
241
|
-
1. **Never commit secrets** - Use .env files (gitignored)
|
|
242
|
-
2. **Environment-specific** - Different secrets per environment
|
|
243
|
-
3. **Rotation policy** - Rotate secrets every 90 days
|
|
244
|
-
4. **Encryption at rest** - Encrypt secrets in secret managers
|
|
245
|
-
5. **Least privilege** - Minimal permissions per secret
|
|
246
|
-
|
|
247
|
-
### Tools
|
|
248
|
-
|
|
249
|
-
- **HashiCorp Vault** - Multi-cloud, dynamic secrets
|
|
250
|
-
- **AWS Secrets Manager** - Managed service, auto-rotation
|
|
251
|
-
- **Azure Key Vault** - Integrated with Azure services
|
|
252
|
-
- **Pulumi ESC** - Unified secrets orchestration (2025 trend)
|
|
253
|
-
|
|
254
|
-
```typescript
|
|
255
|
-
// Good: Secrets from environment
|
|
256
|
-
const dbPassword = process.env.DB_PASSWORD;
|
|
257
|
-
if (!dbPassword) throw new Error('DB_PASSWORD not set');
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
## API Security Checklist
|
|
261
|
-
|
|
262
|
-
- [ ] Use HTTPS/TLS 1.3 only
|
|
263
|
-
- [ ] Implement OAuth 2.1 + JWT for authentication
|
|
264
|
-
- [ ] Rate limiting on all endpoints
|
|
265
|
-
- [ ] Input validation on all inputs
|
|
266
|
-
- [ ] Parameterized queries (prevent SQL injection)
|
|
267
|
-
- [ ] Security headers configured
|
|
268
|
-
- [ ] CORS properly configured (not `*` in production)
|
|
269
|
-
- [ ] API versioning implemented
|
|
270
|
-
- [ ] Error messages don't leak system info
|
|
271
|
-
- [ ] Logging authentication events
|
|
272
|
-
- [ ] MFA for admin accounts
|
|
273
|
-
- [ ] Regular security audits (quarterly)
|
|
274
|
-
|
|
275
|
-
## Common Security Pitfalls
|
|
276
|
-
|
|
277
|
-
1. **Client-side validation only** - Always validate on server
|
|
278
|
-
2. **Using Math.random() for tokens** - Use crypto.randomBytes()
|
|
279
|
-
3. **Storing passwords with bcrypt** - Use Argon2id (2025 standard)
|
|
280
|
-
4. **Trusting user input** - Validate and sanitize everything
|
|
281
|
-
5. **Weak CORS configuration** - Don't use `*` in production
|
|
282
|
-
6. **Insufficient logging** - Log all authentication/authorization events
|
|
283
|
-
7. **No rate limiting** - Implement on all public endpoints
|
|
284
|
-
|
|
285
|
-
## Resources
|
|
286
|
-
|
|
287
|
-
- **OWASP Top 10 (2025):** https://owasp.org/www-project-top-ten/
|
|
288
|
-
- **OWASP Cheat Sheets:** https://cheatsheetseries.owasp.org/
|
|
289
|
-
- **CWE Top 25:** https://cwe.mitre.org/top25/
|
|
290
|
-
- **NIST Guidelines:** https://www.nist.gov/cybersecurity
|
|
1
|
+
# Backend Security
|
|
2
|
+
|
|
3
|
+
Security best practices, OWASP Top 10 mitigation, and modern security standards (2025).
|
|
4
|
+
|
|
5
|
+
## OWASP Top 10 (2025 RC1)
|
|
6
|
+
|
|
7
|
+
### New Entries (2025)
|
|
8
|
+
- **Supply Chain Failures** - Vulnerable dependencies, compromised packages
|
|
9
|
+
- **Mishandling of Exceptional Conditions** - Improper error handling exposing system info
|
|
10
|
+
|
|
11
|
+
### Top Vulnerabilities & Mitigation
|
|
12
|
+
|
|
13
|
+
#### 1. Broken Access Control
|
|
14
|
+
**Risk:** Users access unauthorized resources (28% of vulnerabilities)
|
|
15
|
+
|
|
16
|
+
**Mitigation:**
|
|
17
|
+
- Implement RBAC (Role-Based Access Control)
|
|
18
|
+
- Deny by default, explicitly allow
|
|
19
|
+
- Log access control failures
|
|
20
|
+
- Enforce authorization on backend (never client-side)
|
|
21
|
+
- Use JWT with proper claims validation
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
// Good: Server-side authorization check
|
|
25
|
+
@UseGuards(JwtAuthGuard, RolesGuard)
|
|
26
|
+
@Roles('admin')
|
|
27
|
+
async deleteUser(@Param('id') id: string) {
|
|
28
|
+
// Verify user can access this resource
|
|
29
|
+
return this.usersService.delete(id);
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
#### 2. Cryptographic Failures
|
|
34
|
+
**Risk:** Sensitive data exposure, weak encryption
|
|
35
|
+
|
|
36
|
+
**Mitigation:**
|
|
37
|
+
- Use Argon2id for password hashing (replaces bcrypt as of 2025)
|
|
38
|
+
- TLS 1.3 for data in transit
|
|
39
|
+
- Encrypt sensitive data at rest (AES-256)
|
|
40
|
+
- Use crypto.randomBytes() for tokens, not Math.random()
|
|
41
|
+
- Never store passwords in plain text
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
# Good: Argon2id password hashing
|
|
45
|
+
from argon2 import PasswordHasher
|
|
46
|
+
|
|
47
|
+
ph = PasswordHasher()
|
|
48
|
+
hash = ph.hash("password123") # Auto-salted, memory-hard
|
|
49
|
+
ph.verify(hash, "password123") # Verify password
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### 3. Injection Attacks
|
|
53
|
+
**Risk:** SQL injection, NoSQL injection, command injection (6x increase 2020-2024)
|
|
54
|
+
|
|
55
|
+
**Mitigation (98% vulnerability reduction):**
|
|
56
|
+
- Use parameterized queries ALWAYS
|
|
57
|
+
- Input validation with allow-lists
|
|
58
|
+
- Escape special characters
|
|
59
|
+
- Use ORMs properly (avoid raw queries)
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
// Bad: Vulnerable to SQL injection
|
|
63
|
+
const query = `SELECT * FROM users WHERE email = '${email}'`;
|
|
64
|
+
|
|
65
|
+
// Good: Parameterized query
|
|
66
|
+
const query = 'SELECT * FROM users WHERE email = $1';
|
|
67
|
+
const result = await db.query(query, [email]);
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
#### 4. Insecure Design
|
|
71
|
+
**Risk:** Flawed architecture, missing security controls
|
|
72
|
+
|
|
73
|
+
**Mitigation:**
|
|
74
|
+
- Threat modeling during design phase
|
|
75
|
+
- Security requirements from start
|
|
76
|
+
- Principle of least privilege
|
|
77
|
+
- Defense in depth (multiple security layers)
|
|
78
|
+
|
|
79
|
+
#### 5. Security Misconfiguration
|
|
80
|
+
**Risk:** Default credentials, verbose errors, unnecessary features enabled
|
|
81
|
+
|
|
82
|
+
**Mitigation:**
|
|
83
|
+
- Remove default accounts
|
|
84
|
+
- Disable directory listing
|
|
85
|
+
- Use security headers (CSP, HSTS, X-Frame-Options)
|
|
86
|
+
- Minimize attack surface
|
|
87
|
+
- Regular security audits
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
// Security headers middleware
|
|
91
|
+
app.use(helmet({
|
|
92
|
+
contentSecurityPolicy: {
|
|
93
|
+
directives: {
|
|
94
|
+
defaultSrc: ["'self'"],
|
|
95
|
+
scriptSrc: ["'self'", "'unsafe-inline'"],
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
hsts: {
|
|
99
|
+
maxAge: 31536000,
|
|
100
|
+
includeSubDomains: true,
|
|
101
|
+
},
|
|
102
|
+
}));
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
#### 6. Vulnerable Components
|
|
106
|
+
**Risk:** Outdated dependencies with known vulnerabilities
|
|
107
|
+
|
|
108
|
+
**Mitigation:**
|
|
109
|
+
- Regular dependency updates (npm audit, pip-audit)
|
|
110
|
+
- Use Dependabot/Renovate for automated updates
|
|
111
|
+
- Monitor CVE databases
|
|
112
|
+
- Software composition analysis (SCA) in CI/CD
|
|
113
|
+
- Lock file integrity checks
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Check for vulnerabilities
|
|
117
|
+
npm audit fix
|
|
118
|
+
pip-audit --fix
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
#### 7. Authentication Failures
|
|
122
|
+
**Risk:** Weak passwords, session hijacking, credential stuffing
|
|
123
|
+
|
|
124
|
+
**Mitigation:**
|
|
125
|
+
- MFA mandatory for admin accounts
|
|
126
|
+
- Rate limiting on login endpoints (10 attempts/minute)
|
|
127
|
+
- Strong password policies (12+ chars, complexity)
|
|
128
|
+
- Session timeout (15 mins idle, 8 hours absolute)
|
|
129
|
+
- FIDO2/WebAuthn for passwordless auth
|
|
130
|
+
|
|
131
|
+
#### 8. Software & Data Integrity Failures
|
|
132
|
+
**Risk:** CI/CD pipeline compromise, unsigned updates
|
|
133
|
+
|
|
134
|
+
**Mitigation:**
|
|
135
|
+
- Code signing for releases
|
|
136
|
+
- Verify integrity of packages (lock files)
|
|
137
|
+
- Secure CI/CD pipelines (immutable builds)
|
|
138
|
+
- Checksum verification
|
|
139
|
+
|
|
140
|
+
#### 9. Logging & Monitoring Failures
|
|
141
|
+
**Risk:** Breaches undetected, insufficient audit trail
|
|
142
|
+
|
|
143
|
+
**Mitigation:**
|
|
144
|
+
- Log authentication events (success/failure)
|
|
145
|
+
- Log access control failures
|
|
146
|
+
- Centralized logging (ELK Stack, Splunk)
|
|
147
|
+
- Alerting on suspicious patterns
|
|
148
|
+
- Log rotation and retention policies
|
|
149
|
+
|
|
150
|
+
#### 10. Server-Side Request Forgery (SSRF)
|
|
151
|
+
**Risk:** Server makes malicious requests to internal resources
|
|
152
|
+
|
|
153
|
+
**Mitigation:**
|
|
154
|
+
- Validate and sanitize URLs
|
|
155
|
+
- Allow-list for remote resources
|
|
156
|
+
- Network segmentation
|
|
157
|
+
- Disable unnecessary protocols (file://, gopher://)
|
|
158
|
+
|
|
159
|
+
## Input Validation (Prevents 70%+ Vulnerabilities)
|
|
160
|
+
|
|
161
|
+
### Validation Strategies
|
|
162
|
+
|
|
163
|
+
**1. Type Validation**
|
|
164
|
+
```typescript
|
|
165
|
+
// Use class-validator with NestJS
|
|
166
|
+
class CreateUserDto {
|
|
167
|
+
@IsEmail()
|
|
168
|
+
email: string;
|
|
169
|
+
|
|
170
|
+
@IsString()
|
|
171
|
+
@MinLength(12)
|
|
172
|
+
@Matches(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)/)
|
|
173
|
+
password: string;
|
|
174
|
+
|
|
175
|
+
@IsInt()
|
|
176
|
+
@Min(18)
|
|
177
|
+
age: number;
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**2. Sanitization**
|
|
182
|
+
```typescript
|
|
183
|
+
import DOMPurify from 'isomorphic-dompurify';
|
|
184
|
+
|
|
185
|
+
// Sanitize HTML input
|
|
186
|
+
const clean = DOMPurify.sanitize(userInput);
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**3. Allow-lists (Preferred over Deny-lists)**
|
|
190
|
+
```typescript
|
|
191
|
+
// Good: Allow-list approach
|
|
192
|
+
const allowedFields = ['name', 'email', 'age'];
|
|
193
|
+
const sanitized = Object.keys(input)
|
|
194
|
+
.filter(key => allowedFields.includes(key))
|
|
195
|
+
.reduce((obj, key) => ({ ...obj, [key]: input[key] }), {});
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Rate Limiting
|
|
199
|
+
|
|
200
|
+
### Token Bucket Algorithm (Industry Standard)
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
import rateLimit from 'express-rate-limit';
|
|
204
|
+
|
|
205
|
+
const limiter = rateLimit({
|
|
206
|
+
windowMs: 15 * 60 * 1000, // 15 minutes
|
|
207
|
+
max: 100, // 100 requests per window
|
|
208
|
+
standardHeaders: true,
|
|
209
|
+
legacyHeaders: false,
|
|
210
|
+
message: 'Too many requests, please try again later',
|
|
211
|
+
});
|
|
212
|
+
|
|
213
|
+
app.use('/api/', limiter);
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### API-Specific Limits
|
|
217
|
+
|
|
218
|
+
- **Authentication:** 10 attempts/15 min
|
|
219
|
+
- **Public APIs:** 100 requests/15 min
|
|
220
|
+
- **Authenticated APIs:** 1000 requests/15 min
|
|
221
|
+
- **Admin endpoints:** 50 requests/15 min
|
|
222
|
+
|
|
223
|
+
## Security Headers
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
// Essential security headers (2025)
|
|
227
|
+
{
|
|
228
|
+
'Strict-Transport-Security': 'max-age=31536000; includeSubDomains',
|
|
229
|
+
'Content-Security-Policy': "default-src 'self'",
|
|
230
|
+
'X-Frame-Options': 'DENY',
|
|
231
|
+
'X-Content-Type-Options': 'nosniff',
|
|
232
|
+
'Referrer-Policy': 'strict-origin-when-cross-origin',
|
|
233
|
+
'Permissions-Policy': 'geolocation=(), microphone=()',
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Secrets Management
|
|
238
|
+
|
|
239
|
+
### Best Practices
|
|
240
|
+
|
|
241
|
+
1. **Never commit secrets** - Use .env files (gitignored)
|
|
242
|
+
2. **Environment-specific** - Different secrets per environment
|
|
243
|
+
3. **Rotation policy** - Rotate secrets every 90 days
|
|
244
|
+
4. **Encryption at rest** - Encrypt secrets in secret managers
|
|
245
|
+
5. **Least privilege** - Minimal permissions per secret
|
|
246
|
+
|
|
247
|
+
### Tools
|
|
248
|
+
|
|
249
|
+
- **HashiCorp Vault** - Multi-cloud, dynamic secrets
|
|
250
|
+
- **AWS Secrets Manager** - Managed service, auto-rotation
|
|
251
|
+
- **Azure Key Vault** - Integrated with Azure services
|
|
252
|
+
- **Pulumi ESC** - Unified secrets orchestration (2025 trend)
|
|
253
|
+
|
|
254
|
+
```typescript
|
|
255
|
+
// Good: Secrets from environment
|
|
256
|
+
const dbPassword = process.env.DB_PASSWORD;
|
|
257
|
+
if (!dbPassword) throw new Error('DB_PASSWORD not set');
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## API Security Checklist
|
|
261
|
+
|
|
262
|
+
- [ ] Use HTTPS/TLS 1.3 only
|
|
263
|
+
- [ ] Implement OAuth 2.1 + JWT for authentication
|
|
264
|
+
- [ ] Rate limiting on all endpoints
|
|
265
|
+
- [ ] Input validation on all inputs
|
|
266
|
+
- [ ] Parameterized queries (prevent SQL injection)
|
|
267
|
+
- [ ] Security headers configured
|
|
268
|
+
- [ ] CORS properly configured (not `*` in production)
|
|
269
|
+
- [ ] API versioning implemented
|
|
270
|
+
- [ ] Error messages don't leak system info
|
|
271
|
+
- [ ] Logging authentication events
|
|
272
|
+
- [ ] MFA for admin accounts
|
|
273
|
+
- [ ] Regular security audits (quarterly)
|
|
274
|
+
|
|
275
|
+
## Common Security Pitfalls
|
|
276
|
+
|
|
277
|
+
1. **Client-side validation only** - Always validate on server
|
|
278
|
+
2. **Using Math.random() for tokens** - Use crypto.randomBytes()
|
|
279
|
+
3. **Storing passwords with bcrypt** - Use Argon2id (2025 standard)
|
|
280
|
+
4. **Trusting user input** - Validate and sanitize everything
|
|
281
|
+
5. **Weak CORS configuration** - Don't use `*` in production
|
|
282
|
+
6. **Insufficient logging** - Log all authentication/authorization events
|
|
283
|
+
7. **No rate limiting** - Implement on all public endpoints
|
|
284
|
+
|
|
285
|
+
## Resources
|
|
286
|
+
|
|
287
|
+
- **OWASP Top 10 (2025):** https://owasp.org/www-project-top-ten/
|
|
288
|
+
- **OWASP Cheat Sheets:** https://cheatsheetseries.owasp.org/
|
|
289
|
+
- **CWE Top 25:** https://cwe.mitre.org/top25/
|
|
290
|
+
- **NIST Guidelines:** https://www.nist.gov/cybersecurity
|