devskill 2.0.7 → 2.0.8
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/meta.ts +4 -0
- package/package.json +1 -1
- package/skills/add-educational-comments/LICENSE.md +21 -0
- package/skills/add-educational-comments/SKILL.md +128 -0
- package/skills/add-educational-comments/SYNC.md +5 -0
- package/skills/agent-governance/LICENSE.md +21 -0
- package/skills/agent-governance/SKILL.md +569 -0
- package/skills/agent-governance/SYNC.md +5 -0
- package/skills/agentic-eval/LICENSE.md +21 -0
- package/skills/agentic-eval/SKILL.md +189 -0
- package/skills/agentic-eval/SYNC.md +5 -0
- package/skills/ai-prompt-engineering-safety-review/LICENSE.md +21 -0
- package/skills/ai-prompt-engineering-safety-review/SKILL.md +230 -0
- package/skills/ai-prompt-engineering-safety-review/SYNC.md +5 -0
- package/skills/appinsights-instrumentation/LICENSE.md +21 -0
- package/skills/appinsights-instrumentation/LICENSE.txt +21 -0
- package/skills/appinsights-instrumentation/SKILL.md +48 -0
- package/skills/appinsights-instrumentation/SYNC.md +5 -0
- package/skills/appinsights-instrumentation/examples/appinsights.bicep +30 -0
- package/skills/appinsights-instrumentation/references/ASPNETCORE.md +29 -0
- package/skills/appinsights-instrumentation/references/AUTO.md +13 -0
- package/skills/appinsights-instrumentation/references/NODEJS.md +28 -0
- package/skills/appinsights-instrumentation/references/PYTHON.md +48 -0
- package/skills/appinsights-instrumentation/scripts/appinsights.ps1 +20 -0
- package/skills/apple-appstore-reviewer/LICENSE.md +21 -0
- package/skills/apple-appstore-reviewer/SKILL.md +305 -0
- package/skills/apple-appstore-reviewer/SYNC.md +5 -0
- package/skills/arch-linux-triage/LICENSE.md +21 -0
- package/skills/arch-linux-triage/SKILL.md +31 -0
- package/skills/arch-linux-triage/SYNC.md +5 -0
- package/skills/architecture-blueprint-generator/LICENSE.md +21 -0
- package/skills/architecture-blueprint-generator/SKILL.md +322 -0
- package/skills/architecture-blueprint-generator/SYNC.md +5 -0
- package/skills/aspire/LICENSE.md +21 -0
- package/skills/aspire/SKILL.md +231 -0
- package/skills/aspire/SYNC.md +5 -0
- package/skills/aspire/references/architecture.md +341 -0
- package/skills/aspire/references/cli-reference.md +307 -0
- package/skills/aspire/references/dashboard.md +226 -0
- package/skills/aspire/references/deployment.md +237 -0
- package/skills/aspire/references/integrations-catalog.md +68 -0
- package/skills/aspire/references/mcp-server.md +195 -0
- package/skills/aspire/references/polyglot-apis.md +296 -0
- package/skills/aspire/references/testing.md +281 -0
- package/skills/aspire/references/troubleshooting.md +194 -0
- package/skills/aspnet-minimal-api-openapi/LICENSE.md +21 -0
- package/skills/aspnet-minimal-api-openapi/SKILL.md +41 -0
- package/skills/aspnet-minimal-api-openapi/SYNC.md +5 -0
- package/skills/automate-this/LICENSE.md +21 -0
- package/skills/automate-this/SKILL.md +244 -0
- package/skills/automate-this/SYNC.md +5 -0
- package/skills/autoresearch/LICENSE.md +21 -0
- package/skills/autoresearch/SKILL.md +275 -0
- package/skills/autoresearch/SYNC.md +5 -0
- package/skills/aws-cdk-python-setup/LICENSE.md +21 -0
- package/skills/aws-cdk-python-setup/SKILL.md +111 -0
- package/skills/aws-cdk-python-setup/SYNC.md +5 -0
- package/skills/az-cost-optimize/LICENSE.md +21 -0
- package/skills/az-cost-optimize/SKILL.md +305 -0
- package/skills/az-cost-optimize/SYNC.md +5 -0
- package/skills/azure-deployment-preflight/LICENSE.md +21 -0
- package/skills/azure-deployment-preflight/SKILL.md +216 -0
- package/skills/azure-deployment-preflight/SYNC.md +5 -0
- package/skills/azure-deployment-preflight/references/ERROR-HANDLING.md +392 -0
- package/skills/azure-deployment-preflight/references/REPORT-TEMPLATE.md +352 -0
- package/skills/azure-deployment-preflight/references/VALIDATION-COMMANDS.md +379 -0
- package/skills/azure-devops-cli/LICENSE.md +21 -0
- package/skills/azure-devops-cli/SKILL.md +94 -0
- package/skills/azure-devops-cli/SYNC.md +5 -0
- package/skills/azure-devops-cli/references/advanced-usage.md +197 -0
- package/skills/azure-devops-cli/references/boards-and-iterations.md +258 -0
- package/skills/azure-devops-cli/references/org-and-security.md +469 -0
- package/skills/azure-devops-cli/references/pipelines-and-builds.md +245 -0
- package/skills/azure-devops-cli/references/repos-and-prs.md +333 -0
- package/skills/azure-devops-cli/references/variables-and-agents.md +212 -0
- package/skills/azure-devops-cli/references/workflows-and-patterns.md +668 -0
- package/skills/azure-pricing/LICENSE.md +21 -0
- package/skills/azure-pricing/SKILL.md +189 -0
- package/skills/azure-pricing/SYNC.md +5 -0
- package/skills/azure-pricing/references/COPILOT-STUDIO-RATES.md +135 -0
- package/skills/azure-pricing/references/COST-ESTIMATOR.md +142 -0
- package/skills/azure-pricing/references/REGIONS.md +84 -0
- package/skills/azure-pricing/references/SERVICE-NAMES.md +106 -0
- package/skills/azure-resource-health-diagnose/LICENSE.md +21 -0
- package/skills/azure-resource-health-diagnose/SKILL.md +290 -0
- package/skills/azure-resource-health-diagnose/SYNC.md +5 -0
- package/skills/azure-resource-visualizer/LICENSE.md +21 -0
- package/skills/azure-resource-visualizer/LICENSE.txt +21 -0
- package/skills/azure-resource-visualizer/SKILL.md +233 -0
- package/skills/azure-resource-visualizer/SYNC.md +5 -0
- package/skills/azure-resource-visualizer/assets/template-architecture.md +41 -0
- package/skills/azure-role-selector/LICENSE.md +21 -0
- package/skills/azure-role-selector/LICENSE.txt +21 -0
- package/skills/azure-role-selector/SKILL.md +6 -0
- package/skills/azure-role-selector/SYNC.md +5 -0
- package/skills/azure-static-web-apps/LICENSE.md +21 -0
- package/skills/azure-static-web-apps/SKILL.md +315 -0
- package/skills/azure-static-web-apps/SYNC.md +5 -0
- package/skills/bigquery-pipeline-audit/LICENSE.md +21 -0
- package/skills/bigquery-pipeline-audit/SKILL.md +129 -0
- package/skills/bigquery-pipeline-audit/SYNC.md +5 -0
- package/skills/boost-prompt/LICENSE.md +21 -0
- package/skills/boost-prompt/SKILL.md +25 -0
- package/skills/boost-prompt/SYNC.md +5 -0
- package/skills/breakdown-epic-arch/LICENSE.md +21 -0
- package/skills/breakdown-epic-arch/SKILL.md +66 -0
- package/skills/breakdown-epic-arch/SYNC.md +5 -0
- package/skills/breakdown-epic-pm/LICENSE.md +21 -0
- package/skills/breakdown-epic-pm/SKILL.md +58 -0
- package/skills/breakdown-epic-pm/SYNC.md +5 -0
- package/skills/breakdown-feature-implementation/LICENSE.md +21 -0
- package/skills/breakdown-feature-implementation/SKILL.md +128 -0
- package/skills/breakdown-feature-implementation/SYNC.md +5 -0
- package/skills/breakdown-feature-prd/LICENSE.md +21 -0
- package/skills/breakdown-feature-prd/SKILL.md +61 -0
- package/skills/breakdown-feature-prd/SYNC.md +5 -0
- package/skills/breakdown-plan/LICENSE.md +21 -0
- package/skills/breakdown-plan/SKILL.md +509 -0
- package/skills/breakdown-plan/SYNC.md +5 -0
- package/skills/breakdown-test/LICENSE.md +21 -0
- package/skills/breakdown-test/SKILL.md +365 -0
- package/skills/breakdown-test/SYNC.md +5 -0
- package/skills/centos-linux-triage/LICENSE.md +21 -0
- package/skills/centos-linux-triage/SKILL.md +31 -0
- package/skills/centos-linux-triage/SYNC.md +5 -0
- package/skills/chrome-devtools/LICENSE.md +21 -0
- package/skills/chrome-devtools/SKILL.md +97 -0
- package/skills/chrome-devtools/SYNC.md +5 -0
- package/skills/cli-mastery/LICENSE.md +21 -0
- package/skills/cli-mastery/SKILL.md +43 -0
- package/skills/cli-mastery/SYNC.md +5 -0
- package/skills/cli-mastery/references/final-exam.md +24 -0
- package/skills/cli-mastery/references/module-1-slash-commands.md +88 -0
- package/skills/cli-mastery/references/module-2-keyboard-shortcuts.md +38 -0
- package/skills/cli-mastery/references/module-3-modes.md +33 -0
- package/skills/cli-mastery/references/module-4-agents.md +42 -0
- package/skills/cli-mastery/references/module-5-skills.md +33 -0
- package/skills/cli-mastery/references/module-6-mcp.md +50 -0
- package/skills/cli-mastery/references/module-7-advanced.md +38 -0
- package/skills/cli-mastery/references/module-8-configuration.md +34 -0
- package/skills/cli-mastery/references/scenarios.md +44 -0
- package/skills/cloud-design-patterns/LICENSE.md +21 -0
- package/skills/cloud-design-patterns/SKILL.md +62 -0
- package/skills/cloud-design-patterns/SYNC.md +5 -0
- package/skills/cloud-design-patterns/references/architecture-design.md +127 -0
- package/skills/cloud-design-patterns/references/azure-service-mappings.md +13 -0
- package/skills/cloud-design-patterns/references/best-practices.md +34 -0
- package/skills/cloud-design-patterns/references/deployment-operational.md +91 -0
- package/skills/cloud-design-patterns/references/event-driven.md +21 -0
- package/skills/cloud-design-patterns/references/messaging-integration.md +127 -0
- package/skills/cloud-design-patterns/references/performance.md +180 -0
- package/skills/cloud-design-patterns/references/reliability-resilience.md +156 -0
- package/skills/cloud-design-patterns/references/security.md +55 -0
- package/skills/code-exemplars-blueprint-generator/LICENSE.md +21 -0
- package/skills/code-exemplars-blueprint-generator/SKILL.md +126 -0
- package/skills/code-exemplars-blueprint-generator/SYNC.md +5 -0
- package/skills/codeql/LICENSE.md +21 -0
- package/skills/codeql/SKILL.md +405 -0
- package/skills/codeql/SYNC.md +5 -0
- package/skills/codeql/references/alert-management.md +170 -0
- package/skills/codeql/references/cli-commands.md +283 -0
- package/skills/codeql/references/compiled-languages.md +284 -0
- package/skills/codeql/references/sarif-output.md +265 -0
- package/skills/codeql/references/troubleshooting.md +259 -0
- package/skills/codeql/references/workflow-configuration.md +398 -0
- package/skills/comment-code-generate-a-tutorial/LICENSE.md +21 -0
- package/skills/comment-code-generate-a-tutorial/SKILL.md +26 -0
- package/skills/comment-code-generate-a-tutorial/SYNC.md +5 -0
- package/skills/containerize-aspnet-framework/LICENSE.md +21 -0
- package/skills/containerize-aspnet-framework/SKILL.md +454 -0
- package/skills/containerize-aspnet-framework/SYNC.md +5 -0
- package/skills/containerize-aspnetcore/LICENSE.md +21 -0
- package/skills/containerize-aspnetcore/SKILL.md +392 -0
- package/skills/containerize-aspnetcore/SYNC.md +5 -0
- package/skills/context-map/LICENSE.md +21 -0
- package/skills/context-map/SKILL.md +52 -0
- package/skills/context-map/SYNC.md +5 -0
- package/skills/conventional-commit/LICENSE.md +21 -0
- package/skills/conventional-commit/SKILL.md +72 -0
- package/skills/conventional-commit/SYNC.md +5 -0
- package/skills/convert-plaintext-to-md/LICENSE.md +21 -0
- package/skills/convert-plaintext-to-md/SKILL.md +362 -0
- package/skills/convert-plaintext-to-md/SYNC.md +5 -0
- package/skills/copilot-cli-quickstart/LICENSE.md +21 -0
- package/skills/copilot-cli-quickstart/SKILL.md +774 -0
- package/skills/copilot-cli-quickstart/SYNC.md +5 -0
- package/skills/copilot-instructions-blueprint-generator/LICENSE.md +21 -0
- package/skills/copilot-instructions-blueprint-generator/SKILL.md +294 -0
- package/skills/copilot-instructions-blueprint-generator/SYNC.md +5 -0
- package/skills/copilot-sdk/LICENSE.md +21 -0
- package/skills/copilot-sdk/SKILL.md +914 -0
- package/skills/copilot-sdk/SYNC.md +5 -0
- package/skills/copilot-spaces/LICENSE.md +21 -0
- package/skills/copilot-spaces/SKILL.md +205 -0
- package/skills/copilot-spaces/SYNC.md +5 -0
- package/skills/copilot-usage-metrics/LICENSE.md +21 -0
- package/skills/copilot-usage-metrics/SKILL.md +52 -0
- package/skills/copilot-usage-metrics/SYNC.md +5 -0
- package/skills/copilot-usage-metrics/get-enterprise-metrics.sh +22 -0
- package/skills/copilot-usage-metrics/get-enterprise-user-metrics.sh +22 -0
- package/skills/copilot-usage-metrics/get-org-metrics.sh +22 -0
- package/skills/copilot-usage-metrics/get-org-user-metrics.sh +22 -0
- package/skills/cosmosdb-datamodeling/LICENSE.md +21 -0
- package/skills/cosmosdb-datamodeling/SKILL.md +1045 -0
- package/skills/cosmosdb-datamodeling/SYNC.md +5 -0
- package/skills/create-agentsmd/LICENSE.md +21 -0
- package/skills/create-agentsmd/SKILL.md +249 -0
- package/skills/create-agentsmd/SYNC.md +5 -0
- package/skills/create-architectural-decision-record/LICENSE.md +21 -0
- package/skills/create-architectural-decision-record/SKILL.md +97 -0
- package/skills/create-architectural-decision-record/SYNC.md +5 -0
- package/skills/create-github-action-workflow-specification/LICENSE.md +21 -0
- package/skills/create-github-action-workflow-specification/SKILL.md +276 -0
- package/skills/create-github-action-workflow-specification/SYNC.md +5 -0
- package/skills/create-github-issue-feature-from-specification/LICENSE.md +21 -0
- package/skills/create-github-issue-feature-from-specification/SKILL.md +28 -0
- package/skills/create-github-issue-feature-from-specification/SYNC.md +5 -0
- package/skills/create-github-issues-feature-from-implementation-plan/LICENSE.md +21 -0
- package/skills/create-github-issues-feature-from-implementation-plan/SKILL.md +28 -0
- package/skills/create-github-issues-feature-from-implementation-plan/SYNC.md +5 -0
- package/skills/create-github-issues-for-unmet-specification-requirements/LICENSE.md +21 -0
- package/skills/create-github-issues-for-unmet-specification-requirements/SKILL.md +35 -0
- package/skills/create-github-issues-for-unmet-specification-requirements/SYNC.md +5 -0
- package/skills/create-github-pull-request-from-specification/LICENSE.md +21 -0
- package/skills/create-github-pull-request-from-specification/SKILL.md +24 -0
- package/skills/create-github-pull-request-from-specification/SYNC.md +5 -0
- package/skills/create-implementation-plan/LICENSE.md +21 -0
- package/skills/create-implementation-plan/SKILL.md +157 -0
- package/skills/create-implementation-plan/SYNC.md +5 -0
- package/skills/create-llms/LICENSE.md +21 -0
- package/skills/create-llms/SKILL.md +210 -0
- package/skills/create-llms/SYNC.md +5 -0
- package/skills/create-readme/LICENSE.md +21 -0
- package/skills/create-readme/SKILL.md +21 -0
- package/skills/create-readme/SYNC.md +5 -0
- package/skills/create-specification/LICENSE.md +21 -0
- package/skills/create-specification/SKILL.md +127 -0
- package/skills/create-specification/SYNC.md +5 -0
- package/skills/create-spring-boot-java-project/LICENSE.md +21 -0
- package/skills/create-spring-boot-java-project/SKILL.md +163 -0
- package/skills/create-spring-boot-java-project/SYNC.md +5 -0
- package/skills/create-spring-boot-kotlin-project/LICENSE.md +21 -0
- package/skills/create-spring-boot-kotlin-project/SKILL.md +147 -0
- package/skills/create-spring-boot-kotlin-project/SYNC.md +5 -0
- package/skills/create-technical-spike/LICENSE.md +21 -0
- package/skills/create-technical-spike/SKILL.md +230 -0
- package/skills/create-technical-spike/SYNC.md +5 -0
- package/skills/create-tldr-page/LICENSE.md +21 -0
- package/skills/create-tldr-page/SKILL.md +210 -0
- package/skills/create-tldr-page/SYNC.md +5 -0
- package/skills/creating-oracle-to-postgres-master-migration-plan/LICENSE.md +21 -0
- package/skills/creating-oracle-to-postgres-master-migration-plan/SKILL.md +83 -0
- package/skills/creating-oracle-to-postgres-master-migration-plan/SYNC.md +5 -0
- package/skills/creating-oracle-to-postgres-migration-bug-report/LICENSE.md +21 -0
- package/skills/creating-oracle-to-postgres-migration-bug-report/SKILL.md +43 -0
- package/skills/creating-oracle-to-postgres-migration-bug-report/SYNC.md +5 -0
- package/skills/creating-oracle-to-postgres-migration-bug-report/references/BUG-REPORT-TEMPLATE.md +79 -0
- package/skills/creating-oracle-to-postgres-migration-integration-tests/LICENSE.md +21 -0
- package/skills/creating-oracle-to-postgres-migration-integration-tests/SKILL.md +60 -0
- package/skills/creating-oracle-to-postgres-migration-integration-tests/SYNC.md +5 -0
- package/skills/csharp-async/LICENSE.md +21 -0
- package/skills/csharp-async/SKILL.md +49 -0
- package/skills/csharp-async/SYNC.md +5 -0
- package/skills/csharp-docs/LICENSE.md +21 -0
- package/skills/csharp-docs/SKILL.md +62 -0
- package/skills/csharp-docs/SYNC.md +5 -0
- package/skills/csharp-mcp-server-generator/LICENSE.md +21 -0
- package/skills/csharp-mcp-server-generator/SKILL.md +59 -0
- package/skills/csharp-mcp-server-generator/SYNC.md +5 -0
- package/skills/csharp-mstest/LICENSE.md +21 -0
- package/skills/csharp-mstest/SKILL.md +478 -0
- package/skills/csharp-mstest/SYNC.md +5 -0
- package/skills/csharp-nunit/LICENSE.md +21 -0
- package/skills/csharp-nunit/SKILL.md +71 -0
- package/skills/csharp-nunit/SYNC.md +5 -0
- package/skills/csharp-tunit/LICENSE.md +21 -0
- package/skills/csharp-tunit/SKILL.md +100 -0
- package/skills/csharp-tunit/SYNC.md +5 -0
- package/skills/csharp-xunit/LICENSE.md +21 -0
- package/skills/csharp-xunit/SKILL.md +68 -0
- package/skills/csharp-xunit/SYNC.md +5 -0
- package/skills/datanalysis-credit-risk/LICENSE.md +21 -0
- package/skills/datanalysis-credit-risk/SKILL.md +113 -0
- package/skills/datanalysis-credit-risk/SYNC.md +5 -0
- package/skills/datanalysis-credit-risk/references/analysis.py +1223 -0
- package/skills/datanalysis-credit-risk/references/func.py +228 -0
- package/skills/datanalysis-credit-risk/scripts/example.py +391 -0
- package/skills/dataverse-python-advanced-patterns/LICENSE.md +21 -0
- package/skills/dataverse-python-advanced-patterns/SKILL.md +17 -0
- package/skills/dataverse-python-advanced-patterns/SYNC.md +5 -0
- package/skills/dataverse-python-production-code/LICENSE.md +21 -0
- package/skills/dataverse-python-production-code/SKILL.md +116 -0
- package/skills/dataverse-python-production-code/SYNC.md +5 -0
- package/skills/dataverse-python-quickstart/LICENSE.md +21 -0
- package/skills/dataverse-python-quickstart/SKILL.md +14 -0
- package/skills/dataverse-python-quickstart/SYNC.md +5 -0
- package/skills/dataverse-python-usecase-builder/LICENSE.md +21 -0
- package/skills/dataverse-python-usecase-builder/SKILL.md +246 -0
- package/skills/dataverse-python-usecase-builder/SYNC.md +5 -0
- package/skills/debian-linux-triage/LICENSE.md +21 -0
- package/skills/debian-linux-triage/SKILL.md +31 -0
- package/skills/debian-linux-triage/SYNC.md +5 -0
- package/skills/declarative-agents/LICENSE.md +21 -0
- package/skills/declarative-agents/SKILL.md +94 -0
- package/skills/declarative-agents/SYNC.md +5 -0
- package/skills/dependabot/LICENSE.md +21 -0
- package/skills/dependabot/SKILL.md +422 -0
- package/skills/dependabot/SYNC.md +5 -0
- package/skills/dependabot/references/dependabot-yml-reference.md +374 -0
- package/skills/dependabot/references/example-configs.md +409 -0
- package/skills/dependabot/references/pr-commands.md +91 -0
- package/skills/devops-rollout-plan/LICENSE.md +21 -0
- package/skills/devops-rollout-plan/SKILL.md +117 -0
- package/skills/devops-rollout-plan/SYNC.md +5 -0
- package/skills/documentation-writer/LICENSE.md +21 -0
- package/skills/documentation-writer/SKILL.md +45 -0
- package/skills/documentation-writer/SYNC.md +5 -0
- package/skills/dotnet-best-practices/LICENSE.md +21 -0
- package/skills/dotnet-best-practices/SKILL.md +85 -0
- package/skills/dotnet-best-practices/SYNC.md +5 -0
- package/skills/dotnet-design-pattern-review/LICENSE.md +21 -0
- package/skills/dotnet-design-pattern-review/SKILL.md +42 -0
- package/skills/dotnet-design-pattern-review/SYNC.md +5 -0
- package/skills/dotnet-timezone/LICENSE.md +21 -0
- package/skills/dotnet-timezone/SKILL.md +109 -0
- package/skills/dotnet-timezone/SYNC.md +5 -0
- package/skills/dotnet-timezone/references/code-patterns.md +153 -0
- package/skills/dotnet-timezone/references/timezone-index.md +87 -0
- package/skills/dotnet-upgrade/LICENSE.md +21 -0
- package/skills/dotnet-upgrade/SKILL.md +116 -0
- package/skills/dotnet-upgrade/SYNC.md +5 -0
- package/skills/doublecheck/LICENSE.md +21 -0
- package/skills/doublecheck/SKILL.md +277 -0
- package/skills/doublecheck/SYNC.md +5 -0
- package/skills/doublecheck/assets/verification-report-template.md +92 -0
- package/skills/editorconfig/LICENSE.md +21 -0
- package/skills/editorconfig/SKILL.md +63 -0
- package/skills/editorconfig/SYNC.md +5 -0
- package/skills/ef-core/LICENSE.md +21 -0
- package/skills/ef-core/SKILL.md +75 -0
- package/skills/ef-core/SYNC.md +5 -0
- package/skills/entra-agent-user/LICENSE.md +21 -0
- package/skills/entra-agent-user/SKILL.md +270 -0
- package/skills/entra-agent-user/SYNC.md +5 -0
- package/skills/eval-driven-dev/LICENSE.md +21 -0
- package/skills/eval-driven-dev/SKILL.md +862 -0
- package/skills/eval-driven-dev/SYNC.md +5 -0
- package/skills/eval-driven-dev/references/pixie-api.md +195 -0
- package/skills/excalidraw-diagram-generator/LICENSE.md +21 -0
- package/skills/excalidraw-diagram-generator/SKILL.md +613 -0
- package/skills/excalidraw-diagram-generator/SYNC.md +5 -0
- package/skills/excalidraw-diagram-generator/references/element-types.md +497 -0
- package/skills/excalidraw-diagram-generator/references/excalidraw-schema.md +350 -0
- package/skills/excalidraw-diagram-generator/scripts/README.md +193 -0
- package/skills/excalidraw-diagram-generator/scripts/add-arrow.py +312 -0
- package/skills/excalidraw-diagram-generator/scripts/add-icon-to-diagram.py +404 -0
- package/skills/excalidraw-diagram-generator/scripts/split-excalidraw-library.py +183 -0
- package/skills/excalidraw-diagram-generator/templates/business-flow-swimlane-template.excalidraw +334 -0
- package/skills/excalidraw-diagram-generator/templates/class-diagram-template.excalidraw +558 -0
- package/skills/excalidraw-diagram-generator/templates/data-flow-diagram-template.excalidraw +279 -0
- package/skills/excalidraw-diagram-generator/templates/er-diagram-template.excalidraw +662 -0
- package/skills/excalidraw-diagram-generator/templates/flowchart-template.excalidraw +179 -0
- package/skills/excalidraw-diagram-generator/templates/mindmap-template.excalidraw +244 -0
- package/skills/excalidraw-diagram-generator/templates/relationship-template.excalidraw +145 -0
- package/skills/excalidraw-diagram-generator/templates/sequence-diagram-template.excalidraw +509 -0
- package/skills/fabric-lakehouse/LICENSE.md +21 -0
- package/skills/fabric-lakehouse/SKILL.md +106 -0
- package/skills/fabric-lakehouse/SYNC.md +5 -0
- package/skills/fabric-lakehouse/references/getdata.md +36 -0
- package/skills/fabric-lakehouse/references/pyspark.md +189 -0
- package/skills/fedora-linux-triage/LICENSE.md +21 -0
- package/skills/fedora-linux-triage/SKILL.md +31 -0
- package/skills/fedora-linux-triage/SYNC.md +5 -0
- package/skills/finalize-agent-prompt/LICENSE.md +21 -0
- package/skills/finalize-agent-prompt/SKILL.md +26 -0
- package/skills/finalize-agent-prompt/SYNC.md +5 -0
- package/skills/finnish-humanizer/LICENSE.md +21 -0
- package/skills/finnish-humanizer/SKILL.md +145 -0
- package/skills/finnish-humanizer/SYNC.md +5 -0
- package/skills/finnish-humanizer/references/patterns.md +338 -0
- package/skills/first-ask/LICENSE.md +21 -0
- package/skills/first-ask/SKILL.md +30 -0
- package/skills/first-ask/SYNC.md +5 -0
- package/skills/flowstudio-power-automate-build/LICENSE.md +21 -0
- package/skills/flowstudio-power-automate-build/SKILL.md +460 -0
- package/skills/flowstudio-power-automate-build/SYNC.md +5 -0
- package/skills/flowstudio-power-automate-build/references/action-patterns-connectors.md +542 -0
- package/skills/flowstudio-power-automate-build/references/action-patterns-core.md +542 -0
- package/skills/flowstudio-power-automate-build/references/action-patterns-data.md +735 -0
- package/skills/flowstudio-power-automate-build/references/build-patterns.md +108 -0
- package/skills/flowstudio-power-automate-build/references/flow-schema.md +225 -0
- package/skills/flowstudio-power-automate-build/references/trigger-types.md +211 -0
- package/skills/flowstudio-power-automate-debug/LICENSE.md +21 -0
- package/skills/flowstudio-power-automate-debug/SKILL.md +322 -0
- package/skills/flowstudio-power-automate-debug/SYNC.md +5 -0
- package/skills/flowstudio-power-automate-debug/references/common-errors.md +188 -0
- package/skills/flowstudio-power-automate-debug/references/debug-workflow.md +157 -0
- package/skills/flowstudio-power-automate-mcp/LICENSE.md +21 -0
- package/skills/flowstudio-power-automate-mcp/SKILL.md +450 -0
- package/skills/flowstudio-power-automate-mcp/SYNC.md +5 -0
- package/skills/flowstudio-power-automate-mcp/references/MCP-BOOTSTRAP.md +53 -0
- package/skills/flowstudio-power-automate-mcp/references/action-types.md +79 -0
- package/skills/flowstudio-power-automate-mcp/references/connection-references.md +115 -0
- package/skills/flowstudio-power-automate-mcp/references/tool-reference.md +445 -0
- package/skills/fluentui-blazor/LICENSE.md +21 -0
- package/skills/fluentui-blazor/SKILL.md +231 -0
- package/skills/fluentui-blazor/SYNC.md +5 -0
- package/skills/fluentui-blazor/references/DATAGRID.md +162 -0
- package/skills/fluentui-blazor/references/LAYOUT-AND-NAVIGATION.md +173 -0
- package/skills/fluentui-blazor/references/SETUP.md +129 -0
- package/skills/fluentui-blazor/references/THEMING.md +103 -0
- package/skills/folder-structure-blueprint-generator/LICENSE.md +21 -0
- package/skills/folder-structure-blueprint-generator/SKILL.md +405 -0
- package/skills/folder-structure-blueprint-generator/SYNC.md +5 -0
- package/skills/game-engine/LICENSE.md +21 -0
- package/skills/game-engine/SKILL.md +139 -0
- package/skills/game-engine/SYNC.md +5 -0
- package/skills/game-engine/assets/2d-maze-game.md +528 -0
- package/skills/game-engine/assets/2d-platform-game.md +1855 -0
- package/skills/game-engine/assets/gameBase-template-repo.md +310 -0
- package/skills/game-engine/assets/paddle-game-template.md +1528 -0
- package/skills/game-engine/assets/simple-2d-engine.md +507 -0
- package/skills/game-engine/references/3d-web-games.md +754 -0
- package/skills/game-engine/references/algorithms.md +843 -0
- package/skills/game-engine/references/basics.md +343 -0
- package/skills/game-engine/references/game-control-mechanisms.md +617 -0
- package/skills/game-engine/references/game-engine-core-principles.md +695 -0
- package/skills/game-engine/references/game-publishing.md +352 -0
- package/skills/game-engine/references/techniques.md +894 -0
- package/skills/game-engine/references/terminology.md +354 -0
- package/skills/game-engine/references/web-apis.md +1394 -0
- package/skills/gen-specs-as-issues/LICENSE.md +21 -0
- package/skills/gen-specs-as-issues/SKILL.md +165 -0
- package/skills/gen-specs-as-issues/SYNC.md +5 -0
- package/skills/generate-custom-instructions-from-codebase/LICENSE.md +21 -0
- package/skills/generate-custom-instructions-from-codebase/SKILL.md +240 -0
- package/skills/generate-custom-instructions-from-codebase/SYNC.md +5 -0
- package/skills/geofeed-tuner/LICENSE.md +21 -0
- package/skills/geofeed-tuner/SKILL.md +864 -0
- package/skills/geofeed-tuner/SYNC.md +5 -0
- package/skills/geofeed-tuner/assets/example/01-user-input-rfc8805-feed.csv +5 -0
- package/skills/geofeed-tuner/assets/iso3166-1.json +1249 -0
- package/skills/geofeed-tuner/assets/iso3166-2.json +20188 -0
- package/skills/geofeed-tuner/assets/small-territories.json +106 -0
- package/skills/geofeed-tuner/references/rfc8805.txt +735 -0
- package/skills/geofeed-tuner/references/snippets-python3.md +85 -0
- package/skills/geofeed-tuner/scripts/templates/index.html +2305 -0
- package/skills/gh-cli/LICENSE.md +21 -0
- package/skills/gh-cli/SKILL.md +2187 -0
- package/skills/gh-cli/SYNC.md +5 -0
- package/skills/git-commit/LICENSE.md +21 -0
- package/skills/git-commit/SKILL.md +124 -0
- package/skills/git-commit/SYNC.md +5 -0
- package/skills/git-flow-branch-creator/LICENSE.md +21 -0
- package/skills/git-flow-branch-creator/SKILL.md +292 -0
- package/skills/git-flow-branch-creator/SYNC.md +5 -0
- package/skills/github-copilot-starter/LICENSE.md +21 -0
- package/skills/github-copilot-starter/SKILL.md +402 -0
- package/skills/github-copilot-starter/SYNC.md +5 -0
- package/skills/github-issues/LICENSE.md +21 -0
- package/skills/github-issues/SKILL.md +201 -0
- package/skills/github-issues/SYNC.md +5 -0
- package/skills/github-issues/references/dependencies.md +71 -0
- package/skills/github-issues/references/images.md +116 -0
- package/skills/github-issues/references/issue-fields.md +191 -0
- package/skills/github-issues/references/issue-types.md +72 -0
- package/skills/github-issues/references/projects.md +273 -0
- package/skills/github-issues/references/search.md +231 -0
- package/skills/github-issues/references/sub-issues.md +137 -0
- package/skills/github-issues/references/templates.md +90 -0
- package/skills/go-mcp-server-generator/LICENSE.md +21 -0
- package/skills/go-mcp-server-generator/SKILL.md +334 -0
- package/skills/go-mcp-server-generator/SYNC.md +5 -0
- package/skills/gtm-0-to-1-launch/LICENSE.md +21 -0
- package/skills/gtm-0-to-1-launch/SKILL.md +321 -0
- package/skills/gtm-0-to-1-launch/SYNC.md +5 -0
- package/skills/gtm-ai-gtm/LICENSE.md +21 -0
- package/skills/gtm-ai-gtm/SKILL.md +569 -0
- package/skills/gtm-ai-gtm/SYNC.md +5 -0
- package/skills/gtm-board-and-investor-communication/LICENSE.md +21 -0
- package/skills/gtm-board-and-investor-communication/SKILL.md +456 -0
- package/skills/gtm-board-and-investor-communication/SYNC.md +5 -0
- package/skills/gtm-developer-ecosystem/LICENSE.md +21 -0
- package/skills/gtm-developer-ecosystem/SKILL.md +310 -0
- package/skills/gtm-developer-ecosystem/SYNC.md +5 -0
- package/skills/gtm-enterprise-account-planning/LICENSE.md +21 -0
- package/skills/gtm-enterprise-account-planning/SKILL.md +429 -0
- package/skills/gtm-enterprise-account-planning/SYNC.md +5 -0
- package/skills/gtm-enterprise-onboarding/LICENSE.md +21 -0
- package/skills/gtm-enterprise-onboarding/SKILL.md +457 -0
- package/skills/gtm-enterprise-onboarding/SYNC.md +5 -0
- package/skills/gtm-operating-cadence/LICENSE.md +21 -0
- package/skills/gtm-operating-cadence/SKILL.md +420 -0
- package/skills/gtm-operating-cadence/SYNC.md +5 -0
- package/skills/gtm-partnership-architecture/LICENSE.md +21 -0
- package/skills/gtm-partnership-architecture/SKILL.md +470 -0
- package/skills/gtm-partnership-architecture/SYNC.md +5 -0
- package/skills/gtm-positioning-strategy/LICENSE.md +21 -0
- package/skills/gtm-positioning-strategy/SKILL.md +438 -0
- package/skills/gtm-positioning-strategy/SYNC.md +5 -0
- package/skills/gtm-product-led-growth/LICENSE.md +21 -0
- package/skills/gtm-product-led-growth/SKILL.md +339 -0
- package/skills/gtm-product-led-growth/SYNC.md +5 -0
- package/skills/gtm-technical-product-pricing/LICENSE.md +21 -0
- package/skills/gtm-technical-product-pricing/SKILL.md +353 -0
- package/skills/gtm-technical-product-pricing/SYNC.md +5 -0
- package/skills/image-manipulation-image-magick/LICENSE.md +21 -0
- package/skills/image-manipulation-image-magick/SKILL.md +252 -0
- package/skills/image-manipulation-image-magick/SYNC.md +5 -0
- package/skills/import-infrastructure-as-code/LICENSE.md +21 -0
- package/skills/import-infrastructure-as-code/SKILL.md +367 -0
- package/skills/import-infrastructure-as-code/SYNC.md +5 -0
- package/skills/issue-fields-migration/LICENSE.md +21 -0
- package/skills/issue-fields-migration/SKILL.md +533 -0
- package/skills/issue-fields-migration/SYNC.md +5 -0
- package/skills/issue-fields-migration/references/issue-fields-api.md +129 -0
- package/skills/issue-fields-migration/references/labels-api.md +74 -0
- package/skills/issue-fields-migration/references/projects-api.md +116 -0
- package/skills/java-add-graalvm-native-image-support/LICENSE.md +21 -0
- package/skills/java-add-graalvm-native-image-support/SKILL.md +449 -0
- package/skills/java-add-graalvm-native-image-support/SYNC.md +5 -0
- package/skills/java-docs/LICENSE.md +21 -0
- package/skills/java-docs/SKILL.md +23 -0
- package/skills/java-docs/SYNC.md +5 -0
- package/skills/java-junit/LICENSE.md +21 -0
- package/skills/java-junit/SKILL.md +63 -0
- package/skills/java-junit/SYNC.md +5 -0
- package/skills/java-mcp-server-generator/LICENSE.md +21 -0
- package/skills/java-mcp-server-generator/SKILL.md +756 -0
- package/skills/java-mcp-server-generator/SYNC.md +5 -0
- package/skills/java-refactoring-extract-method/LICENSE.md +21 -0
- package/skills/java-refactoring-extract-method/SKILL.md +104 -0
- package/skills/java-refactoring-extract-method/SYNC.md +5 -0
- package/skills/java-refactoring-remove-parameter/LICENSE.md +21 -0
- package/skills/java-refactoring-remove-parameter/SKILL.md +84 -0
- package/skills/java-refactoring-remove-parameter/SYNC.md +5 -0
- package/skills/java-springboot/LICENSE.md +21 -0
- package/skills/java-springboot/SKILL.md +65 -0
- package/skills/java-springboot/SYNC.md +5 -0
- package/skills/javascript-typescript-jest/LICENSE.md +21 -0
- package/skills/javascript-typescript-jest/SKILL.md +44 -0
- package/skills/javascript-typescript-jest/SYNC.md +5 -0
- package/skills/kotlin-mcp-server-generator/LICENSE.md +21 -0
- package/skills/kotlin-mcp-server-generator/SKILL.md +449 -0
- package/skills/kotlin-mcp-server-generator/SYNC.md +5 -0
- package/skills/kotlin-springboot/LICENSE.md +21 -0
- package/skills/kotlin-springboot/SKILL.md +70 -0
- package/skills/kotlin-springboot/SYNC.md +5 -0
- package/skills/legacy-circuit-mockups/LICENSE.md +21 -0
- package/skills/legacy-circuit-mockups/SKILL.md +276 -0
- package/skills/legacy-circuit-mockups/SYNC.md +5 -0
- package/skills/legacy-circuit-mockups/references/28256-eeprom.md +190 -0
- package/skills/legacy-circuit-mockups/references/555.md +861 -0
- package/skills/legacy-circuit-mockups/references/6502.md +221 -0
- package/skills/legacy-circuit-mockups/references/6522.md +211 -0
- package/skills/legacy-circuit-mockups/references/6C62256.md +177 -0
- package/skills/legacy-circuit-mockups/references/7400-series.md +177 -0
- package/skills/legacy-circuit-mockups/references/assembly-compiler.md +258 -0
- package/skills/legacy-circuit-mockups/references/assembly-language.md +226 -0
- package/skills/legacy-circuit-mockups/references/basic-electronic-components.md +86 -0
- package/skills/legacy-circuit-mockups/references/breadboard.md +214 -0
- package/skills/legacy-circuit-mockups/references/common-breadboard-components.md +281 -0
- package/skills/legacy-circuit-mockups/references/connecting-electronic-components.md +310 -0
- package/skills/legacy-circuit-mockups/references/emulator-28256-eeprom.md +245 -0
- package/skills/legacy-circuit-mockups/references/emulator-6502.md +251 -0
- package/skills/legacy-circuit-mockups/references/emulator-6522.md +288 -0
- package/skills/legacy-circuit-mockups/references/emulator-6C62256.md +233 -0
- package/skills/legacy-circuit-mockups/references/emulator-lcd.md +266 -0
- package/skills/legacy-circuit-mockups/references/lcd.md +208 -0
- package/skills/legacy-circuit-mockups/references/minipro.md +211 -0
- package/skills/legacy-circuit-mockups/references/t48eeprom-programmer.md +174 -0
- package/skills/make-repo-contribution/LICENSE.md +21 -0
- package/skills/make-repo-contribution/SKILL.md +90 -0
- package/skills/make-repo-contribution/SYNC.md +5 -0
- package/skills/make-repo-contribution/assets/issue-template.md +37 -0
- package/skills/make-repo-contribution/assets/pr-template.md +36 -0
- package/skills/make-skill-template/LICENSE.md +21 -0
- package/skills/make-skill-template/SKILL.md +147 -0
- package/skills/make-skill-template/SYNC.md +5 -0
- package/skills/markdown-to-html/LICENSE.md +21 -0
- package/skills/markdown-to-html/SKILL.md +916 -0
- package/skills/markdown-to-html/SYNC.md +5 -0
- package/skills/markdown-to-html/references/basic-markdown-to-html.md +420 -0
- package/skills/markdown-to-html/references/basic-markdown.md +496 -0
- package/skills/markdown-to-html/references/code-blocks-to-html.md +165 -0
- package/skills/markdown-to-html/references/code-blocks.md +70 -0
- package/skills/markdown-to-html/references/collapsed-sections-to-html.md +136 -0
- package/skills/markdown-to-html/references/collapsed-sections.md +48 -0
- package/skills/markdown-to-html/references/gomarkdown.md +253 -0
- package/skills/markdown-to-html/references/hugo.md +394 -0
- package/skills/markdown-to-html/references/jekyll.md +321 -0
- package/skills/markdown-to-html/references/marked.md +121 -0
- package/skills/markdown-to-html/references/pandoc.md +226 -0
- package/skills/markdown-to-html/references/tables-to-html.md +169 -0
- package/skills/markdown-to-html/references/tables.md +72 -0
- package/skills/markdown-to-html/references/writing-mathematical-expressions-to-html.md +350 -0
- package/skills/markdown-to-html/references/writing-mathematical-expressions.md +76 -0
- package/skills/mcp-cli/LICENSE.md +21 -0
- package/skills/mcp-cli/SKILL.md +78 -0
- package/skills/mcp-cli/SYNC.md +5 -0
- package/skills/mcp-copilot-studio-server-generator/LICENSE.md +21 -0
- package/skills/mcp-copilot-studio-server-generator/SKILL.md +118 -0
- package/skills/mcp-copilot-studio-server-generator/SYNC.md +5 -0
- package/skills/mcp-create-adaptive-cards/LICENSE.md +21 -0
- package/skills/mcp-create-adaptive-cards/SKILL.md +532 -0
- package/skills/mcp-create-adaptive-cards/SYNC.md +5 -0
- package/skills/mcp-create-declarative-agent/LICENSE.md +21 -0
- package/skills/mcp-create-declarative-agent/SKILL.md +315 -0
- package/skills/mcp-create-declarative-agent/SYNC.md +5 -0
- package/skills/mcp-deploy-manage-agents/LICENSE.md +21 -0
- package/skills/mcp-deploy-manage-agents/SKILL.md +341 -0
- package/skills/mcp-deploy-manage-agents/SYNC.md +5 -0
- package/skills/meeting-minutes/LICENSE.md +21 -0
- package/skills/meeting-minutes/SKILL.md +235 -0
- package/skills/meeting-minutes/SYNC.md +5 -0
- package/skills/memory-merger/LICENSE.md +21 -0
- package/skills/memory-merger/SKILL.md +108 -0
- package/skills/memory-merger/SYNC.md +5 -0
- package/skills/mentoring-juniors/LICENSE.md +21 -0
- package/skills/mentoring-juniors/SKILL.md +310 -0
- package/skills/mentoring-juniors/SYNC.md +5 -0
- package/skills/microsoft-agent-framework/LICENSE.md +21 -0
- package/skills/microsoft-agent-framework/SKILL.md +65 -0
- package/skills/microsoft-agent-framework/SYNC.md +5 -0
- package/skills/microsoft-agent-framework/references/dotnet.md +24 -0
- package/skills/microsoft-agent-framework/references/python.md +24 -0
- package/skills/microsoft-code-reference/LICENSE.md +21 -0
- package/skills/microsoft-code-reference/SKILL.md +99 -0
- package/skills/microsoft-code-reference/SYNC.md +5 -0
- package/skills/microsoft-docs/LICENSE.md +21 -0
- package/skills/microsoft-docs/SKILL.md +134 -0
- package/skills/microsoft-docs/SYNC.md +5 -0
- package/skills/microsoft-skill-creator/LICENSE.md +21 -0
- package/skills/microsoft-skill-creator/SKILL.md +250 -0
- package/skills/microsoft-skill-creator/SYNC.md +5 -0
- package/skills/microsoft-skill-creator/references/skill-templates.md +345 -0
- package/skills/migrating-oracle-to-postgres-stored-procedures/LICENSE.md +21 -0
- package/skills/migrating-oracle-to-postgres-stored-procedures/SKILL.md +42 -0
- package/skills/migrating-oracle-to-postgres-stored-procedures/SYNC.md +5 -0
- package/skills/mkdocs-translations/LICENSE.md +21 -0
- package/skills/mkdocs-translations/SKILL.md +108 -0
- package/skills/mkdocs-translations/SYNC.md +5 -0
- package/skills/model-recommendation/LICENSE.md +21 -0
- package/skills/model-recommendation/SKILL.md +672 -0
- package/skills/model-recommendation/SYNC.md +5 -0
- package/skills/msstore-cli/LICENSE.md +21 -0
- package/skills/msstore-cli/SKILL.md +600 -0
- package/skills/msstore-cli/SYNC.md +5 -0
- package/skills/multi-stage-dockerfile/LICENSE.md +21 -0
- package/skills/multi-stage-dockerfile/SKILL.md +46 -0
- package/skills/multi-stage-dockerfile/SYNC.md +5 -0
- package/skills/my-issues/LICENSE.md +21 -0
- package/skills/my-issues/SKILL.md +8 -0
- package/skills/my-issues/SYNC.md +5 -0
- package/skills/my-pull-requests/LICENSE.md +21 -0
- package/skills/my-pull-requests/SKILL.md +14 -0
- package/skills/my-pull-requests/SYNC.md +5 -0
- package/skills/nano-banana-pro-openrouter/LICENSE.md +21 -0
- package/skills/nano-banana-pro-openrouter/SKILL.md +74 -0
- package/skills/nano-banana-pro-openrouter/SYNC.md +5 -0
- package/skills/nano-banana-pro-openrouter/assets/SYSTEM_TEMPLATE +14 -0
- package/skills/nano-banana-pro-openrouter/scripts/generate_image.py +191 -0
- package/skills/napkin/LICENSE.md +21 -0
- package/skills/napkin/SKILL.md +154 -0
- package/skills/napkin/SYNC.md +5 -0
- package/skills/napkin/assets/napkin.html +2019 -0
- package/skills/napkin/assets/step1-activate.svg +107 -0
- package/skills/napkin/assets/step2-whiteboard.svg +157 -0
- package/skills/napkin/assets/step3-draw.svg +143 -0
- package/skills/napkin/assets/step4-share.svg +98 -0
- package/skills/napkin/assets/step5-response.svg +112 -0
- package/skills/next-intl-add-language/LICENSE.md +21 -0
- package/skills/next-intl-add-language/SKILL.md +19 -0
- package/skills/next-intl-add-language/SYNC.md +5 -0
- package/skills/noob-mode/LICENSE.md +21 -0
- package/skills/noob-mode/SKILL.md +263 -0
- package/skills/noob-mode/SYNC.md +5 -0
- package/skills/noob-mode/references/examples.md +418 -0
- package/skills/noob-mode/references/glossary.md +368 -0
- package/skills/nuget-manager/LICENSE.md +21 -0
- package/skills/nuget-manager/SKILL.md +68 -0
- package/skills/nuget-manager/SYNC.md +5 -0
- package/skills/oo-component-documentation/LICENSE.md +21 -0
- package/skills/oo-component-documentation/SKILL.md +74 -0
- package/skills/oo-component-documentation/SYNC.md +5 -0
- package/skills/oo-component-documentation/assets/documentation-template.md +97 -0
- package/skills/oo-component-documentation/references/create-mode.md +32 -0
- package/skills/oo-component-documentation/references/update-mode.md +32 -0
- package/skills/openapi-to-application-code/LICENSE.md +21 -0
- package/skills/openapi-to-application-code/SKILL.md +112 -0
- package/skills/openapi-to-application-code/SYNC.md +5 -0
- package/skills/pdftk-server/LICENSE.md +21 -0
- package/skills/pdftk-server/SKILL.md +162 -0
- package/skills/pdftk-server/SYNC.md +5 -0
- package/skills/pdftk-server/references/download.md +75 -0
- package/skills/pdftk-server/references/pdftk-cli-examples.md +193 -0
- package/skills/pdftk-server/references/pdftk-man-page.md +232 -0
- package/skills/pdftk-server/references/pdftk-server-license.md +25 -0
- package/skills/pdftk-server/references/third-party-materials.md +103 -0
- package/skills/penpot-uiux-design/LICENSE.md +21 -0
- package/skills/penpot-uiux-design/SKILL.md +342 -0
- package/skills/penpot-uiux-design/SYNC.md +5 -0
- package/skills/penpot-uiux-design/references/accessibility.md +329 -0
- package/skills/penpot-uiux-design/references/component-patterns.md +339 -0
- package/skills/penpot-uiux-design/references/platform-guidelines.md +367 -0
- package/skills/penpot-uiux-design/references/setup-troubleshooting.md +328 -0
- package/skills/php-mcp-server-generator/LICENSE.md +21 -0
- package/skills/php-mcp-server-generator/SKILL.md +522 -0
- package/skills/php-mcp-server-generator/SYNC.md +5 -0
- package/skills/planning-oracle-to-postgres-migration-integration-testing/LICENSE.md +21 -0
- package/skills/planning-oracle-to-postgres-migration-integration-testing/SKILL.md +44 -0
- package/skills/planning-oracle-to-postgres-migration-integration-testing/SYNC.md +5 -0
- package/skills/plantuml-ascii/LICENSE.md +21 -0
- package/skills/plantuml-ascii/SKILL.md +305 -0
- package/skills/plantuml-ascii/SYNC.md +5 -0
- package/skills/playwright-automation-fill-in-form/LICENSE.md +21 -0
- package/skills/playwright-automation-fill-in-form/SKILL.md +28 -0
- package/skills/playwright-automation-fill-in-form/SYNC.md +5 -0
- package/skills/playwright-explore-website/LICENSE.md +21 -0
- package/skills/playwright-explore-website/SKILL.md +17 -0
- package/skills/playwright-explore-website/SYNC.md +5 -0
- package/skills/playwright-generate-test/LICENSE.md +21 -0
- package/skills/playwright-generate-test/SKILL.md +17 -0
- package/skills/playwright-generate-test/SYNC.md +5 -0
- package/skills/polyglot-test-agent/LICENSE.md +21 -0
- package/skills/polyglot-test-agent/SKILL.md +161 -0
- package/skills/polyglot-test-agent/SYNC.md +5 -0
- package/skills/polyglot-test-agent/unit-test-generation.prompt.md +155 -0
- package/skills/postgresql-code-review/LICENSE.md +21 -0
- package/skills/postgresql-code-review/SKILL.md +212 -0
- package/skills/postgresql-code-review/SYNC.md +5 -0
- package/skills/postgresql-optimization/LICENSE.md +21 -0
- package/skills/postgresql-optimization/SKILL.md +404 -0
- package/skills/postgresql-optimization/SYNC.md +5 -0
- package/skills/power-apps-code-app-scaffold/LICENSE.md +21 -0
- package/skills/power-apps-code-app-scaffold/SKILL.md +146 -0
- package/skills/power-apps-code-app-scaffold/SYNC.md +5 -0
- package/skills/power-bi-dax-optimization/LICENSE.md +21 -0
- package/skills/power-bi-dax-optimization/SKILL.md +173 -0
- package/skills/power-bi-dax-optimization/SYNC.md +5 -0
- package/skills/power-bi-model-design-review/LICENSE.md +21 -0
- package/skills/power-bi-model-design-review/SKILL.md +403 -0
- package/skills/power-bi-model-design-review/SYNC.md +5 -0
- package/skills/power-bi-performance-troubleshooting/LICENSE.md +21 -0
- package/skills/power-bi-performance-troubleshooting/SKILL.md +382 -0
- package/skills/power-bi-performance-troubleshooting/SYNC.md +5 -0
- package/skills/power-bi-report-design-consultation/LICENSE.md +21 -0
- package/skills/power-bi-report-design-consultation/SKILL.md +351 -0
- package/skills/power-bi-report-design-consultation/SYNC.md +5 -0
- package/skills/power-platform-mcp-connector-suite/LICENSE.md +21 -0
- package/skills/power-platform-mcp-connector-suite/SKILL.md +156 -0
- package/skills/power-platform-mcp-connector-suite/SYNC.md +5 -0
- package/skills/powerbi-modeling/LICENSE.md +21 -0
- package/skills/powerbi-modeling/SKILL.md +153 -0
- package/skills/powerbi-modeling/SYNC.md +5 -0
- package/skills/powerbi-modeling/references/MEASURES-DAX.md +195 -0
- package/skills/powerbi-modeling/references/PERFORMANCE.md +215 -0
- package/skills/powerbi-modeling/references/RELATIONSHIPS.md +147 -0
- package/skills/powerbi-modeling/references/RLS.md +226 -0
- package/skills/powerbi-modeling/references/STAR-SCHEMA.md +103 -0
- package/skills/prd/LICENSE.md +21 -0
- package/skills/prd/SKILL.md +143 -0
- package/skills/prd/SYNC.md +5 -0
- package/skills/premium-frontend-ui/LICENSE.md +21 -0
- package/skills/premium-frontend-ui/SKILL.md +110 -0
- package/skills/premium-frontend-ui/SYNC.md +5 -0
- package/skills/project-workflow-analysis-blueprint-generator/LICENSE.md +21 -0
- package/skills/project-workflow-analysis-blueprint-generator/SKILL.md +293 -0
- package/skills/project-workflow-analysis-blueprint-generator/SYNC.md +5 -0
- package/skills/prompt-builder/LICENSE.md +21 -0
- package/skills/prompt-builder/SKILL.md +141 -0
- package/skills/prompt-builder/SYNC.md +5 -0
- package/skills/publish-to-pages/LICENSE.md +21 -0
- package/skills/publish-to-pages/SKILL.md +107 -0
- package/skills/publish-to-pages/SYNC.md +5 -0
- package/skills/publish-to-pages/scripts/convert-pdf.py +176 -0
- package/skills/publish-to-pages/scripts/convert-pptx.py +376 -0
- package/skills/publish-to-pages/scripts/publish.sh +51 -0
- package/skills/pytest-coverage/LICENSE.md +21 -0
- package/skills/pytest-coverage/SKILL.md +28 -0
- package/skills/pytest-coverage/SYNC.md +5 -0
- package/skills/python-mcp-server-generator/LICENSE.md +21 -0
- package/skills/python-mcp-server-generator/SKILL.md +105 -0
- package/skills/python-mcp-server-generator/SYNC.md +5 -0
- package/skills/quasi-coder/LICENSE.md +21 -0
- package/skills/quasi-coder/SKILL.md +369 -0
- package/skills/quasi-coder/SYNC.md +5 -0
- package/skills/readme-blueprint-generator/LICENSE.md +21 -0
- package/skills/readme-blueprint-generator/SKILL.md +78 -0
- package/skills/readme-blueprint-generator/SYNC.md +5 -0
- package/skills/refactor/LICENSE.md +21 -0
- package/skills/refactor/SKILL.md +645 -0
- package/skills/refactor/SYNC.md +5 -0
- package/skills/refactor-method-complexity-reduce/LICENSE.md +21 -0
- package/skills/refactor-method-complexity-reduce/SKILL.md +98 -0
- package/skills/refactor-method-complexity-reduce/SYNC.md +5 -0
- package/skills/refactor-plan/LICENSE.md +21 -0
- package/skills/refactor-plan/SKILL.md +65 -0
- package/skills/refactor-plan/SYNC.md +5 -0
- package/skills/remember/LICENSE.md +21 -0
- package/skills/remember/SKILL.md +126 -0
- package/skills/remember/SYNC.md +5 -0
- package/skills/remember-interactive-programming/LICENSE.md +21 -0
- package/skills/remember-interactive-programming/SKILL.md +13 -0
- package/skills/remember-interactive-programming/SYNC.md +5 -0
- package/skills/repo-story-time/LICENSE.md +21 -0
- package/skills/repo-story-time/SKILL.md +154 -0
- package/skills/repo-story-time/SYNC.md +5 -0
- package/skills/review-and-refactor/LICENSE.md +21 -0
- package/skills/review-and-refactor/SKILL.md +15 -0
- package/skills/review-and-refactor/SYNC.md +5 -0
- package/skills/reviewing-oracle-to-postgres-migration/LICENSE.md +21 -0
- package/skills/reviewing-oracle-to-postgres-migration/SKILL.md +67 -0
- package/skills/reviewing-oracle-to-postgres-migration/SYNC.md +5 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/REFERENCE.md +13 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/empty-strings-handling.md +69 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/no-data-found-exceptions.md +99 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/oracle-parentheses-from-clause.md +190 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-sorting.md +51 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-timestamp-timezone.md +187 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-to-char-numeric.md +145 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/oracle-to-postgres-type-coercion.md +182 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/postgres-concurrent-transactions.md +259 -0
- package/skills/reviewing-oracle-to-postgres-migration/references/postgres-refcursor-handling.md +148 -0
- package/skills/ruby-mcp-server-generator/LICENSE.md +21 -0
- package/skills/ruby-mcp-server-generator/SKILL.md +660 -0
- package/skills/ruby-mcp-server-generator/SYNC.md +5 -0
- package/skills/rust-mcp-server-generator/LICENSE.md +21 -0
- package/skills/rust-mcp-server-generator/SKILL.md +577 -0
- package/skills/rust-mcp-server-generator/SYNC.md +5 -0
- package/skills/sandbox-npm-install/LICENSE.md +21 -0
- package/skills/sandbox-npm-install/SKILL.md +80 -0
- package/skills/sandbox-npm-install/SYNC.md +5 -0
- package/skills/sandbox-npm-install/scripts/install.sh +193 -0
- package/skills/scaffolding-oracle-to-postgres-migration-test-project/LICENSE.md +21 -0
- package/skills/scaffolding-oracle-to-postgres-migration-test-project/SKILL.md +54 -0
- package/skills/scaffolding-oracle-to-postgres-migration-test-project/SYNC.md +5 -0
- package/skills/scoutqa-test/LICENSE.md +21 -0
- package/skills/scoutqa-test/SKILL.md +375 -0
- package/skills/scoutqa-test/SYNC.md +5 -0
- package/skills/secret-scanning/LICENSE.md +21 -0
- package/skills/secret-scanning/SKILL.md +224 -0
- package/skills/secret-scanning/SYNC.md +5 -0
- package/skills/secret-scanning/references/alerts-and-remediation.md +245 -0
- package/skills/secret-scanning/references/custom-patterns.md +158 -0
- package/skills/secret-scanning/references/push-protection.md +164 -0
- package/skills/semantic-kernel/LICENSE.md +21 -0
- package/skills/semantic-kernel/SKILL.md +56 -0
- package/skills/semantic-kernel/SYNC.md +5 -0
- package/skills/semantic-kernel/references/dotnet.md +15 -0
- package/skills/semantic-kernel/references/python.md +15 -0
- package/skills/shuffle-json-data/LICENSE.md +21 -0
- package/skills/shuffle-json-data/SKILL.md +150 -0
- package/skills/shuffle-json-data/SYNC.md +5 -0
- package/skills/snowflake-semanticview/LICENSE.md +21 -0
- package/skills/snowflake-semanticview/SKILL.md +83 -0
- package/skills/snowflake-semanticview/SYNC.md +5 -0
- package/skills/sponsor-finder/LICENSE.md +21 -0
- package/skills/sponsor-finder/SKILL.md +258 -0
- package/skills/sponsor-finder/SYNC.md +5 -0
- package/skills/spring-boot-testing/LICENSE.md +21 -0
- package/skills/spring-boot-testing/SKILL.md +189 -0
- package/skills/spring-boot-testing/SYNC.md +5 -0
- package/skills/spring-boot-testing/references/assertj-basics.md +207 -0
- package/skills/spring-boot-testing/references/assertj-collections.md +183 -0
- package/skills/spring-boot-testing/references/context-caching.md +115 -0
- package/skills/spring-boot-testing/references/datajpatest.md +197 -0
- package/skills/spring-boot-testing/references/instancio.md +230 -0
- package/skills/spring-boot-testing/references/mockitobean.md +232 -0
- package/skills/spring-boot-testing/references/mockmvc-classic.md +206 -0
- package/skills/spring-boot-testing/references/mockmvc-tester.md +311 -0
- package/skills/spring-boot-testing/references/restclienttest.md +227 -0
- package/skills/spring-boot-testing/references/resttestclient.md +278 -0
- package/skills/spring-boot-testing/references/sb4-migration.md +181 -0
- package/skills/spring-boot-testing/references/test-slices-overview.md +203 -0
- package/skills/spring-boot-testing/references/testcontainers-jdbc.md +234 -0
- package/skills/spring-boot-testing/references/webmvctest.md +177 -0
- package/skills/sql-code-review/LICENSE.md +21 -0
- package/skills/sql-code-review/SKILL.md +301 -0
- package/skills/sql-code-review/SYNC.md +5 -0
- package/skills/sql-optimization/LICENSE.md +21 -0
- package/skills/sql-optimization/SKILL.md +296 -0
- package/skills/sql-optimization/SYNC.md +5 -0
- package/skills/structured-autonomy-generate/LICENSE.md +21 -0
- package/skills/structured-autonomy-generate/SKILL.md +125 -0
- package/skills/structured-autonomy-generate/SYNC.md +5 -0
- package/skills/structured-autonomy-implement/LICENSE.md +21 -0
- package/skills/structured-autonomy-implement/SKILL.md +19 -0
- package/skills/structured-autonomy-implement/SYNC.md +5 -0
- package/skills/structured-autonomy-plan/LICENSE.md +21 -0
- package/skills/structured-autonomy-plan/SKILL.md +81 -0
- package/skills/structured-autonomy-plan/SYNC.md +5 -0
- package/skills/suggest-awesome-github-copilot-agents/LICENSE.md +21 -0
- package/skills/suggest-awesome-github-copilot-agents/SKILL.md +106 -0
- package/skills/suggest-awesome-github-copilot-agents/SYNC.md +5 -0
- package/skills/suggest-awesome-github-copilot-instructions/LICENSE.md +21 -0
- package/skills/suggest-awesome-github-copilot-instructions/SKILL.md +122 -0
- package/skills/suggest-awesome-github-copilot-instructions/SYNC.md +5 -0
- package/skills/suggest-awesome-github-copilot-skills/LICENSE.md +21 -0
- package/skills/suggest-awesome-github-copilot-skills/SKILL.md +130 -0
- package/skills/suggest-awesome-github-copilot-skills/SYNC.md +5 -0
- package/skills/swift-mcp-server-generator/LICENSE.md +21 -0
- package/skills/swift-mcp-server-generator/SKILL.md +669 -0
- package/skills/swift-mcp-server-generator/SYNC.md +5 -0
- package/skills/technology-stack-blueprint-generator/LICENSE.md +21 -0
- package/skills/technology-stack-blueprint-generator/SKILL.md +242 -0
- package/skills/technology-stack-blueprint-generator/SYNC.md +5 -0
- package/skills/terraform-azurerm-set-diff-analyzer/LICENSE.md +21 -0
- package/skills/terraform-azurerm-set-diff-analyzer/SKILL.md +48 -0
- package/skills/terraform-azurerm-set-diff-analyzer/SYNC.md +5 -0
- package/skills/terraform-azurerm-set-diff-analyzer/references/azurerm_set_attributes.json +154 -0
- package/skills/terraform-azurerm-set-diff-analyzer/references/azurerm_set_attributes.md +145 -0
- package/skills/terraform-azurerm-set-diff-analyzer/scripts/README.md +205 -0
- package/skills/terraform-azurerm-set-diff-analyzer/scripts/analyze_plan.py +940 -0
- package/skills/tldr-prompt/LICENSE.md +21 -0
- package/skills/tldr-prompt/SKILL.md +304 -0
- package/skills/tldr-prompt/SYNC.md +5 -0
- package/skills/transloadit-media-processing/LICENSE.md +21 -0
- package/skills/transloadit-media-processing/SKILL.md +194 -0
- package/skills/transloadit-media-processing/SYNC.md +5 -0
- package/skills/typescript-mcp-server-generator/LICENSE.md +21 -0
- package/skills/typescript-mcp-server-generator/SKILL.md +90 -0
- package/skills/typescript-mcp-server-generator/SYNC.md +5 -0
- package/skills/typespec-api-operations/LICENSE.md +21 -0
- package/skills/typespec-api-operations/SKILL.md +418 -0
- package/skills/typespec-api-operations/SYNC.md +5 -0
- package/skills/typespec-create-agent/LICENSE.md +21 -0
- package/skills/typespec-create-agent/SKILL.md +91 -0
- package/skills/typespec-create-agent/SYNC.md +5 -0
- package/skills/typespec-create-api-plugin/LICENSE.md +21 -0
- package/skills/typespec-create-api-plugin/SKILL.md +164 -0
- package/skills/typespec-create-api-plugin/SYNC.md +5 -0
- package/skills/unit-test-vue-pinia/LICENSE.md +21 -0
- package/skills/unit-test-vue-pinia/SKILL.md +198 -0
- package/skills/unit-test-vue-pinia/SYNC.md +5 -0
- package/skills/unit-test-vue-pinia/references/pinia-patterns.md +95 -0
- package/skills/update-avm-modules-in-bicep/LICENSE.md +21 -0
- package/skills/update-avm-modules-in-bicep/SKILL.md +60 -0
- package/skills/update-avm-modules-in-bicep/SYNC.md +5 -0
- package/skills/update-implementation-plan/LICENSE.md +21 -0
- package/skills/update-implementation-plan/SKILL.md +157 -0
- package/skills/update-implementation-plan/SYNC.md +5 -0
- package/skills/update-llms/LICENSE.md +21 -0
- package/skills/update-llms/SKILL.md +216 -0
- package/skills/update-llms/SYNC.md +5 -0
- package/skills/update-markdown-file-index/LICENSE.md +21 -0
- package/skills/update-markdown-file-index/SKILL.md +76 -0
- package/skills/update-markdown-file-index/SYNC.md +5 -0
- package/skills/update-specification/LICENSE.md +21 -0
- package/skills/update-specification/SKILL.md +127 -0
- package/skills/update-specification/SYNC.md +5 -0
- package/skills/vscode-ext-commands/LICENSE.md +21 -0
- package/skills/vscode-ext-commands/SKILL.md +21 -0
- package/skills/vscode-ext-commands/SYNC.md +5 -0
- package/skills/vscode-ext-localization/LICENSE.md +21 -0
- package/skills/vscode-ext-localization/SKILL.md +25 -0
- package/skills/vscode-ext-localization/SYNC.md +5 -0
- package/skills/web-coder/LICENSE.md +21 -0
- package/skills/web-coder/SKILL.md +563 -0
- package/skills/web-coder/SYNC.md +5 -0
- package/skills/web-coder/references/accessibility.md +346 -0
- package/skills/web-coder/references/architecture-patterns.md +625 -0
- package/skills/web-coder/references/browsers-engines.md +358 -0
- package/skills/web-coder/references/css-styling.md +696 -0
- package/skills/web-coder/references/data-formats-encoding.md +411 -0
- package/skills/web-coder/references/development-tools.md +502 -0
- package/skills/web-coder/references/glossary.md +649 -0
- package/skills/web-coder/references/html-markup.md +387 -0
- package/skills/web-coder/references/http-networking.md +538 -0
- package/skills/web-coder/references/javascript-programming.md +807 -0
- package/skills/web-coder/references/media-graphics.md +504 -0
- package/skills/web-coder/references/performance-optimization.md +546 -0
- package/skills/web-coder/references/security-authentication.md +603 -0
- package/skills/web-coder/references/servers-infrastructure.md +615 -0
- package/skills/web-coder/references/web-apis-dom.md +654 -0
- package/skills/web-coder/references/web-protocols-standards.md +265 -0
- package/skills/web-design-reviewer/LICENSE.md +21 -0
- package/skills/web-design-reviewer/SKILL.md +368 -0
- package/skills/web-design-reviewer/SYNC.md +5 -0
- package/skills/web-design-reviewer/references/framework-fixes.md +475 -0
- package/skills/web-design-reviewer/references/visual-checklist.md +236 -0
- package/skills/webapp-testing/LICENSE.md +21 -0
- package/skills/webapp-testing/SKILL.md +104 -67
- package/skills/webapp-testing/SYNC.md +2 -2
- package/skills/webapp-testing/assets/test-helper.js +56 -0
- package/skills/what-context-needed/LICENSE.md +21 -0
- package/skills/what-context-needed/SKILL.md +39 -0
- package/skills/what-context-needed/SYNC.md +5 -0
- package/skills/winapp-cli/LICENSE.md +21 -0
- package/skills/winapp-cli/SKILL.md +217 -0
- package/skills/winapp-cli/SYNC.md +5 -0
- package/skills/winmd-api-search/LICENSE.md +21 -0
- package/skills/winmd-api-search/LICENSE.txt +21 -0
- package/skills/winmd-api-search/SKILL.md +192 -0
- package/skills/winmd-api-search/SYNC.md +5 -0
- package/skills/winmd-api-search/scripts/Invoke-WinMdQuery.ps1 +505 -0
- package/skills/winmd-api-search/scripts/Update-WinMdCache.ps1 +208 -0
- package/skills/winmd-api-search/scripts/cache-generator/CacheGenerator.csproj +29 -0
- package/skills/winmd-api-search/scripts/cache-generator/Directory.Build.props +3 -0
- package/skills/winmd-api-search/scripts/cache-generator/Directory.Build.targets +3 -0
- package/skills/winmd-api-search/scripts/cache-generator/Directory.Packages.props +3 -0
- package/skills/winmd-api-search/scripts/cache-generator/Program.cs +1222 -0
- package/skills/winui3-migration-guide/LICENSE.md +21 -0
- package/skills/winui3-migration-guide/SKILL.md +277 -0
- package/skills/winui3-migration-guide/SYNC.md +5 -0
- package/skills/workiq-copilot/LICENSE.md +21 -0
- package/skills/workiq-copilot/SKILL.md +98 -0
- package/skills/workiq-copilot/SYNC.md +5 -0
- package/skills/write-coding-standards-from-file/LICENSE.md +21 -0
- package/skills/write-coding-standards-from-file/SKILL.md +316 -0
- package/skills/write-coding-standards-from-file/SYNC.md +5 -0
- package/skills/webapp-testing/LICENSE.txt +0 -202
- package/skills/webapp-testing/examples/console_logging.py +0 -35
- package/skills/webapp-testing/examples/element_discovery.py +0 -40
- package/skills/webapp-testing/examples/static_html_automation.py +0 -33
- package/skills/webapp-testing/scripts/with_server.py +0 -106
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sponsor-finder
|
|
3
|
+
description: Find which of a GitHub repository's dependencies are sponsorable via GitHub Sponsors. Uses deps.dev API for dependency resolution across npm, PyPI, Cargo, Go, RubyGems, Maven, and NuGet. Checks npm funding metadata, FUNDING.yml files, and web search. Verifies every link. Shows direct and transitive dependencies with OSSF Scorecard health data. Invoke with /sponsor followed by a GitHub owner/repo (e.g. "/sponsor expressjs/express").
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sponsor Finder
|
|
7
|
+
|
|
8
|
+
Discover opportunities to support the open source maintainers behind your project's dependencies. Accepts a GitHub `owner/repo` (e.g. `/sponsor expressjs/express`), uses the deps.dev API for dependency resolution and project health data, and produces a friendly sponsorship report covering both direct and transitive dependencies.
|
|
9
|
+
|
|
10
|
+
## Your Workflow
|
|
11
|
+
|
|
12
|
+
When the user types `/sponsor {owner/repo}` or provides a repository in `owner/repo` format:
|
|
13
|
+
|
|
14
|
+
1. **Parse the input** — Extract `owner` and `repo`.
|
|
15
|
+
2. **Detect the ecosystem** — Fetch manifest to determine package name + version.
|
|
16
|
+
3. **Get full dependency tree** — deps.dev `GetDependencies` (one call).
|
|
17
|
+
4. **Resolve repos** — deps.dev `GetVersion` for each dep → `relatedProjects` gives GitHub repo.
|
|
18
|
+
5. **Get project health** — deps.dev `GetProject` for unique repos → OSSF Scorecard.
|
|
19
|
+
6. **Find funding links** — npm `funding` field, FUNDING.yml, web search fallback.
|
|
20
|
+
7. **Verify every link** — fetch each URL to confirm it's live.
|
|
21
|
+
8. **Group and report** — by funding destination, sorted by impact.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 1: Detect Ecosystem and Package
|
|
26
|
+
|
|
27
|
+
Use `get_file_contents` to fetch the manifest from the target repo. Determine the ecosystem and extract the package name + latest version:
|
|
28
|
+
|
|
29
|
+
| File | Ecosystem | Package name from | Version from |
|
|
30
|
+
|------|-----------|-------------------|--------------|
|
|
31
|
+
| `package.json` | NPM | `name` field | `version` field |
|
|
32
|
+
| `requirements.txt` | PYPI | list of package names | use latest (omit version in deps.dev call) |
|
|
33
|
+
| `pyproject.toml` | PYPI | `[project.dependencies]` | use latest |
|
|
34
|
+
| `Cargo.toml` | CARGO | `[package] name` | `[package] version` |
|
|
35
|
+
| `go.mod` | GO | `module` path | extract from go.mod |
|
|
36
|
+
| `Gemfile` | RUBYGEMS | gem names | use latest |
|
|
37
|
+
| `pom.xml` | MAVEN | `groupId:artifactId` | `version` |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Step 2: Get Full Dependency Tree (deps.dev)
|
|
42
|
+
|
|
43
|
+
**This is the key step.** Use `web_fetch` to call the deps.dev API:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{PACKAGE}/versions/{VERSION}:dependencies
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
For example:
|
|
50
|
+
```
|
|
51
|
+
https://api.deps.dev/v3/systems/npm/packages/express/versions/5.2.1:dependencies
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
This returns a `nodes` array where each node has:
|
|
55
|
+
- `versionKey.name` — package name
|
|
56
|
+
- `versionKey.version` — resolved version
|
|
57
|
+
- `relation` — `"SELF"`, `"DIRECT"`, or `"INDIRECT"`
|
|
58
|
+
|
|
59
|
+
**This single call gives you the entire dependency tree** — both direct and transitive — with exact resolved versions. No need to parse lockfiles.
|
|
60
|
+
|
|
61
|
+
### URL encoding
|
|
62
|
+
Package names containing special characters must be percent-encoded:
|
|
63
|
+
- `@colors/colors` → `%40colors%2Fcolors`
|
|
64
|
+
- Encode `@` as `%40`, `/` as `%2F`
|
|
65
|
+
|
|
66
|
+
### For repos without a single root package
|
|
67
|
+
If the repo doesn't publish a package (e.g., it's an app not a library), fall back to reading `package.json` dependencies directly and calling deps.dev `GetVersion` for each.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Step 3: Resolve Each Dependency to a GitHub Repo (deps.dev)
|
|
72
|
+
|
|
73
|
+
For each dependency from the tree, call deps.dev `GetVersion`:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
https://api.deps.dev/v3/systems/{ECOSYSTEM}/packages/{NAME}/versions/{VERSION}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
From the response, extract:
|
|
80
|
+
- **`relatedProjects`** → look for `relationType: "SOURCE_REPO"` → `projectKey.id` gives `github.com/{owner}/{repo}`
|
|
81
|
+
- **`links`** → look for `label: "SOURCE_REPO"` → `url` field
|
|
82
|
+
|
|
83
|
+
This works across **all ecosystems** — npm, PyPI, Cargo, Go, RubyGems, Maven, NuGet — with the same field structure.
|
|
84
|
+
|
|
85
|
+
### Efficiency rules
|
|
86
|
+
- Process in batches of **10 at a time**.
|
|
87
|
+
- Deduplicate — multiple packages may map to the same repo.
|
|
88
|
+
- Skip deps where no GitHub project is found (count as "unresolvable").
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Step 4: Get Project Health Data (deps.dev)
|
|
93
|
+
|
|
94
|
+
For each unique GitHub repo, call deps.dev `GetProject`:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
https://api.deps.dev/v3/projects/github.com%2F{owner}%2F{repo}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
From the response, extract:
|
|
101
|
+
- **`scorecard.checks`** → find the `"Maintained"` check → `score` (0–10)
|
|
102
|
+
- **`starsCount`** — popularity indicator
|
|
103
|
+
- **`license`** — project license
|
|
104
|
+
- **`openIssuesCount`** — activity indicator
|
|
105
|
+
|
|
106
|
+
Use the Maintained score to label project health:
|
|
107
|
+
- Score 7–10 → ⭐ Actively maintained
|
|
108
|
+
- Score 4–6 → ⚠️ Partially maintained
|
|
109
|
+
- Score 0–3 → 💤 Possibly unmaintained
|
|
110
|
+
|
|
111
|
+
### Efficiency rules
|
|
112
|
+
- Only fetch for **unique repos** (not per-package).
|
|
113
|
+
- Process in batches of **10 at a time**.
|
|
114
|
+
- This step is optional — skip if rate-limited and note in output.
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Step 5: Find Funding Links
|
|
119
|
+
|
|
120
|
+
For each unique GitHub repo, check for funding information using three sources in order:
|
|
121
|
+
|
|
122
|
+
### 5a: npm `funding` field (npm ecosystem only)
|
|
123
|
+
Use `web_fetch` on `https://registry.npmjs.org/{package-name}/latest` and check for a `funding` field:
|
|
124
|
+
- **String:** `"https://github.com/sponsors/sindresorhus"` → use as URL
|
|
125
|
+
- **Object:** `{"type": "opencollective", "url": "https://opencollective.com/express"}` → use `url`
|
|
126
|
+
- **Array:** collect all URLs
|
|
127
|
+
|
|
128
|
+
### 5b: `.github/FUNDING.yml` (repo-level, then org-level fallback)
|
|
129
|
+
|
|
130
|
+
**Step 5b-i — Per-repo check:**
|
|
131
|
+
Use `get_file_contents` to fetch `{owner}/{repo}` path `.github/FUNDING.yml`.
|
|
132
|
+
|
|
133
|
+
**Step 5b-ii — Org/user-level fallback:**
|
|
134
|
+
If 5b-i returned 404 (no FUNDING.yml in the repo itself), check the owner's default community health repo:
|
|
135
|
+
Use `get_file_contents` to fetch `{owner}/.github` path `FUNDING.yml`.
|
|
136
|
+
|
|
137
|
+
GitHub supports a [default community health files](https://docs.github.com/en/communities/setting-up-your-project-for-healthy-contributions/creating-a-default-community-health-file) convention: a `.github` repository at the user/org level provides defaults for all repos that lack their own. For example, `isaacs/.github/FUNDING.yml` applies to all `isaacs/*` repos.
|
|
138
|
+
|
|
139
|
+
Only look up each unique `{owner}/.github` repo **once** — reuse the result for all repos under that owner. Process in batches of **10 owners at a time**.
|
|
140
|
+
|
|
141
|
+
Parse the YAML (same for both 5b-i and 5b-ii):
|
|
142
|
+
- `github: [username]` → `https://github.com/sponsors/{username}`
|
|
143
|
+
- `open_collective: slug` → `https://opencollective.com/{slug}`
|
|
144
|
+
- `ko_fi: username` → `https://ko-fi.com/{username}`
|
|
145
|
+
- `patreon: username` → `https://patreon.com/{username}`
|
|
146
|
+
- `tidelift: platform/package` → `https://tidelift.com/subscription/pkg/{platform-package}`
|
|
147
|
+
- `custom: [urls]` → use as-is
|
|
148
|
+
|
|
149
|
+
### 5c: Web search fallback
|
|
150
|
+
For the **top 10 unfunded dependencies** (by number of transitive dependents), use `web_search`:
|
|
151
|
+
```
|
|
152
|
+
"{package name}" github sponsors OR open collective OR funding
|
|
153
|
+
```
|
|
154
|
+
Skip packages known to be corporate-maintained (React/Meta, TypeScript/Microsoft, @types/DefinitelyTyped).
|
|
155
|
+
|
|
156
|
+
### Efficiency rules
|
|
157
|
+
- **Check 5a and 5b for all deps.** Only use 5c for top unfunded ones.
|
|
158
|
+
- Skip npm registry calls for non-npm ecosystems.
|
|
159
|
+
- Deduplicate repos — check each repo only once.
|
|
160
|
+
- **One `{owner}/.github` check per unique owner** — reuse the result for all their repos.
|
|
161
|
+
- Process org-level lookups in batches of **10 owners at a time**.
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Step 6: Verify Every Link (CRITICAL)
|
|
166
|
+
|
|
167
|
+
**Before including ANY funding link, verify it exists.**
|
|
168
|
+
|
|
169
|
+
Use `web_fetch` on each funding URL:
|
|
170
|
+
- **Valid page** → ✅ Include
|
|
171
|
+
- **404 / "not found" / "not enrolled"** → ❌ Exclude
|
|
172
|
+
- **Redirect to valid page** → ✅ Include final URL
|
|
173
|
+
|
|
174
|
+
Verify in batches of **5 at a time**. Never present unverified links.
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## Step 7: Output the Report
|
|
179
|
+
|
|
180
|
+
### Output discipline
|
|
181
|
+
|
|
182
|
+
**Minimize intermediate output during data gathering.** Do NOT announce each batch ("Batch 3 of 7…", "Now checking funding…"). Instead:
|
|
183
|
+
- Show **one brief status line** when starting each major phase (e.g., "Resolving 67 dependencies…", "Checking funding links…")
|
|
184
|
+
- **Collect ALL data before producing the report.** Never drip-feed partial tables.
|
|
185
|
+
- Output the final report as a **single cohesive block** at the end.
|
|
186
|
+
|
|
187
|
+
### Report template
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
## 💜 Sponsor Finder Report
|
|
191
|
+
|
|
192
|
+
**Repository:** {owner}/{repo} · {ecosystem} · {package}@{version}
|
|
193
|
+
**Scanned:** {date} · {total} deps ({direct} direct + {transitive} transitive)
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
### 🎯 Ways to Give Back
|
|
198
|
+
|
|
199
|
+
Sponsoring just {N} people/orgs supports {sponsorable} of your {total} dependencies — a great way to invest in the open source your project depends on.
|
|
200
|
+
|
|
201
|
+
1. **💜 @{user}** — {N} direct + {M} transitive deps · ⭐ Maintained
|
|
202
|
+
{dep1}, {dep2}, {dep3}, ...
|
|
203
|
+
https://github.com/sponsors/{user}
|
|
204
|
+
|
|
205
|
+
2. **🟠 Open Collective: {name}** — {N} direct + {M} transitive deps · ⭐ Maintained
|
|
206
|
+
{dep1}, {dep2}, {dep3}, ...
|
|
207
|
+
https://opencollective.com/{name}
|
|
208
|
+
|
|
209
|
+
3. **💜 @{user2}** — {N} direct dep · 💤 Low activity
|
|
210
|
+
{dep1}
|
|
211
|
+
https://github.com/sponsors/{user2}
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
### 📊 Coverage
|
|
216
|
+
|
|
217
|
+
- **{sponsorable}/{total}** dependencies have funding options ({percentage}%)
|
|
218
|
+
- **{destinations}** unique funding destinations
|
|
219
|
+
- **{unfunded_direct}** direct deps don't have funding set up yet ({top_names}, ...)
|
|
220
|
+
- All links verified ✅
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Report format rules
|
|
224
|
+
|
|
225
|
+
- **Lead with "🎯 Ways to Give Back"** — this is the primary output. Numbered list, sorted by total deps covered (descending).
|
|
226
|
+
- **Bare URLs on their own line** — not wrapped in markdown link syntax. This ensures they're clickable in any terminal emulator.
|
|
227
|
+
- **Inline dep names** — list the covered dependency names in a comma-separated line under each sponsor, so the user sees exactly what they're funding.
|
|
228
|
+
- **Health indicator inline** — show ⭐/⚠️/💤 next to each destination, not in a separate table column.
|
|
229
|
+
- **One "📊 Coverage" section** — compact stats. No separate "Verified Funding Links" table, no "No Funding Found" table.
|
|
230
|
+
- **Unfunded deps as a brief note** — just the count + top names. Frame as "don't have funding set up yet" rather than highlighting a gap. Never shame projects for not having funding — many maintainers prefer other forms of contribution.
|
|
231
|
+
- 💜 GitHub Sponsors, 🟠 Open Collective, ☕ Ko-fi, 🔗 Other
|
|
232
|
+
- Prioritize GitHub Sponsors links when multiple funding sources exist for the same maintainer.
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## Error Handling
|
|
237
|
+
|
|
238
|
+
- If deps.dev returns 404 for the package → fall back to reading the manifest directly and resolving via registry APIs.
|
|
239
|
+
- If deps.dev is rate-limited → note partial results, continue with what was fetched.
|
|
240
|
+
- If `get_file_contents` returns 404 for the repo → inform user repo may not exist or is private.
|
|
241
|
+
- If link verification fails → exclude the link silently.
|
|
242
|
+
- Always produce a report even if partial — never fail silently.
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Critical Rules
|
|
247
|
+
|
|
248
|
+
1. **NEVER present unverified links.** Fetch every URL before showing it. 5 verified links > 20 guessed links.
|
|
249
|
+
2. **NEVER guess from training knowledge.** Always check — funding pages change over time.
|
|
250
|
+
3. **Always be encouraging, never shaming.** Frame results positively — celebrate what IS funded, and treat unfunded deps as an opportunity, not a failing. Not every project needs or wants financial sponsorship.
|
|
251
|
+
4. **Lead with action.** The "🎯 Ways to Give Back" section is the primary output — bare clickable URLs, grouped by destination.
|
|
252
|
+
5. **Use deps.dev as primary resolver.** Fall back to registry APIs only if deps.dev is unavailable.
|
|
253
|
+
6. **Always use GitHub MCP tools** (`get_file_contents`), `web_fetch`, and `web_search` — never clone or shell out.
|
|
254
|
+
7. **Be efficient.** Batch API calls, deduplicate repos, check each owner's `.github` repo only once.
|
|
255
|
+
8. **Focus on GitHub Sponsors.** Most actionable platform — show others but prioritize GitHub.
|
|
256
|
+
9. **Deduplicate by maintainer.** Group to show real impact of sponsoring one person.
|
|
257
|
+
10. **Show the actionable minimum.** Tell users the fewest sponsorships to support the most deps.
|
|
258
|
+
11. **Minimize intermediate output.** Don't announce each batch. Collect all data, then output one cohesive report.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright GitHub, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spring-boot-testing
|
|
3
|
+
description: Expert Spring Boot 4 testing specialist that selects the best Spring Boot testing techniques for your situation with Junit 6 and AssertJ.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Spring Boot Testing
|
|
7
|
+
|
|
8
|
+
This skill provides expert guide for testing Spring Boot 4 applications with modern patterns and best practices.
|
|
9
|
+
|
|
10
|
+
## Core Principles
|
|
11
|
+
|
|
12
|
+
1. **Test Pyramid**: Unit (fast) > Slice (focused) > Integration (complete)
|
|
13
|
+
2. **Right Tool**: Use the narrowest slice that gives you confidence
|
|
14
|
+
3. **AssertJ Style**: Fluent, readable assertions over verbose matchers
|
|
15
|
+
4. **Modern APIs**: Prefer MockMvcTester and RestTestClient over legacy alternatives
|
|
16
|
+
|
|
17
|
+
## Which Test Slice?
|
|
18
|
+
|
|
19
|
+
| Scenario | Annotation | Reference |
|
|
20
|
+
|----------|------------|-----------|
|
|
21
|
+
| Controller + HTTP semantics | `@WebMvcTest` | [references/webmvctest.md](references/webmvctest.md) |
|
|
22
|
+
| Repository + JPA queries | `@DataJpaTest` | [references/datajpatest.md](references/datajpatest.md) |
|
|
23
|
+
| REST client + external APIs | `@RestClientTest` | [references/restclienttest.md](references/restclienttest.md) |
|
|
24
|
+
| JSON (de)serialization | `@JsonTest` | [references/test-slices-overview.md](references/test-slices-overview.md) |
|
|
25
|
+
| Full application | `@SpringBootTest` | [references/test-slices-overview.md](references/test-slices-overview.md) |
|
|
26
|
+
|
|
27
|
+
## Test Slices Reference
|
|
28
|
+
|
|
29
|
+
- [references/test-slices-overview.md](references/test-slices-overview.md) - Decision matrix and comparison
|
|
30
|
+
- [references/webmvctest.md](references/webmvctest.md) - Web layer with MockMvc
|
|
31
|
+
- [references/datajpatest.md](references/datajpatest.md) - Data layer with Testcontainers
|
|
32
|
+
- [references/restclienttest.md](references/restclienttest.md) - REST client testing
|
|
33
|
+
|
|
34
|
+
## Testing Tools Reference
|
|
35
|
+
|
|
36
|
+
- [references/mockmvc-tester.md](references/mockmvc-tester.md) - AssertJ-style MockMvc (3.2+)
|
|
37
|
+
- [references/mockmvc-classic.md](references/mockmvc-classic.md) - Traditional MockMvc (pre-3.2)
|
|
38
|
+
- [references/resttestclient.md](references/resttestclient.md) - Spring Boot 4+ REST client
|
|
39
|
+
- [references/mockitobean.md](references/mockitobean.md) - Mocking dependencies
|
|
40
|
+
|
|
41
|
+
## Assertion Libraries
|
|
42
|
+
|
|
43
|
+
- [references/assertj-basics.md](references/assertj-basics.md) - Scalars, strings, booleans, dates
|
|
44
|
+
- [references/assertj-collections.md](references/assertj-collections.md) - Lists, Sets, Maps, arrays
|
|
45
|
+
|
|
46
|
+
## Testcontainers
|
|
47
|
+
|
|
48
|
+
- [references/testcontainers-jdbc.md](references/testcontainers-jdbc.md) - PostgreSQL, MySQL, etc.
|
|
49
|
+
|
|
50
|
+
## Test Data Generation
|
|
51
|
+
|
|
52
|
+
- [references/instancio.md](references/instancio.md) - Generate complex test objects (3+ properties)
|
|
53
|
+
|
|
54
|
+
## Performance & Migration
|
|
55
|
+
|
|
56
|
+
- [references/context-caching.md](references/context-caching.md) - Speed up test suites
|
|
57
|
+
- [references/sb4-migration.md](references/sb4-migration.md) - Spring Boot 4.0 changes
|
|
58
|
+
|
|
59
|
+
## Quick Decision Tree
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
Testing a controller endpoint?
|
|
63
|
+
Yes → @WebMvcTest with MockMvcTester
|
|
64
|
+
|
|
65
|
+
Testing repository queries?
|
|
66
|
+
Yes → @DataJpaTest with Testcontainers (real DB)
|
|
67
|
+
|
|
68
|
+
Testing business logic in service?
|
|
69
|
+
Yes → Plain JUnit + Mockito (no Spring context)
|
|
70
|
+
|
|
71
|
+
Testing external API client?
|
|
72
|
+
Yes → @RestClientTest with MockRestServiceServer
|
|
73
|
+
|
|
74
|
+
Testing JSON mapping?
|
|
75
|
+
Yes → @JsonTest
|
|
76
|
+
|
|
77
|
+
Need full integration test?
|
|
78
|
+
Yes → @SpringBootTest with minimal context config
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Spring Boot 4 Highlights
|
|
82
|
+
|
|
83
|
+
- **RestTestClient**: Modern alternative to TestRestTemplate
|
|
84
|
+
- **@MockitoBean**: Replaces @MockBean (deprecated)
|
|
85
|
+
- **MockMvcTester**: AssertJ-style assertions for web tests
|
|
86
|
+
- **Modular starters**: Technology-specific test starters
|
|
87
|
+
- **Context pausing**: Automatic pausing of cached contexts (Spring Framework 7)
|
|
88
|
+
|
|
89
|
+
## Testing Best Practices
|
|
90
|
+
|
|
91
|
+
### Code Complexity Assessment
|
|
92
|
+
|
|
93
|
+
When a method or class is too complex to test effectively:
|
|
94
|
+
|
|
95
|
+
1. **Analyze complexity** - If you need more than 5-7 test cases to cover a single method, it's likely too complex
|
|
96
|
+
2. **Recommend refactoring** - Suggest breaking the code into smaller, focused functions
|
|
97
|
+
3. **User decision** - If the user agrees to refactor, help identify extraction points
|
|
98
|
+
4. **Proceed if needed** - If the user decides to continue with the complex code, implement tests despite the difficulty
|
|
99
|
+
|
|
100
|
+
**Example of refactoring recommendation:**
|
|
101
|
+
```java
|
|
102
|
+
// Before: Complex method hard to test
|
|
103
|
+
public Order processOrder(OrderRequest request) {
|
|
104
|
+
// Validation, discount calculation, payment, inventory, notification...
|
|
105
|
+
// 50+ lines of mixed concerns
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// After: Refactored into testable units
|
|
109
|
+
public Order processOrder(OrderRequest request) {
|
|
110
|
+
validateOrder(request);
|
|
111
|
+
var order = createOrder(request);
|
|
112
|
+
applyDiscount(order);
|
|
113
|
+
processPayment(order);
|
|
114
|
+
updateInventory(order);
|
|
115
|
+
sendNotification(order);
|
|
116
|
+
return order;
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Avoid Code Redundancy
|
|
121
|
+
|
|
122
|
+
Create helper methods for commonly used objects and mock setup to enhance readability and maintainability.
|
|
123
|
+
|
|
124
|
+
### Test Organization with @DisplayName
|
|
125
|
+
|
|
126
|
+
Use descriptive display names to clarify test intent:
|
|
127
|
+
|
|
128
|
+
```java
|
|
129
|
+
@Test
|
|
130
|
+
@DisplayName("Should calculate discount for VIP customer")
|
|
131
|
+
void shouldCalculateDiscountForVip() { }
|
|
132
|
+
|
|
133
|
+
@Test
|
|
134
|
+
@DisplayName("Should reject order when customer has insufficient credit")
|
|
135
|
+
void shouldRejectOrderForInsufficientCredit() { }
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Test Coverage Order
|
|
139
|
+
|
|
140
|
+
Always structure tests in this order:
|
|
141
|
+
|
|
142
|
+
1. **Main scenario** - The happy path, most common use case
|
|
143
|
+
2. **Other paths** - Alternative valid scenarios, edge cases
|
|
144
|
+
3. **Exceptions/Errors** - Invalid inputs, error conditions, failure modes
|
|
145
|
+
|
|
146
|
+
### Test Production Scenarios
|
|
147
|
+
|
|
148
|
+
Write tests with real production scenarios in mind. This makes tests more relatable and helps understand code behavior in actual production cases.
|
|
149
|
+
|
|
150
|
+
### Test Coverage Goals
|
|
151
|
+
|
|
152
|
+
Aim for 80% code coverage as a practical balance between quality and effort. Higher coverage is beneficial but not the only goal.
|
|
153
|
+
|
|
154
|
+
Use Jacoco maven plugin for coverage reporting and tracking.
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
**Coverage Rules:**
|
|
158
|
+
- 80+% coverage minimum
|
|
159
|
+
- Focus on meaningful assertions, not just execution
|
|
160
|
+
|
|
161
|
+
**What to Prioritize:**
|
|
162
|
+
1. Business-critical paths (payment processing, order validation)
|
|
163
|
+
2. Complex algorithms (pricing, discount calculations)
|
|
164
|
+
3. Error handling (exceptions, edge cases)
|
|
165
|
+
4. Integration points (external APIs, databases)
|
|
166
|
+
|
|
167
|
+
## Dependencies (Spring Boot 4)
|
|
168
|
+
|
|
169
|
+
```xml
|
|
170
|
+
<dependency>
|
|
171
|
+
<groupId>org.springframework.boot</groupId>
|
|
172
|
+
<artifactId>spring-boot-starter-test</artifactId>
|
|
173
|
+
<scope>test</scope>
|
|
174
|
+
</dependency>
|
|
175
|
+
|
|
176
|
+
<!-- For WebMvc tests -->
|
|
177
|
+
<dependency>
|
|
178
|
+
<groupId>org.springframework.boot</groupId>
|
|
179
|
+
<artifactId>spring-boot-starter-webmvc-test</artifactId>
|
|
180
|
+
<scope>test</scope>
|
|
181
|
+
</dependency>
|
|
182
|
+
|
|
183
|
+
<!-- For Testcontainers -->
|
|
184
|
+
<dependency>
|
|
185
|
+
<groupId>org.springframework.boot</groupId>
|
|
186
|
+
<artifactId>spring-boot-testcontainers</artifactId>
|
|
187
|
+
<scope>test</scope>
|
|
188
|
+
</dependency>
|
|
189
|
+
```
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# AssertJ Basics
|
|
2
|
+
|
|
3
|
+
Fluent assertions for readable, maintainable tests.
|
|
4
|
+
|
|
5
|
+
## Basic Assertions
|
|
6
|
+
|
|
7
|
+
### Object Equality
|
|
8
|
+
|
|
9
|
+
```java
|
|
10
|
+
assertThat(order.getStatus()).isEqualTo("PENDING");
|
|
11
|
+
assertThat(order.getId()).isNotEqualTo(0);
|
|
12
|
+
assertThat(order).isEqualTo(expectedOrder);
|
|
13
|
+
assertThat(order).isNotNull();
|
|
14
|
+
assertThat(nullOrder).isNull();
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### String Assertions
|
|
18
|
+
|
|
19
|
+
```java
|
|
20
|
+
assertThat(order.getDescription())
|
|
21
|
+
.isEqualTo("Test Order")
|
|
22
|
+
.startsWith("Test")
|
|
23
|
+
.endsWith("Order")
|
|
24
|
+
.contains("Test")
|
|
25
|
+
.hasSize(10)
|
|
26
|
+
.matches("[A-Za-z ]+");
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Number Assertions
|
|
30
|
+
|
|
31
|
+
```java
|
|
32
|
+
assertThat(order.getAmount())
|
|
33
|
+
.isEqualTo(99.99)
|
|
34
|
+
.isGreaterThan(50)
|
|
35
|
+
.isLessThan(100)
|
|
36
|
+
.isBetween(50, 100)
|
|
37
|
+
.isPositive()
|
|
38
|
+
.isNotZero();
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Boolean Assertions
|
|
42
|
+
|
|
43
|
+
```java
|
|
44
|
+
assertThat(order.isActive()).isTrue();
|
|
45
|
+
assertThat(order.isDeleted()).isFalse();
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Date/Time Assertions
|
|
49
|
+
|
|
50
|
+
```java
|
|
51
|
+
assertThat(order.getCreatedAt())
|
|
52
|
+
.isEqualTo(LocalDateTime.of(2024, 1, 15, 10, 30))
|
|
53
|
+
.isBefore(LocalDateTime.now())
|
|
54
|
+
.isAfter(LocalDateTime.of(2024, 1, 1))
|
|
55
|
+
.isCloseTo(LocalDateTime.now(), within(5, ChronoUnit.SECONDS));
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Optional Assertions
|
|
59
|
+
|
|
60
|
+
```java
|
|
61
|
+
Optional<Order> maybeOrder = orderService.findById(1L);
|
|
62
|
+
|
|
63
|
+
assertThat(maybeOrder)
|
|
64
|
+
.isPresent()
|
|
65
|
+
.hasValueSatisfying(order -> {
|
|
66
|
+
assertThat(order.getId()).isEqualTo(1L);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
assertThat(orderService.findById(999L)).isEmpty();
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Exception Assertions
|
|
73
|
+
|
|
74
|
+
### JUnit 5 Exception Handling
|
|
75
|
+
|
|
76
|
+
```java
|
|
77
|
+
@Test
|
|
78
|
+
void shouldThrowException() {
|
|
79
|
+
OrderService service = new OrderService();
|
|
80
|
+
|
|
81
|
+
assertThatThrownBy(() -> service.findById(999L))
|
|
82
|
+
.isInstanceOf(OrderNotFoundException.class)
|
|
83
|
+
.hasMessage("Order 999 not found")
|
|
84
|
+
.hasMessageContaining("999");
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### AssertJ Exception Handling
|
|
89
|
+
|
|
90
|
+
```java
|
|
91
|
+
@Test
|
|
92
|
+
void shouldThrowExceptionWithCause() {
|
|
93
|
+
assertThatExceptionOfType(OrderProcessingException.class)
|
|
94
|
+
.isThrownBy(() -> service.processOrder(invalidOrder))
|
|
95
|
+
.withCauseInstanceOf(ValidationException.class);
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Custom Assertions
|
|
100
|
+
|
|
101
|
+
Create domain-specific assertions for reusable test code:
|
|
102
|
+
|
|
103
|
+
```java
|
|
104
|
+
public class OrderAssert extends AbstractAssert<OrderAssert, Order> {
|
|
105
|
+
|
|
106
|
+
public static OrderAssert assertThat(Order actual) {
|
|
107
|
+
return new OrderAssert(actual);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private OrderAssert(Order actual) {
|
|
111
|
+
super(actual, OrderAssert.class);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public OrderAssert isPending() {
|
|
115
|
+
isNotNull();
|
|
116
|
+
if (!"PENDING".equals(actual.getStatus())) {
|
|
117
|
+
failWithMessage("Expected order status to be PENDING but was %s", actual.getStatus());
|
|
118
|
+
}
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
public OrderAssert hasTotal(BigDecimal expected) {
|
|
123
|
+
isNotNull();
|
|
124
|
+
if (!expected.equals(actual.getTotal())) {
|
|
125
|
+
failWithMessage("Expected total %s but was %s", expected, actual.getTotal());
|
|
126
|
+
}
|
|
127
|
+
return this;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Usage:
|
|
133
|
+
|
|
134
|
+
```java
|
|
135
|
+
OrderAssert.assertThat(order)
|
|
136
|
+
.isPending()
|
|
137
|
+
.hasTotal(new BigDecimal("99.99"));
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Soft Assertions
|
|
141
|
+
|
|
142
|
+
Collect multiple failures before failing:
|
|
143
|
+
|
|
144
|
+
```java
|
|
145
|
+
@Test
|
|
146
|
+
void shouldValidateOrder() {
|
|
147
|
+
Order order = orderService.findById(1L);
|
|
148
|
+
|
|
149
|
+
SoftAssertions.assertSoftly(softly -> {
|
|
150
|
+
softly.assertThat(order.getId()).isEqualTo(1L);
|
|
151
|
+
softly.assertThat(order.getStatus()).isEqualTo("PENDING");
|
|
152
|
+
softly.assertThat(order.getItems()).isNotEmpty();
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Satisfies Pattern
|
|
158
|
+
|
|
159
|
+
```java
|
|
160
|
+
assertThat(order)
|
|
161
|
+
.satisfies(o -> {
|
|
162
|
+
assertThat(o.getId()).isPositive();
|
|
163
|
+
assertThat(o.getStatus()).isNotBlank();
|
|
164
|
+
assertThat(o.getCreatedAt()).isNotNull();
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Using with Spring
|
|
169
|
+
|
|
170
|
+
```java
|
|
171
|
+
import static org.assertj.core.api.Assertions.assertThat;
|
|
172
|
+
|
|
173
|
+
@SpringBootTest
|
|
174
|
+
class OrderServiceTest {
|
|
175
|
+
|
|
176
|
+
@Autowired
|
|
177
|
+
private OrderService orderService;
|
|
178
|
+
|
|
179
|
+
@Test
|
|
180
|
+
void shouldCreateOrder() {
|
|
181
|
+
Order order = orderService.create(new OrderRequest("Product", 2));
|
|
182
|
+
|
|
183
|
+
assertThat(order)
|
|
184
|
+
.isNotNull()
|
|
185
|
+
.extracting(Order::getId, Order::getStatus)
|
|
186
|
+
.containsExactly(1L, "PENDING");
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Static Import
|
|
192
|
+
|
|
193
|
+
Always use static import for clean assertions:
|
|
194
|
+
|
|
195
|
+
```java
|
|
196
|
+
import static org.assertj.core.api.Assertions.assertThat;
|
|
197
|
+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
|
198
|
+
import static org.assertj.core.api.Assertions.catchThrowable;
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Key Benefits
|
|
202
|
+
|
|
203
|
+
1. **Readable**: Sentence-like structure
|
|
204
|
+
2. **Type-safe**: IDE autocomplete works
|
|
205
|
+
3. **Rich API**: Many built-in assertions
|
|
206
|
+
4. **Extensible**: Custom assertions for your domain
|
|
207
|
+
5. **Better Errors**: Clear failure messages
|