@ngxtm/devkit 3.3.0 → 3.4.1
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/cli/index.js +59 -13
- package/cli/rules.js +248 -0
- package/package.json +2 -1
- package/rules/README.md +141 -0
- package/rules/dart/best-practices/SKILL.md +23 -0
- package/rules/dart/language/SKILL.md +52 -0
- package/rules/dart/tooling/SKILL.md +43 -0
- package/rules/dotnet/aspnet-core/SKILL.md +92 -0
- package/rules/dotnet/aspnet-core/references/REFERENCE.md +335 -0
- package/rules/dotnet/best-practices/SKILL.md +101 -0
- package/rules/dotnet/best-practices/references/REFERENCE.md +256 -0
- package/rules/dotnet/blazor/SKILL.md +146 -0
- package/rules/dotnet/blazor/references/REFERENCE.md +392 -0
- package/rules/dotnet/language/SKILL.md +82 -0
- package/rules/dotnet/language/references/REFERENCE.md +222 -0
- package/rules/dotnet/patterns.rule.md +388 -0
- package/rules/dotnet/razor-pages/SKILL.md +124 -0
- package/rules/dotnet/razor-pages/references/REFERENCE.md +321 -0
- package/rules/dotnet/security/SKILL.md +89 -0
- package/rules/dotnet/security/references/REFERENCE.md +295 -0
- package/rules/dotnet/tooling/SKILL.md +92 -0
- package/rules/dotnet/tooling/references/REFERENCE.md +300 -0
- package/rules/flutter/auto-route-navigation/SKILL.md +43 -0
- package/rules/flutter/auto-route-navigation/references/REFERENCE.md +19 -0
- package/rules/flutter/auto-route-navigation/references/router-config.md +62 -0
- package/rules/flutter/bloc-state-management/SKILL.md +64 -0
- package/rules/flutter/bloc-state-management/references/REFERENCE.md +20 -0
- package/rules/flutter/bloc-state-management/references/auth-bloc-example.md +52 -0
- package/rules/flutter/bloc-state-management/references/equatable-usage.md +56 -0
- package/rules/flutter/bloc-state-management/references/property-based-state.md +68 -0
- package/rules/flutter/bloc.rule.md +76 -0
- package/rules/flutter/cicd/SKILL.md +48 -0
- package/rules/flutter/cicd/references/advanced-workflow.md +66 -0
- package/rules/flutter/cicd/references/fastlane.md +139 -0
- package/rules/flutter/cicd/references/github-actions.md +59 -0
- package/rules/flutter/dependency-injection/SKILL.md +42 -0
- package/rules/flutter/dependency-injection/references/REFERENCE.md +15 -0
- package/rules/flutter/dependency-injection/references/modules.md +37 -0
- package/rules/flutter/error-handling/SKILL.md +32 -0
- package/rules/flutter/error-handling/references/REFERENCE.md +19 -0
- package/rules/flutter/error-handling/references/error-mapping.md +31 -0
- package/rules/flutter/feature-based-clean-architecture/SKILL.md +46 -0
- package/rules/flutter/feature-based-clean-architecture/references/REFERENCE.md +14 -0
- package/rules/flutter/feature-based-clean-architecture/references/folder-structure.md +36 -0
- package/rules/flutter/getx-navigation/SKILL.md +70 -0
- package/rules/flutter/getx-navigation/references/app-pages.md +40 -0
- package/rules/flutter/getx-navigation/references/middleware-example.md +29 -0
- package/rules/flutter/getx-state-management/SKILL.md +76 -0
- package/rules/flutter/getx-state-management/references/binding-example.md +32 -0
- package/rules/flutter/getx-state-management/references/reactive-vs-simple.md +39 -0
- package/rules/flutter/go-router-navigation/SKILL.md +57 -0
- package/rules/flutter/idiomatic-flutter/SKILL.md +20 -0
- package/rules/flutter/layer-based-clean-architecture/SKILL.md +50 -0
- package/rules/flutter/layer-based-clean-architecture/references/REFERENCE.md +60 -0
- package/rules/flutter/layer-based-clean-architecture/references/repository-mapping.md +50 -0
- package/rules/flutter/localization/SKILL.md +50 -0
- package/rules/flutter/localization/references/REFERENCE.md +48 -0
- package/rules/flutter/localization/references/sheet-loader.md +33 -0
- package/rules/flutter/navigator-v1-navigation/SKILL.md +71 -0
- package/rules/flutter/navigator-v1-navigation/references/on-generate-route.md +48 -0
- package/rules/flutter/performance/SKILL.md +24 -0
- package/rules/flutter/retrofit-networking/SKILL.md +51 -0
- package/rules/flutter/retrofit-networking/references/REFERENCE.md +19 -0
- package/rules/flutter/retrofit-networking/references/token-refresh.md +40 -0
- package/rules/flutter/riverpod-state-management/SKILL.md +53 -0
- package/rules/flutter/riverpod-state-management/references/architecture.md +124 -0
- package/rules/flutter/riverpod-state-management/references/best-practices.md +89 -0
- package/rules/flutter/riverpod-state-management/references/testing.md +73 -0
- package/rules/flutter/riverpod.rule.md +78 -0
- package/rules/flutter/security/SKILL.md +33 -0
- package/rules/flutter/security/references/REFERENCE.md +15 -0
- package/rules/flutter/security/references/network-security.md +28 -0
- package/rules/flutter/testing/SKILL.md +44 -0
- package/rules/flutter/testing/references/REFERENCE.md +21 -0
- package/rules/flutter/testing/references/bloc-testing.md +38 -0
- package/rules/flutter/testing/references/integration-testing.md +128 -0
- package/rules/flutter/testing/references/robot-pattern.md +82 -0
- package/rules/flutter/testing/references/unit-testing.md +130 -0
- package/rules/flutter/testing/references/widget-testing.md +120 -0
- package/rules/flutter/widgets/SKILL.md +37 -0
- package/rules/golang/chi-router/SKILL.md +219 -0
- package/rules/golang/chi-router/references/REFERENCE.md +13 -0
- package/rules/golang/chi-router/references/routing-patterns.md +205 -0
- package/rules/golang/cobra-cli/SKILL.md +227 -0
- package/rules/golang/cobra-cli/references/REFERENCE.md +13 -0
- package/rules/golang/cobra-cli/references/command-patterns.md +224 -0
- package/rules/golang/core/SKILL.md +210 -0
- package/rules/golang/core/references/REFERENCE.md +14 -0
- package/rules/golang/core/references/concurrency-patterns.md +114 -0
- package/rules/golang/core/references/error-handling.md +87 -0
- package/rules/golang/echo-framework/SKILL.md +215 -0
- package/rules/golang/echo-framework/references/REFERENCE.md +14 -0
- package/rules/golang/echo-framework/references/middleware-patterns.md +141 -0
- package/rules/golang/echo-framework/references/routing-patterns.md +140 -0
- package/rules/golang/ent-orm/SKILL.md +239 -0
- package/rules/golang/ent-orm/references/REFERENCE.md +13 -0
- package/rules/golang/ent-orm/references/schema-patterns.md +255 -0
- package/rules/golang/fiber-framework/SKILL.md +196 -0
- package/rules/golang/fiber-framework/references/REFERENCE.md +13 -0
- package/rules/golang/fiber-framework/references/routing-patterns.md +191 -0
- package/rules/golang/gin-framework/SKILL.md +205 -0
- package/rules/golang/gin-framework/references/REFERENCE.md +14 -0
- package/rules/golang/gin-framework/references/middleware-patterns.md +119 -0
- package/rules/golang/gorm-orm/SKILL.md +196 -0
- package/rules/golang/gorm-orm/references/REFERENCE.md +14 -0
- package/rules/golang/gorm-orm/references/model-definitions.md +167 -0
- package/rules/golang/gorm-orm/references/query-patterns.md +161 -0
- package/rules/golang/grpc/SKILL.md +231 -0
- package/rules/golang/grpc/references/REFERENCE.md +13 -0
- package/rules/golang/grpc/references/service-patterns.md +276 -0
- package/rules/golang/testify/SKILL.md +239 -0
- package/rules/golang/testify/references/REFERENCE.md +13 -0
- package/rules/golang/testify/references/assert-patterns.md +170 -0
- package/rules/golang/validator/SKILL.md +234 -0
- package/rules/golang/validator/references/REFERENCE.md +13 -0
- package/rules/golang/validator/references/validation-tags.md +211 -0
- package/rules/golang/viper-config/SKILL.md +244 -0
- package/rules/golang/viper-config/references/REFERENCE.md +13 -0
- package/rules/golang/viper-config/references/config-loading.md +181 -0
- package/rules/golang/wire-di/SKILL.md +243 -0
- package/rules/golang/wire-di/references/REFERENCE.md +13 -0
- package/rules/golang/wire-di/references/provider-patterns.md +193 -0
- package/rules/golang/zap-logging/SKILL.md +203 -0
- package/rules/golang/zap-logging/references/REFERENCE.md +13 -0
- package/rules/golang/zap-logging/references/logger-config.md +165 -0
- package/rules/java/build-gradle/SKILL.md +92 -0
- package/rules/java/build-gradle/references/REFERENCE.md +14 -0
- package/rules/java/build-gradle/references/kotlin-dsl.md +118 -0
- package/rules/java/build-gradle/references/task-configuration.md +132 -0
- package/rules/java/build-maven/SKILL.md +86 -0
- package/rules/java/build-maven/references/REFERENCE.md +14 -0
- package/rules/java/build-maven/references/dependency-management.md +111 -0
- package/rules/java/build-maven/references/lifecycle-phases.md +114 -0
- package/rules/java/graalvm-native/SKILL.md +105 -0
- package/rules/java/graalvm-native/references/REFERENCE.md +12 -0
- package/rules/java/java-collections-streams/SKILL.md +148 -0
- package/rules/java/java-collections-streams/references/REFERENCE.md +15 -0
- package/rules/java/java-collections-streams/references/collectors-patterns.md +178 -0
- package/rules/java/java-collections-streams/references/stream-pipelines.md +165 -0
- package/rules/java/java-concurrency/SKILL.md +187 -0
- package/rules/java/java-concurrency/references/REFERENCE.md +17 -0
- package/rules/java/java-concurrency/references/completable-future.md +165 -0
- package/rules/java/java-concurrency/references/executor-patterns.md +176 -0
- package/rules/java/java-concurrency/references/virtual-threads.md +190 -0
- package/rules/java/java-core-language/SKILL.md +121 -0
- package/rules/java/java-core-language/references/REFERENCE.md +15 -0
- package/rules/java/java-core-language/references/jvm-memory-model.md +160 -0
- package/rules/java/java-core-language/references/modern-java-features.md +168 -0
- package/rules/java/java-project-structure/SKILL.md +195 -0
- package/rules/java/java-project-structure/references/REFERENCE.md +15 -0
- package/rules/java/java-project-structure/references/maven-project-layout.md +199 -0
- package/rules/java/java-project-structure/references/module-system.md +159 -0
- package/rules/java/micronaut-core/SKILL.md +99 -0
- package/rules/java/micronaut-core/references/REFERENCE.md +12 -0
- package/rules/java/micronaut-reactive/SKILL.md +68 -0
- package/rules/java/micronaut-reactive/references/REFERENCE.md +12 -0
- package/rules/java/quarkus-core/SKILL.md +85 -0
- package/rules/java/quarkus-core/references/REFERENCE.md +12 -0
- package/rules/java/quarkus-reactive/SKILL.md +67 -0
- package/rules/java/quarkus-reactive/references/REFERENCE.md +12 -0
- package/rules/java/spring-batch/SKILL.md +102 -0
- package/rules/java/spring-batch/references/REFERENCE.md +12 -0
- package/rules/java/spring-boot-architecture/SKILL.md +206 -0
- package/rules/java/spring-boot-architecture/references/REFERENCE.md +15 -0
- package/rules/java/spring-boot-architecture/references/auto-configuration.md +158 -0
- package/rules/java/spring-boot-architecture/references/configuration-properties.md +202 -0
- package/rules/java/spring-boot-web/SKILL.md +217 -0
- package/rules/java/spring-boot-web/references/REFERENCE.md +17 -0
- package/rules/java/spring-cloud/SKILL.md +109 -0
- package/rules/java/spring-cloud/references/REFERENCE.md +13 -0
- package/rules/java/spring-data-jpa/SKILL.md +241 -0
- package/rules/java/spring-data-jpa/references/REFERENCE.md +16 -0
- package/rules/java/spring-security/SKILL.md +161 -0
- package/rules/java/spring-security/references/REFERENCE.md +16 -0
- package/rules/java/spring-security/references/jwt-auth-flow.md +213 -0
- package/rules/java/testing-junit-mockito/SKILL.md +135 -0
- package/rules/java/testing-junit-mockito/references/REFERENCE.md +15 -0
- package/rules/java/testing-junit-mockito/references/junit5-patterns.md +159 -0
- package/rules/java/testing-junit-mockito/references/mockito-patterns.md +148 -0
- package/rules/java/testing-junit-mockito/references/spring-boot-testing.md +152 -0
- package/rules/javascript/best-practices/SKILL.md +64 -0
- package/rules/javascript/best-practices/references/REFERENCE.md +91 -0
- package/rules/javascript/language/SKILL.md +71 -0
- package/rules/javascript/language/references/REFERENCE.md +106 -0
- package/rules/javascript/tooling/SKILL.md +60 -0
- package/rules/javascript/tooling/references/REFERENCE.md +107 -0
- package/rules/metadata.json +54 -0
- package/rules/nestjs/api-standards/SKILL.md +47 -0
- package/rules/nestjs/api-standards/references/pagination-wrapper.md +87 -0
- package/rules/nestjs/architecture/SKILL.md +68 -0
- package/rules/nestjs/architecture/references/dynamic-module.md +53 -0
- package/rules/nestjs/caching/SKILL.md +51 -0
- package/rules/nestjs/caching/references/REFERENCE.md +13 -0
- package/rules/nestjs/caching/references/cache-patterns.md +183 -0
- package/rules/nestjs/configuration/SKILL.md +41 -0
- package/rules/nestjs/configuration/references/REFERENCE.md +13 -0
- package/rules/nestjs/configuration/references/config-patterns.md +184 -0
- package/rules/nestjs/controllers-services/SKILL.md +63 -0
- package/rules/nestjs/controllers-services/references/REFERENCE.md +14 -0
- package/rules/nestjs/controllers-services/references/controller-patterns.md +119 -0
- package/rules/nestjs/controllers-services/references/service-patterns.md +129 -0
- package/rules/nestjs/database/SKILL.md +102 -0
- package/rules/nestjs/database/references/REFERENCE.md +14 -0
- package/rules/nestjs/database/references/typeorm-patterns.md +156 -0
- package/rules/nestjs/deployment/SKILL.md +36 -0
- package/rules/nestjs/deployment/references/REFERENCE.md +13 -0
- package/rules/nestjs/deployment/references/deployment-patterns.md +140 -0
- package/rules/nestjs/documentation/SKILL.md +64 -0
- package/rules/nestjs/documentation/references/REFERENCE.md +13 -0
- package/rules/nestjs/documentation/references/swagger-patterns.md +139 -0
- package/rules/nestjs/error-handling/SKILL.md +55 -0
- package/rules/nestjs/error-handling/references/REFERENCE.md +13 -0
- package/rules/nestjs/error-handling/references/exception-filters.md +152 -0
- package/rules/nestjs/file-uploads/SKILL.md +35 -0
- package/rules/nestjs/file-uploads/references/REFERENCE.md +13 -0
- package/rules/nestjs/file-uploads/references/upload-patterns.md +125 -0
- package/rules/nestjs/observability/SKILL.md +39 -0
- package/rules/nestjs/observability/references/REFERENCE.md +13 -0
- package/rules/nestjs/observability/references/logging-metrics.md +175 -0
- package/rules/nestjs/performance/SKILL.md +60 -0
- package/rules/nestjs/performance/references/REFERENCE.md +13 -0
- package/rules/nestjs/performance/references/performance-patterns.md +107 -0
- package/rules/nestjs/real-time/SKILL.md +45 -0
- package/rules/nestjs/real-time/references/REFERENCE.md +13 -0
- package/rules/nestjs/real-time/references/websocket-patterns.md +121 -0
- package/rules/nestjs/scheduling/SKILL.md +39 -0
- package/rules/nestjs/scheduling/references/REFERENCE.md +13 -0
- package/rules/nestjs/scheduling/references/scheduling-patterns.md +137 -0
- package/rules/nestjs/search/SKILL.md +41 -0
- package/rules/nestjs/search/references/REFERENCE.md +13 -0
- package/rules/nestjs/search/references/search-patterns.md +137 -0
- package/rules/nestjs/security/SKILL.md +87 -0
- package/rules/nestjs/security/references/REFERENCE.md +14 -0
- package/rules/nestjs/security/references/authentication.md +151 -0
- package/rules/nestjs/testing/SKILL.md +40 -0
- package/rules/nestjs/testing/references/REFERENCE.md +14 -0
- package/rules/nestjs/testing/references/unit-testing.md +179 -0
- package/rules/nestjs/transport/SKILL.md +45 -0
- package/rules/nestjs/transport/references/REFERENCE.md +13 -0
- package/rules/nestjs/transport/references/microservices-patterns.md +170 -0
- package/rules/nextjs/app-router/SKILL.md +46 -0
- package/rules/nextjs/app-router/references/REFERENCE.md +14 -0
- package/rules/nextjs/app-router/references/routing-patterns.md +182 -0
- package/rules/nextjs/architecture/SKILL.md +44 -0
- package/rules/nextjs/architecture/references/fsd-structure.md +77 -0
- package/rules/nextjs/authentication/SKILL.md +29 -0
- package/rules/nextjs/authentication/references/auth-implementation.md +73 -0
- package/rules/nextjs/caching/SKILL.md +66 -0
- package/rules/nextjs/caching/references/REFERENCE.md +13 -0
- package/rules/nextjs/caching/references/cache-strategies.md +168 -0
- package/rules/nextjs/data-access-layer/SKILL.md +33 -0
- package/rules/nextjs/data-access-layer/references/patterns.md +66 -0
- package/rules/nextjs/data-fetching/SKILL.md +59 -0
- package/rules/nextjs/data-fetching/references/REFERENCE.md +13 -0
- package/rules/nextjs/data-fetching/references/fetch-patterns.md +160 -0
- package/rules/nextjs/internationalization/SKILL.md +105 -0
- package/rules/nextjs/internationalization/references/REFERENCE.md +13 -0
- package/rules/nextjs/internationalization/references/i18n-patterns.md +180 -0
- package/rules/nextjs/optimization/SKILL.md +64 -0
- package/rules/nextjs/optimization/references/REFERENCE.md +13 -0
- package/rules/nextjs/optimization/references/optimization-patterns.md +190 -0
- package/rules/nextjs/rendering/SKILL.md +91 -0
- package/rules/nextjs/rendering/references/REFERENCE.md +13 -0
- package/rules/nextjs/rendering/references/rendering-modes.md +163 -0
- package/rules/nextjs/server-actions/SKILL.md +46 -0
- package/rules/nextjs/server-actions/references/REFERENCE.md +13 -0
- package/rules/nextjs/server-actions/references/action-patterns.md +188 -0
- package/rules/nextjs/server-components/SKILL.md +52 -0
- package/rules/nextjs/server-components/references/REFERENCE.md +13 -0
- package/rules/nextjs/server-components/references/component-patterns.md +175 -0
- package/rules/nextjs/state-management/SKILL.md +73 -0
- package/rules/nextjs/state-management/references/REFERENCE.md +13 -0
- package/rules/nextjs/state-management/references/state-patterns.md +218 -0
- package/rules/nextjs/styling/SKILL.md +31 -0
- package/rules/nextjs/styling/references/implementation.md +56 -0
- package/rules/react/component-patterns/SKILL.md +66 -0
- package/rules/react/component-patterns/references/REFERENCE.md +126 -0
- package/rules/react/hooks/SKILL.md +60 -0
- package/rules/react/hooks/references/REFERENCE.md +132 -0
- package/rules/react/hooks.rule.md +79 -0
- package/rules/react/performance/SKILL.md +69 -0
- package/rules/react/performance/references/REFERENCE.md +143 -0
- package/rules/react/security/SKILL.md +46 -0
- package/rules/react/security/references/REFERENCE.md +170 -0
- package/rules/react/state-management/SKILL.md +56 -0
- package/rules/react/state-management/references/REFERENCE.md +137 -0
- package/rules/react/testing/SKILL.md +45 -0
- package/rules/react/testing/references/REFERENCE.md +149 -0
- package/rules/react/tooling/SKILL.md +39 -0
- package/rules/react/typescript/SKILL.md +53 -0
- package/rules/rust/actix-web/SKILL.md +160 -0
- package/rules/rust/actix-web/references/REFERENCE.md +13 -0
- package/rules/rust/actix-web/references/handler-patterns.md +198 -0
- package/rules/rust/async-graphql/SKILL.md +228 -0
- package/rules/rust/async-graphql/references/REFERENCE.md +13 -0
- package/rules/rust/async-graphql/references/schema-patterns.md +215 -0
- package/rules/rust/axum/SKILL.md +161 -0
- package/rules/rust/axum/references/REFERENCE.md +14 -0
- package/rules/rust/axum/references/handler-patterns.md +97 -0
- package/rules/rust/bevy/SKILL.md +206 -0
- package/rules/rust/bevy/references/REFERENCE.md +13 -0
- package/rules/rust/bevy/references/ecs-patterns.md +226 -0
- package/rules/rust/clap/SKILL.md +217 -0
- package/rules/rust/clap/references/REFERENCE.md +13 -0
- package/rules/rust/clap/references/derive-patterns.md +205 -0
- package/rules/rust/core/SKILL.md +154 -0
- package/rules/rust/core/references/REFERENCE.md +14 -0
- package/rules/rust/core/references/error-handling.md +92 -0
- package/rules/rust/diesel-orm/SKILL.md +176 -0
- package/rules/rust/diesel-orm/references/REFERENCE.md +13 -0
- package/rules/rust/diesel-orm/references/schema-patterns.md +206 -0
- package/rules/rust/rocket/SKILL.md +182 -0
- package/rules/rust/rocket/references/REFERENCE.md +13 -0
- package/rules/rust/rocket/references/handler-patterns.md +209 -0
- package/rules/rust/sea-orm/SKILL.md +230 -0
- package/rules/rust/sea-orm/references/REFERENCE.md +13 -0
- package/rules/rust/sea-orm/references/entity-patterns.md +221 -0
- package/rules/rust/serde-serialization/SKILL.md +150 -0
- package/rules/rust/serde-serialization/references/REFERENCE.md +13 -0
- package/rules/rust/serde-serialization/references/serialization-patterns.md +199 -0
- package/rules/rust/sqlx-database/SKILL.md +140 -0
- package/rules/rust/sqlx-database/references/REFERENCE.md +13 -0
- package/rules/rust/sqlx-database/references/query-patterns.md +210 -0
- package/rules/rust/tauri/SKILL.md +180 -0
- package/rules/rust/tauri/references/REFERENCE.md +13 -0
- package/rules/rust/tauri/references/command-patterns.md +209 -0
- package/rules/rust/tokio-runtime/SKILL.md +167 -0
- package/rules/rust/tokio-runtime/references/REFERENCE.md +14 -0
- package/rules/rust/tokio-runtime/references/async-patterns.md +137 -0
- package/rules/rust/tokio-runtime/references/synchronization.md +152 -0
- package/rules/rust/tonic/SKILL.md +231 -0
- package/rules/rust/tonic/references/REFERENCE.md +13 -0
- package/rules/rust/tonic/references/service-patterns.md +213 -0
- package/rules/rust/tracing/SKILL.md +214 -0
- package/rules/rust/tracing/references/REFERENCE.md +13 -0
- package/rules/rust/tracing/references/instrumentation.md +187 -0
- package/rules/typescript/best-practices/SKILL.md +108 -0
- package/rules/typescript/best-practices/references/REFERENCE.md +68 -0
- package/rules/typescript/language/SKILL.md +72 -0
- package/rules/typescript/language/references/REFERENCE.md +67 -0
- package/rules/typescript/patterns.rule.md +85 -0
- package/rules/typescript/security/SKILL.md +59 -0
- package/rules/typescript/security/references/REFERENCE.md +113 -0
- package/rules/typescript/tooling/SKILL.md +52 -0
- package/rules/typescript/tooling/references/REFERENCE.md +110 -0
package/cli/index.js
CHANGED
|
@@ -17,6 +17,7 @@ const { initProject, uninstallProject } = require('./init');
|
|
|
17
17
|
const { updateProject, showStatus } = require('./update');
|
|
18
18
|
const { detectProjectType, getRulesForTypes, printDetectionResults } = require('./detect');
|
|
19
19
|
const { validatePath } = require('./utils');
|
|
20
|
+
const { listRules, addRules, removeRules } = require('./rules');
|
|
20
21
|
|
|
21
22
|
// Legacy imports for backwards compatibility (will be deprecated)
|
|
22
23
|
let legacyInstall = null;
|
|
@@ -38,6 +39,8 @@ function parseArgs(args) {
|
|
|
38
39
|
update: false,
|
|
39
40
|
clean: false,
|
|
40
41
|
help: false,
|
|
42
|
+
installed: false,
|
|
43
|
+
ruleArgs: [],
|
|
41
44
|
// Legacy options (deprecated)
|
|
42
45
|
tool: null,
|
|
43
46
|
minimal: false,
|
|
@@ -57,6 +60,8 @@ function parseArgs(args) {
|
|
|
57
60
|
options.update = true;
|
|
58
61
|
} else if (arg === '--clean' || arg === '-c') {
|
|
59
62
|
options.clean = true;
|
|
63
|
+
} else if (arg === '--installed' || arg === '-i') {
|
|
64
|
+
options.installed = true;
|
|
60
65
|
} else if (arg === '--status' || arg === '-s') {
|
|
61
66
|
options.command = 'status';
|
|
62
67
|
} else if (arg.startsWith('--path=')) {
|
|
@@ -65,21 +70,15 @@ function parseArgs(args) {
|
|
|
65
70
|
// Handle legacy options for backwards compatibility
|
|
66
71
|
if (arg === '--minimal' || arg === '-m') options.minimal = true;
|
|
67
72
|
if (arg === '--lite' || arg === '-l') options.lite = true;
|
|
68
|
-
if (arg === '--interactive' || arg === '-i') options.interactive = true;
|
|
69
|
-
if (arg === '--full') options.fullSkills = true;
|
|
70
73
|
if (arg.startsWith('--category=')) {
|
|
71
74
|
const cats = arg.split('=')[1].split(',').map(c => c.trim());
|
|
72
75
|
options.categories.push(...cats);
|
|
73
76
|
}
|
|
74
77
|
} else if (!options.command) {
|
|
75
78
|
options.command = arg;
|
|
76
|
-
} else
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
options.tool = arg;
|
|
80
|
-
} else {
|
|
81
|
-
options.path = arg;
|
|
82
|
-
}
|
|
79
|
+
} else {
|
|
80
|
+
// Additional args (for add/remove commands)
|
|
81
|
+
options.ruleArgs.push(arg);
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
84
|
|
|
@@ -104,6 +103,15 @@ COMMANDS:
|
|
|
104
103
|
detect Show detected technologies for current project
|
|
105
104
|
Useful to see what devkit will install.
|
|
106
105
|
|
|
106
|
+
rules List all available rules
|
|
107
|
+
Use --installed to show only installed rules.
|
|
108
|
+
|
|
109
|
+
add <rule> Add rules manually (space-separated)
|
|
110
|
+
Example: devkit add golang docker
|
|
111
|
+
|
|
112
|
+
remove <rule> Remove rules from project
|
|
113
|
+
Example: devkit remove flutter
|
|
114
|
+
|
|
107
115
|
status Show installation status
|
|
108
116
|
|
|
109
117
|
uninstall Remove devkit from current project
|
|
@@ -115,10 +123,11 @@ COMMANDS:
|
|
|
115
123
|
version Show version
|
|
116
124
|
|
|
117
125
|
OPTIONS:
|
|
118
|
-
--force, -f
|
|
119
|
-
--clean, -c
|
|
120
|
-
--
|
|
121
|
-
--
|
|
126
|
+
--force, -f Force overwrite existing installation
|
|
127
|
+
--clean, -c Remove rules for technologies no longer detected (with update)
|
|
128
|
+
--installed, -i Show only installed rules (with rules command)
|
|
129
|
+
--path=DIR Specify project directory (default: current directory)
|
|
130
|
+
--help, -h Show this help
|
|
122
131
|
|
|
123
132
|
EXAMPLES:
|
|
124
133
|
devkit init # Initialize in current project
|
|
@@ -126,6 +135,10 @@ EXAMPLES:
|
|
|
126
135
|
devkit update # Update and re-detect technologies
|
|
127
136
|
devkit update --clean # Update and remove old rules
|
|
128
137
|
devkit detect # Show what would be detected
|
|
138
|
+
devkit rules # List all available rules
|
|
139
|
+
devkit rules --installed # Show installed rules
|
|
140
|
+
devkit add golang docker # Add golang and docker rules
|
|
141
|
+
devkit remove flutter # Remove flutter rule
|
|
129
142
|
devkit status # Show current installation
|
|
130
143
|
devkit uninstall # Remove from current project
|
|
131
144
|
|
|
@@ -211,6 +224,39 @@ const commands = {
|
|
|
211
224
|
});
|
|
212
225
|
},
|
|
213
226
|
|
|
227
|
+
// List available rules
|
|
228
|
+
rules: (options) => {
|
|
229
|
+
const projectPath = validatePath(options.path) || process.cwd();
|
|
230
|
+
return listRules({
|
|
231
|
+
path: projectPath,
|
|
232
|
+
installed: options.installed
|
|
233
|
+
});
|
|
234
|
+
},
|
|
235
|
+
|
|
236
|
+
// Add rules manually
|
|
237
|
+
add: (options) => {
|
|
238
|
+
const projectPath = validatePath(options.path) || process.cwd();
|
|
239
|
+
if (options.ruleArgs.length === 0) {
|
|
240
|
+
console.log('\n Usage: devkit add <rule> [rule2 ...]');
|
|
241
|
+
console.log(' Example: devkit add golang docker\n');
|
|
242
|
+
console.log(' Run "devkit rules" to see available rules.\n');
|
|
243
|
+
return { success: false, reason: 'no_rules' };
|
|
244
|
+
}
|
|
245
|
+
return addRules(options.ruleArgs, { path: projectPath });
|
|
246
|
+
},
|
|
247
|
+
|
|
248
|
+
// Remove rules
|
|
249
|
+
remove: (options) => {
|
|
250
|
+
const projectPath = validatePath(options.path) || process.cwd();
|
|
251
|
+
if (options.ruleArgs.length === 0) {
|
|
252
|
+
console.log('\n Usage: devkit remove <rule> [rule2 ...]');
|
|
253
|
+
console.log(' Example: devkit remove flutter\n');
|
|
254
|
+
console.log(' Run "devkit rules --installed" to see installed rules.\n');
|
|
255
|
+
return { success: false, reason: 'no_rules' };
|
|
256
|
+
}
|
|
257
|
+
return removeRules(options.ruleArgs, { path: projectPath });
|
|
258
|
+
},
|
|
259
|
+
|
|
214
260
|
// List skills (from skills-index.json)
|
|
215
261
|
list: () => {
|
|
216
262
|
const indexPath = path.join(__dirname, '..', 'skills-index.json');
|
package/cli/rules.js
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rules Management
|
|
3
|
+
*
|
|
4
|
+
* Add/remove rules manually for projects where auto-detection
|
|
5
|
+
* doesn't cover all needs.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const fs = require('fs');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const { copyDir } = require('./utils');
|
|
11
|
+
|
|
12
|
+
const PACKAGE_ROOT = path.join(__dirname, '..');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Get all available rules from the rules/ directory
|
|
16
|
+
*/
|
|
17
|
+
function getAvailableRules() {
|
|
18
|
+
const rulesDir = path.join(PACKAGE_ROOT, 'rules');
|
|
19
|
+
|
|
20
|
+
if (!fs.existsSync(rulesDir)) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return fs.readdirSync(rulesDir).filter(item => {
|
|
25
|
+
const itemPath = path.join(rulesDir, item);
|
|
26
|
+
return fs.statSync(itemPath).isDirectory() && !item.startsWith('.');
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Get installed rules from devkit.json
|
|
32
|
+
*/
|
|
33
|
+
function getInstalledRules(projectDir) {
|
|
34
|
+
const configPath = path.join(projectDir, '.claude', 'devkit.json');
|
|
35
|
+
|
|
36
|
+
if (!fs.existsSync(configPath)) {
|
|
37
|
+
return { rules: [], manualRules: [] };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
42
|
+
return {
|
|
43
|
+
rules: config.installedRules || [],
|
|
44
|
+
manualRules: config.manualRules || [],
|
|
45
|
+
detectedTypes: config.detectedTypes || []
|
|
46
|
+
};
|
|
47
|
+
} catch (e) {
|
|
48
|
+
return { rules: [], manualRules: [] };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Update devkit.json with new rules
|
|
54
|
+
*/
|
|
55
|
+
function updateDevkitConfig(projectDir, updates) {
|
|
56
|
+
const configPath = path.join(projectDir, '.claude', 'devkit.json');
|
|
57
|
+
|
|
58
|
+
if (!fs.existsSync(configPath)) {
|
|
59
|
+
console.log(' No devkit.json found. Run "devkit init" first.');
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
64
|
+
Object.assign(config, updates, { updatedAt: new Date().toISOString() });
|
|
65
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* List all available rules
|
|
71
|
+
*/
|
|
72
|
+
function listRules(options = {}) {
|
|
73
|
+
const projectDir = options.path || process.cwd();
|
|
74
|
+
const available = getAvailableRules();
|
|
75
|
+
const { rules: installed, manualRules } = getInstalledRules(projectDir);
|
|
76
|
+
const allInstalled = [...new Set([...installed, ...manualRules])];
|
|
77
|
+
|
|
78
|
+
console.log('\n' + '='.repeat(50));
|
|
79
|
+
console.log(' AVAILABLE RULES');
|
|
80
|
+
console.log('='.repeat(50));
|
|
81
|
+
|
|
82
|
+
if (options.installed) {
|
|
83
|
+
// Show only installed rules
|
|
84
|
+
console.log('\nInstalled in this project:');
|
|
85
|
+
if (allInstalled.length === 0) {
|
|
86
|
+
console.log(' (none)');
|
|
87
|
+
} else {
|
|
88
|
+
allInstalled.forEach(rule => {
|
|
89
|
+
const isManual = manualRules.includes(rule);
|
|
90
|
+
console.log(` - ${rule}${isManual ? ' (manual)' : ' (auto-detected)'}`);
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
} else {
|
|
94
|
+
// Show all available rules
|
|
95
|
+
console.log(`\nTotal: ${available.length} rules\n`);
|
|
96
|
+
available.forEach(rule => {
|
|
97
|
+
const isInstalled = allInstalled.includes(rule);
|
|
98
|
+
const marker = isInstalled ? '[x]' : '[ ]';
|
|
99
|
+
console.log(` ${marker} ${rule}`);
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
console.log('\n [x] = installed in current project');
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
console.log('');
|
|
106
|
+
return { available, installed: allInstalled };
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Add rules to project
|
|
111
|
+
*/
|
|
112
|
+
function addRules(ruleNames, options = {}) {
|
|
113
|
+
const projectDir = options.path || process.cwd();
|
|
114
|
+
const claudeDir = path.join(projectDir, '.claude');
|
|
115
|
+
|
|
116
|
+
if (!fs.existsSync(claudeDir)) {
|
|
117
|
+
console.log('\n No .claude/ folder found. Run "devkit init" first.\n');
|
|
118
|
+
return { success: false, reason: 'not_initialized' };
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const available = getAvailableRules();
|
|
122
|
+
const { rules: autoRules, manualRules = [] } = getInstalledRules(projectDir);
|
|
123
|
+
const allInstalled = [...new Set([...autoRules, ...manualRules])];
|
|
124
|
+
|
|
125
|
+
console.log('\n' + '='.repeat(50));
|
|
126
|
+
console.log(' ADD RULES');
|
|
127
|
+
console.log('='.repeat(50));
|
|
128
|
+
|
|
129
|
+
const added = [];
|
|
130
|
+
const skipped = [];
|
|
131
|
+
const notFound = [];
|
|
132
|
+
|
|
133
|
+
for (const ruleName of ruleNames) {
|
|
134
|
+
const rule = ruleName.toLowerCase();
|
|
135
|
+
|
|
136
|
+
if (!available.includes(rule)) {
|
|
137
|
+
notFound.push(rule);
|
|
138
|
+
console.log(` [!] ${rule} - not found`);
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (allInstalled.includes(rule)) {
|
|
143
|
+
skipped.push(rule);
|
|
144
|
+
console.log(` [-] ${rule} - already installed`);
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Copy rule files
|
|
149
|
+
const srcDir = path.join(PACKAGE_ROOT, 'rules', rule);
|
|
150
|
+
const destDir = path.join(claudeDir, 'rules', rule);
|
|
151
|
+
|
|
152
|
+
if (fs.existsSync(srcDir)) {
|
|
153
|
+
const count = copyDir(srcDir, destDir);
|
|
154
|
+
added.push(rule);
|
|
155
|
+
console.log(` [+] ${rule} - added (${count} files)`);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Update devkit.json
|
|
160
|
+
if (added.length > 0) {
|
|
161
|
+
const newManualRules = [...new Set([...manualRules, ...added])];
|
|
162
|
+
updateDevkitConfig(projectDir, { manualRules: newManualRules });
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// Summary
|
|
166
|
+
console.log('\n' + '-'.repeat(50));
|
|
167
|
+
if (added.length > 0) {
|
|
168
|
+
console.log(` Added: ${added.join(', ')}`);
|
|
169
|
+
}
|
|
170
|
+
if (skipped.length > 0) {
|
|
171
|
+
console.log(` Skipped (already installed): ${skipped.join(', ')}`);
|
|
172
|
+
}
|
|
173
|
+
if (notFound.length > 0) {
|
|
174
|
+
console.log(` Not found: ${notFound.join(', ')}`);
|
|
175
|
+
console.log(` Run "devkit rules" to see available rules.`);
|
|
176
|
+
}
|
|
177
|
+
console.log('');
|
|
178
|
+
|
|
179
|
+
return { success: true, added, skipped, notFound };
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Remove rules from project
|
|
184
|
+
*/
|
|
185
|
+
function removeRules(ruleNames, options = {}) {
|
|
186
|
+
const projectDir = options.path || process.cwd();
|
|
187
|
+
const claudeDir = path.join(projectDir, '.claude');
|
|
188
|
+
|
|
189
|
+
if (!fs.existsSync(claudeDir)) {
|
|
190
|
+
console.log('\n No .claude/ folder found.\n');
|
|
191
|
+
return { success: false, reason: 'not_initialized' };
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const { rules: autoRules, manualRules = [] } = getInstalledRules(projectDir);
|
|
195
|
+
|
|
196
|
+
console.log('\n' + '='.repeat(50));
|
|
197
|
+
console.log(' REMOVE RULES');
|
|
198
|
+
console.log('='.repeat(50));
|
|
199
|
+
|
|
200
|
+
const removed = [];
|
|
201
|
+
const notInstalled = [];
|
|
202
|
+
|
|
203
|
+
for (const ruleName of ruleNames) {
|
|
204
|
+
const rule = ruleName.toLowerCase();
|
|
205
|
+
const ruleDir = path.join(claudeDir, 'rules', rule);
|
|
206
|
+
|
|
207
|
+
if (!fs.existsSync(ruleDir)) {
|
|
208
|
+
notInstalled.push(rule);
|
|
209
|
+
console.log(` [-] ${rule} - not installed`);
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Remove rule directory
|
|
214
|
+
fs.rmSync(ruleDir, { recursive: true, force: true });
|
|
215
|
+
removed.push(rule);
|
|
216
|
+
console.log(` [x] ${rule} - removed`);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Update devkit.json
|
|
220
|
+
if (removed.length > 0) {
|
|
221
|
+
const newAutoRules = autoRules.filter(r => !removed.includes(r));
|
|
222
|
+
const newManualRules = manualRules.filter(r => !removed.includes(r));
|
|
223
|
+
updateDevkitConfig(projectDir, {
|
|
224
|
+
installedRules: newAutoRules,
|
|
225
|
+
manualRules: newManualRules
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// Summary
|
|
230
|
+
console.log('\n' + '-'.repeat(50));
|
|
231
|
+
if (removed.length > 0) {
|
|
232
|
+
console.log(` Removed: ${removed.join(', ')}`);
|
|
233
|
+
}
|
|
234
|
+
if (notInstalled.length > 0) {
|
|
235
|
+
console.log(` Not installed: ${notInstalled.join(', ')}`);
|
|
236
|
+
}
|
|
237
|
+
console.log('');
|
|
238
|
+
|
|
239
|
+
return { success: true, removed, notInstalled };
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
module.exports = {
|
|
243
|
+
getAvailableRules,
|
|
244
|
+
getInstalledRules,
|
|
245
|
+
listRules,
|
|
246
|
+
addRules,
|
|
247
|
+
removeRules
|
|
248
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngxtm/devkit",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.4.1",
|
|
4
4
|
"description": "Per-project AI skills with smart tech detection - lightweight and context-optimized",
|
|
5
5
|
"main": "cli/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"merged-commands/",
|
|
21
21
|
"templates/",
|
|
22
22
|
"skills/",
|
|
23
|
+
"rules/",
|
|
23
24
|
"scripts/merge-commands.js",
|
|
24
25
|
"scripts/organize-rules.js",
|
|
25
26
|
"scripts/generate-index.js",
|
package/rules/README.md
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Agent Skills Registry
|
|
2
|
+
|
|
3
|
+
This directory contains the source of truth for all AI agent skills. Skills are organized by **Category** (Language or Framework) and then by **Domain**.
|
|
4
|
+
|
|
5
|
+
## 📂 Structure
|
|
6
|
+
|
|
7
|
+
Each skill must follow the standard directory structure:
|
|
8
|
+
`skills/{category}/{skill-name}/SKILL.md`
|
|
9
|
+
|
|
10
|
+
## 🛠 Active Categories
|
|
11
|
+
|
|
12
|
+
### 🎯 Flutter (Framework)
|
|
13
|
+
|
|
14
|
+
High-density standards for modern Flutter development.
|
|
15
|
+
|
|
16
|
+
- [**Layer-based Clean Architecture**](flutter/layer-based-clean-architecture/SKILL.md) (P0) - Dependency flow & modularity.
|
|
17
|
+
- [**BLoC State Management**](flutter/bloc-state-management/SKILL.md) (P0) - Predictable state flows.
|
|
18
|
+
- [**Security**](flutter/security/SKILL.md) (P0) - OWASP & data safety.
|
|
19
|
+
- [**Feature-based Clean Architecture**](flutter/feature-based-clean-architecture/SKILL.md) (P1) - Scalable directory structures.
|
|
20
|
+
- [**Idiomatic Flutter**](flutter/idiomatic-flutter/SKILL.md) (P1) - Modern layout & composition.
|
|
21
|
+
- [**Performance**](flutter/performance/SKILL.md) (P1) - 60fps & memory optimization.
|
|
22
|
+
- [**Widgets**](flutter/widgets/SKILL.md) (P1) - Reusable components.
|
|
23
|
+
- [**Error Handling**](flutter/error-handling/SKILL.md) (P1) - Functional error handling.
|
|
24
|
+
- [**Retrofit Networking**](flutter/retrofit-networking/SKILL.md) (P1) - API client standards.
|
|
25
|
+
- [**Dependency Injection**](flutter/dependency-injection/SKILL.md) (P1) - GetIt & Provider patterns.
|
|
26
|
+
- [**CI/CD**](flutter/cicd/SKILL.md) (P1) - GitHub Actions, Fastlane, Automation.
|
|
27
|
+
- [**Testing**](flutter/testing/SKILL.md) (P1) - Unit, Widget & Integration Strategies.
|
|
28
|
+
- [**AutoRoute Navigation**](flutter/auto-route-navigation/SKILL.md) (P2) - Type-safe routing.
|
|
29
|
+
- [**GoRouter Navigation**](flutter/go-router-navigation/SKILL.md) (P2) - URI-based routing.
|
|
30
|
+
|
|
31
|
+
### 🔷 Dart (Language)
|
|
32
|
+
|
|
33
|
+
Core language idioms and patterns.
|
|
34
|
+
|
|
35
|
+
- [**Language Patterns**](dart/language/SKILL.md) (P0) - Records, Patterns, Sealed classes.
|
|
36
|
+
- [**Best Practices**](dart/best-practices/SKILL.md) (P1) - Scoping, Imports, Config.
|
|
37
|
+
- [**Tooling**](dart/tooling/SKILL.md) (P1) - Linting, Formatting, Analysis.
|
|
38
|
+
|
|
39
|
+
### 🔷 TypeScript (Language)
|
|
40
|
+
|
|
41
|
+
Modern TypeScript standards for type-safe development.
|
|
42
|
+
|
|
43
|
+
- [**Language Patterns**](typescript/language/SKILL.md) (P0) - Types, Generics, Type Guards.
|
|
44
|
+
- [**Security**](typescript/security/SKILL.md) (P0) - Input Validation, Auth, Secrets.
|
|
45
|
+
- [**Best Practices**](typescript/best-practices/SKILL.md) (P1) - Naming, Modules, Conventions.
|
|
46
|
+
- [**Tooling**](typescript/tooling/SKILL.md) (P1) - ESLint, Testing, Build Tools.
|
|
47
|
+
|
|
48
|
+
### 🟨 JavaScript (Language)
|
|
49
|
+
|
|
50
|
+
Modern JavaScript (ES2022+) patterns.
|
|
51
|
+
|
|
52
|
+
- [**Language Patterns**](javascript/language/SKILL.md) (P0) - Modern Syntax, Async/Await.
|
|
53
|
+
- [**Best Practices**](javascript/best-practices/SKILL.md) (P1) - Conventions, Error Handling.
|
|
54
|
+
- [**Tooling**](javascript/tooling/SKILL.md) (P1) - ESLint, Jest, Build Tools.
|
|
55
|
+
|
|
56
|
+
### ⚛️ React (Framework)
|
|
57
|
+
|
|
58
|
+
Modern React development patterns.
|
|
59
|
+
|
|
60
|
+
- [**Component Patterns**](react/component-patterns/SKILL.md) (P0) - Function Components, Composition.
|
|
61
|
+
- [**State Management**](react/state-management/SKILL.md) (P0) - useState, Context, Zustand.
|
|
62
|
+
- [**TypeScript**](react/typescript/SKILL.md) (P0) - React-specific Types.
|
|
63
|
+
- [**Security**](react/security/SKILL.md) (P0) - XSS Prevention, Auth Patterns.
|
|
64
|
+
- [**Hooks**](react/hooks/SKILL.md) (P1) - Custom Hooks, Best Practices.
|
|
65
|
+
- [**Performance**](react/performance/SKILL.md) (P1) - Memoization, Code Splitting.
|
|
66
|
+
- [**Tooling**](react/tooling/SKILL.md) (P1) - Debugging & Profiling.
|
|
67
|
+
- [**Testing**](react/testing/SKILL.md) (P2) - React Testing Library, Jest.
|
|
68
|
+
|
|
69
|
+
### 🦁 NestJS (Framework)
|
|
70
|
+
|
|
71
|
+
Enterprise-grade Node.js backend development.
|
|
72
|
+
|
|
73
|
+
- [**Architecture**](nestjs/architecture/SKILL.md) (P0) - Modules, DI, Scalability.
|
|
74
|
+
- [**Controllers & Services**](nestjs/controllers-services/SKILL.md) (P0) - Layer separation standards.
|
|
75
|
+
- [**Database**](nestjs/database/SKILL.md) (P0) - TypeORM, Prisma, Mongoose patterns.
|
|
76
|
+
- [**Security**](nestjs/security/SKILL.md) (P0) - Auth, Guards, Headers.
|
|
77
|
+
- [**Configuration**](nestjs/configuration/SKILL.md) (P1) - Environment management.
|
|
78
|
+
- [**Error Handling**](nestjs/error-handling/SKILL.md) (P1) - Global filters.
|
|
79
|
+
- [**Performance**](nestjs/performance/SKILL.md) (P1) - Fastify, Caching.
|
|
80
|
+
- [**Testing**](nestjs/testing/SKILL.md) (P2) - Unit & E2E strategies.
|
|
81
|
+
|
|
82
|
+
### ▲ Next.js (Framework)
|
|
83
|
+
|
|
84
|
+
Modern fullstack React framework standards (App Router).
|
|
85
|
+
|
|
86
|
+
- [**App Router**](nextjs/app-router/SKILL.md) (P0) - Routing conventions, Layouts, Loading.
|
|
87
|
+
- [**Server Components**](nextjs/server-components/SKILL.md) (P0) - RSC patterns, "use client" boundaries.
|
|
88
|
+
- [**Rendering**](nextjs/rendering/SKILL.md) (P0) - SSG, SSR, PPR, Streaming.
|
|
89
|
+
- [**Data Fetching**](nextjs/data-fetching/SKILL.md) (P0) - Extended fetch, Caching control.
|
|
90
|
+
- [**Authentication**](nextjs/authentication/SKILL.md) (P0) - Auth.js / Middleware patterns.
|
|
91
|
+
- [**Data Access Layer**](nextjs/data-access-layer/SKILL.md) (P1) - DAL patterns & DTOs.
|
|
92
|
+
- [**Caching**](nextjs/caching/SKILL.md) (P1) - Request & Data caching layers.
|
|
93
|
+
- [**Styling**](nextjs/styling/SKILL.md) (P1) - Tailwind, Fonts, CSS-in-JS constraints.
|
|
94
|
+
- [**Optimization**](nextjs/optimization/SKILL.md) (P1) - Images, Scripts, Core Web Vitals.
|
|
95
|
+
- [**Server Actions**](nextjs/server-actions/SKILL.md) (P1) - Mutations & Forms.
|
|
96
|
+
- [**Internationalization**](nextjs/internationalization/SKILL.md) (P2) - i18n routing.
|
|
97
|
+
- [**Architecture**](nextjs/architecture/SKILL.md) (P2) - Feature-Sliced Design (FSD).
|
|
98
|
+
- [**State Management**](nextjs/state-management/SKILL.md) (P2) - URL-state, avoiding global stores.
|
|
99
|
+
|
|
100
|
+
### ☕ Java (Language & Frameworks)
|
|
101
|
+
|
|
102
|
+
Modern Java development with Spring Boot, Quarkus, and Micronaut.
|
|
103
|
+
|
|
104
|
+
- [**Core Language**](java/java-core-language/SKILL.md) (P0) - Records, Sealed Classes, Pattern Matching.
|
|
105
|
+
- [**Collections & Streams**](java/java-collections-streams/SKILL.md) (P0) - Stream API, Collectors, Optional.
|
|
106
|
+
- [**Concurrency**](java/java-concurrency/SKILL.md) (P0) - Executors, CompletableFuture, Virtual Threads.
|
|
107
|
+
- [**Project Structure**](java/java-project-structure/SKILL.md) (P0) - Maven/Gradle layout, Modules.
|
|
108
|
+
- [**Spring Boot Architecture**](java/spring-boot-architecture/SKILL.md) (P0) - Auto-configuration, Profiles.
|
|
109
|
+
- [**Spring Boot Web**](java/spring-boot-web/SKILL.md) (P0) - REST Controllers, Validation.
|
|
110
|
+
- [**Spring Security**](java/spring-security/SKILL.md) (P0) - JWT, OAuth2, Method Security.
|
|
111
|
+
- [**Spring Data JPA**](java/spring-data-jpa/SKILL.md) (P0) - Entities, Repositories, Transactions.
|
|
112
|
+
- [**Spring Batch**](java/spring-batch/SKILL.md) (P1) - Job Configuration, Chunk Processing.
|
|
113
|
+
- [**Spring Cloud**](java/spring-cloud/SKILL.md) (P1) - Service Discovery, Circuit Breakers.
|
|
114
|
+
- [**Quarkus Core**](java/quarkus-core/SKILL.md) (P1) - CDI, Configuration, Dev Mode.
|
|
115
|
+
- [**Quarkus Reactive**](java/quarkus-reactive/SKILL.md) (P1) - Mutiny, Reactive Routes.
|
|
116
|
+
- [**Micronaut Core**](java/micronaut-core/SKILL.md) (P1) - Compile-time DI, Configuration.
|
|
117
|
+
- [**Micronaut Reactive**](java/micronaut-reactive/SKILL.md) (P1) - Reactive Types, HTTP Clients.
|
|
118
|
+
- [**GraalVM Native**](java/graalvm-native/SKILL.md) (P1) - Native Image, Reflection Config.
|
|
119
|
+
- [**Maven Build**](java/build-maven/SKILL.md) (P2) - POM, Dependency Management.
|
|
120
|
+
- [**Gradle Build**](java/build-gradle/SKILL.md) (P2) - Kotlin DSL, Tasks.
|
|
121
|
+
- [**Testing (JUnit & Mockito)**](java/testing-junit-mockito/SKILL.md) (P2) - JUnit 5, Test Slices.
|
|
122
|
+
|
|
123
|
+
### 🚀 Coming Soon
|
|
124
|
+
|
|
125
|
+
- **Angular** (Framework)
|
|
126
|
+
- **Kotlin** (Language)
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## ✍️ Contribution Guide
|
|
131
|
+
|
|
132
|
+
To add or update a skill:
|
|
133
|
+
|
|
134
|
+
1. **Format**: Ensure the `SKILL.md` uses the high-density format (YAML frontmatter + concise Markdown).
|
|
135
|
+
2. **Progressive Disclosure**: Move large code samples or templates to `references/REFERENCE.md` inside the skill folder. This keeps the primary context small and token-efficient.
|
|
136
|
+
3. **Naming**: Category folders must be lowercase. Skill folders use `kebab-case`.
|
|
137
|
+
4. **Discovery**: Ensure the `triggers` in the YAML frontmatter are accurate for the AI agent to pick it up.
|
|
138
|
+
5. **Priority**:
|
|
139
|
+
- **P0**: Foundational (Architecture, Types, Security).
|
|
140
|
+
- **P1**: Operational (Performance, Idioms, UI).
|
|
141
|
+
- **P2**: Maintenance (Testing, Tooling, Docs).
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Dart Best Practices
|
|
3
|
+
description: General purity standards for Dart development.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [dart, clean-code]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/*.dart']
|
|
8
|
+
keywords: [import, final, const, var, global]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Dart Best Practices (P1)
|
|
12
|
+
|
|
13
|
+
- **Scoping**:
|
|
14
|
+
- No global variables.
|
|
15
|
+
- Private globals (if required) must start with `_`.
|
|
16
|
+
- **Immutability**: Use `const` > `final` > `var`.
|
|
17
|
+
- **Config**: Use `--dart-define` for secrets. Never hardcode API keys.
|
|
18
|
+
- **Naming**: Follow [effective-dart](https://dart.dev/guides/language/effective-dart) (PascalCase classes, camelCase members).
|
|
19
|
+
|
|
20
|
+
```dart
|
|
21
|
+
import 'models/user.dart'; // Good
|
|
22
|
+
import 'package:app/models/user.dart'; // Avoid local absolute
|
|
23
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Dart Language Patterns
|
|
3
|
+
description: Modern Dart standards (3.x+) including null safety and patterns.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [dart, language, idioms]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['**/*.dart']
|
|
8
|
+
keywords: [sealed, record, switch, pattern, extension, final, late, async, await]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Dart Language Patterns
|
|
12
|
+
|
|
13
|
+
## **Priority: P0 (CRITICAL)**
|
|
14
|
+
|
|
15
|
+
Modern Dart standards for safety, performance, and readability.
|
|
16
|
+
|
|
17
|
+
## Implementation Guidelines
|
|
18
|
+
|
|
19
|
+
- **Null Safety**: Avoid `!`. Use `?.`, `??`, or short-circuiting. Use `late` only if necessary.
|
|
20
|
+
- **Immutability**: Use `final` for all variables. Use `@freezed` for data classes.
|
|
21
|
+
- **Pattern Matching (3.x)**: Use `switch (value)` with patterns and destructuring.
|
|
22
|
+
- **Records**: Use Records (e.g., `(String, int)`) for returning multiple values.
|
|
23
|
+
- **Sealed Classes**: Use `sealed class` for exhaustive state handling in domain logic.
|
|
24
|
+
- **Extensions**: Use `extension` to add utility methods to third-party types.
|
|
25
|
+
- **Wildcards (3.7+)**: Use `_` for unused variables in declarations and patterns.
|
|
26
|
+
- **Tear-offs**: Prefer using tear-offs (e.g., `list.forEach(print)`) over anonymous lambdas (e.g., `list.forEach((e) => print(e))`).
|
|
27
|
+
- **Asynchrony**: Prefer `async/await` over raw `Future.then`. Use `unawaited` for fire-and-forget logic if necessary.
|
|
28
|
+
- **Collections**: Use `collection-if`, `collection-for`, and spread operators `...`.
|
|
29
|
+
|
|
30
|
+
## Anti-Patterns
|
|
31
|
+
|
|
32
|
+
- **No ! Operator**: Do not use the bang operator `!` unless you can prove the value is non-null via `if` or `assert`.
|
|
33
|
+
- **No var for members**: Do not use `var` for class members; use `final` or explicit types.
|
|
34
|
+
- **No logic in constructors**: Do not perform complex calculations or async work inside constructors.
|
|
35
|
+
|
|
36
|
+
## Code
|
|
37
|
+
|
|
38
|
+
```dart
|
|
39
|
+
// Sealed class and Switch expression
|
|
40
|
+
sealed class Result {}
|
|
41
|
+
class Success extends Result { final String data; Success(this.data); }
|
|
42
|
+
class Failure extends Result {}
|
|
43
|
+
|
|
44
|
+
String message(Result r) => switch (r) {
|
|
45
|
+
Success(data: var d) => "Got $d",
|
|
46
|
+
Failure() => "Error",
|
|
47
|
+
};
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Related Topics
|
|
51
|
+
|
|
52
|
+
feature-based-clean-architecture | tooling
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Dart Tooling & CI
|
|
3
|
+
description: Standards for analysis, linting, formatting, and automation.
|
|
4
|
+
metadata:
|
|
5
|
+
labels: [tooling, linting, automation]
|
|
6
|
+
triggers:
|
|
7
|
+
files: ['analysis_options.yaml', 'pubspec.yaml', 'build.yaml']
|
|
8
|
+
keywords: [analysis_options, lints, format, build_runner, cider, husky]
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Tooling & CI
|
|
12
|
+
|
|
13
|
+
## **Priority: P1 (HIGH)**
|
|
14
|
+
|
|
15
|
+
Standards for code quality, formatting, and generation.
|
|
16
|
+
|
|
17
|
+
## Implementation Guidelines
|
|
18
|
+
|
|
19
|
+
- **Linter**: Use `analysis_options.yaml`. Enforce `always_use_package_imports` and `require_trailing_commas`.
|
|
20
|
+
- **Formatting**: Use `dart format . --line-length 80`. Run on every commit.
|
|
21
|
+
- **DCM**: Use `dart_code_metrics` for complexity checks (Max cyclomatic complexity: 15).
|
|
22
|
+
- **Build Runner**: Always use `--delete-conflicting-outputs` with code generation.
|
|
23
|
+
- **CI Pipeline**: All PRs MUST pass `analyze`, `format`, and `test` steps.
|
|
24
|
+
- **Imports**: Group imports: `dart:`, `package:`, then relative.
|
|
25
|
+
- **Documentation**: Use `///` for public APIs. Link symbols using `[Class]`.
|
|
26
|
+
|
|
27
|
+
## Code
|
|
28
|
+
|
|
29
|
+
```yaml
|
|
30
|
+
# analysis_options.yaml
|
|
31
|
+
analyzer:
|
|
32
|
+
errors:
|
|
33
|
+
todo: ignore
|
|
34
|
+
missing_required_param: error
|
|
35
|
+
linter:
|
|
36
|
+
rules:
|
|
37
|
+
- prefer_single_quotes
|
|
38
|
+
- unawaited_futures
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Related Topics
|
|
42
|
+
|
|
43
|
+
language | testing
|