thanh-kit 2.5.0 → 2.5.2
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/dist/index.js +20 -61
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/.ck.json +60 -0
- package/templates/.ckignore +27 -0
- package/templates/.mcp.json.example +23 -0
- package/templates/agents/brainstormer.md +18 -2
- package/templates/agents/code-reviewer.md +122 -142
- package/templates/agents/code-simplifier.md +50 -100
- package/templates/agents/debugger.md +27 -11
- package/templates/agents/docs-manager.md +100 -38
- package/templates/agents/fullstack-developer.md +15 -3
- package/templates/agents/git-manager.md +11 -386
- package/templates/agents/journal-writer.md +13 -8
- package/templates/agents/mcp-manager.md +21 -6
- package/templates/agents/planner.md +24 -8
- package/templates/agents/project-manager.md +17 -121
- package/templates/agents/researcher.md +22 -7
- package/templates/agents/tester.md +23 -7
- package/templates/agents/ui-ux-designer.md +23 -14
- package/templates/{commands → command-archive}/ask.md +5 -5
- package/templates/{commands → command-archive}/ck-help.md +18 -2
- package/templates/command-archive/docs/init.md +38 -0
- package/templates/command-archive/docs/summarize.md +22 -0
- package/templates/command-archive/docs/update.md +76 -0
- package/templates/command-archive/journal.md +18 -0
- package/templates/{commands → command-archive}/kanban.md +5 -7
- package/templates/{commands → command-archive}/plan/archive.md +2 -2
- package/templates/command-archive/plan/red-team.md +200 -0
- package/templates/command-archive/plan/validate.md +188 -0
- package/templates/command-archive/preview.md +283 -0
- package/templates/command-archive/review/codebase/parallel.md +122 -0
- package/templates/{commands → command-archive}/test/ui.md +3 -3
- package/templates/{commands → command-archive}/use-mcp.md +6 -2
- package/templates/command-archive/worktree.md +109 -0
- package/templates/hooks/__tests__/ck-config-utils.test.cjs +557 -0
- package/templates/hooks/__tests__/descriptive-name.test.cjs +292 -0
- package/templates/hooks/__tests__/dev-rules-reminder.test.cjs +336 -0
- package/templates/hooks/__tests__/integration/path-resolution.test.cjs +319 -0
- package/templates/hooks/__tests__/privacy-block.test.cjs +273 -0
- package/templates/hooks/__tests__/session-init.test.cjs +308 -0
- package/templates/hooks/__tests__/skill-dedup.test.cjs +527 -0
- package/templates/hooks/__tests__/subagent-init.test.cjs +622 -0
- package/templates/hooks/__tests__/task-completed-handler.test.cjs +246 -0
- package/templates/hooks/__tests__/team-context-inject.test.cjs +804 -0
- package/templates/hooks/__tests__/teammate-idle-handler.test.cjs +254 -0
- package/templates/hooks/cook-after-plan-reminder.cjs +72 -0
- package/templates/hooks/descriptive-name.cjs +47 -0
- package/templates/hooks/dev-rules-reminder.cjs +37 -214
- package/templates/hooks/lib/__tests__/README.md +240 -0
- package/templates/hooks/lib/__tests__/ck-config-utils.test.cjs +613 -1
- package/templates/hooks/lib/__tests__/context-builder.test.cjs +468 -0
- package/templates/hooks/lib/__tests__/project-detector.test.cjs +754 -0
- package/templates/hooks/lib/__tests__/statusline-integration.test.cjs +678 -0
- package/templates/hooks/lib/__tests__/statusline.test.cjs +689 -0
- package/templates/hooks/lib/ck-config-utils.cjs +146 -21
- package/templates/hooks/lib/colors.cjs +95 -0
- package/templates/hooks/lib/config-counter.cjs +103 -0
- package/templates/hooks/lib/context-builder.cjs +616 -0
- package/templates/hooks/lib/git-info-cache.cjs +143 -0
- package/templates/hooks/lib/hook-logger.cjs +92 -0
- package/templates/hooks/lib/privacy-checker.cjs +297 -0
- package/templates/hooks/lib/project-detector.cjs +474 -0
- package/templates/hooks/lib/scout-checker.cjs +263 -0
- package/templates/hooks/lib/transcript-parser.cjs +181 -0
- package/templates/hooks/notifications/discord_notify.sh +17 -4
- package/templates/hooks/notifications/docs/discord-hook-setup.md +26 -10
- package/templates/hooks/notifications/docs/telegram-hook-setup.md +24 -6
- package/templates/hooks/notifications/notify.cjs +0 -0
- package/templates/hooks/notifications/send-discord.sh +0 -0
- package/templates/hooks/notifications/telegram_notify.sh +17 -4
- package/templates/hooks/post-edit-simplify-reminder.cjs +156 -0
- package/templates/hooks/privacy-block.cjs +97 -188
- package/templates/hooks/scout-block/broad-pattern-detector.cjs +4 -6
- package/templates/hooks/scout-block/error-formatter.cjs +0 -0
- package/templates/hooks/scout-block/path-extractor.cjs +102 -13
- package/templates/hooks/scout-block/pattern-matcher.cjs +16 -1
- package/templates/hooks/scout-block/tests/{test-broad-pattern-detector.js → test-broad-pattern-detector.cjs} +1 -61
- package/templates/hooks/scout-block/tests/{test-build-command-allowlist.js → test-build-command-allowlist.cjs} +1 -1
- package/templates/hooks/scout-block/tests/{test-error-formatter.js → test-error-formatter.cjs} +1 -1
- package/templates/hooks/scout-block/tests/{test-full-flow-edge-cases.js → test-full-flow-edge-cases.cjs} +1 -1
- package/templates/hooks/scout-block/tests/{test-monorepo-scenarios.js → test-monorepo-scenarios.cjs} +1 -1
- package/templates/hooks/scout-block/tests/{test-path-extractor.js → test-path-extractor.cjs} +1 -1
- package/templates/hooks/scout-block/tests/{test-pattern-matcher.js → test-pattern-matcher.cjs} +1 -1
- package/templates/hooks/scout-block.cjs +100 -87
- package/templates/hooks/session-init.cjs +197 -330
- package/templates/hooks/skill-dedup.cjs +268 -0
- package/templates/hooks/subagent-init.cjs +75 -22
- package/templates/hooks/task-completed-handler.cjs +118 -0
- package/templates/hooks/team-context-inject.cjs +176 -0
- package/templates/hooks/teammate-idle-handler.cjs +121 -0
- package/templates/hooks/tests/scout-block/broad-pattern-detector.test.cjs +231 -0
- package/templates/hooks/tests/scout-block/fixtures/ckignore-custom.txt +6 -0
- package/templates/hooks/tests/scout-block/fixtures/ckignore-default.txt +13 -0
- package/templates/hooks/tests/scout-block/fixtures/ckignore-negation.txt +8 -0
- package/templates/hooks/tests/scout-block/path-extractor.test.cjs +527 -0
- package/templates/hooks/tests/scout-block/pattern-matcher.test.cjs +293 -0
- package/templates/hooks/tests/scout-block/scout-checker.test.cjs +741 -0
- package/templates/hooks/tests/{test-ckignore.js → test-ckignore.cjs} +0 -0
- package/templates/hooks/tests/{test-modularization-hook.js → test-modularization-hook.cjs} +0 -0
- package/templates/hooks/tests/{test-privacy-block.js → test-privacy-block.cjs} +1 -1
- package/templates/hooks/tests/test-scout-block.cjs +315 -0
- package/templates/hooks/usage-context-awareness.cjs +179 -0
- package/templates/metadata.json +104 -0
- package/templates/{workflows → rules}/development-rules.md +12 -53
- package/templates/rules/orchestration-protocol.md +43 -0
- package/templates/{workflows → rules}/primary-workflow.md +16 -4
- package/templates/rules/team-coordination-rules.md +90 -0
- package/templates/schemas/ck-config.schema.json +381 -0
- package/templates/scripts/README.md +94 -198
- package/templates/scripts/ck-help.py +19 -855
- package/templates/scripts/commands_data.yaml +3 -621
- package/templates/scripts/fix-shebang-permissions.sh +50 -0
- package/templates/scripts/generate_catalogs.py +37 -8
- package/templates/scripts/resolve_env.py +0 -0
- package/templates/scripts/scan_commands.py +14 -96
- package/templates/scripts/scan_skills.py +59 -19
- package/templates/scripts/set-active-plan.cjs +8 -3
- package/templates/scripts/skills_data.yaml +2 -596
- package/templates/scripts/test-ck-help.py +15 -0
- package/templates/scripts/test_ck_help.py +139 -0
- package/templates/scripts/test_ck_help_integration.py +72 -0
- package/templates/scripts/validate-docs.cjs +342 -0
- package/templates/scripts/win_compat.py +0 -0
- package/templates/scripts/worktree.cjs +4 -652
- package/templates/scripts/worktree.test.cjs +5 -330
- package/templates/settings.json +104 -239
- package/templates/skills/README.md +95 -255
- package/templates/skills/THIRD_PARTY_NOTICES.md +405 -0
- package/templates/skills/agent-browser/SKILL.md +294 -0
- package/templates/skills/agent-browser/references/.gitkeep +0 -0
- package/templates/skills/agent-browser/references/agent-browser-vs-chrome-devtools.md +112 -0
- package/templates/skills/agent-browser/references/browserbase-cloud-setup.md +161 -0
- package/templates/skills/ai-artist/SKILL.md +103 -56
- package/templates/skills/ai-artist/data/awesome-prompts.csv +3592 -0
- package/templates/skills/ai-artist/data/lighting.csv +19 -0
- package/templates/skills/ai-artist/data/nano-banana-templates.csv +17 -0
- package/templates/skills/ai-artist/data/platforms.csv +11 -0
- package/templates/skills/ai-artist/data/styles.csv +26 -0
- package/templates/skills/ai-artist/data/techniques.csv +19 -0
- package/templates/skills/ai-artist/data/use-cases.csv +16 -0
- package/templates/skills/ai-artist/references/awesome-nano-banana-pro-prompts.md +8575 -0
- package/templates/skills/ai-artist/references/nano-banana.md +78 -1
- package/templates/skills/ai-artist/references/validation-workflow.md +117 -0
- package/templates/skills/ai-artist/scripts/core.py +197 -0
- package/templates/skills/ai-artist/scripts/extract_prompts.py +102 -0
- package/templates/skills/ai-artist/scripts/generate.py +370 -0
- package/templates/skills/ai-artist/scripts/search.py +147 -0
- package/templates/skills/ai-multimodal/SKILL.md +4 -3
- package/templates/skills/ai-multimodal/scripts/check_setup.py +12 -2
- package/templates/skills/ai-multimodal/scripts/document_converter.py +0 -0
- package/templates/skills/ai-multimodal/scripts/gemini_batch_process.py +3 -2
- package/templates/skills/ai-multimodal/scripts/media_optimizer.py +0 -0
- package/templates/skills/ask/SKILL.md +58 -0
- package/templates/skills/backend-development/SKILL.md +3 -2
- package/templates/skills/better-auth/SKILL.md +3 -2
- package/templates/skills/better-auth/scripts/better_auth_init.py +3 -3
- package/templates/skills/bootstrap/SKILL.md +101 -0
- package/templates/skills/bootstrap/references/shared-phases.md +59 -0
- package/templates/skills/bootstrap/references/workflow-auto.md +52 -0
- package/templates/skills/bootstrap/references/workflow-fast.md +50 -0
- package/templates/skills/bootstrap/references/workflow-full.md +60 -0
- package/templates/skills/bootstrap/references/workflow-parallel.md +59 -0
- package/templates/{commands/brainstorm.md → skills/brainstorm/SKILL.md} +21 -18
- package/templates/skills/chrome-devtools/SKILL.md +221 -68
- package/templates/skills/chrome-devtools/scripts/README.md +18 -0
- package/templates/skills/chrome-devtools/scripts/__tests__/error-handling.test.js +102 -0
- package/templates/skills/chrome-devtools/scripts/aria-snapshot.js +2 -1
- package/templates/skills/chrome-devtools/scripts/click.js +2 -1
- package/templates/skills/chrome-devtools/scripts/connect-chrome.js +146 -0
- package/templates/skills/chrome-devtools/scripts/console.js +3 -1
- package/templates/skills/chrome-devtools/scripts/evaluate.js +6 -3
- package/templates/skills/chrome-devtools/scripts/fill.js +2 -1
- package/templates/skills/chrome-devtools/scripts/import-cookies.js +205 -0
- package/templates/skills/chrome-devtools/scripts/inject-auth.js +2 -1
- package/templates/skills/chrome-devtools/scripts/install-deps.sh +0 -0
- package/templates/skills/chrome-devtools/scripts/install.sh +0 -0
- package/templates/skills/chrome-devtools/scripts/lib/browser.js +60 -4
- package/templates/skills/chrome-devtools/scripts/navigate.js +86 -2
- package/templates/skills/chrome-devtools/scripts/network.js +3 -1
- package/templates/skills/chrome-devtools/scripts/performance.js +3 -1
- package/templates/skills/chrome-devtools/scripts/screenshot.js +2 -1
- package/templates/skills/chrome-devtools/scripts/select-ref.js +2 -1
- package/templates/skills/chrome-devtools/scripts/snapshot.js +2 -1
- package/templates/skills/chrome-devtools/scripts/ws-debug.js +44 -0
- package/templates/skills/chrome-devtools/scripts/ws-full-debug.js +107 -0
- package/templates/skills/ck-help/SKILL.md +102 -0
- package/templates/skills/ck-help/scripts/ck-help.py +1321 -0
- package/templates/skills/ck-help/scripts/commands_data.yaml +3 -0
- package/templates/skills/ck-help/scripts/skills_data.yaml +593 -0
- package/templates/skills/code-review/SKILL.md +97 -93
- package/templates/skills/code-review/references/code-review-reception.md +113 -209
- package/templates/skills/code-review/references/codebase-scan-workflow.md +29 -0
- package/templates/skills/code-review/references/edge-case-scouting.md +119 -0
- package/templates/skills/code-review/references/parallel-review-workflow.md +69 -0
- package/templates/skills/code-review/references/requesting-code-review.md +115 -104
- package/templates/skills/code-review/references/task-management-reviews.md +140 -0
- package/templates/skills/code-review/references/verification-before-completion.md +138 -138
- package/templates/skills/coding-level/SKILL.md +56 -0
- package/templates/skills/common/README.md +120 -0
- package/templates/skills/common/api_key_helper.py +411 -0
- package/templates/skills/common/api_key_rotator.py +248 -0
- package/templates/skills/context-engineering/SKILL.md +108 -0
- package/templates/skills/context-engineering/references/context-compression.md +84 -0
- package/templates/skills/context-engineering/references/context-degradation.md +93 -0
- package/templates/skills/context-engineering/references/context-fundamentals.md +75 -0
- package/templates/skills/context-engineering/references/context-optimization.md +82 -0
- package/templates/skills/context-engineering/references/evaluation.md +89 -0
- package/templates/skills/context-engineering/references/memory-systems.md +88 -0
- package/templates/skills/context-engineering/references/multi-agent-patterns.md +90 -0
- package/templates/skills/context-engineering/references/project-development.md +97 -0
- package/templates/skills/context-engineering/references/runtime-awareness.md +202 -0
- package/templates/skills/context-engineering/references/tool-design.md +86 -0
- package/templates/skills/context-engineering/scripts/compression_evaluator.py +349 -0
- package/templates/skills/context-engineering/scripts/context_analyzer.py +317 -0
- package/templates/skills/context-engineering/scripts/tests/test_edge_cases.py +246 -0
- package/templates/skills/cook/README.md +86 -0
- package/templates/skills/cook/SKILL.md +113 -0
- package/templates/skills/cook/references/intent-detection.md +101 -0
- package/templates/skills/cook/references/review-cycle.md +75 -0
- package/templates/skills/cook/references/subagent-patterns.md +75 -0
- package/templates/skills/cook/references/workflow-steps.md +172 -0
- package/templates/skills/copywriting/SKILL.md +94 -0
- package/templates/skills/copywriting/references/copy-formulas.md +150 -0
- package/templates/skills/copywriting/references/cta-patterns.md +168 -0
- package/templates/skills/copywriting/references/email-copy.md +193 -0
- package/templates/skills/copywriting/references/headline-templates.md +140 -0
- package/templates/skills/copywriting/references/landing-page-copy.md +175 -0
- package/templates/skills/copywriting/references/power-words.md +189 -0
- package/templates/skills/copywriting/references/social-media-copy.md +222 -0
- package/templates/skills/copywriting/references/workflow-cro.md +83 -0
- package/templates/skills/copywriting/references/workflow-enhance.md +32 -0
- package/templates/skills/copywriting/references/workflow-fast.md +29 -0
- package/templates/skills/copywriting/references/workflow-good.md +39 -0
- package/templates/skills/copywriting/references/writing-styles.md +247 -0
- package/templates/skills/copywriting/scripts/extract-writing-styles.py +308 -0
- package/templates/skills/copywriting/templates/copy-brief.md +49 -0
- package/templates/skills/databases/SKILL.md +7 -155
- package/templates/skills/databases/analytics.md +198 -0
- package/templates/skills/databases/db-design.md +188 -0
- package/templates/skills/databases/incremental-etl.md +213 -0
- package/templates/skills/databases/scripts/db_backup.py +0 -0
- package/templates/skills/databases/scripts/db_migrate.py +3 -2
- package/templates/skills/databases/scripts/db_performance_check.py +3 -2
- package/templates/skills/databases/stacks/bigquery.md +231 -0
- package/templates/skills/databases/stacks/d1_cloudflare.md +137 -0
- package/templates/skills/databases/stacks/mysql.md +216 -0
- package/templates/skills/databases/stacks/postgres.md +235 -0
- package/templates/skills/databases/stacks/sqlite.md +244 -0
- package/templates/skills/databases/transactional.md +176 -0
- package/templates/skills/debug/SKILL.md +121 -0
- package/templates/skills/debug/references/frontend-verification.md +103 -0
- package/templates/skills/debug/references/investigation-methodology.md +101 -0
- package/templates/skills/debug/references/log-and-ci-analysis.md +97 -0
- package/templates/skills/debug/references/performance-diagnostics.md +113 -0
- package/templates/skills/debug/references/reporting-standards.md +122 -0
- package/templates/skills/debug/references/task-management-debugging.md +155 -0
- package/templates/skills/devops/SKILL.md +65 -253
- package/templates/skills/devops/references/kubernetes-basics.md +99 -0
- package/templates/skills/devops/references/kubernetes-helm-advanced.md +75 -0
- package/templates/skills/devops/references/kubernetes-helm.md +81 -0
- package/templates/skills/devops/references/kubernetes-kubectl.md +74 -0
- package/templates/skills/devops/references/kubernetes-security-advanced.md +98 -0
- package/templates/skills/devops/references/kubernetes-security.md +95 -0
- package/templates/skills/devops/references/kubernetes-troubleshooting-advanced.md +74 -0
- package/templates/skills/devops/references/kubernetes-troubleshooting.md +49 -0
- package/templates/skills/devops/references/kubernetes-workflows-advanced.md +75 -0
- package/templates/skills/devops/references/kubernetes-workflows.md +78 -0
- package/templates/skills/devops/scripts/cloudflare_deploy.py +0 -0
- package/templates/skills/devops/scripts/docker_optimize.py +3 -2
- package/templates/skills/docs/SKILL.md +55 -0
- package/templates/skills/docs/references/init-workflow.md +32 -0
- package/templates/skills/docs/references/summarize-workflow.md +18 -0
- package/templates/skills/docs/references/update-workflow.md +59 -0
- package/templates/skills/docs-seeker/SKILL.md +3 -2
- package/templates/skills/docs-seeker/scripts/analyze-llms-txt.js +0 -0
- package/templates/skills/docs-seeker/scripts/detect-topic.js +0 -0
- package/templates/skills/docs-seeker/scripts/fetch-docs.js +0 -0
- package/templates/skills/docs-seeker/scripts/tests/run-tests.js +0 -0
- package/templates/skills/docs-seeker/scripts/tests/test-analyze-llms.js +0 -0
- package/templates/skills/docs-seeker/scripts/tests/test-detect-topic.js +0 -0
- package/templates/skills/docs-seeker/scripts/tests/test-fetch-docs.js +0 -0
- package/templates/skills/docs-seeker/scripts/utils/env-loader.js +0 -0
- package/templates/skills/document-skills/docx/SKILL.md +2 -2
- package/templates/skills/document-skills/docx/ooxml/scripts/pack.py +0 -0
- package/templates/skills/document-skills/docx/ooxml/scripts/unpack.py +0 -0
- package/templates/skills/document-skills/docx/ooxml/scripts/validate.py +0 -0
- package/templates/skills/document-skills/docx/scripts/document.py +0 -0
- package/templates/skills/document-skills/docx/scripts/utilities.py +0 -0
- package/templates/skills/document-skills/pdf/SKILL.md +2 -2
- package/templates/skills/document-skills/pptx/SKILL.md +2 -2
- package/templates/skills/document-skills/pptx/ooxml/scripts/pack.py +0 -0
- package/templates/skills/document-skills/pptx/ooxml/scripts/unpack.py +0 -0
- package/templates/skills/document-skills/pptx/ooxml/scripts/validate.py +0 -0
- package/templates/skills/document-skills/pptx/scripts/inventory.py +0 -0
- package/templates/skills/document-skills/pptx/scripts/rearrange.py +0 -0
- package/templates/skills/document-skills/pptx/scripts/replace.py +0 -0
- package/templates/skills/document-skills/pptx/scripts/thumbnail.py +0 -0
- package/templates/skills/document-skills/xlsx/SKILL.md +2 -2
- package/templates/skills/document-skills/xlsx/recalc.py +3 -2
- package/templates/skills/find-skills/SKILL.md +134 -0
- package/templates/skills/fix/SKILL.md +111 -0
- package/templates/skills/fix/references/complexity-assessment.md +72 -0
- package/templates/skills/fix/references/mode-selection.md +46 -0
- package/templates/skills/fix/references/parallel-exploration.md +100 -0
- package/templates/skills/fix/references/review-cycle.md +77 -0
- package/templates/skills/fix/references/skill-activation-matrix.md +78 -0
- package/templates/skills/fix/references/task-orchestration.md +103 -0
- package/templates/skills/fix/references/workflow-ci.md +28 -0
- package/templates/skills/fix/references/workflow-deep.md +122 -0
- package/templates/skills/fix/references/workflow-logs.md +72 -0
- package/templates/skills/fix/references/workflow-quick.md +59 -0
- package/templates/skills/fix/references/workflow-standard.md +111 -0
- package/templates/skills/fix/references/workflow-test.md +75 -0
- package/templates/skills/fix/references/workflow-types.md +33 -0
- package/templates/skills/fix/references/workflow-ui.md +75 -0
- package/templates/skills/frontend-design/SKILL.md +78 -91
- package/templates/skills/frontend-design/references/ai-multimodal-overview.md +6 -6
- package/templates/skills/frontend-design/references/animejs.md +395 -395
- package/templates/skills/frontend-design/references/asset-generation.md +4 -4
- package/templates/skills/frontend-design/references/visual-analysis-overview.md +1 -1
- package/templates/skills/frontend-design/references/workflow-3d.md +102 -0
- package/templates/skills/frontend-design/references/workflow-describe.md +87 -0
- package/templates/skills/frontend-design/references/workflow-immersive.md +87 -0
- package/templates/skills/frontend-design/references/workflow-quick.md +57 -0
- package/templates/skills/frontend-design/references/workflow-screenshot.md +63 -0
- package/templates/skills/frontend-design/references/workflow-video.md +74 -0
- package/templates/skills/frontend-development/SKILL.md +4 -3
- package/templates/skills/git/SKILL.md +114 -0
- package/templates/skills/git/references/branch-management.md +88 -0
- package/templates/skills/git/references/commit-standards.md +46 -0
- package/templates/skills/git/references/gh-cli-guide.md +109 -0
- package/templates/skills/git/references/safety-protocols.md +69 -0
- package/templates/skills/git/references/workflow-commit.md +58 -0
- package/templates/skills/git/references/workflow-merge.md +48 -0
- package/templates/skills/git/references/workflow-pr.md +58 -0
- package/templates/skills/git/references/workflow-push.md +52 -0
- package/templates/skills/gkg/SKILL.md +91 -0
- package/templates/skills/gkg/references/cli-commands.md +106 -0
- package/templates/skills/gkg/references/http-api.md +102 -0
- package/templates/skills/gkg/references/language-support.md +57 -0
- package/templates/skills/gkg/references/mcp-tools.md +99 -0
- package/templates/skills/google-adk-python/SKILL.md +91 -195
- package/templates/skills/google-adk-python/references/agent-types-and-architecture.md +128 -0
- package/templates/skills/google-adk-python/references/callbacks-plugins-observability.md +117 -0
- package/templates/skills/google-adk-python/references/deployment-cloud-run-vertex-gke.md +138 -0
- package/templates/skills/google-adk-python/references/evaluation-testing-cli.md +112 -0
- package/templates/skills/google-adk-python/references/multi-agent-and-a2a-protocol.md +145 -0
- package/templates/skills/google-adk-python/references/sessions-state-memory-artifacts.md +131 -0
- package/templates/skills/google-adk-python/references/tools-and-mcp-integration.md +146 -0
- package/templates/skills/install.ps1 +130 -26
- package/templates/skills/install.sh +383 -63
- package/templates/{commands/journal.md → skills/journal/SKILL.md} +5 -1
- package/templates/skills/kanban/SKILL.md +99 -0
- package/templates/skills/markdown-novel-viewer/SKILL.md +314 -0
- package/templates/skills/markdown-novel-viewer/assets/directory-browser.css +215 -0
- package/templates/skills/markdown-novel-viewer/assets/favicon.png +0 -0
- package/templates/skills/markdown-novel-viewer/assets/novel-theme.css +16 -0
- package/templates/skills/markdown-novel-viewer/assets/reader.js +838 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-base.css +54 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-components.css +180 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-content.css +176 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-header.css +217 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-mermaid.css +153 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-overlays.css +202 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-responsive.css +285 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-sidebar.css +359 -0
- package/templates/skills/markdown-novel-viewer/assets/styles/novel-theme-variables.css +56 -0
- package/templates/skills/markdown-novel-viewer/assets/template.html +149 -0
- package/templates/skills/markdown-novel-viewer/bun.lock +38 -0
- package/templates/skills/markdown-novel-viewer/package.json +15 -0
- package/templates/skills/markdown-novel-viewer/scripts/lib/http-server.cjs +434 -0
- package/templates/skills/markdown-novel-viewer/scripts/lib/markdown-renderer.cjs +335 -0
- package/templates/skills/markdown-novel-viewer/scripts/lib/plan-navigator.cjs +571 -0
- package/templates/skills/markdown-novel-viewer/scripts/lib/port-finder.cjs +48 -0
- package/templates/skills/markdown-novel-viewer/scripts/lib/process-mgr.cjs +150 -0
- package/templates/skills/markdown-novel-viewer/scripts/server.cjs +411 -0
- package/templates/skills/markdown-novel-viewer/scripts/tests/server.test.cjs +283 -0
- package/templates/skills/markdown-novel-viewer/tests/dashboard-assets.test.cjs +340 -0
- package/templates/skills/markdown-novel-viewer/tests/dashboard-renderer.test.cjs +404 -0
- package/templates/skills/markdown-novel-viewer/tests/http-server.test.cjs +271 -0
- package/templates/skills/markdown-novel-viewer/tests/run-tests.cjs +51 -0
- package/templates/skills/markdown-novel-viewer/tests/test-framework.cjs +154 -0
- package/templates/skills/markdown-novel-viewer/tests/verify-xss.cjs +90 -0
- package/templates/skills/mcp-builder/SKILL.md +3 -2
- package/templates/skills/mcp-builder/scripts/evaluation.py +9 -1
- package/templates/skills/mcp-management/SKILL.md +8 -7
- package/templates/skills/mcp-management/references/gemini-cli-integration.md +16 -10
- package/templates/skills/mcp-management/scripts/cli.ts +0 -0
- package/templates/skills/mcp-management/scripts/dist/analyze-tools.js +0 -0
- package/templates/skills/mcp-management/scripts/dist/cli.js +0 -0
- package/templates/skills/mcp-management/scripts/dist/mcp-client.js +0 -0
- package/templates/skills/mcp-management/scripts/mcp-client.ts +0 -0
- package/templates/skills/media-processing/SKILL.md +3 -2
- package/templates/skills/media-processing/scripts/batch-remove-background.sh +0 -0
- package/templates/skills/media-processing/scripts/batch_resize.py +0 -0
- package/templates/skills/media-processing/scripts/media_convert.py +0 -0
- package/templates/skills/media-processing/scripts/remove-background.sh +0 -0
- package/templates/skills/media-processing/scripts/remove-bg-node.js +0 -0
- package/templates/skills/media-processing/scripts/tests/test_batch_resize.py +0 -0
- package/templates/skills/media-processing/scripts/tests/test_media_convert.py +0 -0
- package/templates/skills/media-processing/scripts/tests/test_video_optimize.py +0 -0
- package/templates/skills/media-processing/scripts/video_optimize.py +0 -0
- package/templates/skills/mermaidjs-v11/SKILL.md +116 -0
- package/templates/skills/mermaidjs-v11/references/cli-usage.md +228 -0
- package/templates/skills/mermaidjs-v11/references/configuration.md +232 -0
- package/templates/skills/mermaidjs-v11/references/diagram-types.md +315 -0
- package/templates/skills/mermaidjs-v11/references/examples.md +344 -0
- package/templates/skills/mermaidjs-v11/references/integration.md +310 -0
- package/templates/skills/mintlify/SKILL.md +121 -0
- package/templates/skills/mintlify/references/ai-features-and-integrations-reference.md +756 -0
- package/templates/skills/mintlify/references/api-documentation-components-reference.md +873 -0
- package/templates/skills/mintlify/references/deployment-and-continuous-integration-reference.md +674 -0
- package/templates/skills/mintlify/references/docs-json-configuration-reference.md +724 -0
- package/templates/skills/mintlify/references/mdx-components-reference.md +551 -0
- package/templates/skills/mintlify/references/navigation-structure-and-organization-reference.md +775 -0
- package/templates/skills/mobile-development/SKILL.md +3 -2
- package/templates/skills/payment-integration/README.md +44 -12
- package/templates/skills/payment-integration/SKILL.md +82 -97
- package/templates/skills/payment-integration/references/creem/api.md +139 -0
- package/templates/skills/payment-integration/references/creem/checkouts.md +99 -0
- package/templates/skills/payment-integration/references/creem/licensing.md +136 -0
- package/templates/skills/payment-integration/references/creem/overview.md +65 -0
- package/templates/skills/payment-integration/references/creem/sdk.md +161 -0
- package/templates/skills/payment-integration/references/creem/subscriptions.md +129 -0
- package/templates/skills/payment-integration/references/creem/webhooks.md +120 -0
- package/templates/skills/payment-integration/references/implementation-workflows.md +43 -0
- package/templates/skills/payment-integration/references/multi-provider-order-management-patterns.md +821 -0
- package/templates/skills/payment-integration/references/paddle/api.md +116 -0
- package/templates/skills/payment-integration/references/paddle/best-practices.md +130 -0
- package/templates/skills/payment-integration/references/paddle/overview.md +57 -0
- package/templates/skills/payment-integration/references/paddle/paddle-js.md +106 -0
- package/templates/skills/payment-integration/references/paddle/sdk.md +131 -0
- package/templates/skills/payment-integration/references/paddle/subscriptions.md +118 -0
- package/templates/skills/payment-integration/references/paddle/webhooks.md +112 -0
- package/templates/skills/payment-integration/references/polar/best-practices.md +781 -361
- package/templates/skills/payment-integration/references/sepay/best-practices.md +870 -268
- package/templates/skills/payment-integration/references/stripe/stripe-best-practices.md +32 -0
- package/templates/skills/payment-integration/references/stripe/stripe-cli.md +148 -0
- package/templates/skills/payment-integration/references/stripe/stripe-js.md +116 -0
- package/templates/skills/payment-integration/references/stripe/stripe-sdks.md +84 -0
- package/templates/skills/payment-integration/references/stripe/stripe-upgrade.md +175 -0
- package/templates/skills/payment-integration/scripts/checkout-helper.js +0 -0
- package/templates/skills/payment-integration/scripts/polar-webhook-verify.js +0 -0
- package/templates/skills/payment-integration/scripts/sepay-webhook-verify.js +0 -0
- package/templates/skills/payment-integration/scripts/test-scripts.js +0 -0
- package/templates/skills/plan/SKILL.md +137 -0
- package/templates/skills/plan/references/archive-workflow.md +53 -0
- package/templates/skills/{planning → plan}/references/codebase-understanding.md +1 -1
- package/templates/skills/{planning → plan}/references/output-standards.md +15 -1
- package/templates/skills/{planning → plan}/references/plan-organization.md +12 -19
- package/templates/skills/plan/references/red-team-personas.md +69 -0
- package/templates/skills/plan/references/red-team-workflow.md +77 -0
- package/templates/skills/{planning → plan}/references/research-phase.md +2 -2
- package/templates/skills/plan/references/task-management.md +132 -0
- package/templates/skills/plan/references/validate-question-framework.md +80 -0
- package/templates/skills/plan/references/validate-workflow.md +65 -0
- package/templates/skills/plan/references/workflow-modes.md +145 -0
- package/templates/skills/plans-kanban/SKILL.md +167 -0
- package/templates/skills/plans-kanban/assets/dashboard-template.html +119 -0
- package/templates/skills/plans-kanban/assets/dashboard.css +1594 -0
- package/templates/skills/plans-kanban/assets/dashboard.js +596 -0
- package/templates/skills/plans-kanban/assets/favicon.png +0 -0
- package/templates/skills/plans-kanban/package.json +13 -0
- package/templates/skills/plans-kanban/scripts/lib/dashboard-renderer.cjs +884 -0
- package/templates/skills/plans-kanban/scripts/lib/http-server.cjs +310 -0
- package/templates/skills/plans-kanban/scripts/lib/plan-metadata-extractor.cjs +489 -0
- package/templates/skills/plans-kanban/scripts/lib/plan-parser.cjs +175 -0
- package/templates/skills/plans-kanban/scripts/lib/plan-scanner.cjs +272 -0
- package/templates/skills/plans-kanban/scripts/lib/port-finder.cjs +48 -0
- package/templates/skills/plans-kanban/scripts/lib/process-mgr.cjs +128 -0
- package/templates/skills/plans-kanban/scripts/server.cjs +260 -0
- package/templates/skills/preview/SKILL.md +75 -0
- package/templates/skills/preview/references/generation-modes.md +95 -0
- package/templates/skills/preview/references/view-mode.md +42 -0
- package/templates/skills/problem-solving/SKILL.md +3 -2
- package/templates/skills/project-management/SKILL.md +122 -0
- package/templates/skills/project-management/references/documentation-triggers.md +60 -0
- package/templates/skills/project-management/references/hydration-workflow.md +85 -0
- package/templates/skills/project-management/references/progress-tracking.md +96 -0
- package/templates/skills/project-management/references/reporting-patterns.md +94 -0
- package/templates/skills/project-management/references/task-operations.md +85 -0
- package/templates/skills/react-best-practices/AGENTS.md +2249 -0
- package/templates/skills/react-best-practices/README.md +123 -0
- package/templates/skills/react-best-practices/SKILL.md +122 -0
- package/templates/skills/react-best-practices/metadata.json +15 -0
- package/templates/skills/react-best-practices/rules/_sections.md +46 -0
- package/templates/skills/react-best-practices/rules/_template.md +28 -0
- package/templates/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/templates/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/templates/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/templates/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/templates/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/templates/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/templates/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/skills/react-best-practices/rules/server-cache-react.md +26 -0
- package/templates/skills/react-best-practices/rules/server-parallel-fetching.md +79 -0
- package/templates/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/templates/skills/remotion/SKILL.md +44 -0
- package/templates/skills/remotion/rules/3d.md +86 -0
- package/templates/skills/remotion/rules/animations.md +29 -0
- package/templates/skills/remotion/rules/assets/charts-bar-chart.tsx +173 -0
- package/templates/skills/remotion/rules/assets/text-animations-typewriter.tsx +100 -0
- package/templates/skills/remotion/rules/assets/text-animations-word-highlight.tsx +108 -0
- package/templates/skills/remotion/rules/assets.md +78 -0
- package/templates/skills/remotion/rules/audio.md +172 -0
- package/templates/skills/remotion/rules/calculate-metadata.md +104 -0
- package/templates/skills/remotion/rules/can-decode.md +75 -0
- package/templates/skills/remotion/rules/charts.md +58 -0
- package/templates/skills/remotion/rules/compositions.md +146 -0
- package/templates/skills/remotion/rules/display-captions.md +126 -0
- package/templates/skills/remotion/rules/extract-frames.md +229 -0
- package/templates/skills/remotion/rules/fonts.md +152 -0
- package/templates/skills/remotion/rules/get-audio-duration.md +58 -0
- package/templates/skills/remotion/rules/get-video-dimensions.md +68 -0
- package/templates/skills/remotion/rules/get-video-duration.md +58 -0
- package/templates/skills/remotion/rules/gifs.md +138 -0
- package/templates/skills/remotion/rules/images.md +130 -0
- package/templates/skills/remotion/rules/import-srt-captions.md +67 -0
- package/templates/skills/remotion/rules/lottie.md +68 -0
- package/templates/skills/remotion/rules/measuring-dom-nodes.md +35 -0
- package/templates/skills/remotion/rules/measuring-text.md +143 -0
- package/templates/skills/remotion/rules/sequencing.md +106 -0
- package/templates/skills/remotion/rules/tailwind.md +11 -0
- package/templates/skills/remotion/rules/text-animations.md +20 -0
- package/templates/skills/remotion/rules/timing.md +179 -0
- package/templates/skills/remotion/rules/transcribe-captions.md +19 -0
- package/templates/skills/remotion/rules/transitions.md +122 -0
- package/templates/skills/remotion/rules/trimming.md +53 -0
- package/templates/skills/remotion/rules/videos.md +171 -0
- package/templates/skills/repomix/SKILL.md +3 -2
- package/templates/skills/repomix/scripts/repomix_batch.py +0 -0
- package/templates/skills/research/SKILL.md +9 -6
- package/templates/skills/scout/SKILL.md +89 -0
- package/templates/skills/scout/references/external-scouting.md +140 -0
- package/templates/skills/scout/references/internal-scouting.md +119 -0
- package/templates/skills/scout/references/task-management-scouting.md +125 -0
- package/templates/skills/sequential-thinking/SKILL.md +3 -2
- package/templates/skills/sequential-thinking/scripts/format-thought.js +0 -0
- package/templates/skills/sequential-thinking/scripts/process-thought.js +0 -0
- package/templates/skills/shader/SKILL.md +113 -0
- package/templates/skills/shader/references/glsl-cellular-voronoi-worley-noise-patterns.md +142 -0
- package/templates/skills/shader/references/glsl-colors-rgb-hsb-gradients-mixing-color-spaces.md +143 -0
- package/templates/skills/shader/references/glsl-fbm-fractional-brownian-motion-turbulence-octaves.md +146 -0
- package/templates/skills/shader/references/glsl-fundamentals-data-types-vectors-precision-coordinates.md +104 -0
- package/templates/skills/shader/references/glsl-noise-random-perlin-simplex-cellular-voronoi.md +115 -0
- package/templates/skills/shader/references/glsl-pattern-symmetry-truchet-domain-warping.md +134 -0
- package/templates/skills/shader/references/glsl-patterns-tiling-fract-matrices-transformations.md +133 -0
- package/templates/skills/shader/references/glsl-procedural-textures-clouds-marble-wood-terrain.md +144 -0
- package/templates/skills/shader/references/glsl-shader-builtin-functions-complete-api-reference.md +112 -0
- package/templates/skills/shader/references/glsl-shapes-polygon-star-polar-sdf-combinations.md +124 -0
- package/templates/skills/shader/references/glsl-shapes-sdf-circles-rectangles-polar-distance-fields.md +106 -0
- package/templates/skills/shader/references/glsl-shaping-functions-step-smoothstep-curves-interpolation.md +141 -0
- package/templates/skills/shopify/SKILL.md +3 -2
- package/templates/skills/shopify/scripts/shopify_init.py +5 -5
- package/templates/skills/skill-creator/SKILL.md +91 -238
- package/templates/skills/skill-creator/references/benchmark-optimization-guide.md +86 -0
- package/templates/skills/skill-creator/references/distribution-guide.md +79 -0
- package/templates/skills/skill-creator/references/mcp-skills-integration.md +71 -0
- package/templates/skills/skill-creator/references/metadata-quality-criteria.md +76 -0
- package/templates/skills/skill-creator/references/plugin-marketplace-hosting.md +104 -0
- package/templates/skills/skill-creator/references/plugin-marketplace-overview.md +89 -0
- package/templates/skills/skill-creator/references/plugin-marketplace-schema.md +93 -0
- package/templates/skills/skill-creator/references/plugin-marketplace-sources.md +103 -0
- package/templates/skills/skill-creator/references/plugin-marketplace-troubleshooting.md +76 -0
- package/templates/skills/skill-creator/references/script-quality-criteria.md +106 -0
- package/templates/skills/skill-creator/references/skill-anatomy-and-requirements.md +76 -0
- package/templates/skills/skill-creator/references/skill-creation-workflow.md +95 -0
- package/templates/skills/skill-creator/references/skill-design-patterns.md +75 -0
- package/templates/skills/skill-creator/references/skillmark-benchmark-criteria.md +102 -0
- package/templates/skills/skill-creator/references/structure-organization-criteria.md +114 -0
- package/templates/skills/skill-creator/references/testing-and-iteration.md +78 -0
- package/templates/skills/skill-creator/references/token-efficiency-criteria.md +74 -0
- package/templates/skills/skill-creator/references/troubleshooting-guide.md +80 -0
- package/templates/skills/skill-creator/references/validation-checklist.md +83 -0
- package/templates/skills/skill-creator/references/writing-effective-instructions.md +88 -0
- package/templates/skills/skill-creator/references/yaml-frontmatter-reference.md +91 -0
- package/templates/skills/skill-creator/scripts/debug.zip +0 -0
- package/templates/skills/skill-creator/scripts/encoding_utils.py +36 -0
- package/templates/skills/skill-creator/scripts/init_skill.py +9 -4
- package/templates/skills/skill-creator/scripts/package_skill.py +5 -0
- package/templates/skills/skill-creator/scripts/quick_validate.py +6 -2
- package/templates/skills/tanstack/SKILL.md +141 -0
- package/templates/skills/tanstack/references/tanstack-ai.md +97 -0
- package/templates/skills/tanstack/references/tanstack-form.md +125 -0
- package/templates/skills/tanstack/references/tanstack-start.md +100 -0
- package/templates/skills/team/SKILL.md +285 -0
- package/templates/skills/team/references/agent-teams-controls-and-modes.md +107 -0
- package/templates/skills/team/references/agent-teams-examples-and-best-practices.md +182 -0
- package/templates/skills/team/references/agent-teams-official-docs.md +175 -0
- package/templates/skills/template-skill/SKILL.md +1 -1
- package/templates/skills/test/SKILL.md +109 -0
- package/templates/skills/test/references/report-format.md +58 -0
- package/templates/skills/test/references/test-execution-workflow.md +103 -0
- package/templates/skills/test/references/ui-testing-workflow.md +65 -0
- package/templates/skills/threejs/SKILL.md +106 -53
- package/templates/skills/threejs/data/api-reference.csv +61 -0
- package/templates/skills/threejs/data/categories.csv +14 -0
- package/templates/skills/threejs/data/examples-all.csv +557 -0
- package/templates/skills/threejs/data/use-cases.csv +21 -0
- package/templates/skills/threejs/references/00-fundamentals.md +487 -0
- package/templates/skills/threejs/references/11-materials-advanced.md +1 -1
- package/templates/skills/threejs/references/11-materials.md +519 -0
- package/templates/skills/threejs/references/17-shader.md +641 -0
- package/templates/skills/threejs/references/18-geometry.md +547 -0
- package/templates/skills/threejs/scripts/core.py +236 -0
- package/templates/skills/threejs/scripts/extract_examples.py +688 -0
- package/templates/skills/threejs/scripts/generate_csv_from_json.py +135 -0
- package/templates/skills/threejs/scripts/search.py +77 -0
- package/templates/skills/ui-styling/SKILL.md +3 -2
- package/templates/skills/ui-styling/scripts/shadcn_add.py +0 -0
- package/templates/skills/ui-styling/scripts/tailwind_config_gen.py +1 -1
- package/templates/skills/ui-ux-pro-max/SKILL.md +69 -32
- package/templates/skills/ui-ux-pro-max/data/charts.csv +25 -25
- package/templates/skills/ui-ux-pro-max/data/colors.csv +96 -96
- package/templates/skills/ui-ux-pro-max/data/landing.csv +30 -30
- package/templates/skills/ui-ux-pro-max/data/products.csv +96 -96
- package/templates/skills/ui-ux-pro-max/data/prompts.csv +20 -20
- package/templates/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -53
- package/templates/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -56
- package/templates/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -53
- package/templates/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -52
- package/templates/skills/ui-ux-pro-max/data/stacks/react.csv +54 -54
- package/templates/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -54
- package/templates/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -51
- package/templates/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -50
- package/templates/skills/ui-ux-pro-max/data/styles.csv +58 -58
- package/templates/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/templates/skills/ui-ux-pro-max/data/ux-guidelines.csv +99 -99
- package/templates/skills/ui-ux-pro-max/scripts/design_system.py +494 -0
- package/templates/skills/ui-ux-pro-max/scripts/search.py +84 -61
- package/templates/skills/use-mcp/SKILL.md +42 -0
- package/templates/skills/watzup/SKILL.md +12 -0
- package/templates/skills/web-design-guidelines/SKILL.md +36 -0
- package/templates/skills/web-frameworks/SKILL.md +4 -3
- package/templates/skills/web-frameworks/scripts/nextjs_init.py +13 -13
- package/templates/skills/web-frameworks/scripts/turborepo_migrate.py +0 -0
- package/templates/skills/web-testing/SKILL.md +97 -0
- package/templates/skills/web-testing/references/accessibility-testing.md +84 -0
- package/templates/skills/web-testing/references/api-testing.md +78 -0
- package/templates/skills/web-testing/references/ci-cd-testing-workflows.md +121 -0
- package/templates/skills/web-testing/references/component-testing.md +94 -0
- package/templates/skills/web-testing/references/contract-testing.md +146 -0
- package/templates/skills/web-testing/references/cross-browser-checklist.md +72 -0
- package/templates/skills/web-testing/references/database-testing.md +139 -0
- package/templates/skills/web-testing/references/e2e-testing-playwright.md +119 -0
- package/templates/skills/web-testing/references/functional-testing-checklist.md +88 -0
- package/templates/skills/web-testing/references/interactive-testing-patterns.md +89 -0
- package/templates/skills/web-testing/references/load-testing-k6.md +93 -0
- package/templates/skills/web-testing/references/mobile-gesture-testing.md +85 -0
- package/templates/skills/web-testing/references/performance-core-web-vitals.md +124 -0
- package/templates/skills/web-testing/references/playwright-component-testing.md +115 -0
- package/templates/skills/web-testing/references/pre-release-checklist.md +75 -0
- package/templates/skills/web-testing/references/security-checklists.md +81 -0
- package/templates/skills/web-testing/references/security-testing-overview.md +92 -0
- package/templates/skills/web-testing/references/shadow-dom-testing.md +70 -0
- package/templates/skills/web-testing/references/test-data-management.md +131 -0
- package/templates/skills/web-testing/references/test-flakiness-mitigation.md +86 -0
- package/templates/skills/web-testing/references/testing-pyramid-strategy.md +76 -0
- package/templates/skills/web-testing/references/unit-integration-testing.md +138 -0
- package/templates/skills/web-testing/references/visual-regression.md +92 -0
- package/templates/skills/web-testing/references/vulnerability-payloads.md +93 -0
- package/templates/skills/web-testing/scripts/analyze-test-results.js +280 -0
- package/templates/skills/web-testing/scripts/init-playwright.js +233 -0
- package/templates/skills/worktree/SKILL.md +96 -0
- package/templates/skills/worktree/scripts/worktree.cjs +916 -0
- package/templates/skills/worktree/scripts/worktree.test.cjs +792 -0
- package/templates/statusline.cjs +477 -244
- package/templates/statusline.ps1 +0 -1
- package/templates/statusline.sh +0 -1
- package/templates/agents/README.md +0 -172
- package/templates/agents/copywriter.md +0 -113
- package/templates/agents/database-admin.md +0 -97
- package/templates/agents/scout-external.md +0 -146
- package/templates/agents/scout.md +0 -260
- package/templates/commands/README.md +0 -251
- package/templates/commands/bootstrap/auto/fast.md +0 -111
- package/templates/commands/bootstrap/auto/parallel.md +0 -66
- package/templates/commands/bootstrap/auto.md +0 -115
- package/templates/commands/bootstrap.md +0 -137
- package/templates/commands/build.md +0 -39
- package/templates/commands/checkpoint.md +0 -156
- package/templates/commands/code/auto.md +0 -170
- package/templates/commands/code/no-test.md +0 -158
- package/templates/commands/code/parallel.md +0 -55
- package/templates/commands/code-simplifier.md +0 -71
- package/templates/commands/code.md +0 -176
- package/templates/commands/compact.md +0 -57
- package/templates/commands/content/cro.md +0 -43
- package/templates/commands/content/enhance.md +0 -14
- package/templates/commands/content/fast.md +0 -13
- package/templates/commands/content/good.md +0 -16
- package/templates/commands/context.md +0 -48
- package/templates/commands/cook/auto/fast.md +0 -26
- package/templates/commands/cook/auto/parallel.md +0 -49
- package/templates/commands/cook/auto.md +0 -15
- package/templates/commands/cook/fast.md +0 -47
- package/templates/commands/cook/hard.md +0 -80
- package/templates/commands/cook/parallel.md +0 -90
- package/templates/commands/cook.md +0 -105
- package/templates/commands/create-feature.md +0 -48
- package/templates/commands/db-migrate.md +0 -52
- package/templates/commands/debug.md +0 -13
- package/templates/commands/design/3d.md +0 -83
- package/templates/commands/design/describe.md +0 -23
- package/templates/commands/design/fast.md +0 -31
- package/templates/commands/design/good.md +0 -35
- package/templates/commands/design/screenshot.md +0 -34
- package/templates/commands/design/video.md +0 -34
- package/templates/commands/docs/init.md +0 -39
- package/templates/commands/docs/summarize.md +0 -31
- package/templates/commands/docs/update.md +0 -57
- package/templates/commands/feature.md +0 -62
- package/templates/commands/fix/ci.md +0 -17
- package/templates/commands/fix/fast.md +0 -19
- package/templates/commands/fix/hard.md +0 -39
- package/templates/commands/fix/logs.md +0 -26
- package/templates/commands/fix/parallel.md +0 -54
- package/templates/commands/fix/test.md +0 -20
- package/templates/commands/fix/types.md +0 -9
- package/templates/commands/fix/ui.md +0 -48
- package/templates/commands/fix-issue.md +0 -177
- package/templates/commands/fix.md +0 -43
- package/templates/commands/generate-dto.md +0 -67
- package/templates/commands/git/cm.md +0 -5
- package/templates/commands/git/cp.md +0 -4
- package/templates/commands/git/merge.md +0 -40
- package/templates/commands/git/pr.md +0 -48
- package/templates/commands/integrate/polar.md +0 -28
- package/templates/commands/integrate/sepay.md +0 -28
- package/templates/commands/investigate.md +0 -324
- package/templates/commands/lint.md +0 -47
- package/templates/commands/migration.md +0 -111
- package/templates/commands/performance.md +0 -110
- package/templates/commands/plan/ci.md +0 -33
- package/templates/commands/plan/cro.md +0 -69
- package/templates/commands/plan/fast.md +0 -86
- package/templates/commands/plan/hard.md +0 -103
- package/templates/commands/plan/parallel.md +0 -152
- package/templates/commands/plan/preview.md +0 -40
- package/templates/commands/plan/two.md +0 -52
- package/templates/commands/plan/validate.md +0 -132
- package/templates/commands/plan.md +0 -36
- package/templates/commands/pr.md +0 -49
- package/templates/commands/preview.md +0 -87
- package/templates/commands/release-notes.md +0 -144
- package/templates/commands/review/post-task.md +0 -157
- package/templates/commands/review-changes.md +0 -46
- package/templates/commands/review.md +0 -56
- package/templates/commands/scout/ext.md +0 -35
- package/templates/commands/scout.md +0 -283
- package/templates/commands/security.md +0 -119
- package/templates/commands/skill/add.md +0 -36
- package/templates/commands/skill/create.md +0 -29
- package/templates/commands/skill/fix-logs.md +0 -22
- package/templates/commands/skill/optimize/auto.md +0 -25
- package/templates/commands/skill/optimize.md +0 -34
- package/templates/commands/skill/plan.md +0 -45
- package/templates/commands/worktree.md +0 -126
- package/templates/hooks/.python-cache.json +0 -1
- package/templates/hooks/README.md +0 -246
- package/templates/hooks/backend-csharp-context.cjs +0 -223
- package/templates/hooks/design-system-context.cjs +0 -185
- package/templates/hooks/frontend-typescript-context.cjs +0 -233
- package/templates/hooks/lib/ck-paths.cjs +0 -110
- package/templates/hooks/lib/context-tracker.cjs +0 -335
- package/templates/hooks/notify-waiting.js +0 -117
- package/templates/hooks/post-edit-prettier.cjs +0 -189
- package/templates/hooks/post-task-review.cjs +0 -142
- package/templates/hooks/scss-styling-context.cjs +0 -213
- package/templates/hooks/session-end.cjs +0 -35
- package/templates/hooks/tests/test-context-tracker.cjs +0 -454
- package/templates/hooks/tests/test-scout-block.js +0 -163
- package/templates/hooks/workflow-router.cjs +0 -326
- package/templates/hooks/write-compact-marker.cjs +0 -159
- package/templates/memory/session-log.md +0 -186
- package/templates/router/README.md +0 -294
- package/templates/router/agents-guide.md +0 -38
- package/templates/router/commands-guide.md +0 -122
- package/templates/router/decision-flow.md +0 -92
- package/templates/router/skills-guide.md +0 -127
- package/templates/router/workflows-guide.md +0 -68
- package/templates/scripts/__pycache__/win_compat.cpython-312.pyc +0 -0
- package/templates/scripts/plan-preview.cjs +0 -921
- package/templates/skills/arch-cross-service-integration/SKILL.md +0 -48
- package/templates/skills/arch-performance-optimization/SKILL.md +0 -306
- package/templates/skills/arch-security-review/SKILL.md +0 -344
- package/templates/skills/branch-comparison/SKILL.md +0 -150
- package/templates/skills/bug-diagnosis/SKILL.md +0 -309
- package/templates/skills/claude-code/references/advanced-features.md +0 -399
- package/templates/skills/claude-code/references/agent-skills.md +0 -399
- package/templates/skills/claude-code/references/api-reference.md +0 -498
- package/templates/skills/claude-code/references/best-practices.md +0 -447
- package/templates/skills/claude-code/references/cicd-integration.md +0 -428
- package/templates/skills/claude-code/references/common-workflows.md +0 -119
- package/templates/skills/claude-code/references/configuration.md +0 -480
- package/templates/skills/claude-code/references/enterprise-features.md +0 -472
- package/templates/skills/claude-code/references/getting-started.md +0 -252
- package/templates/skills/claude-code/references/hooks-and-plugins.md +0 -444
- package/templates/skills/claude-code/references/hooks-comprehensive.md +0 -622
- package/templates/skills/claude-code/references/ide-integration.md +0 -316
- package/templates/skills/claude-code/references/mcp-integration.md +0 -386
- package/templates/skills/claude-code/references/slash-commands.md +0 -489
- package/templates/skills/claude-code/references/troubleshooting.md +0 -456
- package/templates/skills/claude-code/skill.md +0 -60
- package/templates/skills/debugging/SKILL.md +0 -84
- package/templates/skills/developer-growth-analysis/SKILL.md +0 -322
- package/templates/skills/documentation/SKILL.md +0 -134
- package/templates/skills/domain-name-brainstormer/SKILL.md +0 -212
- package/templates/skills/dual-pass-review/SKILL.md +0 -249
- package/templates/skills/feature-docs/SKILL.md +0 -294
- package/templates/skills/feature-implementation/SKILL.md +0 -262
- package/templates/skills/feature-investigation/SKILL.md +0 -346
- package/templates/skills/frontend-design-pro/SKILL.md +0 -58
- package/templates/skills/package-upgrade/SKILL.md +0 -189
- package/templates/skills/plan-analysis/SKILL.md +0 -191
- package/templates/skills/planning/SKILL.md +0 -115
- package/templates/skills/planning-with-files/SKILL.md +0 -160
- package/templates/skills/planning-with-files/examples.md +0 -202
- package/templates/skills/planning-with-files/reference.md +0 -110
- package/templates/skills/project-index/SKILL.md +0 -97
- package/templates/skills/project-index/scripts/scan-structure.js +0 -417
- package/templates/skills/project-index/scripts/scan_structure.py +0 -450
- package/templates/skills/readme-improvement/SKILL.md +0 -177
- package/templates/skills/skill-share/SKILL.md +0 -80
- package/templates/skills/tasks-code-review/SKILL.md +0 -298
- package/templates/skills/tasks-documentation/SKILL.md +0 -328
- package/templates/skills/tasks-spec-update/SKILL.md +0 -318
- package/templates/skills/tasks-test-generation/SKILL.md +0 -433
- package/templates/skills/test-generation/SKILL.md +0 -203
- package/templates/skills/webapp-testing/LICENSE.txt +0 -202
- package/templates/skills/webapp-testing/SKILL.md +0 -96
- package/templates/skills/webapp-testing/examples/console_logging.py +0 -35
- package/templates/skills/webapp-testing/examples/element_discovery.py +0 -40
- package/templates/skills/webapp-testing/examples/static_html_automation.py +0 -33
- package/templates/skills/webapp-testing/scripts/with_server.py +0 -106
- package/templates/workflows/README.md +0 -241
- package/templates/workflows/orchestration-protocol.md +0 -16
- /package/templates/{commands → command-archive}/coding-level.md +0 -0
- /package/templates/{commands → command-archive}/review/codebase.md +0 -0
- /package/templates/{commands → command-archive}/test.md +0 -0
- /package/templates/{commands → command-archive}/watzup.md +0 -0
- /package/templates/hooks/scout-block/vendor/{ignore.js → ignore.cjs} +0 -0
- /package/templates/{workflows → rules}/documentation-management.md +0 -0
- /package/templates/skills/{debugging → debug}/references/defense-in-depth.md +0 -0
- /package/templates/skills/{debugging → debug}/references/root-cause-tracing.md +0 -0
- /package/templates/skills/{debugging → debug}/references/systematic-debugging.md +0 -0
- /package/templates/skills/{debugging → debug}/references/verification.md +0 -0
- /package/templates/skills/{debugging → debug}/scripts/find-polluter.sh +0 -0
- /package/templates/skills/{debugging → debug}/scripts/find-polluter.test.md +0 -0
- /package/templates/skills/{planning → plan}/references/solution-design.md +0 -0
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cross-service-integration
|
|
3
|
-
description: Quick decision guide for cross-service communication patterns. For implementation details, use the backend-message-bus skill.
|
|
4
|
-
allowed-tools: Read, Grep, Glob
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Cross-Service Integration Decision Guide
|
|
8
|
-
|
|
9
|
-
> **For implementation details, activate the `backend-message-bus` skill.**
|
|
10
|
-
|
|
11
|
-
## Quick Decision Matrix
|
|
12
|
-
|
|
13
|
-
| Scenario | Pattern | Skill to Use |
|
|
14
|
-
|----------|---------|--------------|
|
|
15
|
-
| Sync entity data to other services | Entity Event Bus | `backend-message-bus` |
|
|
16
|
-
| Need real-time data, no local copy | Direct API Call | N/A (simple HttpClient) |
|
|
17
|
-
| Initial data population | Full Sync Job | `backend-background-job` |
|
|
18
|
-
| Cross-service database access | :x: NEVER DO THIS | - |
|
|
19
|
-
|
|
20
|
-
## When to Use Message Bus
|
|
21
|
-
|
|
22
|
-
✅ **Use Entity Event Bus when:**
|
|
23
|
-
- Source service owns the data
|
|
24
|
-
- Target services need local copies
|
|
25
|
-
- Eventual consistency is acceptable
|
|
26
|
-
- Decoupling is important
|
|
27
|
-
|
|
28
|
-
❌ **Don't use when:**
|
|
29
|
-
- You need real-time, up-to-the-second data
|
|
30
|
-
- Data is only needed occasionally (use API call)
|
|
31
|
-
- You're accessing data within the same service
|
|
32
|
-
|
|
33
|
-
## Key Principles
|
|
34
|
-
|
|
35
|
-
1. **Data Ownership**: Each entity has ONE owner service
|
|
36
|
-
2. **No Shared DB**: Never access another service's database directly
|
|
37
|
-
3. **Event-Driven**: Use message bus for cross-service sync
|
|
38
|
-
4. **Idempotency**: Consumers must handle duplicate messages
|
|
39
|
-
|
|
40
|
-
## Implementation Steps
|
|
41
|
-
|
|
42
|
-
1. Define data ownership
|
|
43
|
-
2. Create message in `YourApp.Shared/CrossServiceMessages/`
|
|
44
|
-
3. Implement producer in source service
|
|
45
|
-
4. Implement consumer in target service
|
|
46
|
-
5. Handle dependencies and race conditions
|
|
47
|
-
|
|
48
|
-
→ **See `backend-message-bus` skill for detailed patterns and code examples.**
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: performance-optimization
|
|
3
|
-
description: Use when analyzing and improving performance for database queries, API endpoints, or frontend rendering.
|
|
4
|
-
allowed-tools: Read, Write, Edit, Grep, Glob, Bash, Task
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Performance Optimization Workflow
|
|
8
|
-
|
|
9
|
-
## When to Use This Skill
|
|
10
|
-
- Slow API response times
|
|
11
|
-
- Database query optimization
|
|
12
|
-
- Frontend rendering issues
|
|
13
|
-
- Memory usage concerns
|
|
14
|
-
- Scalability planning
|
|
15
|
-
|
|
16
|
-
## Pre-Flight Checklist
|
|
17
|
-
- [ ] Identify performance bottleneck
|
|
18
|
-
- [ ] Gather baseline metrics
|
|
19
|
-
- [ ] Determine acceptable thresholds
|
|
20
|
-
- [ ] Plan measurement approach
|
|
21
|
-
|
|
22
|
-
## Performance Analysis Framework
|
|
23
|
-
|
|
24
|
-
### Step 1: Identify Bottleneck Type
|
|
25
|
-
|
|
26
|
-
```
|
|
27
|
-
Performance Issue
|
|
28
|
-
├── Database (slow queries, N+1)
|
|
29
|
-
├── API (serialization, processing)
|
|
30
|
-
├── Network (payload size, latency)
|
|
31
|
-
└── Frontend (rendering, bundle size)
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### Step 2: Measure Baseline
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# API response time
|
|
38
|
-
curl -w "@curl-format.txt" -o /dev/null -s "http://api/endpoint"
|
|
39
|
-
|
|
40
|
-
# Database query time (SQL Server)
|
|
41
|
-
SET STATISTICS TIME ON;
|
|
42
|
-
SELECT * FROM Table WHERE ...;
|
|
43
|
-
|
|
44
|
-
# Frontend bundle analysis
|
|
45
|
-
npm run build -- --stats-json
|
|
46
|
-
npx webpack-bundle-analyzer stats.json
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
## Database Optimization
|
|
50
|
-
|
|
51
|
-
### N+1 Query Detection
|
|
52
|
-
```csharp
|
|
53
|
-
// :x: N+1 Problem
|
|
54
|
-
var employees = await repo.GetAllAsync();
|
|
55
|
-
foreach (var emp in employees)
|
|
56
|
-
{
|
|
57
|
-
// Each iteration queries database!
|
|
58
|
-
Console.WriteLine(emp.Department.Name);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// :white_check_mark: Eager Loading
|
|
62
|
-
var employees = await repo.GetAllAsync(
|
|
63
|
-
e => e.CompanyId == companyId,
|
|
64
|
-
ct,
|
|
65
|
-
e => e.Department, // Include Department
|
|
66
|
-
e => e.Manager // Include Manager
|
|
67
|
-
);
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Query Optimization
|
|
71
|
-
```csharp
|
|
72
|
-
// :x: Loading all columns
|
|
73
|
-
var employees = await repo.GetAllAsync();
|
|
74
|
-
var names = employees.Select(e => e.Name);
|
|
75
|
-
|
|
76
|
-
// :white_check_mark: Projection
|
|
77
|
-
var names = await repo.GetAllAsync(
|
|
78
|
-
q => q.Where(e => e.IsActive)
|
|
79
|
-
.Select(e => e.Name));
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Index Recommendations
|
|
83
|
-
```sql
|
|
84
|
-
-- Frequently filtered columns
|
|
85
|
-
CREATE INDEX IX_Employee_CompanyId ON Employees(CompanyId);
|
|
86
|
-
CREATE INDEX IX_Employee_Status ON Employees(Status);
|
|
87
|
-
|
|
88
|
-
-- Composite index for common queries
|
|
89
|
-
CREATE INDEX IX_Employee_Company_Status
|
|
90
|
-
ON Employees(CompanyId, Status)
|
|
91
|
-
INCLUDE (FullName, Email);
|
|
92
|
-
|
|
93
|
-
-- Full-text search index
|
|
94
|
-
CREATE FULLTEXT INDEX ON Employees(FullName, Email);
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Paging Patterns
|
|
98
|
-
```csharp
|
|
99
|
-
// :x: Loading all then paging in memory
|
|
100
|
-
var all = await repo.GetAllAsync();
|
|
101
|
-
var page = all.Skip(skip).Take(take);
|
|
102
|
-
|
|
103
|
-
// :white_check_mark: Database-level paging
|
|
104
|
-
var page = await repo.GetAllAsync(
|
|
105
|
-
(uow, q) => q
|
|
106
|
-
.Where(e => e.IsActive)
|
|
107
|
-
.OrderBy(e => e.Id)
|
|
108
|
-
.Skip(skip)
|
|
109
|
-
.Take(take));
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
## API Optimization
|
|
113
|
-
|
|
114
|
-
### Parallel Operations
|
|
115
|
-
```csharp
|
|
116
|
-
// :x: Sequential
|
|
117
|
-
var users = await userRepo.GetAllAsync();
|
|
118
|
-
var companies = await companyRepo.GetAllAsync();
|
|
119
|
-
var settings = await settingsRepo.GetAllAsync();
|
|
120
|
-
|
|
121
|
-
// :white_check_mark: Parallel (Tuple Await)
|
|
122
|
-
var (users, companies, settings) = await (
|
|
123
|
-
userRepo.GetAllAsync(),
|
|
124
|
-
companyRepo.GetAllAsync(),
|
|
125
|
-
settingsRepo.GetAllAsync()
|
|
126
|
-
);
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### Response Size
|
|
130
|
-
```csharp
|
|
131
|
-
// :x: Returning entire entity
|
|
132
|
-
return new Result { Employee = employee };
|
|
133
|
-
|
|
134
|
-
// :white_check_mark: Return only needed fields
|
|
135
|
-
return new Result
|
|
136
|
-
{
|
|
137
|
-
Id = employee.Id,
|
|
138
|
-
Name = employee.FullName,
|
|
139
|
-
Status = employee.Status
|
|
140
|
-
};
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
### Caching
|
|
144
|
-
```csharp
|
|
145
|
-
// Static data caching
|
|
146
|
-
private static readonly ConcurrentDictionary<string, LookupData> _cache = new();
|
|
147
|
-
|
|
148
|
-
public async Task<LookupData> GetLookupAsync(string key)
|
|
149
|
-
{
|
|
150
|
-
if (_cache.TryGetValue(key, out var cached))
|
|
151
|
-
return cached;
|
|
152
|
-
|
|
153
|
-
var data = await LoadFromDbAsync(key);
|
|
154
|
-
_cache.TryAdd(key, data);
|
|
155
|
-
return data;
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
## Frontend Optimization
|
|
160
|
-
|
|
161
|
-
### Bundle Size
|
|
162
|
-
```typescript
|
|
163
|
-
// :x: Import entire library
|
|
164
|
-
import _ from 'lodash';
|
|
165
|
-
|
|
166
|
-
// :white_check_mark: Import specific functions
|
|
167
|
-
import { debounce } from 'lodash-es/debounce';
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Lazy Loading
|
|
171
|
-
```typescript
|
|
172
|
-
// :white_check_mark: Lazy load routes
|
|
173
|
-
const routes: Routes = [
|
|
174
|
-
{
|
|
175
|
-
path: 'feature',
|
|
176
|
-
loadChildren: () => import('./feature/feature.module')
|
|
177
|
-
.then(m => m.FeatureModule)
|
|
178
|
-
}
|
|
179
|
-
];
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### Change Detection
|
|
183
|
-
```typescript
|
|
184
|
-
// :white_check_mark: OnPush for performance
|
|
185
|
-
@Component({
|
|
186
|
-
changeDetection: ChangeDetectionStrategy.OnPush
|
|
187
|
-
})
|
|
188
|
-
|
|
189
|
-
// :white_check_mark: Track-by for lists
|
|
190
|
-
trackByItem = this.ngForTrackByItemProp<Item>('id');
|
|
191
|
-
|
|
192
|
-
// Template
|
|
193
|
-
@for (item of items; track trackByItem)
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Virtual Scrolling
|
|
197
|
-
```typescript
|
|
198
|
-
// For large lists
|
|
199
|
-
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
|
200
|
-
|
|
201
|
-
<cdk-virtual-scroll-viewport itemSize="50">
|
|
202
|
-
@for (item of items; track item.id) {
|
|
203
|
-
<div class="item">{{ item.name }}</div>
|
|
204
|
-
}
|
|
205
|
-
</cdk-virtual-scroll-viewport>
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
## Background Job Optimization
|
|
209
|
-
|
|
210
|
-
### Bounded Parallelism
|
|
211
|
-
```csharp
|
|
212
|
-
// :x: Unbounded
|
|
213
|
-
await items.ParallelAsync(ProcessAsync);
|
|
214
|
-
|
|
215
|
-
// :white_check_mark: Bounded
|
|
216
|
-
await items.ParallelAsync(ProcessAsync, maxConcurrent: 5);
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### Batch Processing
|
|
220
|
-
```csharp
|
|
221
|
-
// :x: One at a time
|
|
222
|
-
foreach (var item in items)
|
|
223
|
-
await repo.UpdateAsync(item);
|
|
224
|
-
|
|
225
|
-
// :white_check_mark: Batch update
|
|
226
|
-
await repo.UpdateManyAsync(items, dismissSendEvent: true);
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Performance Monitoring
|
|
230
|
-
|
|
231
|
-
### Logging Slow Operations
|
|
232
|
-
```csharp
|
|
233
|
-
var sw = Stopwatch.StartNew();
|
|
234
|
-
var result = await ExecuteOperation();
|
|
235
|
-
sw.Stop();
|
|
236
|
-
|
|
237
|
-
if (sw.ElapsedMilliseconds > 1000)
|
|
238
|
-
Logger.LogWarning("Slow operation: {Ms}ms", sw.ElapsedMilliseconds);
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### Database Query Logging
|
|
242
|
-
```csharp
|
|
243
|
-
// In DbContext configuration
|
|
244
|
-
optionsBuilder.LogTo(
|
|
245
|
-
Console.WriteLine,
|
|
246
|
-
new[] { DbLoggerCategory.Database.Command.Name },
|
|
247
|
-
LogLevel.Information);
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
## Performance Checklist
|
|
251
|
-
|
|
252
|
-
### Database
|
|
253
|
-
- [ ] Indexes on filtered columns
|
|
254
|
-
- [ ] Eager loading for relations
|
|
255
|
-
- [ ] Projection for partial data
|
|
256
|
-
- [ ] Paging at database level
|
|
257
|
-
- [ ] No N+1 queries
|
|
258
|
-
|
|
259
|
-
### API
|
|
260
|
-
- [ ] Parallel operations where possible
|
|
261
|
-
- [ ] Response DTOs (not entities)
|
|
262
|
-
- [ ] Caching for static data
|
|
263
|
-
- [ ] Pagination for lists
|
|
264
|
-
|
|
265
|
-
### Frontend
|
|
266
|
-
- [ ] Lazy loading for routes
|
|
267
|
-
- [ ] OnPush change detection
|
|
268
|
-
- [ ] Track-by for lists
|
|
269
|
-
- [ ] Virtual scrolling for large lists
|
|
270
|
-
- [ ] Tree-shaking imports
|
|
271
|
-
|
|
272
|
-
### Background Jobs
|
|
273
|
-
- [ ] Bounded parallelism
|
|
274
|
-
- [ ] Batch operations
|
|
275
|
-
- [ ] Paged processing
|
|
276
|
-
- [ ] Appropriate scheduling
|
|
277
|
-
|
|
278
|
-
## Anti-Patterns to AVOID
|
|
279
|
-
|
|
280
|
-
:x: **SELECT * in production**
|
|
281
|
-
```csharp
|
|
282
|
-
var all = await context.Table.ToListAsync();
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
:x: **Synchronous I/O**
|
|
286
|
-
```csharp
|
|
287
|
-
var result = asyncOperation.Result; // Blocks thread
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
:x: **Unbounded result sets**
|
|
291
|
-
```csharp
|
|
292
|
-
await repo.GetAllAsync(); // Could be millions
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
:x: **Repeated database calls in loops**
|
|
296
|
-
```csharp
|
|
297
|
-
foreach (var id in ids)
|
|
298
|
-
await repo.GetByIdAsync(id); // N queries
|
|
299
|
-
```
|
|
300
|
-
|
|
301
|
-
## Verification Checklist
|
|
302
|
-
- [ ] Baseline metrics recorded
|
|
303
|
-
- [ ] Bottleneck identified and addressed
|
|
304
|
-
- [ ] Changes measured against baseline
|
|
305
|
-
- [ ] No new performance issues introduced
|
|
306
|
-
- [ ] Monitoring in place
|
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: security-review
|
|
3
|
-
description: Use when reviewing code for security vulnerabilities, implementing authorization, or ensuring data protection.
|
|
4
|
-
allowed-tools: Read, Write, Edit, Grep, Glob, Bash, Task
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Security Review Workflow
|
|
8
|
-
|
|
9
|
-
## When to Use This Skill
|
|
10
|
-
- Security audit of code changes
|
|
11
|
-
- Implementing authentication/authorization
|
|
12
|
-
- Data protection review
|
|
13
|
-
- Vulnerability assessment
|
|
14
|
-
|
|
15
|
-
## Pre-Flight Checklist
|
|
16
|
-
- [ ] Identify security-sensitive areas
|
|
17
|
-
- [ ] Review OWASP Top 10 relevance
|
|
18
|
-
- [ ] Check for existing security patterns
|
|
19
|
-
- [ ] Plan remediation approach
|
|
20
|
-
|
|
21
|
-
## OWASP Top 10 Checklist
|
|
22
|
-
|
|
23
|
-
### 1. Broken Access Control
|
|
24
|
-
```csharp
|
|
25
|
-
// :x: VULNERABLE - No authorization check
|
|
26
|
-
[HttpGet("{id}")]
|
|
27
|
-
public async Task<Employee> Get(string id)
|
|
28
|
-
=> await repo.GetByIdAsync(id);
|
|
29
|
-
|
|
30
|
-
// :white_check_mark: SECURE - Authorization enforced
|
|
31
|
-
[HttpGet("{id}")]
|
|
32
|
-
[PlatformAuthorize(Roles.Manager, Roles.Admin)]
|
|
33
|
-
public async Task<Employee> Get(string id)
|
|
34
|
-
{
|
|
35
|
-
var employee = await repo.GetByIdAsync(id);
|
|
36
|
-
|
|
37
|
-
// Verify access to this specific resource
|
|
38
|
-
if (employee.CompanyId != RequestContext.CurrentCompanyId())
|
|
39
|
-
throw new UnauthorizedAccessException();
|
|
40
|
-
|
|
41
|
-
return employee;
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 2. Cryptographic Failures
|
|
46
|
-
```csharp
|
|
47
|
-
// :x: VULNERABLE - Storing plain text secrets
|
|
48
|
-
var apiKey = config["ApiKey"];
|
|
49
|
-
await SaveToDatabase(apiKey);
|
|
50
|
-
|
|
51
|
-
// :white_check_mark: SECURE - Encrypt sensitive data
|
|
52
|
-
var encryptedKey = encryptionService.Encrypt(apiKey);
|
|
53
|
-
await SaveToDatabase(encryptedKey);
|
|
54
|
-
|
|
55
|
-
// Use secure configuration
|
|
56
|
-
var apiKey = config.GetValue<string>("ApiKey"); // From Azure Key Vault
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### 3. Injection
|
|
60
|
-
```csharp
|
|
61
|
-
// :x: VULNERABLE - SQL Injection
|
|
62
|
-
var sql = $"SELECT * FROM Users WHERE Name = '{name}'";
|
|
63
|
-
await context.Database.ExecuteSqlRawAsync(sql);
|
|
64
|
-
|
|
65
|
-
// :white_check_mark: SECURE - Parameterized query
|
|
66
|
-
await context.Users.Where(u => u.Name == name).ToListAsync();
|
|
67
|
-
|
|
68
|
-
// Or if raw SQL needed:
|
|
69
|
-
await context.Database.ExecuteSqlRawAsync(
|
|
70
|
-
"SELECT * FROM Users WHERE Name = @p0", name);
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
### 4. Insecure Design
|
|
74
|
-
```csharp
|
|
75
|
-
// :x: VULNERABLE - No rate limiting
|
|
76
|
-
[HttpPost("login")]
|
|
77
|
-
public async Task<IActionResult> Login(LoginRequest request)
|
|
78
|
-
=> await authService.Login(request);
|
|
79
|
-
|
|
80
|
-
// :white_check_mark: SECURE - Rate limiting applied
|
|
81
|
-
[HttpPost("login")]
|
|
82
|
-
[RateLimit(MaxRequests = 5, WindowSeconds = 60)]
|
|
83
|
-
public async Task<IActionResult> Login(LoginRequest request)
|
|
84
|
-
=> await authService.Login(request);
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### 5. Security Misconfiguration
|
|
88
|
-
```csharp
|
|
89
|
-
// :x: VULNERABLE - Detailed errors in production
|
|
90
|
-
app.UseDeveloperExceptionPage(); // Exposes stack traces
|
|
91
|
-
|
|
92
|
-
// :white_check_mark: SECURE - Generic errors in production
|
|
93
|
-
if (env.IsDevelopment())
|
|
94
|
-
app.UseDeveloperExceptionPage();
|
|
95
|
-
else
|
|
96
|
-
app.UseExceptionHandler("/Error");
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
### 6. Vulnerable Components
|
|
100
|
-
```bash
|
|
101
|
-
# Check for vulnerable packages
|
|
102
|
-
dotnet list package --vulnerable
|
|
103
|
-
|
|
104
|
-
# Update vulnerable packages
|
|
105
|
-
dotnet outdated
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### 7. Authentication Failures
|
|
109
|
-
```csharp
|
|
110
|
-
// :x: VULNERABLE - Weak password policy
|
|
111
|
-
if (password.Length >= 4) { }
|
|
112
|
-
|
|
113
|
-
// :white_check_mark: SECURE - Strong password policy
|
|
114
|
-
public class PasswordPolicy
|
|
115
|
-
{
|
|
116
|
-
public bool Validate(string password)
|
|
117
|
-
{
|
|
118
|
-
return password.Length >= 12
|
|
119
|
-
&& password.Any(char.IsUpper)
|
|
120
|
-
&& password.Any(char.IsLower)
|
|
121
|
-
&& password.Any(char.IsDigit)
|
|
122
|
-
&& password.Any(c => !char.IsLetterOrDigit(c));
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### 8. Data Integrity Failures
|
|
128
|
-
```csharp
|
|
129
|
-
// :x: VULNERABLE - No validation of external data
|
|
130
|
-
var userData = await externalApi.GetUserAsync(id);
|
|
131
|
-
await SaveToDatabase(userData);
|
|
132
|
-
|
|
133
|
-
// :white_check_mark: SECURE - Validate external data
|
|
134
|
-
var userData = await externalApi.GetUserAsync(id);
|
|
135
|
-
var validation = userData.Validate();
|
|
136
|
-
if (!validation.IsValid)
|
|
137
|
-
throw new ValidationException(validation.Errors);
|
|
138
|
-
await SaveToDatabase(userData);
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### 9. Logging Failures
|
|
142
|
-
```csharp
|
|
143
|
-
// :x: VULNERABLE - Logging sensitive data
|
|
144
|
-
Logger.LogInformation("User login: {Email} {Password}", email, password);
|
|
145
|
-
|
|
146
|
-
// :white_check_mark: SECURE - Redact sensitive data
|
|
147
|
-
Logger.LogInformation("User login: {Email}", email);
|
|
148
|
-
// Never log passwords, tokens, or PII
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### 10. SSRF (Server-Side Request Forgery)
|
|
152
|
-
```csharp
|
|
153
|
-
// :x: VULNERABLE - User-controlled URL
|
|
154
|
-
var url = request.WebhookUrl;
|
|
155
|
-
await httpClient.GetAsync(url); // Could access internal services
|
|
156
|
-
|
|
157
|
-
// :white_check_mark: SECURE - Validate and restrict URLs
|
|
158
|
-
if (!IsAllowedUrl(request.WebhookUrl))
|
|
159
|
-
throw new SecurityException("Invalid webhook URL");
|
|
160
|
-
|
|
161
|
-
private bool IsAllowedUrl(string url)
|
|
162
|
-
{
|
|
163
|
-
var uri = new Uri(url);
|
|
164
|
-
return AllowedDomains.Contains(uri.Host)
|
|
165
|
-
&& uri.Scheme == "https";
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Authorization Patterns
|
|
170
|
-
|
|
171
|
-
### Controller Level
|
|
172
|
-
```csharp
|
|
173
|
-
[ApiController]
|
|
174
|
-
[Route("api/[controller]")]
|
|
175
|
-
[PlatformAuthorize] // Require authentication
|
|
176
|
-
public class EmployeeController : PlatformBaseController
|
|
177
|
-
{
|
|
178
|
-
[HttpPost]
|
|
179
|
-
[PlatformAuthorize(Roles.Admin, Roles.Manager)] // Role-based
|
|
180
|
-
public async Task<IActionResult> Create(...)
|
|
181
|
-
}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Handler Level
|
|
185
|
-
```csharp
|
|
186
|
-
protected override async Task<PlatformValidationResult<T>> ValidateRequestAsync(
|
|
187
|
-
PlatformValidationResult<T> validation, CancellationToken ct)
|
|
188
|
-
{
|
|
189
|
-
return await validation
|
|
190
|
-
// Check role
|
|
191
|
-
.And(_ => RequestContext.HasRole(Roles.Admin), "Admin role required")
|
|
192
|
-
// Check company access
|
|
193
|
-
.And(_ => entity.CompanyId == RequestContext.CurrentCompanyId(),
|
|
194
|
-
"Access denied: different company")
|
|
195
|
-
// Check ownership
|
|
196
|
-
.And(_ => entity.OwnerId == RequestContext.UserId() ||
|
|
197
|
-
RequestContext.HasRole(Roles.Admin),
|
|
198
|
-
"Access denied: not owner");
|
|
199
|
-
}
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
### Query Level
|
|
203
|
-
```csharp
|
|
204
|
-
// Always filter by company/user context
|
|
205
|
-
var employees = await repo.GetAllAsync(
|
|
206
|
-
e => e.CompanyId == RequestContext.CurrentCompanyId()
|
|
207
|
-
&& (e.IsPublic || e.OwnerId == RequestContext.UserId()));
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
## Data Protection
|
|
211
|
-
|
|
212
|
-
### Sensitive Data Handling
|
|
213
|
-
```csharp
|
|
214
|
-
public class SensitiveDataHandler
|
|
215
|
-
{
|
|
216
|
-
// Encrypt at rest
|
|
217
|
-
public string EncryptForStorage(string plainText)
|
|
218
|
-
=> encryptionService.Encrypt(plainText);
|
|
219
|
-
|
|
220
|
-
// Mask for display
|
|
221
|
-
public string MaskEmail(string email)
|
|
222
|
-
{
|
|
223
|
-
var parts = email.Split('@');
|
|
224
|
-
return $"{parts[0][0]}***@{parts[1]}";
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Never log sensitive data
|
|
228
|
-
public void LogUserAction(User user)
|
|
229
|
-
{
|
|
230
|
-
Logger.LogInformation("User action: {UserId}", user.Id);
|
|
231
|
-
// NOT: Logger.Log("User: {Email} {Phone}", user.Email, user.Phone);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
### File Upload Security
|
|
237
|
-
```csharp
|
|
238
|
-
public async Task<IActionResult> Upload(IFormFile file)
|
|
239
|
-
{
|
|
240
|
-
// Validate file type
|
|
241
|
-
var allowedTypes = new[] { ".pdf", ".docx", ".xlsx" };
|
|
242
|
-
var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
|
|
243
|
-
if (!allowedTypes.Contains(extension))
|
|
244
|
-
return BadRequest("Invalid file type");
|
|
245
|
-
|
|
246
|
-
// Validate file size
|
|
247
|
-
if (file.Length > 10 * 1024 * 1024) // 10MB
|
|
248
|
-
return BadRequest("File too large");
|
|
249
|
-
|
|
250
|
-
// Scan for malware (if available)
|
|
251
|
-
if (!await antivirusService.ScanAsync(file))
|
|
252
|
-
return BadRequest("File rejected by security scan");
|
|
253
|
-
|
|
254
|
-
// Generate safe filename
|
|
255
|
-
var safeFileName = $"{Guid.NewGuid()}{extension}";
|
|
256
|
-
|
|
257
|
-
// Save to isolated storage
|
|
258
|
-
await fileService.SaveAsync(file, safeFileName);
|
|
259
|
-
|
|
260
|
-
return Ok();
|
|
261
|
-
}
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
## Security Scanning Commands
|
|
265
|
-
|
|
266
|
-
```bash
|
|
267
|
-
# .NET vulnerability scan
|
|
268
|
-
dotnet list package --vulnerable
|
|
269
|
-
|
|
270
|
-
# Outdated packages
|
|
271
|
-
dotnet outdated
|
|
272
|
-
|
|
273
|
-
# Secret scanning
|
|
274
|
-
grep -r "password\|secret\|apikey" --include="*.cs" --include="*.json"
|
|
275
|
-
|
|
276
|
-
# Hardcoded credentials
|
|
277
|
-
grep -r "Password=\"" --include="*.cs"
|
|
278
|
-
grep -r "connectionString.*password" --include="*.json"
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
## Security Review Checklist
|
|
282
|
-
|
|
283
|
-
### Authentication
|
|
284
|
-
- [ ] Strong password policy enforced
|
|
285
|
-
- [ ] Account lockout after failed attempts
|
|
286
|
-
- [ ] Secure session management
|
|
287
|
-
- [ ] JWT tokens properly validated
|
|
288
|
-
- [ ] Refresh token rotation
|
|
289
|
-
|
|
290
|
-
### Authorization
|
|
291
|
-
- [ ] All endpoints require authentication
|
|
292
|
-
- [ ] Role-based access control implemented
|
|
293
|
-
- [ ] Resource-level permissions checked
|
|
294
|
-
- [ ] No privilege escalation possible
|
|
295
|
-
|
|
296
|
-
### Input Validation
|
|
297
|
-
- [ ] All inputs validated
|
|
298
|
-
- [ ] SQL injection prevented (parameterized queries)
|
|
299
|
-
- [ ] XSS prevented (output encoding)
|
|
300
|
-
- [ ] File uploads validated
|
|
301
|
-
- [ ] URL validation for redirects
|
|
302
|
-
|
|
303
|
-
### Data Protection
|
|
304
|
-
- [ ] Sensitive data encrypted at rest
|
|
305
|
-
- [ ] HTTPS enforced
|
|
306
|
-
- [ ] No sensitive data in logs
|
|
307
|
-
- [ ] Proper error handling (no stack traces)
|
|
308
|
-
|
|
309
|
-
### Dependencies
|
|
310
|
-
- [ ] No known vulnerable packages
|
|
311
|
-
- [ ] Dependencies regularly updated
|
|
312
|
-
- [ ] Third-party code reviewed
|
|
313
|
-
|
|
314
|
-
## Anti-Patterns to AVOID
|
|
315
|
-
|
|
316
|
-
:x: **Trusting client input**
|
|
317
|
-
```csharp
|
|
318
|
-
var isAdmin = request.IsAdmin; // User-supplied!
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
:x: **Exposing internal errors**
|
|
322
|
-
```csharp
|
|
323
|
-
catch (Exception ex) { return BadRequest(ex.ToString()); }
|
|
324
|
-
```
|
|
325
|
-
|
|
326
|
-
:x: **Hardcoded secrets**
|
|
327
|
-
```csharp
|
|
328
|
-
var apiKey = "sk_live_xxxxx";
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
:x: **Insufficient logging**
|
|
332
|
-
```csharp
|
|
333
|
-
// No audit trail for sensitive operations
|
|
334
|
-
await DeleteAllUsers();
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
## Verification Checklist
|
|
338
|
-
- [ ] OWASP Top 10 reviewed
|
|
339
|
-
- [ ] Authentication/authorization verified
|
|
340
|
-
- [ ] Input validation complete
|
|
341
|
-
- [ ] Sensitive data protected
|
|
342
|
-
- [ ] No hardcoded secrets
|
|
343
|
-
- [ ] Logging appropriate (no PII)
|
|
344
|
-
- [ ] Dependencies scanned
|