{"owner":"abpframework","repo":"abp","hasSkills":true,"totalSkillsCount":241,"totalTokensCount":83732,"categories":["anthropic-skill","cursor-rule","copilot-instructions","plugin-manifest","command-prompt"],"hasMcp":false,"mcpConfig":null,"found":[".agents/skills/abp-cli/SKILL.md",".agents/skills/abp-app-nolayers/SKILL.md",".agents/skills/abp-angular/SKILL.md",".agents/skills/abp-application-layer/SKILL.md",".agents/skills/abp-authorization/SKILL.md",".agents/skills/abp-blazor/SKILL.md",".agents/skills/abp-core/SKILL.md",".agents/skills/abp-ef-core/SKILL.md",".agents/skills/abp-infrastructure/SKILL.md",".agents/skills/abp-ddd/SKILL.md",".agents/skills/abp-dependency-rules/SKILL.md",".agents/skills/abp-development-flow/SKILL.md",".agents/skills/abp-microservice/SKILL.md",".agents/skills/abp-module/SKILL.md",".agents/skills/abp-mongodb/SKILL.md",".agents/skills/abp-multi-tenancy/SKILL.md",".agents/skills/abp-mvc/SKILL.md",".agents/skills/abp-testing/SKILL.md",".claude/skills/abp-angular/SKILL.md",".claude/skills/abp-app-nolayers/SKILL.md",".claude/skills/abp-application-layer/SKILL.md",".claude/skills/abp-authorization/SKILL.md",".claude/skills/abp-blazor/SKILL.md",".claude/skills/abp-cli/SKILL.md",".claude/skills/abp-core/SKILL.md",".claude/skills/abp-ddd/SKILL.md",".claude/skills/abp-dependency-rules/SKILL.md",".claude/skills/abp-development-flow/SKILL.md",".claude/skills/abp-ef-core/SKILL.md",".claude/skills/abp-infrastructure/SKILL.md",".claude/skills/abp-microservice/SKILL.md",".claude/skills/abp-module/SKILL.md",".claude/skills/abp-mongodb/SKILL.md",".claude/skills/abp-multi-tenancy/SKILL.md",".claude/skills/abp-mvc/SKILL.md",".claude/skills/abp-testing/SKILL.md",".cursorrules",".github/copilot-instructions.md","tools/github-changelog-generator/README.md","tools/github-changelog-generator/config.yaml","tools/localization-key-synchronizer/README.md","npm/ng-packs/tools/tsconfig.tools.json","docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md","npm/ng-packs/packages/account-core/.eslintrc.json","npm/ng-packs/packages/account-core/README.md","npm/ng-packs/packages/account-core/ng-package.json","npm/ng-packs/packages/account-core/package.json","npm/ng-packs/packages/account-core/project.json","npm/ng-packs/packages/account-core/tsconfig.json","npm/ng-packs/packages/account-core/tsconfig.lib.json","npm/ng-packs/packages/account-core/tsconfig.lib.prod.json","npm/ng-packs/packages/account-core/tsconfig.spec.json","npm/ng-packs/packages/account/.eslintrc.json","npm/ng-packs/packages/account/README.md","npm/ng-packs/packages/account/ng-package.json","npm/ng-packs/packages/account/package.json","npm/ng-packs/packages/account/project.json","npm/ng-packs/packages/account/tsconfig.json","npm/ng-packs/packages/account/tsconfig.lib.json","npm/ng-packs/packages/account/tsconfig.lib.prod.json","npm/ng-packs/packages/account/tsconfig.spec.json","npm/ng-packs/packages/cms-kit/README.md","npm/ng-packs/packages/cms-kit/ng-package.json","npm/ng-packs/packages/cms-kit/package.json","npm/ng-packs/packages/cms-kit/project.json","npm/ng-packs/packages/cms-kit/tsconfig.json","npm/ng-packs/packages/cms-kit/tsconfig.lib.json","npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json","npm/ng-packs/packages/cms-kit/tsconfig.spec.json","npm/ng-packs/packages/components/.eslintrc.json","npm/ng-packs/packages/components/README.md","npm/ng-packs/packages/components/ng-package.json","npm/ng-packs/packages/components/package.json","npm/ng-packs/packages/components/project.json","npm/ng-packs/packages/components/tsconfig.json","npm/ng-packs/packages/components/tsconfig.lib.json","npm/ng-packs/packages/components/tsconfig.lib.prod.json","npm/ng-packs/packages/components/tsconfig.spec.json","npm/ng-packs/packages/core/.eslintrc.json","npm/ng-packs/packages/core/README.md","npm/ng-packs/packages/core/ng-package.json","npm/ng-packs/packages/core/package.json","npm/ng-packs/packages/core/project.json","npm/ng-packs/packages/core/tsconfig.json","npm/ng-packs/packages/core/tsconfig.lib.json","npm/ng-packs/packages/core/tsconfig.lib.prod.json","npm/ng-packs/packages/core/tsconfig.spec.json","npm/ng-packs/packages/feature-management/.eslintrc.json","npm/ng-packs/packages/feature-management/README.md","npm/ng-packs/packages/feature-management/ng-package.json","npm/ng-packs/packages/feature-management/package.json","npm/ng-packs/packages/feature-management/project.json","npm/ng-packs/packages/feature-management/tsconfig.json","npm/ng-packs/packages/feature-management/tsconfig.lib.json","npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json","npm/ng-packs/packages/feature-management/tsconfig.spec.json","npm/ng-packs/packages/generators/.eslintrc.json","npm/ng-packs/packages/generators/README.md","npm/ng-packs/packages/generators/generators.json","npm/ng-packs/packages/generators/package.json","npm/ng-packs/packages/generators/project.json","npm/ng-packs/packages/generators/tsconfig.json","npm/ng-packs/packages/generators/tsconfig.lib.json","npm/ng-packs/packages/generators/tsconfig.spec.json","npm/ng-packs/packages/identity/.eslintrc.json","npm/ng-packs/packages/identity/README.md","npm/ng-packs/packages/identity/ng-package.json","npm/ng-packs/packages/identity/package.json","npm/ng-packs/packages/identity/project.json","npm/ng-packs/packages/identity/tsconfig.json","npm/ng-packs/packages/identity/tsconfig.lib.json","npm/ng-packs/packages/identity/tsconfig.lib.prod.json","npm/ng-packs/packages/identity/tsconfig.spec.json","npm/ng-packs/packages/oauth/.eslintrc.json","npm/ng-packs/packages/oauth/README.md","npm/ng-packs/packages/oauth/ng-package.json","npm/ng-packs/packages/oauth/package.json","npm/ng-packs/packages/oauth/project.json","npm/ng-packs/packages/oauth/tsconfig.json","npm/ng-packs/packages/oauth/tsconfig.lib.json","npm/ng-packs/packages/oauth/tsconfig.lib.prod.json","npm/ng-packs/packages/oauth/tsconfig.spec.json","npm/ng-packs/packages/permission-management/.eslintrc.json","npm/ng-packs/packages/permission-management/README.md","npm/ng-packs/packages/permission-management/ng-package.json","npm/ng-packs/packages/permission-management/package.json","npm/ng-packs/packages/permission-management/project.json","npm/ng-packs/packages/permission-management/tsconfig.json","npm/ng-packs/packages/permission-management/tsconfig.lib.json","npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json","npm/ng-packs/packages/permission-management/tsconfig.spec.json","npm/ng-packs/packages/schematics/.eslintrc.json","npm/ng-packs/packages/schematics/README.md","npm/ng-packs/packages/schematics/package.json","npm/ng-packs/packages/schematics/project.json","npm/ng-packs/packages/schematics/tsconfig.json","npm/ng-packs/packages/schematics/tsconfig.lib.json","npm/ng-packs/packages/schematics/tsconfig.spec.json","npm/ng-packs/packages/setting-management/.eslintrc.json","npm/ng-packs/packages/setting-management/README.md","npm/ng-packs/packages/setting-management/ng-package.json","npm/ng-packs/packages/setting-management/package.json","npm/ng-packs/packages/setting-management/project.json","npm/ng-packs/packages/setting-management/tsconfig.json","npm/ng-packs/packages/setting-management/tsconfig.lib.json","npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json","npm/ng-packs/packages/setting-management/tsconfig.spec.json","npm/ng-packs/packages/tenant-management/.eslintrc.json","npm/ng-packs/packages/tenant-management/README.md","npm/ng-packs/packages/tenant-management/ng-package.json","npm/ng-packs/packages/tenant-management/package.json","npm/ng-packs/packages/tenant-management/project.json","npm/ng-packs/packages/tenant-management/tsconfig.json","npm/ng-packs/packages/tenant-management/tsconfig.lib.json","npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json","npm/ng-packs/packages/tenant-management/tsconfig.spec.json","npm/ng-packs/packages/theme-basic/.eslintrc.json","npm/ng-packs/packages/theme-basic/README.md","npm/ng-packs/packages/theme-basic/ng-package.json","npm/ng-packs/packages/theme-basic/package.json","npm/ng-packs/packages/theme-basic/project.json","npm/ng-packs/packages/theme-basic/tsconfig.json","npm/ng-packs/packages/theme-basic/tsconfig.lib.json","npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json","npm/ng-packs/packages/theme-basic/tsconfig.spec.json","npm/ng-packs/packages/theme-shared/.eslintrc.json","npm/ng-packs/packages/theme-shared/README.md","npm/ng-packs/packages/theme-shared/ng-package.json","npm/ng-packs/packages/theme-shared/package.json","npm/ng-packs/packages/theme-shared/project.json","npm/ng-packs/packages/theme-shared/tsconfig.json","npm/ng-packs/packages/theme-shared/tsconfig.lib.json","npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json","npm/ng-packs/packages/theme-shared/tsconfig.spec.json","npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md","npm/ng-packs/packages/account-core/proxy/ng-package.json","npm/ng-packs/packages/account/config/ng-package.json","npm/ng-packs/packages/cms-kit/admin/ng-package.json","npm/ng-packs/packages/cms-kit/proxy/ng-package.json","npm/ng-packs/packages/cms-kit/public/ng-package.json","npm/ng-packs/packages/components/chart.js/ng-package.json","npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md","npm/ng-packs/packages/components/dynamic-form/ng-package.json","npm/ng-packs/packages/components/extensible/ng-package.json","npm/ng-packs/packages/components/lookup/ng-package.json","npm/ng-packs/packages/components/page/ng-package.json","npm/ng-packs/packages/components/tree/ng-package.json","npm/ng-packs/packages/core/locale/ng-package.json","npm/ng-packs/packages/core/testing/ng-package.json","npm/ng-packs/packages/feature-management/proxy/ng-package.json","npm/ng-packs/packages/identity/config/ng-package.json","npm/ng-packs/packages/identity/proxy/ng-package.json","npm/ng-packs/packages/permission-management/proxy/ng-package.json","npm/ng-packs/packages/schematics/src/collection.json","npm/ng-packs/packages/setting-management/config/ng-package.json","npm/ng-packs/packages/setting-management/proxy/ng-package.json","npm/ng-packs/packages/tenant-management/config/ng-package.json","npm/ng-packs/packages/tenant-management/proxy/ng-package.json","npm/ng-packs/packages/theme-basic/testing/ng-package.json","npm/ng-packs/packages/theme-shared/testing/ng-package.json","tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml","npm/ng-packs/packages/cms-kit/admin/config/ng-package.json","npm/ng-packs/packages/cms-kit/public/config/ng-package.json","npm/ng-packs/packages/core/src/lib/proxy/README.md","npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/generators/src/generators/change-theme/schema.json","npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json","npm/ng-packs/packages/generators/src/generators/update-version/schema.json","npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json","npm/ng-packs/packages/schematics/src/commands/api/schema.json","npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json","npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json","npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json","npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json","npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json","npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json","npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json","npm/ng-packs/packages/schematics/src/utils/angular/README.md","npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md","npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md","npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md","npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md","npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md","npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json","npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json","npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md","npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md","npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json","npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md","npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md","npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md","npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md","npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc","npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md"],"skills":{".agents/skills/abp-cli/SKILL.md":"---\nname: abp-cli\ndescription: ABP CLI commands - generate-proxy, install-libs, add-package-ref, new-module, install-module, abp update, abp clean, abp suite generate. Use when the user asks how to run ABP CLI commands, generate proxies, install libraries, or use ABP Suite.\n---\n\n# ABP CLI Commands\n\n> **Full documentation**: https://abp.io/docs/latest/cli\n> Use `abp help [command]` for detailed options.\n\n## Generate Client Proxies\n\n```bash\n# URL flag: `-u` (short) or `--url` (long). Use whichever your team prefers, but keep it consistent.\n#\n# Angular (host must be running)\nabp generate-proxy -t ng\n\n# C# client proxies\nabp generate-proxy -t csharp -u https://localhost:44300\n\n# Integration services only (microservices)\nabp generate-proxy -t csharp -u https://localhost:44300 -st integration\n\n# JavaScript\nabp generate-proxy -t js -u https://localhost:44300\n```\n\n## Install Client-Side Libraries\n\n```bash\n# Install NPM packages for MVC/Blazor Server\nabp install-libs\n```\n\n## Add Package Reference\n\n```bash\n# Add project reference with module dependency\nabp add-package-ref Acme.BookStore.Domain\nabp add-package-ref Acme.BookStore.Domain -t Acme.BookStore.Application\n```\n\n## Module Operations\n\n```bash\n# Create new module in solution\nabp new-module Acme.OrderManagement -t module:ddd\n\n# Install published module\nabp install-module Volo.Blogging\n\n# Add ABP NuGet package\nabp add-package Volo.Abp.Caching.StackExchangeRedis\n```\n\n## Update & Clean\n\n```bash\nabp update                  # Update all ABP packages\nabp update --version 8.0.0  # Specific version\nabp clean                   # Delete bin/obj folders\n```\n\n## ABP Suite (CRUD Generation)\n\nGenerate CRUD pages from entity JSON (created via Suite UI):\n\n```bash\nabp suite generate --entity .suite/entities/Book.json --solution ./Acme.BookStore.sln\n```\n\n> **Note**: Entity JSON files are created when you generate an entity via ABP Suite UI. They are stored in `.suite/entities/` folder.\n> **Suite docs**: https://abp.io/docs/latest/suite\n\n## Quick Reference\n\n| Task | Command |\n|------|---------|\n| Angular proxies | `abp generate-proxy -t ng` |\n| C# proxies | `abp generate-proxy -t csharp -u URL` |\n| Install JS libs | `abp install-libs` |\n| Add reference | `abp add-package-ref PackageName` |\n| Create module | `abp new-module ModuleName` |\n| Install module | `abp install-module ModuleName` |\n| Update packages | `abp update` |\n| Clean solution | `abp clean` |\n| Suite CRUD | `abp suite generate -e entity.json -s solution.sln` |\n| Get help | `abp help [command]` |\n",".agents/skills/abp-app-nolayers/SKILL.md":"---\nname: abp-app-nolayers\ndescription: ABP Single-Layer (No-Layers / nolayers) application template - single project structure, feature-based file organization, no separate Domain/Application.Contracts projects. Use when working with the single-layer web application template or when the project has no layered separation.\n---\n\n# ABP Single-Layer Application Template\n\n> **Docs**: https://abp.io/docs/latest/solution-templates/single-layer-web-application\n\n## Solution Structure\n\nSingle project containing everything:\n\n```\nMyProject/\n├── src/\n│   └── MyProject/\n│       ├── Data/              # DbContext, migrations\n│       ├── Entities/          # Domain entities\n│       ├── Services/          # Application services + DTOs\n│       ├── Pages/             # Razor pages / Blazor components\n│       └── MyProjectModule.cs\n└── test/\n    └── MyProject.Tests/\n```\n\n## Key Differences from Layered\n\n| Layered Template | Single-Layer Template |\n|------------------|----------------------|\n| DTOs in Application.Contracts | DTOs in Services folder (same project) |\n| Repository interfaces in Domain | Use generic `IRepository<T, TKey>` directly |\n| Separate Domain.Shared for constants | Constants in same project |\n| Multiple module classes | Single module class |\n\n## File Organization\n\nGroup related files by feature:\n\n```\nServices/\n├── Books/\n│   ├── BookAppService.cs\n│   ├── BookDto.cs\n│   ├── CreateBookDto.cs\n│   └── IBookAppService.cs\n└── Authors/\n    ├── AuthorAppService.cs\n    └── ...\n```\n\n## Simplified Entity (Still keep invariants)\n\nSingle-layer templates are structurally simpler, but you may still have real business invariants.\n\n- For **trivial CRUD** entities, public setters can be acceptable.\n- For **non-trivial business rules**, still prefer encapsulation (private setters + methods) to prevent invalid states.\n\n```csharp\npublic class Book : AuditedAggregateRoot<Guid>\n{\n    public string Name { get; set; }  // OK for trivial CRUD only\n    public decimal Price { get; set; }\n}\n```\n\n## No Custom Repository Needed\n\nUse generic repository directly - no need to define custom interfaces:\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n\n    // Generic repository is sufficient for single-layer apps\n}\n```\n",".agents/skills/abp-angular/SKILL.md":"---\nname: abp-angular\ndescription: ABP Angular UI patterns - generate-proxy, ListService, PermissionGuard, abpLocalization pipe, ConfirmationService, ToasterService, ConfigStateService. Use when building or reviewing Angular UI components, routing, or service integration in ABP Angular projects.\n---\n\n# ABP Angular UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/angular/overview\n\n## Project Structure\n```\nsrc/app/\n├── proxy/              # Auto-generated service proxies\n├── shared/             # Shared components, pipes, directives\n├── book/               # Feature module\n│   ├── book.module.ts\n│   ├── book-routing.module.ts\n│   ├── book-list/\n│   │   ├── book-list.component.ts\n│   │   ├── book-list.component.html\n│   │   └── book-list.component.scss\n│   └── book-detail/\n```\n\n## Generate Service Proxies\n```bash\nabp generate-proxy -t ng\n```\n\nThis generates typed service classes in `src/app/proxy/`.\n\n## List Component Pattern\n```typescript\n@Component({\n  selector: 'app-book-list',\n  templateUrl: './book-list.component.html'\n})\nexport class BookListComponent implements OnInit {\n  books = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;\n\n  constructor(\n    public readonly list: ListService,\n    private bookService: BookService,\n    private confirmation: ConfirmationService\n  ) {}\n\n  ngOnInit(): void {\n    this.hookToQuery();\n  }\n\n  private hookToQuery(): void {\n    this.list.hookToQuery(query =>\n      this.bookService.getList(query)\n    ).subscribe(response => {\n      this.books = response;\n    });\n  }\n\n  create(): void {\n    // Open create modal\n  }\n\n  delete(book: BookDto): void {\n    this.confirmation\n      .warn('::AreYouSureToDelete', '::AreYouSure')\n      .subscribe(status => {\n        if (status === Confirmation.Status.confirm) {\n          this.bookService.delete(book.id).subscribe(() => this.list.get());\n        }\n      });\n  }\n}\n```\n\n## Localization\n```typescript\n// In component\nconstructor(private localizationService: LocalizationService) {}\n\ngetText(): string {\n  return this.localizationService.instant('::Books');\n}\n```\n\n```html\n<!-- In template -->\n<h1>{{ '::Books' | abpLocalization }}</h1>\n\n<!-- With parameters -->\n<p>{{ '::WelcomeMessage' | abpLocalization: userName }}</p>\n```\n\n## Authorization\n\n### Permission Directive\n```html\n<button *abpPermission=\"'BookStore.Books.Create'\">Create</button>\n```\n\n### Permission Guard\n```typescript\nconst routes: Routes = [\n  {\n    path: '',\n    component: BookListComponent,\n    canActivate: [PermissionGuard],\n    data: {\n      requiredPolicy: 'BookStore.Books'\n    }\n  }\n];\n```\n\n### Programmatic Check\n```typescript\nconstructor(private permissionService: PermissionService) {}\n\ncanCreate(): boolean {\n  return this.permissionService.getGrantedPolicy('BookStore.Books.Create');\n}\n```\n\n## Forms with Validation\n```typescript\n@Component({...})\nexport class BookFormComponent {\n  form: FormGroup;\n\n  constructor(private fb: FormBuilder) {\n    this.buildForm();\n  }\n\n  buildForm(): void {\n    this.form = this.fb.group({\n      name: ['', [Validators.required, Validators.maxLength(128)]],\n      price: [0, [Validators.required, Validators.min(0)]]\n    });\n  }\n\n  save(): void {\n    if (this.form.invalid) return;\n\n    this.bookService.create(this.form.value).subscribe(() => {\n      // Handle success\n    });\n  }\n}\n```\n\n```html\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n  <div class=\"form-group\">\n    <label for=\"name\">{{ '::Name' | abpLocalization }}</label>\n    <input type=\"text\" id=\"name\" formControlName=\"name\" class=\"form-control\" />\n  </div>\n\n  <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\n    {{ '::Save' | abpLocalization }}\n  </button>\n</form>\n```\n\n## Configuration API\n```typescript\nconstructor(private configService: ConfigStateService) {}\n\ngetCurrentUser(): CurrentUserDto {\n  return this.configService.getOne('currentUser');\n}\n\ngetSettings(): void {\n  const setting = this.configService.getSetting('MyApp.MaxItemCount');\n}\n```\n\n## Modal Service\n```typescript\nconstructor(private modalService: ModalService) {}\n\nopenCreateModal(): void {\n  const modalRef = this.modalService.open(BookFormComponent, {\n    size: 'lg'\n  });\n\n  modalRef.result.then(result => {\n    if (result) {\n      this.list.get();\n    }\n  });\n}\n```\n\n## Toast Notifications\n```typescript\nconstructor(private toaster: ToasterService) {}\n\nshowSuccess(): void {\n  this.toaster.success('::BookCreatedSuccessfully', '::Success');\n}\n\nshowError(error: string): void {\n  this.toaster.error(error, '::Error');\n}\n```\n\n## Lazy Loading Modules\n```typescript\n// app-routing.module.ts\nconst routes: Routes = [\n  {\n    path: 'books',\n    loadChildren: () => import('./book/book.module').then(m => m.BookModule)\n  }\n];\n```\n\n## Theme & Styling\n- Use Bootstrap classes\n- ABP provides theme variables via CSS custom properties\n- Component-specific styles in `.component.scss`\n",".agents/skills/abp-application-layer/SKILL.md":"---\nname: abp-application-layer\ndescription: ABP Application Services, DTOs, CRUD service, object mapping (Mapperly/AutoMapper), validation, error handling. Use when creating or reviewing application services, DTOs, or working in the Application or Application.Contracts projects.\n---\n\n# ABP Application Layer Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design/application-services\n\n## Anti-Patterns to Avoid\n\n- **Entity name in method**: use `GetAsync` not `GetBookAsync`\n- **ID inside UpdateDto**: pass `id` as a separate parameter, not inside the DTO\n- **Calling other app services in the same module**: use domain services or repositories directly\n- **Using `IFormFile`/`Stream` in app service**: accept `byte[]` from controllers instead\n- **Business logic in app service**: put it in domain entities or domain services\n\n## Application Service Structure\n\n### Interface (Application.Contracts)\n```csharp\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookListItemDto>> GetListAsync(GetBookListInput input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n    Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input);\n    Task DeleteAsync(Guid id);\n}\n```\n\n### Implementation (Application)\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IBookRepository _bookRepository;\n    private readonly BookManager _bookManager;\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IBookRepository bookRepository,\n        BookManager bookManager,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookManager = bookManager;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = await _bookManager.CreateAsync(input.Name, input.Price);\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Edit)]\n    public async Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        await _bookManager.ChangeNameAsync(book, input.Name);\n        book.SetPrice(input.Price);\n        await _bookRepository.UpdateAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n## Application Service Best Practices\n- Don't repeat entity name in method names (`GetAsync` not `GetBookAsync`)\n- Accept/return DTOs only, never entities\n- ID not inside UpdateDto - pass separately\n- Use custom repositories when you need custom queries, generic repository is fine for simple CRUD\n- Call `UpdateAsync` explicitly (don't assume change tracking)\n- Don't call other app services in same module\n- Don't use `IFormFile`/`Stream` - pass `byte[]` from controllers\n- Use base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) instead of injecting these services\n\n## DTO Naming Conventions\n\n| Purpose | Convention | Example |\n|---------|------------|---------|\n| Query input | `Get{Entity}Input` | `GetBookInput` |\n| List query input | `Get{Entity}ListInput` | `GetBookListInput` |\n| Create input | `Create{Entity}Dto` | `CreateBookDto` |\n| Update input | `Update{Entity}Dto` | `UpdateBookDto` |\n| Single entity output | `{Entity}Dto` | `BookDto` |\n| List item output | `{Entity}ListItemDto` | `BookListItemDto` |\n\n## DTO Location\n- Define DTOs in `*.Application.Contracts` project\n- This allows sharing with clients (Blazor, HttpApi.Client)\n\n## Validation\n\n### Data Annotations\n```csharp\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(100, MinimumLength = 3)]\n    public string Name { get; set; }\n\n    [Range(0, 999.99)]\n    public decimal Price { get; set; }\n}\n```\n\n### Custom Validation with IValidatableObject\nBefore adding custom validation, decide if it's a **domain rule** or **application rule**:\n- **Domain rule**: Put validation in entity constructor or domain service (enforces business invariants)\n- **Application rule**: Use DTO validation (input format, required fields)\n\nOnly use `IValidatableObject` for application-level validation that can't be expressed with data annotations:\n\n```csharp\npublic class CreateBookDto : IValidatableObject\n{\n    public string Name { get; set; }\n    public string Description { get; set; }\n\n    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)\n    {\n        if (Name == Description)\n        {\n            yield return new ValidationResult(\n                \"Name and Description cannot be the same!\",\n                new[] { nameof(Name), nameof(Description) }\n            );\n        }\n    }\n}\n```\n\n### FluentValidation\n```csharp\npublic class CreateBookDtoValidator : AbstractValidator<CreateBookDto>\n{\n    public CreateBookDtoValidator()\n    {\n        RuleFor(x => x.Name).NotEmpty().Length(3, 100);\n        RuleFor(x => x.Price).GreaterThan(0);\n    }\n}\n```\n\n## Error Handling\n\n### Business Exceptions\n```csharp\nthrow new BusinessException(\"BookStore:010001\")\n    .WithData(\"BookName\", name);\n```\n\n### Entity Not Found\n```csharp\nvar book = await _bookRepository.FindAsync(id);\nif (book == null)\n{\n    throw new EntityNotFoundException(typeof(Book), id);\n}\n```\n\n### User-Friendly Exceptions\n```csharp\nthrow new UserFriendlyException(L[\"BookNotAvailable\"]);\n```\n\n### HTTP Status Code Mapping\nStatus code mapping is **configurable** in ABP (do not rely on a fixed mapping in business logic).\n\n| Exception | Typical HTTP Status |\n|-----------|-------------|\n| `AbpValidationException` | 400 |\n| `AbpAuthorizationException` | 401/403 |\n| `EntityNotFoundException` | 404 |\n| `BusinessException` | 403 (but configurable) |\n| Other exceptions | 500 |\n\n## Auto API Controllers\nABP automatically generates API controllers for application services:\n- Interface must inherit `IApplicationService` (which already has `[RemoteService]` attribute)\n- HTTP methods determined by method name prefix (Get, Create, Update, Delete)\n- Use `[RemoteService(false)]` to disable auto API generation for specific methods\n\n## Object Mapping (Mapperly / AutoMapper)\nABP supports **both Mapperly and AutoMapper** integrations. But the default mapping library is Mapperly. You need to first check the project's active mapping library.\n- Prefer the mapping provider already used in the solution (check existing mapping files / loaded modules).\n- In mixed solutions, explicitly setting the default provider may be required (see `docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md`).\n\n### Mapperly (compile-time)\nDefine mappers as partial classes:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\npublic override void ConfigureServices(ServiceConfigurationContext context)\n{\n    context.Services.AddSingleton<BookMapper>();\n}\n```\n\nUsage in application service:\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(BookMapper bookMapper)\n    {\n        _bookMapper = bookMapper;\n    }\n\n    public BookDto GetBook(Book book)\n    {\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n> **Note**: Mapperly generates mapping code at compile-time, providing better performance than runtime mappers.\n\n### AutoMapper (runtime)\nIf the solution uses AutoMapper, mappings are typically defined in `Profile` classes and registered via ABP's AutoMapper integration.\n",".agents/skills/abp-authorization/SKILL.md":"---\nname: abp-authorization\ndescription: ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side. Use when working with permissions, authorization, role-based access, or security in ABP projects.\n---\n\n# ABP Authorization\n\n> **Docs**: https://abp.io/docs/latest/framework/fundamentals/authorization\n\n## Permission Definition\nDefine permissions in `*.Application.Contracts` project:\n\n```csharp\npublic static class BookStorePermissions\n{\n    public const string GroupName = \"BookStore\";\n\n    public static class Books\n    {\n        public const string Default = GroupName + \".Books\";\n        public const string Create = Default + \".Create\";\n        public const string Edit = Default + \".Edit\";\n        public const string Delete = Default + \".Delete\";\n    }\n}\n```\n\nRegister in provider:\n```csharp\npublic class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider\n{\n    public override void Define(IPermissionDefinitionContext context)\n    {\n        var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L(\"Permission:BookStore\"));\n\n        var booksPermission = bookStoreGroup.AddPermission(\n            BookStorePermissions.Books.Default,\n            L(\"Permission:Books\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Create,\n            L(\"Permission:Books.Create\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Edit,\n            L(\"Permission:Books.Edit\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Delete,\n            L(\"Permission:Books.Delete\"));\n    }\n\n    private static LocalizableString L(string name)\n    {\n        return LocalizableString.Create<BookStoreResource>(name);\n    }\n}\n```\n\n## Using Permissions\n\n### Declarative (Attribute)\n```csharp\n[Authorize(BookStorePermissions.Books.Create)]\npublic virtual async Task<BookDto> CreateAsync(CreateBookDto input)\n{\n    // Only users with Books.Create permission can execute\n}\n```\n\n### Programmatic Check\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // Check and throw if not granted\n        await CheckPolicyAsync(BookStorePermissions.Books.Edit);\n\n        // Or check without throwing\n        if (await IsGrantedAsync(BookStorePermissions.Books.Delete))\n        {\n            // Has permission\n        }\n    }\n}\n```\n\n### Allow Anonymous Access\n```csharp\n[AllowAnonymous]\npublic virtual async Task<BookDto> GetPublicBookAsync(Guid id)\n{\n    // No authentication required\n}\n```\n\n## Current User\nAccess authenticated user info via `CurrentUser` property (available in base classes like `ApplicationService`, `DomainService`, `AbpController`):\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // CurrentUser is available from base class - no injection needed\n        var userId = CurrentUser.Id;\n        var userName = CurrentUser.UserName;\n        var email = CurrentUser.Email;\n        var isAuthenticated = CurrentUser.IsAuthenticated;\n        var roles = CurrentUser.Roles;\n        var tenantId = CurrentUser.TenantId;\n    }\n}\n\n// In other services, inject ICurrentUser\npublic class MyService : ITransientDependency\n{\n    private readonly ICurrentUser _currentUser;\n    public MyService(ICurrentUser currentUser) => _currentUser = currentUser;\n}\n```\n\n### Ownership Validation\n```csharp\npublic async Task UpdateMyBookAsync(Guid bookId, UpdateBookDto input)\n{\n    var book = await _bookRepository.GetAsync(bookId);\n\n    if (book.CreatorId != CurrentUser.Id)\n    {\n        throw new AbpAuthorizationException();\n    }\n\n    // Update book...\n}\n```\n\n## Multi-Tenancy Permissions\nControl permission availability per tenant side:\n\n```csharp\nbookStoreGroup.AddPermission(\n    BookStorePermissions.Books.Default,\n    L(\"Permission:Books\"),\n    multiTenancySide: MultiTenancySides.Tenant // Only for tenants\n);\n```\n\nOptions: `MultiTenancySides.Host`, `Tenant`, or `Both`\n\n## Feature-Dependent Permissions\n```csharp\nbooksPermission.RequireFeatures(\"BookStore.PremiumFeature\");\n```\n\n## Permission Management\nGrant/revoke permissions programmatically:\n\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly IPermissionManager _permissionManager;\n\n    public async Task GrantPermissionToUserAsync(Guid userId, string permissionName)\n    {\n        await _permissionManager.SetForUserAsync(userId, permissionName, true);\n    }\n\n    public async Task GrantPermissionToRoleAsync(string roleName, string permissionName)\n    {\n        await _permissionManager.SetForRoleAsync(roleName, permissionName, true);\n    }\n}\n```\n\n## Security Best Practices\n- Never trust client input for user identity\n- Use `CurrentUser` property (from base class) or inject `ICurrentUser`\n- Validate ownership in application service methods\n- Filter queries by current user when appropriate\n- Don't expose sensitive fields in DTOs\n",".agents/skills/abp-blazor/SKILL.md":"---\nname: abp-blazor\ndescription: ABP Blazor UI patterns - AbpComponentBase, AbpCrudPageBase, DataGrid, IMenuContributor, Message/Notify, Validations, JavaScript interop. Use when building or reviewing Blazor Server or WebAssembly UI components in ABP projects.\n---\n\n# ABP Blazor UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/blazor/overall\n\n## Component Base Classes\n\n### Basic Component\n```razor\n@inherits AbpComponentBase\n\n<h1>@L[\"Books\"]</h1>\n```\n\n### CRUD Page\n```razor\n@page \"/books\"\n@inherits AbpCrudPageBase<IBookAppService, BookDto, Guid, PagedAndSortedResultRequestDto, CreateUpdateBookDto>\n\n<Card>\n    <CardHeader>\n        <Row>\n            <Column>\n                <h2>@L[\"Books\"]</h2>\n            </Column>\n            <Column TextAlignment=\"TextAlignment.End\">\n                @if (HasCreatePermission)\n                {\n                    <Button Color=\"Color.Primary\" Clicked=\"OpenCreateModalAsync\">\n                        @L[\"NewBook\"]\n                    </Button>\n                }\n            </Column>\n        </Row>\n    </CardHeader>\n    <CardBody>\n        <DataGrid TItem=\"BookDto\"\n                  Data=\"Entities\"\n                  ReadData=\"OnDataGridReadAsync\"\n                  TotalItems=\"TotalCount\"\n                  ShowPager=\"true\"\n                  PageSize=\"PageSize\">\n            <DataGridColumns>\n                <DataGridColumn Field=\"@nameof(BookDto.Name)\" Caption=\"@L[\"Name\"]\" />\n                <DataGridColumn Field=\"@nameof(BookDto.Price)\" Caption=\"@L[\"Price\"]\" />\n                <DataGridEntityActionsColumn TItem=\"BookDto\">\n                    <DisplayTemplate>\n                        <EntityActions TItem=\"BookDto\">\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Edit\"]\"\n                                          Visible=\"HasUpdatePermission\"\n                                          Clicked=\"() => OpenEditModalAsync(context)\" />\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Delete\"]\"\n                                          Visible=\"HasDeletePermission\"\n                                          Clicked=\"() => DeleteEntityAsync(context)\"\n                                          ConfirmationMessage=\"() => GetDeleteConfirmationMessage(context)\" />\n                        </EntityActions>\n                    </DisplayTemplate>\n                </DataGridEntityActionsColumn>\n            </DataGridColumns>\n        </DataGrid>\n    </CardBody>\n</Card>\n```\n\n## Localization\n```razor\n@* Using L property from base class *@\n<h1>@L[\"PageTitle\"]</h1>\n\n@* With parameters *@\n<p>@L[\"WelcomeMessage\", CurrentUser.UserName]</p>\n```\n\n## Authorization\n```razor\n@* Check permission before rendering *@\n@if (await AuthorizationService.IsGrantedAsync(\"MyPermission\"))\n{\n    <Button>Admin Action</Button>\n}\n\n@* Using policy-based authorization *@\n<AuthorizeView Policy=\"MyPolicy\">\n    <Authorized>\n        <p>You have access!</p>\n    </Authorized>\n</AuthorizeView>\n```\n\n## Navigation & Menu\nConfigure in `*MenuContributor.cs`:\n\n```csharp\npublic class MyMenuContributor : IMenuContributor\n{\n    public async Task ConfigureMenuAsync(MenuConfigurationContext context)\n    {\n        if (context.Menu.Name == StandardMenus.Main)\n        {\n            var bookMenu = new ApplicationMenuItem(\n                \"Books\",\n                l[\"Menu:Books\"],\n                \"/books\",\n                icon: \"fa fa-book\"\n            );\n\n            if (await context.IsGrantedAsync(MyPermissions.Books.Default))\n            {\n                context.Menu.AddItem(bookMenu);\n            }\n        }\n    }\n}\n```\n\n## Notifications & Messages\n```csharp\n// Success message\nawait Message.Success(L[\"BookCreatedSuccessfully\"]);\n\n// Confirmation dialog\nif (await Message.Confirm(L[\"AreYouSure\"]))\n{\n    // User confirmed\n}\n\n// Toast notification\nawait Notify.Success(L[\"OperationCompleted\"]);\n```\n\n## Forms & Validation\n```razor\n<Form @ref=\"CreateForm\">\n    <Validations @ref=\"CreateValidationsRef\" Model=\"@NewEntity\" ValidateOnLoad=\"false\">\n        <Validation MessageLocalizer=\"@LH.Localize\">\n            <Field>\n                <FieldLabel>@L[\"Name\"]</FieldLabel>\n                <TextEdit @bind-Text=\"@NewEntity.Name\">\n                    <Feedback>\n                        <ValidationError />\n                    </Feedback>\n                </TextEdit>\n            </Field>\n        </Validation>\n    </Validations>\n</Form>\n```\n\n## JavaScript Interop\n```csharp\n@inject IJSRuntime JsRuntime\n\n@code {\n    private async Task CallJavaScript()\n    {\n        await JsRuntime.InvokeVoidAsync(\"myFunction\", arg1, arg2);\n        var result = await JsRuntime.InvokeAsync<string>(\"myFunctionWithReturn\");\n    }\n}\n```\n\n## State Management\n```csharp\n// Inject service proxy from HttpApi.Client\n@inject IBookAppService BookAppService\n\n@code {\n    private List<BookDto> Books { get; set; }\n\n    protected override async Task OnInitializedAsync()\n    {\n        var result = await BookAppService.GetListAsync(new PagedAndSortedResultRequestDto());\n        Books = result.Items.ToList();\n    }\n}\n```\n\n## Code-Behind Pattern\n**Books.razor:**\n```razor\n@page \"/books\"\n@inherits BooksBase\n```\n\n**Books.razor.cs:**\n```csharp\npublic partial class Books : BooksBase\n{\n    // Component logic here\n}\n```\n\n**BooksBase.cs:**\n```csharp\npublic abstract class BooksBase : AbpComponentBase\n{\n    [Inject]\n    protected IBookAppService BookAppService { get; set; }\n}\n```\n",".agents/skills/abp-core/SKILL.md":"---\nname: abp-core\ndescription: Core ABP Framework conventions - module system, DI registration, base classes (ApplicationService, DomainService), IClock, BusinessException, localization, async patterns. Use when working on any ABP project, asking about ABP fundamentals, or unsure which skill applies.\n---\n\n# ABP Core Conventions\n\n> **Documentation**: https://abp.io/docs/latest\n> **API Reference**: https://abp.io/docs/api/\n\n## Key Rules\n\n- Use `IClock` / `Clock.Now` instead of `DateTime.Now` / `DateTime.UtcNow`\n- Use `ITransientDependency` / `ISingletonDependency` instead of `AddScoped/AddTransient/AddSingleton`\n- Use `IRepository<T>` instead of injecting `DbContext` directly\n- Check base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) before injecting services\n- Use `BusinessException` with namespaced error codes for domain rule violations\n\n## Module System\nEvery ABP application/module has a module class that configures services:\n\n```csharp\n[DependsOn(\n    typeof(AbpDddDomainModule),\n    typeof(AbpEntityFrameworkCoreModule)\n)]\npublic class MyAppModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        // Service registration and configuration\n    }\n}\n```\n\n> **Note**: Middleware configuration (`OnApplicationInitialization`) should only be done in the final host application, not in reusable modules.\n\n## Dependency Injection Conventions\n\n### Automatic Registration\nABP automatically registers services implementing marker interfaces:\n- `ITransientDependency` → Transient lifetime\n- `ISingletonDependency` → Singleton lifetime\n- `IScopedDependency` → Scoped lifetime\n\nClasses inheriting from `ApplicationService`, `DomainService`, `AbpController` are also auto-registered.\n\n### Repository Usage\nYou can use the generic `IRepository<TEntity, TKey>` for simple CRUD operations. Define custom repository interfaces only when you need custom query methods:\n\n```csharp\n// Simple CRUD - Generic repository is fine\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // ✅ OK for simple operations\n}\n\n// Custom queries needed - Define custom interface\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name); // Custom query\n}\n\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ Use custom when needed\n}\n```\n\n### Exposing Services\n```csharp\n[ExposeServices(typeof(IMyService))]\npublic class MyService : IMyService, ITransientDependency { }\n```\n\n## Important Base Classes\n\n| Base Class | Purpose |\n|------------|---------|\n| `Entity<TKey>` | Basic entity with ID |\n| `AggregateRoot<TKey>` | DDD aggregate root |\n| `DomainService` | Domain business logic |\n| `ApplicationService` | Use case orchestration |\n| `AbpController` | REST API controller |\n\nABP base classes already inject commonly used services as properties. Before injecting a service, check if it's already available:\n\n| Property | Available In | Description |\n|----------|--------------|-------------|\n| `GuidGenerator` | All base classes | Generate GUIDs |\n| `Clock` | All base classes | Current time (use instead of `DateTime`) |\n| `CurrentUser` | All base classes | Authenticated user info |\n| `CurrentTenant` | All base classes | Multi-tenancy context |\n| `L` (StringLocalizer) | `ApplicationService`, `AbpController` | Localization |\n| `AuthorizationService` | `ApplicationService`, `AbpController` | Permission checks |\n| `FeatureChecker` | `ApplicationService`, `AbpController` | Feature availability |\n| `DataFilter` | All base classes | Data filtering (soft-delete, tenant) |\n| `UnitOfWorkManager` | `ApplicationService`, `DomainService` | Unit of work management |\n| `LoggerFactory` | All base classes | Create loggers |\n| `Logger` | All base classes | Logging (auto-created) |\n| `LazyServiceProvider` | All base classes | Lazy service resolution |\n\n**Useful methods from base classes:**\n- `CheckPolicyAsync()` - Check permission and throw if not granted\n- `IsGrantedAsync()` - Check permission without throwing\n\n## Async Best Practices\n- Use async all the way - never use `.Result` or `.Wait()`\n- All async methods should end with `Async` suffix\n- ABP automatically handles `CancellationToken` in most cases (e.g., from `HttpContext.RequestAborted`)\n- Only pass `CancellationToken` explicitly when implementing custom cancellation logic\n\n## Time Handling\nNever use `DateTime.Now` or `DateTime.UtcNow` directly. Use ABP's `IClock` service:\n\n```csharp\n// In classes inheriting from base classes (ApplicationService, DomainService, etc.)\npublic class BookAppService : ApplicationService\n{\n    public void DoSomething()\n    {\n        var now = Clock.Now; // ✅ Already available as property\n    }\n}\n\n// In other services - inject IClock\npublic class MyService : ITransientDependency\n{\n    private readonly IClock _clock;\n\n    public MyService(IClock clock) => _clock = clock;\n\n    public void DoSomething()\n    {\n        var now = _clock.Now; // ✅ Correct\n        // var now = DateTime.Now; // ❌ Wrong - not testable, ignores timezone settings\n    }\n}\n```\n\n> **Tip**: Before injecting a service, check if it's already available as a property in your base classes.\n\n## Business Exceptions\nUse `BusinessException` for domain rule violations with namespaced error codes:\n\n```csharp\nthrow new BusinessException(\"MyModule:BookNameAlreadyExists\")\n    .WithData(\"Name\", bookName);\n```\n\nConfigure localization mapping:\n```csharp\nConfigure<AbpExceptionLocalizationOptions>(options =>\n{\n    options.MapCodeNamespace(\"MyModule\", typeof(MyModuleResource));\n});\n```\n\n## Localization\n- In base classes (`ApplicationService`, `AbpController`, etc.): Use `L[\"Key\"]` - this is the `IStringLocalizer` property\n- In other services: Inject `IStringLocalizer<TResource>`\n- Always localize user-facing messages and exceptions\n\n**Localization file location**: `*.Domain.Shared/Localization/{ResourceName}/{lang}.json`\n\n```json\n// Example: MyProject.Domain.Shared/Localization/MyProject/en.json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"Menu:Home\": \"Home\",\n    \"Welcome\": \"Welcome\",\n    \"BookName\": \"Book Name\"\n  }\n}\n```\n\n## ❌ Never Use (ABP Anti-Patterns)\n\n| Don't Use | Use Instead |\n|-----------|-------------|\n| Minimal APIs | ABP Controllers or Auto API Controllers |\n| MediatR | Application Services |\n| `DbContext` directly in App Services | `IRepository<T>` |\n| `AddScoped/AddTransient/AddSingleton` | `ITransientDependency`, `ISingletonDependency` |\n| `DateTime.Now` | `IClock` / `Clock.Now` |\n| Custom UnitOfWork | ABP's `IUnitOfWorkManager` |\n| Manual HTTP calls from UI | ABP client proxies (`generate-proxy`) |\n| Hardcoded role checks | Permission-based authorization |\n| Business logic in Controllers | Application Services |\n",".agents/skills/abp-ef-core/SKILL.md":"---\nname: abp-ef-core\ndescription: ABP Entity Framework Core - DbContext, entity configuration, EfCoreRepository implementation, migrations (dotnet ef migrations add), data seeding. Use when working in EntityFrameworkCore projects, adding migrations, or implementing EF Core repositories.\n---\n\n# ABP Entity Framework Core\n\n> **Docs**: https://abp.io/docs/latest/framework/data/entity-framework-core\n\n## Never Do\n\n| Don't | Do Instead |\n|-------|-----------|\n| Skip `b.ConfigureByConvention()` | Always call it first in entity config |\n| `AddDefaultRepositories(includeAllEntities: true)` | Use `AddDefaultRepositories()` only for aggregate roots |\n| Inject `DbContext` in application/domain services | Use `IRepository<T>` or custom repository interface |\n| Use `DbContext` directly outside the EF Core project | Access via `GetDbContextAsync()` inside repository only |\n\n## DbContext Configuration\n\n```csharp\n[ConnectionStringName(\"Default\")]\npublic class MyProjectDbContext : AbpDbContext<MyProjectDbContext>\n{\n    public DbSet<Book> Books { get; set; }\n    public DbSet<Author> Authors { get; set; }\n\n    public MyProjectDbContext(DbContextOptions<MyProjectDbContext> options)\n        : base(options)\n    {\n    }\n\n    protected override void OnModelCreating(ModelBuilder builder)\n    {\n        base.OnModelCreating(builder);\n\n        // Configure all entities\n        builder.ConfigureMyProject();\n    }\n}\n```\n\n## Entity Configuration\n\n```csharp\npublic static class MyProjectDbContextModelCreatingExtensions\n{\n    public static void ConfigureMyProject(this ModelBuilder builder)\n    {\n        Check.NotNull(builder, nameof(builder));\n\n        builder.Entity<Book>(b =>\n        {\n            b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n            b.ConfigureByConvention(); // ABP conventions (audit, soft-delete, etc.)\n\n            // Property configurations\n            b.Property(x => x.Name)\n                .IsRequired()\n                .HasMaxLength(BookConsts.MaxNameLength);\n\n            b.Property(x => x.Price)\n                .HasColumnType(\"decimal(18,2)\");\n\n            // Indexes\n            b.HasIndex(x => x.Name);\n\n            // Relationships\n            b.HasOne<Author>()\n                .WithMany()\n                .HasForeignKey(x => x.AuthorId)\n                .OnDelete(DeleteBehavior.Restrict);\n        });\n    }\n}\n```\n\n## Repository Implementation\n\n```csharp\npublic class BookRepository : EfCoreRepository<MyProjectDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyProjectDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(\n        string name,\n        bool includeDetails = true,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .FirstOrDefaultAsync(\n                b => b.Name == name,\n                GetCancellationToken(cancellationToken));\n    }\n\n    public async Task<List<Book>> GetListByAuthorAsync(\n        Guid authorId,\n        bool includeDetails = false,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .Where(b => b.AuthorId == authorId)\n            .ToListAsync(GetCancellationToken(cancellationToken));\n    }\n\n    public override async Task<IQueryable<Book>> WithDetailsAsync()\n    {\n        return (await GetQueryableAsync())\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Extension Method for Include\n```csharp\npublic static class BookEfCoreQueryableExtensions\n{\n    public static IQueryable<Book> IncludeDetails(\n        this IQueryable<Book> queryable,\n        bool include = true)\n    {\n        if (!include)\n        {\n            return queryable;\n        }\n\n        return queryable\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Migration Commands\n\n```bash\n# Navigate to EF Core project\ncd src/MyProject.EntityFrameworkCore\n\n# Add migration\ndotnet ef migrations add MigrationName\n\n# Apply migration (choose one):\ndotnet run --project ../MyProject.DbMigrator   # Recommended - also seeds data\ndotnet ef database update  # EF Core command only\n\n# Remove last migration (if not applied)\ndotnet ef migrations remove\n\n# Generate SQL script\ndotnet ef migrations script\n```\n\n> **Note**: ABP templates include `IDesignTimeDbContextFactory` in the EF Core project, so `-s` (startup project) parameter is not needed.\n\n## Module Configuration\n\n```csharp\n[DependsOn(typeof(AbpEntityFrameworkCoreModule))]\npublic class MyProjectEntityFrameworkCoreModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        context.Services.AddAbpDbContext<MyProjectDbContext>(options =>\n        {\n            // Add default repositories for aggregate roots only (DDD best practice)\n            options.AddDefaultRepositories();\n            // ⚠️ Avoid includeAllEntities: true - it creates repositories for child entities,\n            // allowing them to be modified without going through the aggregate root,\n            // which breaks data consistency\n        });\n\n        Configure<AbpDbContextOptions>(options =>\n        {\n            options.UseSqlServer(); // or UseNpgsql(), UseMySql(), etc.\n        });\n    }\n}\n```\n\n## Best Practices\n\n### Repositories for Aggregate Roots Only\nDon't use `includeAllEntities: true` in `AddDefaultRepositories()`. This creates repositories for child entities, allowing direct modification without going through the aggregate root - breaking DDD data consistency rules.\n\n```csharp\n// ✅ Correct - Only aggregate roots get repositories\noptions.AddDefaultRepositories();\n\n// ❌ Avoid - Creates repositories for ALL entities including child entities\noptions.AddDefaultRepositories(includeAllEntities: true);\n```\n\n### Always Call ConfigureByConvention\n```csharp\nbuilder.Entity<MyEntity>(b =>\n{\n    b.ConfigureByConvention(); // Don't forget this!\n    // Other configurations...\n});\n```\n\n### Use Table Prefix\n```csharp\npublic static class MyProjectConsts\n{\n    public const string DbTablePrefix = \"App\";\n    public const string DbSchema = null; // Or \"myschema\"\n}\n```\n\n### Performance Tips\n- Add explicit indexes for frequently queried fields\n- Use `AsNoTracking()` for read-only queries\n- Avoid N+1 queries with `.Include()` or specifications\n- ABP handles cancellation automatically; use `GetCancellationToken(cancellationToken)` only in custom repository methods\n- Consider query splitting for complex queries with multiple collections\n\n### Accessing Raw DbContext\n```csharp\npublic async Task CustomOperationAsync()\n{\n    var dbContext = await GetDbContextAsync();\n\n    // Raw SQL\n    await dbContext.Database.ExecuteSqlRawAsync(\n        \"UPDATE Books SET IsPublished = 1 WHERE AuthorId = {0}\",\n        authorId\n    );\n}\n```\n\n## Data Seeding\n\n```csharp\npublic class MyProjectDataSeedContributor : IDataSeedContributor, ITransientDependency\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n    private readonly IGuidGenerator _guidGenerator;\n\n    public async Task SeedAsync(DataSeedContext context)\n    {\n        if (await _bookRepository.GetCountAsync() > 0)\n        {\n            return;\n        }\n\n        await _bookRepository.InsertAsync(\n            new Book(_guidGenerator.Create(), \"Sample Book\", 19.99m, Guid.Empty),\n            autoSave: true\n        );\n    }\n}\n```\n",".agents/skills/abp-infrastructure/SKILL.md":"---\nname: abp-infrastructure\ndescription: ABP infrastructure services - ISettingProvider, IFeatureChecker, IDistributedCache, ILocalEventBus, IDistributedEventBus, IBackgroundJobManager, localization resource. Use when working with settings, feature flags, caching, event bus, or background jobs in ABP.\n---\n\n# ABP Infrastructure Services\n\n> **Docs**: https://abp.io/docs/latest/framework/infrastructure\n\n## Settings\n\n### Define Settings\n```csharp\npublic class MySettingDefinitionProvider : SettingDefinitionProvider\n{\n    public override void Define(ISettingDefinitionContext context)\n    {\n        context.Add(\n            new SettingDefinition(\"MyApp.MaxItemCount\", \"10\"),\n            new SettingDefinition(\"MyApp.EnableFeature\", \"false\"),\n            new SettingDefinition(\"MyApp.SecretKey\", isEncrypted: true)\n        );\n    }\n}\n```\n\n### Read Settings\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly ISettingProvider _settingProvider;\n\n    public async Task DoSomethingAsync()\n    {\n        var maxCount = await _settingProvider.GetAsync<int>(\"MyApp.MaxItemCount\");\n        var isEnabled = await _settingProvider.IsTrueAsync(\"MyApp.EnableFeature\");\n    }\n}\n```\n\n### Setting Value Providers (Priority Order)\n1. User settings (highest)\n2. Tenant settings\n3. Global settings\n4. Configuration (appsettings.json)\n5. Default value (lowest)\n\n## Features\n\n### Define Features\n```csharp\npublic class MyFeatureDefinitionProvider : FeatureDefinitionProvider\n{\n    public override void Define(IFeatureDefinitionContext context)\n    {\n        var myGroup = context.AddGroup(\"MyApp\");\n\n        myGroup.AddFeature(\n            \"MyApp.PdfReporting\",\n            defaultValue: \"false\",\n            valueType: new ToggleStringValueType()\n        );\n\n        myGroup.AddFeature(\n            \"MyApp.MaxProductCount\",\n            defaultValue: \"10\",\n            valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000))\n        );\n    }\n}\n```\n\n### Check Features\n```csharp\n[RequiresFeature(\"MyApp.PdfReporting\")]\npublic async Task<PdfReportDto> GetPdfReportAsync()\n{\n    // Only executes if feature is enabled\n}\n\n// Or programmatically\nif (await _featureChecker.IsEnabledAsync(\"MyApp.PdfReporting\"))\n{\n    // Feature is enabled for current tenant\n}\n\nvar maxCount = await _featureChecker.GetAsync<int>(\"MyApp.MaxProductCount\");\n```\n\n## Distributed Caching\n\n### Typed Cache\n```csharp\npublic class BookService : ITransientDependency\n{\n    private readonly IDistributedCache<BookCacheItem> _cache;\n    private readonly IClock _clock;\n\n    public BookService(IDistributedCache<BookCacheItem> cache, IClock clock)\n    {\n        _cache = cache;\n        _clock = clock;\n    }\n\n    public async Task<BookCacheItem> GetAsync(Guid bookId)\n    {\n        return await _cache.GetOrAddAsync(\n            bookId.ToString(),\n            async () => await GetBookFromDatabaseAsync(bookId),\n            () => new DistributedCacheEntryOptions\n            {\n                AbsoluteExpiration = _clock.Now.AddHours(1)\n            }\n        );\n    }\n}\n\n[CacheName(\"Books\")]\npublic class BookCacheItem\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n}\n```\n\n## Event Bus\n\n### Local Events (Same Process)\n```csharp\n// Event class\npublic class OrderCreatedEvent\n{\n    public Order Order { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEventHandler : ILocalEventHandler<OrderCreatedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n\n// Publish\nawait _localEventBus.PublishAsync(new OrderCreatedEvent { Order = order });\n```\n\n### Distributed Events (Cross-Service)\n```csharp\n// Event Transfer Object (in Domain.Shared)\n[EventName(\"MyApp.Order.Created\")]\npublic class OrderCreatedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEtoHandler : IDistributedEventHandler<OrderCreatedEto>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEto eventData)\n    {\n        // Handle distributed event\n    }\n}\n\n// Publish\nawait _distributedEventBus.PublishAsync(new OrderCreatedEto { ... });\n```\n\n### When to Use Which\n- **Local**: Within same module/bounded context\n- **Distributed**: Cross-module or microservice communication\n\n## Background Jobs\n\n### Define Job\n```csharp\npublic class EmailSendingArgs\n{\n    public string EmailAddress { get; set; }\n    public string Subject { get; set; }\n    public string Body { get; set; }\n}\n\npublic class EmailSendingJob : AsyncBackgroundJob<EmailSendingArgs>, ITransientDependency\n{\n    private readonly IEmailSender _emailSender;\n\n    public EmailSendingJob(IEmailSender emailSender)\n    {\n        _emailSender = emailSender;\n    }\n\n    public override async Task ExecuteAsync(EmailSendingArgs args)\n    {\n        await _emailSender.SendAsync(args.EmailAddress, args.Subject, args.Body);\n    }\n}\n```\n\n### Enqueue Job\n```csharp\nawait _backgroundJobManager.EnqueueAsync(\n    new EmailSendingArgs\n    {\n        EmailAddress = \"user@example.com\",\n        Subject = \"Hello\",\n        Body = \"...\"\n    },\n    delay: TimeSpan.FromMinutes(5) // Optional delay\n);\n```\n\n## Localization\n\n### Define Resource\n```csharp\n[LocalizationResourceName(\"MyModule\")]\npublic class MyModuleResource { }\n```\n\n### JSON Structure\n```json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"HelloWorld\": \"Hello World!\",\n    \"Menu:Books\": \"Books\"\n  }\n}\n```\n\n### Usage\n- In `ApplicationService`: Use `L[\"Key\"]` property (already available from base class)\n- In other services: Inject `IStringLocalizer<MyResource>`\n\n> **Tip**: ABP base classes already provide commonly used services as properties. Check before injecting:\n> - `StringLocalizer` (L), `Clock`, `CurrentUser`, `CurrentTenant`, `GuidGenerator`\n> - `AuthorizationService`, `FeatureChecker`, `DataFilter`\n> - `LoggerFactory`, `Logger`\n> - Methods like `CheckPolicyAsync()` for authorization checks\n",".agents/skills/abp-ddd/SKILL.md":"---\nname: abp-ddd\ndescription: ABP DDD patterns - Entities, Aggregate Roots, value objects, Repositories, Domain Services, Domain Events, Specifications. Use when designing domain layer, creating entities, repositories, or domain services in ABP projects.\n---\n\n# ABP DDD Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design\n\n## Anti-Patterns to Avoid\n\n- **Anemic entities**: public setters with no behavior — use private setters + methods that enforce invariants\n- **Repository for child entities**: only aggregate roots get repositories — access child entities through their root\n- **Generating GUID in entity constructor**: use `IGuidGenerator` from outside and pass `id` parameter\n- **Navigation properties to other aggregates**: reference by `Id` only, never add full navigation properties across aggregates\n- **Domain service depending on current user**: accept values from the application layer instead\n\n## Rich Domain Model vs Anemic Domain Model\n\nABP promotes **Rich Domain Model** pattern where entities contain both data AND behavior:\n\n| Anemic (Anti-pattern) | Rich (Recommended) |\n|----------------------|-------------------|\n| Entity = data only | Entity = data + behavior |\n| Logic in services | Logic in entity methods |\n| Public setters | Private setters with methods |\n| No validation in entity | Entity enforces invariants |\n\n**Encapsulation is key**: Protect entity state by using private setters and exposing behavior through methods.\n\n## Entities\n\n### Entity Example (Rich Model)\n```csharp\npublic class OrderLine : Entity<Guid>\n{\n    public Guid ProductId { get; private set; }\n    public int Count { get; private set; }\n    public decimal Price { get; private set; }\n\n    protected OrderLine() { } // For ORM\n\n    internal OrderLine(Guid id, Guid productId, int count, decimal price) : base(id)\n    {\n        ProductId = productId;\n        SetCount(count); // Validates through method\n        Price = price;\n    }\n\n    public void SetCount(int count)\n    {\n        if (count <= 0)\n            throw new BusinessException(\"Orders:InvalidCount\");\n        Count = count;\n    }\n}\n```\n\n## Aggregate Roots\n\nAggregate roots are consistency boundaries that:\n- Own their child entities\n- Enforce business rules\n- Publish domain events\n\n```csharp\npublic class Order : AggregateRoot<Guid>\n{\n    public string OrderNumber { get; private set; }\n    public Guid CustomerId { get; private set; }\n    public OrderStatus Status { get; private set; }\n    public ICollection<OrderLine> Lines { get; private set; }\n\n    protected Order() { } // For ORM\n\n    public Order(Guid id, string orderNumber, Guid customerId) : base(id)\n    {\n        OrderNumber = Check.NotNullOrWhiteSpace(orderNumber, nameof(orderNumber));\n        CustomerId = customerId;\n        Status = OrderStatus.Created;\n        Lines = new List<OrderLine>();\n    }\n\n    public void AddLine(Guid lineId, Guid productId, int count, decimal price)\n    {\n        // Business rule: Can only add lines to created orders\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotModifyOrder\");\n\n        Lines.Add(new OrderLine(lineId, productId, count, price));\n    }\n\n    public void Complete()\n    {\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotCompleteOrder\");\n\n        Status = OrderStatus.Completed;\n\n        // Publish events for side effects\n        AddLocalEvent(new OrderCompletedEvent(Id));           // Same transaction\n        AddDistributedEvent(new OrderCompletedEto { OrderId = Id }); // Cross-service\n    }\n}\n```\n\n### Domain Events\n- `AddLocalEvent()` - Handled within same transaction, can access full entity\n- `AddDistributedEvent()` - Handled asynchronously, use ETOs (Event Transfer Objects)\n\n### Entity Best Practices\n- **Encapsulation**: Private setters, public methods that enforce rules\n- **Primary constructor**: Enforce invariants, accept `id` parameter\n- **Protected parameterless constructor**: Required for ORM\n- **Initialize collections**: In primary constructor\n- **Virtual members**: For ORM proxy compatibility\n- **Reference by Id**: Don't add navigation properties to other aggregates\n- **Don't generate GUID in constructor**: Use `IGuidGenerator` externally\n\n## Repository Pattern\n\n### When to Use Custom Repository\n- **Generic repository** (`IRepository<T, TKey>`): Sufficient for simple CRUD operations\n- **Custom repository**: Only when you need custom query methods\n\n### Interface (Domain Layer)\n```csharp\n// Define custom interface only when custom queries are needed\npublic interface IOrderRepository : IRepository<Order, Guid>\n{\n    Task<Order> FindByOrderNumberAsync(string orderNumber, bool includeDetails = false);\n    Task<List<Order>> GetListByCustomerAsync(Guid customerId, bool includeDetails = false);\n}\n```\n\n### Repository Best Practices\n- **One repository per aggregate root only** - Never create repositories for child entities\n- Child entities must be accessed/modified only through their aggregate root\n- Creating repositories for child entities breaks data consistency (bypasses aggregate root's business rules)\n- In ABP, use `AddDefaultRepositories()` without `includeAllEntities: true` to enforce this\n- Define custom repository only when custom queries are needed\n- ABP handles `CancellationToken` automatically; add parameter only for explicit cancellation control\n- Single entity methods: `includeDetails = true` by default\n- List methods: `includeDetails = false` by default\n- Don't return projection classes\n- Interface in Domain, implementation in data layer\n\n```csharp\n// ✅ Correct: Repository for aggregate root (Order)\npublic interface IOrderRepository : IRepository<Order, Guid> { }\n\n// ❌ Wrong: Repository for child entity (OrderLine)\n// OrderLine should only be accessed through Order aggregate\npublic interface IOrderLineRepository : IRepository<OrderLine, Guid> { } // Don't do this!\n```\n\n## Domain Services\n\nUse domain services for business logic that:\n- Spans multiple aggregates\n- Requires repository queries to enforce rules\n\n```csharp\npublic class OrderManager : DomainService\n{\n    private readonly IOrderRepository _orderRepository;\n    private readonly IProductRepository _productRepository;\n\n    public OrderManager(\n        IOrderRepository orderRepository,\n        IProductRepository productRepository)\n    {\n        _orderRepository = orderRepository;\n        _productRepository = productRepository;\n    }\n\n    public async Task<Order> CreateAsync(string orderNumber, Guid customerId)\n    {\n        // Business rule: Order number must be unique\n        var existing = await _orderRepository.FindByOrderNumberAsync(orderNumber);\n        if (existing != null)\n        {\n            throw new BusinessException(\"Orders:OrderNumberAlreadyExists\")\n                .WithData(\"OrderNumber\", orderNumber);\n        }\n\n        return new Order(GuidGenerator.Create(), orderNumber, customerId);\n    }\n\n    public async Task AddProductAsync(Order order, Guid productId, int count)\n    {\n        var product = await _productRepository.GetAsync(productId);\n        order.AddLine(productId, count, product.Price);\n    }\n}\n```\n\n### Domain Service Best Practices\n- Use `*Manager` suffix naming\n- No interface by default (create only if needed)\n- Accept/return domain objects, not DTOs\n- Don't depend on authenticated user - pass values from application layer\n- Use base class properties (`GuidGenerator`, `Clock`) instead of injecting these services\n\n## Domain Events\n\n### Local Events\n```csharp\n// In aggregate\nAddLocalEvent(new OrderCompletedEvent(Id));\n\n// Handler\npublic class OrderCompletedEventHandler : ILocalEventHandler<OrderCompletedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCompletedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n```\n\n### Distributed Events (ETO)\nFor inter-module/microservice communication:\n```csharp\n// In Domain.Shared\n[EventName(\"Orders.OrderCompleted\")]\npublic class OrderCompletedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n```\n\n## Specifications\n\nReusable query conditions:\n```csharp\npublic class CompletedOrdersSpec : Specification<Order>\n{\n    public override Expression<Func<Order, bool>> ToExpression()\n    {\n        return o => o.Status == OrderStatus.Completed;\n    }\n}\n\n// Usage\nvar orders = await _orderRepository.GetListAsync(new CompletedOrdersSpec());\n```\n",".agents/skills/abp-dependency-rules/SKILL.md":"---\nname: abp-dependency-rules\ndescription: ABP project layer dependency rules - which projects can reference which, domain/application/infrastructure separation, cross-layer violations to avoid. Use when reviewing project structure, adding new project references, or checking if a dependency direction is correct.\n---\n\n# ABP Dependency Rules\n\n## Core Principles (All Templates)\n\nThese principles apply regardless of solution structure:\n\n1. **Domain logic never depends on infrastructure** (no DbContext in domain/application)\n2. **Use abstractions** (interfaces) for dependencies\n3. **Higher layers depend on lower layers**, never the reverse\n4. **Data access through repositories**, not direct DbContext\n\n## Layered Template Structure\n\n> **Note**: This section applies to layered templates (app, module). Single-layer and microservice templates have different structures.\n\n```\nDomain.Shared    → Constants, enums, localization keys\n       ↑\n    Domain       → Entities, repository interfaces, domain services\n       ↑\nApplication.Contracts → App service interfaces, DTOs\n       ↑\n  Application    → App service implementations\n       ↑\n   HttpApi       → REST controllers (optional)\n       ↑\n     Host        → Final application with DI and middleware\n```\n\n### Layered Dependency Direction\n\n| Project | Can Reference | Referenced By |\n|---------|---------------|---------------|\n| Domain.Shared | Nothing | All |\n| Domain | Domain.Shared | Application, Data layer |\n| Application.Contracts | Domain.Shared | Application, HttpApi, Clients |\n| Application | Domain, Contracts | Host |\n| EntityFrameworkCore/MongoDB | Domain | Host only |\n| HttpApi | Contracts only | Host |\n\n## Critical Rules\n\n### ❌ Never Do\n```csharp\n// Application layer accessing DbContext directly\npublic class BookAppService : ApplicationService\n{\n    private readonly MyDbContext _dbContext; // ❌ WRONG\n}\n\n// Domain depending on application layer\npublic class BookManager : DomainService\n{\n    private readonly IBookAppService _appService; // ❌ WRONG\n}\n\n// HttpApi depending on Application implementation\npublic class BookController : AbpController\n{\n    private readonly BookAppService _bookAppService; // ❌ WRONG - Use interface\n}\n```\n\n### ✅ Always Do\n```csharp\n// Application layer using repository abstraction\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// Domain service using domain abstractions\npublic class BookManager : DomainService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// HttpApi depending on contracts only\npublic class BookController : AbpController\n{\n    private readonly IBookAppService _bookAppService; // ✅ CORRECT\n}\n```\n\n## Repository Pattern Enforcement\n\n### Interface Location\n```csharp\n// In Domain project\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### Implementation Location\n```csharp\n// In EntityFrameworkCore project\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n\n// In MongoDB project\npublic class BookRepository : MongoDbRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n```\n\n## Multi-Application Scenarios\n\nWhen you have multiple applications (e.g., Admin + Public API):\n\n### Vertical Separation\n```\nMyProject.Admin.Application      - Admin-specific services\nMyProject.Public.Application     - Public-specific services\nMyProject.Domain                 - Shared domain (both reference this)\n```\n\n### Rules\n- Admin and Public application layers **MUST NOT** reference each other\n- Share domain logic, not application logic\n- Each vertical can have its own DTOs even if similar\n\n## Enforcement Checklist (Layered Templates)\n\nWhen adding a new feature:\n1. **Entity changes?** → Domain project\n2. **Constants/enums?** → Domain.Shared project\n3. **Repository interface?** → Domain project (only if custom queries needed)\n4. **Repository implementation?** → EntityFrameworkCore/MongoDB project\n5. **DTOs and service interface?** → Application.Contracts project\n6. **Service implementation?** → Application project\n7. **API endpoint?** → HttpApi project (if not using auto API controllers)\n\n## Common Violations to Watch\n\n| Violation | Impact | Fix |\n|-----------|--------|-----|\n| DbContext in Application | Breaks DB independence | Use repository |\n| Entity in DTO | Exposes internals | Map to DTO |\n| IQueryable in interface | Breaks abstraction | Return concrete types |\n| Cross-module app service call | Tight coupling | Use events or domain |\n",".agents/skills/abp-development-flow/SKILL.md":"---\nname: abp-development-flow\ndescription: ABP development workflow - step-by-step guide for adding new entities, migrations, application services, localization, permissions, and tests. Use when adding new features or entities to an ABP project.\n---\n\n# ABP Development Workflow\n\n> **Tutorials**: https://abp.io/docs/latest/tutorials\n\n## Adding a New Entity (Full Flow)\n\n### 1. Domain Layer\nCreate entity (location varies by template: `*.Domain/Entities/` for layered, `Entities/` for single-layer/microservice):\n\n```csharp\npublic class Book : AggregateRoot<Guid>\n{\n    public string Name { get; private set; }\n    public decimal Price { get; private set; }\n    public Guid AuthorId { get; private set; }\n\n    protected Book() { }\n\n    public Book(Guid id, string name, decimal price, Guid authorId) : base(id)\n    {\n        Name = Check.NotNullOrWhiteSpace(name, nameof(name));\n        SetPrice(price);\n        AuthorId = authorId;\n    }\n\n    public void SetPrice(decimal price)\n    {\n        Price = Check.Range(price, nameof(price), 0, 9999);\n    }\n}\n```\n\n### 2. Domain.Shared\nAdd constants and enums in `*.Domain.Shared/`:\n\n```csharp\npublic static class BookConsts\n{\n    public const int MaxNameLength = 128;\n}\n\npublic enum BookType\n{\n    Novel,\n    Science,\n    Biography\n}\n```\n\n### 3. Repository Interface (Optional)\nDefine custom repository in `*.Domain/` only if you need custom query methods. For simple CRUD, use generic `IRepository<Book, Guid>` directly:\n\n```csharp\n// Only if custom queries are needed\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### 4. EF Core Configuration\nIn `*.EntityFrameworkCore/`:\n\n**DbContext:**\n```csharp\npublic DbSet<Book> Books { get; set; }\n```\n\n**OnModelCreating:**\n```csharp\nbuilder.Entity<Book>(b =>\n{\n    b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n    b.ConfigureByConvention();\n    b.Property(x => x.Name).IsRequired().HasMaxLength(BookConsts.MaxNameLength);\n    b.HasIndex(x => x.Name);\n});\n```\n\n**Repository Implementation (only if custom interface defined):**\n```csharp\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(string name)\n    {\n        return await (await GetDbSetAsync())\n            .FirstOrDefaultAsync(b => b.Name == name);\n    }\n}\n```\n\n### 5. Run Migration\nSee `abp-ef-core` skill for migration commands. Recommended: use `DbMigrator` project to apply migrations and seed data.\n\n### 6. Application.Contracts\nCreate DTOs and service interface:\n\n```csharp\n// DTOs\npublic class BookDto : EntityDto<Guid>\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n    public Guid AuthorId { get; set; }\n}\n\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(BookConsts.MaxNameLength)]\n    public string Name { get; set; }\n\n    [Range(0, 9999)]\n    public decimal Price { get; set; }\n\n    [Required]\n    public Guid AuthorId { get; set; }\n}\n\n// Service Interface\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookDto>> GetListAsync(PagedAndSortedResultRequestDto input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n}\n```\n\n### 7. Object Mapping (Mapperly / AutoMapper)\nABP supports both Mapperly and AutoMapper. Prefer the provider already used in the solution.\n\nIf the solution uses **Mapperly**, create a mapper in the Application project:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\ncontext.Services.AddSingleton<BookMapper>();\n```\n\n### 8. Application Service\nImplement service (using generic repository - use `IBookRepository` if you defined custom interface in step 3):\n\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // Or IBookRepository\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IRepository<Book, Guid> bookRepository,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(MyProjectPermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = new Book(\n            GuidGenerator.Create(),\n            input.Name,\n            input.Price,\n            input.AuthorId\n        );\n\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n### 9. Add Localization\nIn `*.Domain.Shared/Localization/*/en.json`:\n\n```json\n{\n  \"Book\": \"Book\",\n  \"Books\": \"Books\",\n  \"BookName\": \"Name\",\n  \"BookPrice\": \"Price\"\n}\n```\n\n### 10. Add Permissions (if needed)\n```csharp\npublic static class MyProjectPermissions\n{\n    public static class Books\n    {\n        public const string Default = \"MyProject.Books\";\n        public const string Create = Default + \".Create\";\n    }\n}\n```\n\n### 11. Add Tests\n```csharp\npublic class BookAppService_Tests : MyProjectApplicationTestBase\n{\n    private readonly IBookAppService _bookAppService;\n\n    public BookAppService_Tests()\n    {\n        _bookAppService = GetRequiredService<IBookAppService>();\n    }\n\n    [Fact]\n    public async Task Should_Create_Book()\n    {\n        var result = await _bookAppService.CreateAsync(new CreateBookDto\n        {\n            Name = \"Test Book\",\n            Price = 19.99m\n        });\n\n        result.Id.ShouldNotBe(Guid.Empty);\n        result.Name.ShouldBe(\"Test Book\");\n    }\n}\n```\n\n## Checklist for New Features\n\n- [ ] Entity created with proper constructors\n- [ ] Constants in Domain.Shared\n- [ ] Custom repository interface in Domain (only if custom queries needed)\n- [ ] EF Core configuration added\n- [ ] Custom repository implementation (only if interface defined)\n- [ ] Migration generated and applied (use DbMigrator)\n- [ ] Mapperly mapper created and registered\n- [ ] DTOs created in Application.Contracts\n- [ ] Service interface defined\n- [ ] Service implementation with authorization\n- [ ] Localization keys added\n- [ ] Permissions defined (if applicable)\n- [ ] Tests written\n",".agents/skills/abp-microservice/SKILL.md":"# abp-microservice\n\nPath: `.agents/skills/abp-microservice/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-microservice/SKILL.md)",".agents/skills/abp-module/SKILL.md":"# abp-module\n\nPath: `.agents/skills/abp-module/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-module/SKILL.md)",".agents/skills/abp-mongodb/SKILL.md":"# abp-mongodb\n\nPath: `.agents/skills/abp-mongodb/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mongodb/SKILL.md)",".agents/skills/abp-multi-tenancy/SKILL.md":"# abp-multi-tenancy\n\nPath: `.agents/skills/abp-multi-tenancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-multi-tenancy/SKILL.md)",".agents/skills/abp-mvc/SKILL.md":"# abp-mvc\n\nPath: `.agents/skills/abp-mvc/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mvc/SKILL.md)",".agents/skills/abp-testing/SKILL.md":"# abp-testing\n\nPath: `.agents/skills/abp-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-testing/SKILL.md)",".claude/skills/abp-angular/SKILL.md":"# abp-angular\n\nPath: `.claude/skills/abp-angular/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-angular/SKILL.md)",".claude/skills/abp-app-nolayers/SKILL.md":"# abp-app-nolayers\n\nPath: `.claude/skills/abp-app-nolayers/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-app-nolayers/SKILL.md)",".claude/skills/abp-application-layer/SKILL.md":"# abp-application-layer\n\nPath: `.claude/skills/abp-application-layer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-application-layer/SKILL.md)",".claude/skills/abp-authorization/SKILL.md":"# abp-authorization\n\nPath: `.claude/skills/abp-authorization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-authorization/SKILL.md)",".claude/skills/abp-blazor/SKILL.md":"# abp-blazor\n\nPath: `.claude/skills/abp-blazor/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-blazor/SKILL.md)",".claude/skills/abp-cli/SKILL.md":"# abp-cli\n\nPath: `.claude/skills/abp-cli/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-cli/SKILL.md)",".claude/skills/abp-core/SKILL.md":"# abp-core\n\nPath: `.claude/skills/abp-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-core/SKILL.md)",".claude/skills/abp-ddd/SKILL.md":"# abp-ddd\n\nPath: `.claude/skills/abp-ddd/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ddd/SKILL.md)",".claude/skills/abp-dependency-rules/SKILL.md":"# abp-dependency-rules\n\nPath: `.claude/skills/abp-dependency-rules/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-dependency-rules/SKILL.md)",".claude/skills/abp-development-flow/SKILL.md":"# abp-development-flow\n\nPath: `.claude/skills/abp-development-flow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-development-flow/SKILL.md)",".claude/skills/abp-ef-core/SKILL.md":"# abp-ef-core\n\nPath: `.claude/skills/abp-ef-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ef-core/SKILL.md)",".claude/skills/abp-infrastructure/SKILL.md":"# abp-infrastructure\n\nPath: `.claude/skills/abp-infrastructure/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-infrastructure/SKILL.md)",".claude/skills/abp-microservice/SKILL.md":"# abp-microservice\n\nPath: `.claude/skills/abp-microservice/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-microservice/SKILL.md)",".claude/skills/abp-module/SKILL.md":"# abp-module\n\nPath: `.claude/skills/abp-module/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-module/SKILL.md)",".claude/skills/abp-mongodb/SKILL.md":"# abp-mongodb\n\nPath: `.claude/skills/abp-mongodb/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mongodb/SKILL.md)",".claude/skills/abp-multi-tenancy/SKILL.md":"# abp-multi-tenancy\n\nPath: `.claude/skills/abp-multi-tenancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-multi-tenancy/SKILL.md)",".claude/skills/abp-mvc/SKILL.md":"# abp-mvc\n\nPath: `.claude/skills/abp-mvc/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mvc/SKILL.md)",".claude/skills/abp-testing/SKILL.md":"# abp-testing\n\nPath: `.claude/skills/abp-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-testing/SKILL.md)",".cursorrules":"# Cursor IDE Native Rules\n\nPath: `.cursorrules`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.cursorrules)",".github/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.github/copilot-instructions.md)","tools/github-changelog-generator/README.md":"# github-changelog-generator Documentation\n\nPath: `tools/github-changelog-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/README.md)","tools/github-changelog-generator/config.yaml":"# Github-changelog-generator Skill\n\nPath: `tools/github-changelog-generator/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/config.yaml)","tools/localization-key-synchronizer/README.md":"# localization-key-synchronizer Documentation\n\nPath: `tools/localization-key-synchronizer/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/localization-key-synchronizer/README.md)","npm/ng-packs/tools/tsconfig.tools.json":"# Tools Skill\n\nPath: `npm/ng-packs/tools/tsconfig.tools.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/tsconfig.tools.json)","docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md":"# 2023-07-09-Cascading-Option-Loading-With-Extensions Documentation\n\nPath: `docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md)","npm/ng-packs/packages/account-core/.eslintrc.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/.eslintrc.json)","npm/ng-packs/packages/account-core/README.md":"# account-core Documentation\n\nPath: `npm/ng-packs/packages/account-core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/README.md)","npm/ng-packs/packages/account-core/ng-package.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/ng-package.json)","npm/ng-packs/packages/account-core/package.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/package.json)","npm/ng-packs/packages/account-core/project.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/project.json)","npm/ng-packs/packages/account-core/tsconfig.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.json)","npm/ng-packs/packages/account-core/tsconfig.lib.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.json)","npm/ng-packs/packages/account-core/tsconfig.lib.prod.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.prod.json)","npm/ng-packs/packages/account-core/tsconfig.spec.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.spec.json)","npm/ng-packs/packages/account/.eslintrc.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/.eslintrc.json)","npm/ng-packs/packages/account/README.md":"# account Documentation\n\nPath: `npm/ng-packs/packages/account/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/README.md)","npm/ng-packs/packages/account/ng-package.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/ng-package.json)","npm/ng-packs/packages/account/package.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/package.json)","npm/ng-packs/packages/account/project.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/project.json)","npm/ng-packs/packages/account/tsconfig.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.json)","npm/ng-packs/packages/account/tsconfig.lib.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.json)","npm/ng-packs/packages/account/tsconfig.lib.prod.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.prod.json)","npm/ng-packs/packages/account/tsconfig.spec.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.spec.json)","npm/ng-packs/packages/cms-kit/README.md":"# cms-kit Documentation\n\nPath: `npm/ng-packs/packages/cms-kit/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/README.md)","npm/ng-packs/packages/cms-kit/ng-package.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/ng-package.json)","npm/ng-packs/packages/cms-kit/package.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/package.json)","npm/ng-packs/packages/cms-kit/project.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/project.json)","npm/ng-packs/packages/cms-kit/tsconfig.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.json)","npm/ng-packs/packages/cms-kit/tsconfig.lib.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.json)","npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json)","npm/ng-packs/packages/cms-kit/tsconfig.spec.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.spec.json)","npm/ng-packs/packages/components/.eslintrc.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/.eslintrc.json)","npm/ng-packs/packages/components/README.md":"# components Documentation\n\nPath: `npm/ng-packs/packages/components/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/README.md)","npm/ng-packs/packages/components/ng-package.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/ng-package.json)","npm/ng-packs/packages/components/package.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/package.json)","npm/ng-packs/packages/components/project.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/project.json)","npm/ng-packs/packages/components/tsconfig.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.json)","npm/ng-packs/packages/components/tsconfig.lib.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.json)","npm/ng-packs/packages/components/tsconfig.lib.prod.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.prod.json)","npm/ng-packs/packages/components/tsconfig.spec.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.spec.json)","npm/ng-packs/packages/core/.eslintrc.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/.eslintrc.json)","npm/ng-packs/packages/core/README.md":"# core Documentation\n\nPath: `npm/ng-packs/packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/README.md)","npm/ng-packs/packages/core/ng-package.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/ng-package.json)","npm/ng-packs/packages/core/package.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/package.json)","npm/ng-packs/packages/core/project.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/project.json)","npm/ng-packs/packages/core/tsconfig.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.json)","npm/ng-packs/packages/core/tsconfig.lib.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.json)","npm/ng-packs/packages/core/tsconfig.lib.prod.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.prod.json)","npm/ng-packs/packages/core/tsconfig.spec.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.spec.json)","npm/ng-packs/packages/feature-management/.eslintrc.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/.eslintrc.json)","npm/ng-packs/packages/feature-management/README.md":"# feature-management Documentation\n\nPath: `npm/ng-packs/packages/feature-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/README.md)","npm/ng-packs/packages/feature-management/ng-package.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/ng-package.json)","npm/ng-packs/packages/feature-management/package.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/package.json)","npm/ng-packs/packages/feature-management/project.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/project.json)","npm/ng-packs/packages/feature-management/tsconfig.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.json)","npm/ng-packs/packages/feature-management/tsconfig.lib.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.json)","npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/feature-management/tsconfig.spec.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.spec.json)","npm/ng-packs/packages/generators/.eslintrc.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/.eslintrc.json)","npm/ng-packs/packages/generators/README.md":"# generators Documentation\n\nPath: `npm/ng-packs/packages/generators/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/README.md)","npm/ng-packs/packages/generators/generators.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/generators.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/generators.json)","npm/ng-packs/packages/generators/package.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/package.json)","npm/ng-packs/packages/generators/project.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/project.json)","npm/ng-packs/packages/generators/tsconfig.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.json)","npm/ng-packs/packages/generators/tsconfig.lib.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.lib.json)","npm/ng-packs/packages/generators/tsconfig.spec.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.spec.json)","npm/ng-packs/packages/identity/.eslintrc.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/.eslintrc.json)","npm/ng-packs/packages/identity/README.md":"# identity Documentation\n\nPath: `npm/ng-packs/packages/identity/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/README.md)","npm/ng-packs/packages/identity/ng-package.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/ng-package.json)","npm/ng-packs/packages/identity/package.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/package.json)","npm/ng-packs/packages/identity/project.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/project.json)","npm/ng-packs/packages/identity/tsconfig.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.json)","npm/ng-packs/packages/identity/tsconfig.lib.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.json)","npm/ng-packs/packages/identity/tsconfig.lib.prod.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.prod.json)","npm/ng-packs/packages/identity/tsconfig.spec.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.spec.json)","npm/ng-packs/packages/oauth/.eslintrc.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/.eslintrc.json)","npm/ng-packs/packages/oauth/README.md":"# oauth Documentation\n\nPath: `npm/ng-packs/packages/oauth/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/README.md)","npm/ng-packs/packages/oauth/ng-package.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/ng-package.json)","npm/ng-packs/packages/oauth/package.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/package.json)","npm/ng-packs/packages/oauth/project.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/project.json)","npm/ng-packs/packages/oauth/tsconfig.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.json)","npm/ng-packs/packages/oauth/tsconfig.lib.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.json)","npm/ng-packs/packages/oauth/tsconfig.lib.prod.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.prod.json)","npm/ng-packs/packages/oauth/tsconfig.spec.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.spec.json)","npm/ng-packs/packages/permission-management/.eslintrc.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/.eslintrc.json)","npm/ng-packs/packages/permission-management/README.md":"# permission-management Documentation\n\nPath: `npm/ng-packs/packages/permission-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/README.md)","npm/ng-packs/packages/permission-management/ng-package.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/ng-package.json)","npm/ng-packs/packages/permission-management/package.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/package.json)","npm/ng-packs/packages/permission-management/project.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/project.json)","npm/ng-packs/packages/permission-management/tsconfig.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.json)","npm/ng-packs/packages/permission-management/tsconfig.lib.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.json)","npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/permission-management/tsconfig.spec.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.spec.json)","npm/ng-packs/packages/schematics/.eslintrc.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/.eslintrc.json)","npm/ng-packs/packages/schematics/README.md":"# schematics Documentation\n\nPath: `npm/ng-packs/packages/schematics/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/README.md)","npm/ng-packs/packages/schematics/package.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/package.json)","npm/ng-packs/packages/schematics/project.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/project.json)","npm/ng-packs/packages/schematics/tsconfig.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.json)","npm/ng-packs/packages/schematics/tsconfig.lib.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.lib.json)","npm/ng-packs/packages/schematics/tsconfig.spec.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.spec.json)","npm/ng-packs/packages/setting-management/.eslintrc.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/.eslintrc.json)","npm/ng-packs/packages/setting-management/README.md":"# setting-management Documentation\n\nPath: `npm/ng-packs/packages/setting-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/README.md)","npm/ng-packs/packages/setting-management/ng-package.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/ng-package.json)","npm/ng-packs/packages/setting-management/package.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/package.json)","npm/ng-packs/packages/setting-management/project.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/project.json)","npm/ng-packs/packages/setting-management/tsconfig.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.json)","npm/ng-packs/packages/setting-management/tsconfig.lib.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.json)","npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/setting-management/tsconfig.spec.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.spec.json)","npm/ng-packs/packages/tenant-management/.eslintrc.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/.eslintrc.json)","npm/ng-packs/packages/tenant-management/README.md":"# tenant-management Documentation\n\nPath: `npm/ng-packs/packages/tenant-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/README.md)","npm/ng-packs/packages/tenant-management/ng-package.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/ng-package.json)","npm/ng-packs/packages/tenant-management/package.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/package.json)","npm/ng-packs/packages/tenant-management/project.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/project.json)","npm/ng-packs/packages/tenant-management/tsconfig.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.json)","npm/ng-packs/packages/tenant-management/tsconfig.lib.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.json)","npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/tenant-management/tsconfig.spec.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.spec.json)","npm/ng-packs/packages/theme-basic/.eslintrc.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/.eslintrc.json)","npm/ng-packs/packages/theme-basic/README.md":"# theme-basic Documentation\n\nPath: `npm/ng-packs/packages/theme-basic/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/README.md)","npm/ng-packs/packages/theme-basic/ng-package.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/ng-package.json)","npm/ng-packs/packages/theme-basic/package.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/package.json)","npm/ng-packs/packages/theme-basic/project.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/project.json)","npm/ng-packs/packages/theme-basic/tsconfig.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.json)","npm/ng-packs/packages/theme-basic/tsconfig.lib.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.json)","npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json)","npm/ng-packs/packages/theme-basic/tsconfig.spec.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.spec.json)","npm/ng-packs/packages/theme-shared/.eslintrc.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/.eslintrc.json)","npm/ng-packs/packages/theme-shared/README.md":"# theme-shared Documentation\n\nPath: `npm/ng-packs/packages/theme-shared/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/README.md)","npm/ng-packs/packages/theme-shared/ng-package.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/ng-package.json)","npm/ng-packs/packages/theme-shared/package.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/package.json)","npm/ng-packs/packages/theme-shared/project.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/project.json)","npm/ng-packs/packages/theme-shared/tsconfig.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.json)","npm/ng-packs/packages/theme-shared/tsconfig.lib.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.json)","npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json)","npm/ng-packs/packages/theme-shared/tsconfig.spec.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.spec.json)","npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md":"# Ai-migrations Skill\n\nPath: `npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md)","npm/ng-packs/packages/account-core/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/account-core/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/ng-package.json)","npm/ng-packs/packages/account/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/account/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/config/ng-package.json)","npm/ng-packs/packages/cms-kit/admin/ng-package.json":"# Admin Skill\n\nPath: `npm/ng-packs/packages/cms-kit/admin/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/ng-package.json)","npm/ng-packs/packages/cms-kit/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/ng-package.json)","npm/ng-packs/packages/cms-kit/public/ng-package.json":"# Public Skill\n\nPath: `npm/ng-packs/packages/cms-kit/public/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/ng-package.json)","npm/ng-packs/packages/components/chart.js/ng-package.json":"# Chart.js Skill\n\nPath: `npm/ng-packs/packages/components/chart.js/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/chart.js/ng-package.json)","npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md":"# Dynamic-form Skill\n\nPath: `npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md)","npm/ng-packs/packages/components/dynamic-form/ng-package.json":"# Dynamic-form Skill\n\nPath: `npm/ng-packs/packages/components/dynamic-form/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/ng-package.json)","npm/ng-packs/packages/components/extensible/ng-package.json":"# Extensible Skill\n\nPath: `npm/ng-packs/packages/components/extensible/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/extensible/ng-package.json)","npm/ng-packs/packages/components/lookup/ng-package.json":"# Lookup Skill\n\nPath: `npm/ng-packs/packages/components/lookup/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/lookup/ng-package.json)","npm/ng-packs/packages/components/page/ng-package.json":"# Page Skill\n\nPath: `npm/ng-packs/packages/components/page/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/page/ng-package.json)","npm/ng-packs/packages/components/tree/ng-package.json":"# Tree Skill\n\nPath: `npm/ng-packs/packages/components/tree/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tree/ng-package.json)","npm/ng-packs/packages/core/locale/ng-package.json":"# Locale Skill\n\nPath: `npm/ng-packs/packages/core/locale/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/locale/ng-package.json)","npm/ng-packs/packages/core/testing/ng-package.json":"# Testing Skill\n\nPath: `npm/ng-packs/packages/core/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/testing/ng-package.json)","npm/ng-packs/packages/feature-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/feature-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/ng-package.json)","npm/ng-packs/packages/identity/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/identity/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/config/ng-package.json)","npm/ng-packs/packages/identity/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/identity/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/ng-package.json)","npm/ng-packs/packages/permission-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/permission-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/ng-package.json)","npm/ng-packs/packages/schematics/src/collection.json":"# Src Skill\n\nPath: `npm/ng-packs/packages/schematics/src/collection.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/collection.json)","npm/ng-packs/packages/setting-management/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/setting-management/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/ng-package.json)","npm/ng-packs/packages/setting-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/ng-package.json)","npm/ng-packs/packages/tenant-management/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/tenant-management/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/config/ng-package.json)","npm/ng-packs/packages/tenant-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/ng-package.json)","npm/ng-packs/packages/theme-basic/testing/ng-package.json":"# Testing Skill\n\nPath: `npm/ng-packs/packages/theme-basic/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/testing/ng-package.json)","npm/ng-packs/packages/theme-shared/testing/ng-package.json":"# Testing Skill\n\nPath: `npm/ng-packs/packages/theme-shared/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/testing/ng-package.json)","tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml":"# Config Skill\n\nPath: `tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml)","npm/ng-packs/packages/cms-kit/admin/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/cms-kit/admin/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/config/ng-package.json)","npm/ng-packs/packages/cms-kit/public/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/cms-kit/public/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/config/ng-package.json)","npm/ng-packs/packages/core/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/core/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/README.md)","npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/generators/src/generators/change-theme/schema.json":"# Change-theme Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/change-theme/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/change-theme/schema.json)","npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json":"# Generate-proxy Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json)","npm/ng-packs/packages/generators/src/generators/update-version/schema.json":"# Update-version Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/update-version/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/update-version/schema.json)","npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json":"# Ai-config Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json)","npm/ng-packs/packages/schematics/src/commands/api/schema.json":"# Api Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/api/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/api/schema.json)","npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json":"# Change-theme Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json)","npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json":"# Create-lib Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json":"# Proxy-add Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json":"# Proxy-index Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json":"# Proxy-refresh Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json":"# Proxy-remove Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json)","npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json":"# Ssr-add Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json)","npm/ng-packs/packages/schematics/src/utils/angular/README.md":"# angular Documentation\n\nPath: `npm/ng-packs/packages/schematics/src/utils/angular/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/README.md)","npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json":"# Server Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json)","npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json":"# Latest-versions Skill\n\nPath: `npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json)","npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md)","npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md":"# Command: /claude\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md":"# Command: /copilot-instructions\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md":"# Command: /gemini\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md":"# Command: /guidelines\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc":"# Cursor Rule: cursor\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md":"# Command: /guidelines\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md)"},"files":{".agents/skills/abp-cli/SKILL.md":"---\nname: abp-cli\ndescription: ABP CLI commands - generate-proxy, install-libs, add-package-ref, new-module, install-module, abp update, abp clean, abp suite generate. Use when the user asks how to run ABP CLI commands, generate proxies, install libraries, or use ABP Suite.\n---\n\n# ABP CLI Commands\n\n> **Full documentation**: https://abp.io/docs/latest/cli\n> Use `abp help [command]` for detailed options.\n\n## Generate Client Proxies\n\n```bash\n# URL flag: `-u` (short) or `--url` (long). Use whichever your team prefers, but keep it consistent.\n#\n# Angular (host must be running)\nabp generate-proxy -t ng\n\n# C# client proxies\nabp generate-proxy -t csharp -u https://localhost:44300\n\n# Integration services only (microservices)\nabp generate-proxy -t csharp -u https://localhost:44300 -st integration\n\n# JavaScript\nabp generate-proxy -t js -u https://localhost:44300\n```\n\n## Install Client-Side Libraries\n\n```bash\n# Install NPM packages for MVC/Blazor Server\nabp install-libs\n```\n\n## Add Package Reference\n\n```bash\n# Add project reference with module dependency\nabp add-package-ref Acme.BookStore.Domain\nabp add-package-ref Acme.BookStore.Domain -t Acme.BookStore.Application\n```\n\n## Module Operations\n\n```bash\n# Create new module in solution\nabp new-module Acme.OrderManagement -t module:ddd\n\n# Install published module\nabp install-module Volo.Blogging\n\n# Add ABP NuGet package\nabp add-package Volo.Abp.Caching.StackExchangeRedis\n```\n\n## Update & Clean\n\n```bash\nabp update                  # Update all ABP packages\nabp update --version 8.0.0  # Specific version\nabp clean                   # Delete bin/obj folders\n```\n\n## ABP Suite (CRUD Generation)\n\nGenerate CRUD pages from entity JSON (created via Suite UI):\n\n```bash\nabp suite generate --entity .suite/entities/Book.json --solution ./Acme.BookStore.sln\n```\n\n> **Note**: Entity JSON files are created when you generate an entity via ABP Suite UI. They are stored in `.suite/entities/` folder.\n> **Suite docs**: https://abp.io/docs/latest/suite\n\n## Quick Reference\n\n| Task | Command |\n|------|---------|\n| Angular proxies | `abp generate-proxy -t ng` |\n| C# proxies | `abp generate-proxy -t csharp -u URL` |\n| Install JS libs | `abp install-libs` |\n| Add reference | `abp add-package-ref PackageName` |\n| Create module | `abp new-module ModuleName` |\n| Install module | `abp install-module ModuleName` |\n| Update packages | `abp update` |\n| Clean solution | `abp clean` |\n| Suite CRUD | `abp suite generate -e entity.json -s solution.sln` |\n| Get help | `abp help [command]` |\n",".agents/skills/abp-app-nolayers/SKILL.md":"---\nname: abp-app-nolayers\ndescription: ABP Single-Layer (No-Layers / nolayers) application template - single project structure, feature-based file organization, no separate Domain/Application.Contracts projects. Use when working with the single-layer web application template or when the project has no layered separation.\n---\n\n# ABP Single-Layer Application Template\n\n> **Docs**: https://abp.io/docs/latest/solution-templates/single-layer-web-application\n\n## Solution Structure\n\nSingle project containing everything:\n\n```\nMyProject/\n├── src/\n│   └── MyProject/\n│       ├── Data/              # DbContext, migrations\n│       ├── Entities/          # Domain entities\n│       ├── Services/          # Application services + DTOs\n│       ├── Pages/             # Razor pages / Blazor components\n│       └── MyProjectModule.cs\n└── test/\n    └── MyProject.Tests/\n```\n\n## Key Differences from Layered\n\n| Layered Template | Single-Layer Template |\n|------------------|----------------------|\n| DTOs in Application.Contracts | DTOs in Services folder (same project) |\n| Repository interfaces in Domain | Use generic `IRepository<T, TKey>` directly |\n| Separate Domain.Shared for constants | Constants in same project |\n| Multiple module classes | Single module class |\n\n## File Organization\n\nGroup related files by feature:\n\n```\nServices/\n├── Books/\n│   ├── BookAppService.cs\n│   ├── BookDto.cs\n│   ├── CreateBookDto.cs\n│   └── IBookAppService.cs\n└── Authors/\n    ├── AuthorAppService.cs\n    └── ...\n```\n\n## Simplified Entity (Still keep invariants)\n\nSingle-layer templates are structurally simpler, but you may still have real business invariants.\n\n- For **trivial CRUD** entities, public setters can be acceptable.\n- For **non-trivial business rules**, still prefer encapsulation (private setters + methods) to prevent invalid states.\n\n```csharp\npublic class Book : AuditedAggregateRoot<Guid>\n{\n    public string Name { get; set; }  // OK for trivial CRUD only\n    public decimal Price { get; set; }\n}\n```\n\n## No Custom Repository Needed\n\nUse generic repository directly - no need to define custom interfaces:\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n\n    // Generic repository is sufficient for single-layer apps\n}\n```\n",".agents/skills/abp-angular/SKILL.md":"---\nname: abp-angular\ndescription: ABP Angular UI patterns - generate-proxy, ListService, PermissionGuard, abpLocalization pipe, ConfirmationService, ToasterService, ConfigStateService. Use when building or reviewing Angular UI components, routing, or service integration in ABP Angular projects.\n---\n\n# ABP Angular UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/angular/overview\n\n## Project Structure\n```\nsrc/app/\n├── proxy/              # Auto-generated service proxies\n├── shared/             # Shared components, pipes, directives\n├── book/               # Feature module\n│   ├── book.module.ts\n│   ├── book-routing.module.ts\n│   ├── book-list/\n│   │   ├── book-list.component.ts\n│   │   ├── book-list.component.html\n│   │   └── book-list.component.scss\n│   └── book-detail/\n```\n\n## Generate Service Proxies\n```bash\nabp generate-proxy -t ng\n```\n\nThis generates typed service classes in `src/app/proxy/`.\n\n## List Component Pattern\n```typescript\n@Component({\n  selector: 'app-book-list',\n  templateUrl: './book-list.component.html'\n})\nexport class BookListComponent implements OnInit {\n  books = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;\n\n  constructor(\n    public readonly list: ListService,\n    private bookService: BookService,\n    private confirmation: ConfirmationService\n  ) {}\n\n  ngOnInit(): void {\n    this.hookToQuery();\n  }\n\n  private hookToQuery(): void {\n    this.list.hookToQuery(query =>\n      this.bookService.getList(query)\n    ).subscribe(response => {\n      this.books = response;\n    });\n  }\n\n  create(): void {\n    // Open create modal\n  }\n\n  delete(book: BookDto): void {\n    this.confirmation\n      .warn('::AreYouSureToDelete', '::AreYouSure')\n      .subscribe(status => {\n        if (status === Confirmation.Status.confirm) {\n          this.bookService.delete(book.id).subscribe(() => this.list.get());\n        }\n      });\n  }\n}\n```\n\n## Localization\n```typescript\n// In component\nconstructor(private localizationService: LocalizationService) {}\n\ngetText(): string {\n  return this.localizationService.instant('::Books');\n}\n```\n\n```html\n<!-- In template -->\n<h1>{{ '::Books' | abpLocalization }}</h1>\n\n<!-- With parameters -->\n<p>{{ '::WelcomeMessage' | abpLocalization: userName }}</p>\n```\n\n## Authorization\n\n### Permission Directive\n```html\n<button *abpPermission=\"'BookStore.Books.Create'\">Create</button>\n```\n\n### Permission Guard\n```typescript\nconst routes: Routes = [\n  {\n    path: '',\n    component: BookListComponent,\n    canActivate: [PermissionGuard],\n    data: {\n      requiredPolicy: 'BookStore.Books'\n    }\n  }\n];\n```\n\n### Programmatic Check\n```typescript\nconstructor(private permissionService: PermissionService) {}\n\ncanCreate(): boolean {\n  return this.permissionService.getGrantedPolicy('BookStore.Books.Create');\n}\n```\n\n## Forms with Validation\n```typescript\n@Component({...})\nexport class BookFormComponent {\n  form: FormGroup;\n\n  constructor(private fb: FormBuilder) {\n    this.buildForm();\n  }\n\n  buildForm(): void {\n    this.form = this.fb.group({\n      name: ['', [Validators.required, Validators.maxLength(128)]],\n      price: [0, [Validators.required, Validators.min(0)]]\n    });\n  }\n\n  save(): void {\n    if (this.form.invalid) return;\n\n    this.bookService.create(this.form.value).subscribe(() => {\n      // Handle success\n    });\n  }\n}\n```\n\n```html\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n  <div class=\"form-group\">\n    <label for=\"name\">{{ '::Name' | abpLocalization }}</label>\n    <input type=\"text\" id=\"name\" formControlName=\"name\" class=\"form-control\" />\n  </div>\n\n  <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\n    {{ '::Save' | abpLocalization }}\n  </button>\n</form>\n```\n\n## Configuration API\n```typescript\nconstructor(private configService: ConfigStateService) {}\n\ngetCurrentUser(): CurrentUserDto {\n  return this.configService.getOne('currentUser');\n}\n\ngetSettings(): void {\n  const setting = this.configService.getSetting('MyApp.MaxItemCount');\n}\n```\n\n## Modal Service\n```typescript\nconstructor(private modalService: ModalService) {}\n\nopenCreateModal(): void {\n  const modalRef = this.modalService.open(BookFormComponent, {\n    size: 'lg'\n  });\n\n  modalRef.result.then(result => {\n    if (result) {\n      this.list.get();\n    }\n  });\n}\n```\n\n## Toast Notifications\n```typescript\nconstructor(private toaster: ToasterService) {}\n\nshowSuccess(): void {\n  this.toaster.success('::BookCreatedSuccessfully', '::Success');\n}\n\nshowError(error: string): void {\n  this.toaster.error(error, '::Error');\n}\n```\n\n## Lazy Loading Modules\n```typescript\n// app-routing.module.ts\nconst routes: Routes = [\n  {\n    path: 'books',\n    loadChildren: () => import('./book/book.module').then(m => m.BookModule)\n  }\n];\n```\n\n## Theme & Styling\n- Use Bootstrap classes\n- ABP provides theme variables via CSS custom properties\n- Component-specific styles in `.component.scss`\n",".agents/skills/abp-application-layer/SKILL.md":"---\nname: abp-application-layer\ndescription: ABP Application Services, DTOs, CRUD service, object mapping (Mapperly/AutoMapper), validation, error handling. Use when creating or reviewing application services, DTOs, or working in the Application or Application.Contracts projects.\n---\n\n# ABP Application Layer Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design/application-services\n\n## Anti-Patterns to Avoid\n\n- **Entity name in method**: use `GetAsync` not `GetBookAsync`\n- **ID inside UpdateDto**: pass `id` as a separate parameter, not inside the DTO\n- **Calling other app services in the same module**: use domain services or repositories directly\n- **Using `IFormFile`/`Stream` in app service**: accept `byte[]` from controllers instead\n- **Business logic in app service**: put it in domain entities or domain services\n\n## Application Service Structure\n\n### Interface (Application.Contracts)\n```csharp\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookListItemDto>> GetListAsync(GetBookListInput input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n    Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input);\n    Task DeleteAsync(Guid id);\n}\n```\n\n### Implementation (Application)\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IBookRepository _bookRepository;\n    private readonly BookManager _bookManager;\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IBookRepository bookRepository,\n        BookManager bookManager,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookManager = bookManager;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = await _bookManager.CreateAsync(input.Name, input.Price);\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Edit)]\n    public async Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        await _bookManager.ChangeNameAsync(book, input.Name);\n        book.SetPrice(input.Price);\n        await _bookRepository.UpdateAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n## Application Service Best Practices\n- Don't repeat entity name in method names (`GetAsync` not `GetBookAsync`)\n- Accept/return DTOs only, never entities\n- ID not inside UpdateDto - pass separately\n- Use custom repositories when you need custom queries, generic repository is fine for simple CRUD\n- Call `UpdateAsync` explicitly (don't assume change tracking)\n- Don't call other app services in same module\n- Don't use `IFormFile`/`Stream` - pass `byte[]` from controllers\n- Use base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) instead of injecting these services\n\n## DTO Naming Conventions\n\n| Purpose | Convention | Example |\n|---------|------------|---------|\n| Query input | `Get{Entity}Input` | `GetBookInput` |\n| List query input | `Get{Entity}ListInput` | `GetBookListInput` |\n| Create input | `Create{Entity}Dto` | `CreateBookDto` |\n| Update input | `Update{Entity}Dto` | `UpdateBookDto` |\n| Single entity output | `{Entity}Dto` | `BookDto` |\n| List item output | `{Entity}ListItemDto` | `BookListItemDto` |\n\n## DTO Location\n- Define DTOs in `*.Application.Contracts` project\n- This allows sharing with clients (Blazor, HttpApi.Client)\n\n## Validation\n\n### Data Annotations\n```csharp\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(100, MinimumLength = 3)]\n    public string Name { get; set; }\n\n    [Range(0, 999.99)]\n    public decimal Price { get; set; }\n}\n```\n\n### Custom Validation with IValidatableObject\nBefore adding custom validation, decide if it's a **domain rule** or **application rule**:\n- **Domain rule**: Put validation in entity constructor or domain service (enforces business invariants)\n- **Application rule**: Use DTO validation (input format, required fields)\n\nOnly use `IValidatableObject` for application-level validation that can't be expressed with data annotations:\n\n```csharp\npublic class CreateBookDto : IValidatableObject\n{\n    public string Name { get; set; }\n    public string Description { get; set; }\n\n    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)\n    {\n        if (Name == Description)\n        {\n            yield return new ValidationResult(\n                \"Name and Description cannot be the same!\",\n                new[] { nameof(Name), nameof(Description) }\n            );\n        }\n    }\n}\n```\n\n### FluentValidation\n```csharp\npublic class CreateBookDtoValidator : AbstractValidator<CreateBookDto>\n{\n    public CreateBookDtoValidator()\n    {\n        RuleFor(x => x.Name).NotEmpty().Length(3, 100);\n        RuleFor(x => x.Price).GreaterThan(0);\n    }\n}\n```\n\n## Error Handling\n\n### Business Exceptions\n```csharp\nthrow new BusinessException(\"BookStore:010001\")\n    .WithData(\"BookName\", name);\n```\n\n### Entity Not Found\n```csharp\nvar book = await _bookRepository.FindAsync(id);\nif (book == null)\n{\n    throw new EntityNotFoundException(typeof(Book), id);\n}\n```\n\n### User-Friendly Exceptions\n```csharp\nthrow new UserFriendlyException(L[\"BookNotAvailable\"]);\n```\n\n### HTTP Status Code Mapping\nStatus code mapping is **configurable** in ABP (do not rely on a fixed mapping in business logic).\n\n| Exception | Typical HTTP Status |\n|-----------|-------------|\n| `AbpValidationException` | 400 |\n| `AbpAuthorizationException` | 401/403 |\n| `EntityNotFoundException` | 404 |\n| `BusinessException` | 403 (but configurable) |\n| Other exceptions | 500 |\n\n## Auto API Controllers\nABP automatically generates API controllers for application services:\n- Interface must inherit `IApplicationService` (which already has `[RemoteService]` attribute)\n- HTTP methods determined by method name prefix (Get, Create, Update, Delete)\n- Use `[RemoteService(false)]` to disable auto API generation for specific methods\n\n## Object Mapping (Mapperly / AutoMapper)\nABP supports **both Mapperly and AutoMapper** integrations. But the default mapping library is Mapperly. You need to first check the project's active mapping library.\n- Prefer the mapping provider already used in the solution (check existing mapping files / loaded modules).\n- In mixed solutions, explicitly setting the default provider may be required (see `docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md`).\n\n### Mapperly (compile-time)\nDefine mappers as partial classes:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\npublic override void ConfigureServices(ServiceConfigurationContext context)\n{\n    context.Services.AddSingleton<BookMapper>();\n}\n```\n\nUsage in application service:\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(BookMapper bookMapper)\n    {\n        _bookMapper = bookMapper;\n    }\n\n    public BookDto GetBook(Book book)\n    {\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n> **Note**: Mapperly generates mapping code at compile-time, providing better performance than runtime mappers.\n\n### AutoMapper (runtime)\nIf the solution uses AutoMapper, mappings are typically defined in `Profile` classes and registered via ABP's AutoMapper integration.\n",".agents/skills/abp-authorization/SKILL.md":"---\nname: abp-authorization\ndescription: ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side. Use when working with permissions, authorization, role-based access, or security in ABP projects.\n---\n\n# ABP Authorization\n\n> **Docs**: https://abp.io/docs/latest/framework/fundamentals/authorization\n\n## Permission Definition\nDefine permissions in `*.Application.Contracts` project:\n\n```csharp\npublic static class BookStorePermissions\n{\n    public const string GroupName = \"BookStore\";\n\n    public static class Books\n    {\n        public const string Default = GroupName + \".Books\";\n        public const string Create = Default + \".Create\";\n        public const string Edit = Default + \".Edit\";\n        public const string Delete = Default + \".Delete\";\n    }\n}\n```\n\nRegister in provider:\n```csharp\npublic class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider\n{\n    public override void Define(IPermissionDefinitionContext context)\n    {\n        var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L(\"Permission:BookStore\"));\n\n        var booksPermission = bookStoreGroup.AddPermission(\n            BookStorePermissions.Books.Default,\n            L(\"Permission:Books\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Create,\n            L(\"Permission:Books.Create\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Edit,\n            L(\"Permission:Books.Edit\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Delete,\n            L(\"Permission:Books.Delete\"));\n    }\n\n    private static LocalizableString L(string name)\n    {\n        return LocalizableString.Create<BookStoreResource>(name);\n    }\n}\n```\n\n## Using Permissions\n\n### Declarative (Attribute)\n```csharp\n[Authorize(BookStorePermissions.Books.Create)]\npublic virtual async Task<BookDto> CreateAsync(CreateBookDto input)\n{\n    // Only users with Books.Create permission can execute\n}\n```\n\n### Programmatic Check\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // Check and throw if not granted\n        await CheckPolicyAsync(BookStorePermissions.Books.Edit);\n\n        // Or check without throwing\n        if (await IsGrantedAsync(BookStorePermissions.Books.Delete))\n        {\n            // Has permission\n        }\n    }\n}\n```\n\n### Allow Anonymous Access\n```csharp\n[AllowAnonymous]\npublic virtual async Task<BookDto> GetPublicBookAsync(Guid id)\n{\n    // No authentication required\n}\n```\n\n## Current User\nAccess authenticated user info via `CurrentUser` property (available in base classes like `ApplicationService`, `DomainService`, `AbpController`):\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // CurrentUser is available from base class - no injection needed\n        var userId = CurrentUser.Id;\n        var userName = CurrentUser.UserName;\n        var email = CurrentUser.Email;\n        var isAuthenticated = CurrentUser.IsAuthenticated;\n        var roles = CurrentUser.Roles;\n        var tenantId = CurrentUser.TenantId;\n    }\n}\n\n// In other services, inject ICurrentUser\npublic class MyService : ITransientDependency\n{\n    private readonly ICurrentUser _currentUser;\n    public MyService(ICurrentUser currentUser) => _currentUser = currentUser;\n}\n```\n\n### Ownership Validation\n```csharp\npublic async Task UpdateMyBookAsync(Guid bookId, UpdateBookDto input)\n{\n    var book = await _bookRepository.GetAsync(bookId);\n\n    if (book.CreatorId != CurrentUser.Id)\n    {\n        throw new AbpAuthorizationException();\n    }\n\n    // Update book...\n}\n```\n\n## Multi-Tenancy Permissions\nControl permission availability per tenant side:\n\n```csharp\nbookStoreGroup.AddPermission(\n    BookStorePermissions.Books.Default,\n    L(\"Permission:Books\"),\n    multiTenancySide: MultiTenancySides.Tenant // Only for tenants\n);\n```\n\nOptions: `MultiTenancySides.Host`, `Tenant`, or `Both`\n\n## Feature-Dependent Permissions\n```csharp\nbooksPermission.RequireFeatures(\"BookStore.PremiumFeature\");\n```\n\n## Permission Management\nGrant/revoke permissions programmatically:\n\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly IPermissionManager _permissionManager;\n\n    public async Task GrantPermissionToUserAsync(Guid userId, string permissionName)\n    {\n        await _permissionManager.SetForUserAsync(userId, permissionName, true);\n    }\n\n    public async Task GrantPermissionToRoleAsync(string roleName, string permissionName)\n    {\n        await _permissionManager.SetForRoleAsync(roleName, permissionName, true);\n    }\n}\n```\n\n## Security Best Practices\n- Never trust client input for user identity\n- Use `CurrentUser` property (from base class) or inject `ICurrentUser`\n- Validate ownership in application service methods\n- Filter queries by current user when appropriate\n- Don't expose sensitive fields in DTOs\n",".agents/skills/abp-blazor/SKILL.md":"---\nname: abp-blazor\ndescription: ABP Blazor UI patterns - AbpComponentBase, AbpCrudPageBase, DataGrid, IMenuContributor, Message/Notify, Validations, JavaScript interop. Use when building or reviewing Blazor Server or WebAssembly UI components in ABP projects.\n---\n\n# ABP Blazor UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/blazor/overall\n\n## Component Base Classes\n\n### Basic Component\n```razor\n@inherits AbpComponentBase\n\n<h1>@L[\"Books\"]</h1>\n```\n\n### CRUD Page\n```razor\n@page \"/books\"\n@inherits AbpCrudPageBase<IBookAppService, BookDto, Guid, PagedAndSortedResultRequestDto, CreateUpdateBookDto>\n\n<Card>\n    <CardHeader>\n        <Row>\n            <Column>\n                <h2>@L[\"Books\"]</h2>\n            </Column>\n            <Column TextAlignment=\"TextAlignment.End\">\n                @if (HasCreatePermission)\n                {\n                    <Button Color=\"Color.Primary\" Clicked=\"OpenCreateModalAsync\">\n                        @L[\"NewBook\"]\n                    </Button>\n                }\n            </Column>\n        </Row>\n    </CardHeader>\n    <CardBody>\n        <DataGrid TItem=\"BookDto\"\n                  Data=\"Entities\"\n                  ReadData=\"OnDataGridReadAsync\"\n                  TotalItems=\"TotalCount\"\n                  ShowPager=\"true\"\n                  PageSize=\"PageSize\">\n            <DataGridColumns>\n                <DataGridColumn Field=\"@nameof(BookDto.Name)\" Caption=\"@L[\"Name\"]\" />\n                <DataGridColumn Field=\"@nameof(BookDto.Price)\" Caption=\"@L[\"Price\"]\" />\n                <DataGridEntityActionsColumn TItem=\"BookDto\">\n                    <DisplayTemplate>\n                        <EntityActions TItem=\"BookDto\">\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Edit\"]\"\n                                          Visible=\"HasUpdatePermission\"\n                                          Clicked=\"() => OpenEditModalAsync(context)\" />\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Delete\"]\"\n                                          Visible=\"HasDeletePermission\"\n                                          Clicked=\"() => DeleteEntityAsync(context)\"\n                                          ConfirmationMessage=\"() => GetDeleteConfirmationMessage(context)\" />\n                        </EntityActions>\n                    </DisplayTemplate>\n                </DataGridEntityActionsColumn>\n            </DataGridColumns>\n        </DataGrid>\n    </CardBody>\n</Card>\n```\n\n## Localization\n```razor\n@* Using L property from base class *@\n<h1>@L[\"PageTitle\"]</h1>\n\n@* With parameters *@\n<p>@L[\"WelcomeMessage\", CurrentUser.UserName]</p>\n```\n\n## Authorization\n```razor\n@* Check permission before rendering *@\n@if (await AuthorizationService.IsGrantedAsync(\"MyPermission\"))\n{\n    <Button>Admin Action</Button>\n}\n\n@* Using policy-based authorization *@\n<AuthorizeView Policy=\"MyPolicy\">\n    <Authorized>\n        <p>You have access!</p>\n    </Authorized>\n</AuthorizeView>\n```\n\n## Navigation & Menu\nConfigure in `*MenuContributor.cs`:\n\n```csharp\npublic class MyMenuContributor : IMenuContributor\n{\n    public async Task ConfigureMenuAsync(MenuConfigurationContext context)\n    {\n        if (context.Menu.Name == StandardMenus.Main)\n        {\n            var bookMenu = new ApplicationMenuItem(\n                \"Books\",\n                l[\"Menu:Books\"],\n                \"/books\",\n                icon: \"fa fa-book\"\n            );\n\n            if (await context.IsGrantedAsync(MyPermissions.Books.Default))\n            {\n                context.Menu.AddItem(bookMenu);\n            }\n        }\n    }\n}\n```\n\n## Notifications & Messages\n```csharp\n// Success message\nawait Message.Success(L[\"BookCreatedSuccessfully\"]);\n\n// Confirmation dialog\nif (await Message.Confirm(L[\"AreYouSure\"]))\n{\n    // User confirmed\n}\n\n// Toast notification\nawait Notify.Success(L[\"OperationCompleted\"]);\n```\n\n## Forms & Validation\n```razor\n<Form @ref=\"CreateForm\">\n    <Validations @ref=\"CreateValidationsRef\" Model=\"@NewEntity\" ValidateOnLoad=\"false\">\n        <Validation MessageLocalizer=\"@LH.Localize\">\n            <Field>\n                <FieldLabel>@L[\"Name\"]</FieldLabel>\n                <TextEdit @bind-Text=\"@NewEntity.Name\">\n                    <Feedback>\n                        <ValidationError />\n                    </Feedback>\n                </TextEdit>\n            </Field>\n        </Validation>\n    </Validations>\n</Form>\n```\n\n## JavaScript Interop\n```csharp\n@inject IJSRuntime JsRuntime\n\n@code {\n    private async Task CallJavaScript()\n    {\n        await JsRuntime.InvokeVoidAsync(\"myFunction\", arg1, arg2);\n        var result = await JsRuntime.InvokeAsync<string>(\"myFunctionWithReturn\");\n    }\n}\n```\n\n## State Management\n```csharp\n// Inject service proxy from HttpApi.Client\n@inject IBookAppService BookAppService\n\n@code {\n    private List<BookDto> Books { get; set; }\n\n    protected override async Task OnInitializedAsync()\n    {\n        var result = await BookAppService.GetListAsync(new PagedAndSortedResultRequestDto());\n        Books = result.Items.ToList();\n    }\n}\n```\n\n## Code-Behind Pattern\n**Books.razor:**\n```razor\n@page \"/books\"\n@inherits BooksBase\n```\n\n**Books.razor.cs:**\n```csharp\npublic partial class Books : BooksBase\n{\n    // Component logic here\n}\n```\n\n**BooksBase.cs:**\n```csharp\npublic abstract class BooksBase : AbpComponentBase\n{\n    [Inject]\n    protected IBookAppService BookAppService { get; set; }\n}\n```\n",".agents/skills/abp-core/SKILL.md":"---\nname: abp-core\ndescription: Core ABP Framework conventions - module system, DI registration, base classes (ApplicationService, DomainService), IClock, BusinessException, localization, async patterns. Use when working on any ABP project, asking about ABP fundamentals, or unsure which skill applies.\n---\n\n# ABP Core Conventions\n\n> **Documentation**: https://abp.io/docs/latest\n> **API Reference**: https://abp.io/docs/api/\n\n## Key Rules\n\n- Use `IClock` / `Clock.Now` instead of `DateTime.Now` / `DateTime.UtcNow`\n- Use `ITransientDependency` / `ISingletonDependency` instead of `AddScoped/AddTransient/AddSingleton`\n- Use `IRepository<T>` instead of injecting `DbContext` directly\n- Check base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) before injecting services\n- Use `BusinessException` with namespaced error codes for domain rule violations\n\n## Module System\nEvery ABP application/module has a module class that configures services:\n\n```csharp\n[DependsOn(\n    typeof(AbpDddDomainModule),\n    typeof(AbpEntityFrameworkCoreModule)\n)]\npublic class MyAppModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        // Service registration and configuration\n    }\n}\n```\n\n> **Note**: Middleware configuration (`OnApplicationInitialization`) should only be done in the final host application, not in reusable modules.\n\n## Dependency Injection Conventions\n\n### Automatic Registration\nABP automatically registers services implementing marker interfaces:\n- `ITransientDependency` → Transient lifetime\n- `ISingletonDependency` → Singleton lifetime\n- `IScopedDependency` → Scoped lifetime\n\nClasses inheriting from `ApplicationService`, `DomainService`, `AbpController` are also auto-registered.\n\n### Repository Usage\nYou can use the generic `IRepository<TEntity, TKey>` for simple CRUD operations. Define custom repository interfaces only when you need custom query methods:\n\n```csharp\n// Simple CRUD - Generic repository is fine\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // ✅ OK for simple operations\n}\n\n// Custom queries needed - Define custom interface\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name); // Custom query\n}\n\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ Use custom when needed\n}\n```\n\n### Exposing Services\n```csharp\n[ExposeServices(typeof(IMyService))]\npublic class MyService : IMyService, ITransientDependency { }\n```\n\n## Important Base Classes\n\n| Base Class | Purpose |\n|------------|---------|\n| `Entity<TKey>` | Basic entity with ID |\n| `AggregateRoot<TKey>` | DDD aggregate root |\n| `DomainService` | Domain business logic |\n| `ApplicationService` | Use case orchestration |\n| `AbpController` | REST API controller |\n\nABP base classes already inject commonly used services as properties. Before injecting a service, check if it's already available:\n\n| Property | Available In | Description |\n|----------|--------------|-------------|\n| `GuidGenerator` | All base classes | Generate GUIDs |\n| `Clock` | All base classes | Current time (use instead of `DateTime`) |\n| `CurrentUser` | All base classes | Authenticated user info |\n| `CurrentTenant` | All base classes | Multi-tenancy context |\n| `L` (StringLocalizer) | `ApplicationService`, `AbpController` | Localization |\n| `AuthorizationService` | `ApplicationService`, `AbpController` | Permission checks |\n| `FeatureChecker` | `ApplicationService`, `AbpController` | Feature availability |\n| `DataFilter` | All base classes | Data filtering (soft-delete, tenant) |\n| `UnitOfWorkManager` | `ApplicationService`, `DomainService` | Unit of work management |\n| `LoggerFactory` | All base classes | Create loggers |\n| `Logger` | All base classes | Logging (auto-created) |\n| `LazyServiceProvider` | All base classes | Lazy service resolution |\n\n**Useful methods from base classes:**\n- `CheckPolicyAsync()` - Check permission and throw if not granted\n- `IsGrantedAsync()` - Check permission without throwing\n\n## Async Best Practices\n- Use async all the way - never use `.Result` or `.Wait()`\n- All async methods should end with `Async` suffix\n- ABP automatically handles `CancellationToken` in most cases (e.g., from `HttpContext.RequestAborted`)\n- Only pass `CancellationToken` explicitly when implementing custom cancellation logic\n\n## Time Handling\nNever use `DateTime.Now` or `DateTime.UtcNow` directly. Use ABP's `IClock` service:\n\n```csharp\n// In classes inheriting from base classes (ApplicationService, DomainService, etc.)\npublic class BookAppService : ApplicationService\n{\n    public void DoSomething()\n    {\n        var now = Clock.Now; // ✅ Already available as property\n    }\n}\n\n// In other services - inject IClock\npublic class MyService : ITransientDependency\n{\n    private readonly IClock _clock;\n\n    public MyService(IClock clock) => _clock = clock;\n\n    public void DoSomething()\n    {\n        var now = _clock.Now; // ✅ Correct\n        // var now = DateTime.Now; // ❌ Wrong - not testable, ignores timezone settings\n    }\n}\n```\n\n> **Tip**: Before injecting a service, check if it's already available as a property in your base classes.\n\n## Business Exceptions\nUse `BusinessException` for domain rule violations with namespaced error codes:\n\n```csharp\nthrow new BusinessException(\"MyModule:BookNameAlreadyExists\")\n    .WithData(\"Name\", bookName);\n```\n\nConfigure localization mapping:\n```csharp\nConfigure<AbpExceptionLocalizationOptions>(options =>\n{\n    options.MapCodeNamespace(\"MyModule\", typeof(MyModuleResource));\n});\n```\n\n## Localization\n- In base classes (`ApplicationService`, `AbpController`, etc.): Use `L[\"Key\"]` - this is the `IStringLocalizer` property\n- In other services: Inject `IStringLocalizer<TResource>`\n- Always localize user-facing messages and exceptions\n\n**Localization file location**: `*.Domain.Shared/Localization/{ResourceName}/{lang}.json`\n\n```json\n// Example: MyProject.Domain.Shared/Localization/MyProject/en.json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"Menu:Home\": \"Home\",\n    \"Welcome\": \"Welcome\",\n    \"BookName\": \"Book Name\"\n  }\n}\n```\n\n## ❌ Never Use (ABP Anti-Patterns)\n\n| Don't Use | Use Instead |\n|-----------|-------------|\n| Minimal APIs | ABP Controllers or Auto API Controllers |\n| MediatR | Application Services |\n| `DbContext` directly in App Services | `IRepository<T>` |\n| `AddScoped/AddTransient/AddSingleton` | `ITransientDependency`, `ISingletonDependency` |\n| `DateTime.Now` | `IClock` / `Clock.Now` |\n| Custom UnitOfWork | ABP's `IUnitOfWorkManager` |\n| Manual HTTP calls from UI | ABP client proxies (`generate-proxy`) |\n| Hardcoded role checks | Permission-based authorization |\n| Business logic in Controllers | Application Services |\n",".agents/skills/abp-ef-core/SKILL.md":"---\nname: abp-ef-core\ndescription: ABP Entity Framework Core - DbContext, entity configuration, EfCoreRepository implementation, migrations (dotnet ef migrations add), data seeding. Use when working in EntityFrameworkCore projects, adding migrations, or implementing EF Core repositories.\n---\n\n# ABP Entity Framework Core\n\n> **Docs**: https://abp.io/docs/latest/framework/data/entity-framework-core\n\n## Never Do\n\n| Don't | Do Instead |\n|-------|-----------|\n| Skip `b.ConfigureByConvention()` | Always call it first in entity config |\n| `AddDefaultRepositories(includeAllEntities: true)` | Use `AddDefaultRepositories()` only for aggregate roots |\n| Inject `DbContext` in application/domain services | Use `IRepository<T>` or custom repository interface |\n| Use `DbContext` directly outside the EF Core project | Access via `GetDbContextAsync()` inside repository only |\n\n## DbContext Configuration\n\n```csharp\n[ConnectionStringName(\"Default\")]\npublic class MyProjectDbContext : AbpDbContext<MyProjectDbContext>\n{\n    public DbSet<Book> Books { get; set; }\n    public DbSet<Author> Authors { get; set; }\n\n    public MyProjectDbContext(DbContextOptions<MyProjectDbContext> options)\n        : base(options)\n    {\n    }\n\n    protected override void OnModelCreating(ModelBuilder builder)\n    {\n        base.OnModelCreating(builder);\n\n        // Configure all entities\n        builder.ConfigureMyProject();\n    }\n}\n```\n\n## Entity Configuration\n\n```csharp\npublic static class MyProjectDbContextModelCreatingExtensions\n{\n    public static void ConfigureMyProject(this ModelBuilder builder)\n    {\n        Check.NotNull(builder, nameof(builder));\n\n        builder.Entity<Book>(b =>\n        {\n            b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n            b.ConfigureByConvention(); // ABP conventions (audit, soft-delete, etc.)\n\n            // Property configurations\n            b.Property(x => x.Name)\n                .IsRequired()\n                .HasMaxLength(BookConsts.MaxNameLength);\n\n            b.Property(x => x.Price)\n                .HasColumnType(\"decimal(18,2)\");\n\n            // Indexes\n            b.HasIndex(x => x.Name);\n\n            // Relationships\n            b.HasOne<Author>()\n                .WithMany()\n                .HasForeignKey(x => x.AuthorId)\n                .OnDelete(DeleteBehavior.Restrict);\n        });\n    }\n}\n```\n\n## Repository Implementation\n\n```csharp\npublic class BookRepository : EfCoreRepository<MyProjectDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyProjectDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(\n        string name,\n        bool includeDetails = true,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .FirstOrDefaultAsync(\n                b => b.Name == name,\n                GetCancellationToken(cancellationToken));\n    }\n\n    public async Task<List<Book>> GetListByAuthorAsync(\n        Guid authorId,\n        bool includeDetails = false,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .Where(b => b.AuthorId == authorId)\n            .ToListAsync(GetCancellationToken(cancellationToken));\n    }\n\n    public override async Task<IQueryable<Book>> WithDetailsAsync()\n    {\n        return (await GetQueryableAsync())\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Extension Method for Include\n```csharp\npublic static class BookEfCoreQueryableExtensions\n{\n    public static IQueryable<Book> IncludeDetails(\n        this IQueryable<Book> queryable,\n        bool include = true)\n    {\n        if (!include)\n        {\n            return queryable;\n        }\n\n        return queryable\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Migration Commands\n\n```bash\n# Navigate to EF Core project\ncd src/MyProject.EntityFrameworkCore\n\n# Add migration\ndotnet ef migrations add MigrationName\n\n# Apply migration (choose one):\ndotnet run --project ../MyProject.DbMigrator   # Recommended - also seeds data\ndotnet ef database update  # EF Core command only\n\n# Remove last migration (if not applied)\ndotnet ef migrations remove\n\n# Generate SQL script\ndotnet ef migrations script\n```\n\n> **Note**: ABP templates include `IDesignTimeDbContextFactory` in the EF Core project, so `-s` (startup project) parameter is not needed.\n\n## Module Configuration\n\n```csharp\n[DependsOn(typeof(AbpEntityFrameworkCoreModule))]\npublic class MyProjectEntityFrameworkCoreModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        context.Services.AddAbpDbContext<MyProjectDbContext>(options =>\n        {\n            // Add default repositories for aggregate roots only (DDD best practice)\n            options.AddDefaultRepositories();\n            // ⚠️ Avoid includeAllEntities: true - it creates repositories for child entities,\n            // allowing them to be modified without going through the aggregate root,\n            // which breaks data consistency\n        });\n\n        Configure<AbpDbContextOptions>(options =>\n        {\n            options.UseSqlServer(); // or UseNpgsql(), UseMySql(), etc.\n        });\n    }\n}\n```\n\n## Best Practices\n\n### Repositories for Aggregate Roots Only\nDon't use `includeAllEntities: true` in `AddDefaultRepositories()`. This creates repositories for child entities, allowing direct modification without going through the aggregate root - breaking DDD data consistency rules.\n\n```csharp\n// ✅ Correct - Only aggregate roots get repositories\noptions.AddDefaultRepositories();\n\n// ❌ Avoid - Creates repositories for ALL entities including child entities\noptions.AddDefaultRepositories(includeAllEntities: true);\n```\n\n### Always Call ConfigureByConvention\n```csharp\nbuilder.Entity<MyEntity>(b =>\n{\n    b.ConfigureByConvention(); // Don't forget this!\n    // Other configurations...\n});\n```\n\n### Use Table Prefix\n```csharp\npublic static class MyProjectConsts\n{\n    public const string DbTablePrefix = \"App\";\n    public const string DbSchema = null; // Or \"myschema\"\n}\n```\n\n### Performance Tips\n- Add explicit indexes for frequently queried fields\n- Use `AsNoTracking()` for read-only queries\n- Avoid N+1 queries with `.Include()` or specifications\n- ABP handles cancellation automatically; use `GetCancellationToken(cancellationToken)` only in custom repository methods\n- Consider query splitting for complex queries with multiple collections\n\n### Accessing Raw DbContext\n```csharp\npublic async Task CustomOperationAsync()\n{\n    var dbContext = await GetDbContextAsync();\n\n    // Raw SQL\n    await dbContext.Database.ExecuteSqlRawAsync(\n        \"UPDATE Books SET IsPublished = 1 WHERE AuthorId = {0}\",\n        authorId\n    );\n}\n```\n\n## Data Seeding\n\n```csharp\npublic class MyProjectDataSeedContributor : IDataSeedContributor, ITransientDependency\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n    private readonly IGuidGenerator _guidGenerator;\n\n    public async Task SeedAsync(DataSeedContext context)\n    {\n        if (await _bookRepository.GetCountAsync() > 0)\n        {\n            return;\n        }\n\n        await _bookRepository.InsertAsync(\n            new Book(_guidGenerator.Create(), \"Sample Book\", 19.99m, Guid.Empty),\n            autoSave: true\n        );\n    }\n}\n```\n",".agents/skills/abp-infrastructure/SKILL.md":"---\nname: abp-infrastructure\ndescription: ABP infrastructure services - ISettingProvider, IFeatureChecker, IDistributedCache, ILocalEventBus, IDistributedEventBus, IBackgroundJobManager, localization resource. Use when working with settings, feature flags, caching, event bus, or background jobs in ABP.\n---\n\n# ABP Infrastructure Services\n\n> **Docs**: https://abp.io/docs/latest/framework/infrastructure\n\n## Settings\n\n### Define Settings\n```csharp\npublic class MySettingDefinitionProvider : SettingDefinitionProvider\n{\n    public override void Define(ISettingDefinitionContext context)\n    {\n        context.Add(\n            new SettingDefinition(\"MyApp.MaxItemCount\", \"10\"),\n            new SettingDefinition(\"MyApp.EnableFeature\", \"false\"),\n            new SettingDefinition(\"MyApp.SecretKey\", isEncrypted: true)\n        );\n    }\n}\n```\n\n### Read Settings\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly ISettingProvider _settingProvider;\n\n    public async Task DoSomethingAsync()\n    {\n        var maxCount = await _settingProvider.GetAsync<int>(\"MyApp.MaxItemCount\");\n        var isEnabled = await _settingProvider.IsTrueAsync(\"MyApp.EnableFeature\");\n    }\n}\n```\n\n### Setting Value Providers (Priority Order)\n1. User settings (highest)\n2. Tenant settings\n3. Global settings\n4. Configuration (appsettings.json)\n5. Default value (lowest)\n\n## Features\n\n### Define Features\n```csharp\npublic class MyFeatureDefinitionProvider : FeatureDefinitionProvider\n{\n    public override void Define(IFeatureDefinitionContext context)\n    {\n        var myGroup = context.AddGroup(\"MyApp\");\n\n        myGroup.AddFeature(\n            \"MyApp.PdfReporting\",\n            defaultValue: \"false\",\n            valueType: new ToggleStringValueType()\n        );\n\n        myGroup.AddFeature(\n            \"MyApp.MaxProductCount\",\n            defaultValue: \"10\",\n            valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000))\n        );\n    }\n}\n```\n\n### Check Features\n```csharp\n[RequiresFeature(\"MyApp.PdfReporting\")]\npublic async Task<PdfReportDto> GetPdfReportAsync()\n{\n    // Only executes if feature is enabled\n}\n\n// Or programmatically\nif (await _featureChecker.IsEnabledAsync(\"MyApp.PdfReporting\"))\n{\n    // Feature is enabled for current tenant\n}\n\nvar maxCount = await _featureChecker.GetAsync<int>(\"MyApp.MaxProductCount\");\n```\n\n## Distributed Caching\n\n### Typed Cache\n```csharp\npublic class BookService : ITransientDependency\n{\n    private readonly IDistributedCache<BookCacheItem> _cache;\n    private readonly IClock _clock;\n\n    public BookService(IDistributedCache<BookCacheItem> cache, IClock clock)\n    {\n        _cache = cache;\n        _clock = clock;\n    }\n\n    public async Task<BookCacheItem> GetAsync(Guid bookId)\n    {\n        return await _cache.GetOrAddAsync(\n            bookId.ToString(),\n            async () => await GetBookFromDatabaseAsync(bookId),\n            () => new DistributedCacheEntryOptions\n            {\n                AbsoluteExpiration = _clock.Now.AddHours(1)\n            }\n        );\n    }\n}\n\n[CacheName(\"Books\")]\npublic class BookCacheItem\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n}\n```\n\n## Event Bus\n\n### Local Events (Same Process)\n```csharp\n// Event class\npublic class OrderCreatedEvent\n{\n    public Order Order { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEventHandler : ILocalEventHandler<OrderCreatedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n\n// Publish\nawait _localEventBus.PublishAsync(new OrderCreatedEvent { Order = order });\n```\n\n### Distributed Events (Cross-Service)\n```csharp\n// Event Transfer Object (in Domain.Shared)\n[EventName(\"MyApp.Order.Created\")]\npublic class OrderCreatedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEtoHandler : IDistributedEventHandler<OrderCreatedEto>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEto eventData)\n    {\n        // Handle distributed event\n    }\n}\n\n// Publish\nawait _distributedEventBus.PublishAsync(new OrderCreatedEto { ... });\n```\n\n### When to Use Which\n- **Local**: Within same module/bounded context\n- **Distributed**: Cross-module or microservice communication\n\n## Background Jobs\n\n### Define Job\n```csharp\npublic class EmailSendingArgs\n{\n    public string EmailAddress { get; set; }\n    public string Subject { get; set; }\n    public string Body { get; set; }\n}\n\npublic class EmailSendingJob : AsyncBackgroundJob<EmailSendingArgs>, ITransientDependency\n{\n    private readonly IEmailSender _emailSender;\n\n    public EmailSendingJob(IEmailSender emailSender)\n    {\n        _emailSender = emailSender;\n    }\n\n    public override async Task ExecuteAsync(EmailSendingArgs args)\n    {\n        await _emailSender.SendAsync(args.EmailAddress, args.Subject, args.Body);\n    }\n}\n```\n\n### Enqueue Job\n```csharp\nawait _backgroundJobManager.EnqueueAsync(\n    new EmailSendingArgs\n    {\n        EmailAddress = \"user@example.com\",\n        Subject = \"Hello\",\n        Body = \"...\"\n    },\n    delay: TimeSpan.FromMinutes(5) // Optional delay\n);\n```\n\n## Localization\n\n### Define Resource\n```csharp\n[LocalizationResourceName(\"MyModule\")]\npublic class MyModuleResource { }\n```\n\n### JSON Structure\n```json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"HelloWorld\": \"Hello World!\",\n    \"Menu:Books\": \"Books\"\n  }\n}\n```\n\n### Usage\n- In `ApplicationService`: Use `L[\"Key\"]` property (already available from base class)\n- In other services: Inject `IStringLocalizer<MyResource>`\n\n> **Tip**: ABP base classes already provide commonly used services as properties. Check before injecting:\n> - `StringLocalizer` (L), `Clock`, `CurrentUser`, `CurrentTenant`, `GuidGenerator`\n> - `AuthorizationService`, `FeatureChecker`, `DataFilter`\n> - `LoggerFactory`, `Logger`\n> - Methods like `CheckPolicyAsync()` for authorization checks\n",".agents/skills/abp-ddd/SKILL.md":"---\nname: abp-ddd\ndescription: ABP DDD patterns - Entities, Aggregate Roots, value objects, Repositories, Domain Services, Domain Events, Specifications. Use when designing domain layer, creating entities, repositories, or domain services in ABP projects.\n---\n\n# ABP DDD Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design\n\n## Anti-Patterns to Avoid\n\n- **Anemic entities**: public setters with no behavior — use private setters + methods that enforce invariants\n- **Repository for child entities**: only aggregate roots get repositories — access child entities through their root\n- **Generating GUID in entity constructor**: use `IGuidGenerator` from outside and pass `id` parameter\n- **Navigation properties to other aggregates**: reference by `Id` only, never add full navigation properties across aggregates\n- **Domain service depending on current user**: accept values from the application layer instead\n\n## Rich Domain Model vs Anemic Domain Model\n\nABP promotes **Rich Domain Model** pattern where entities contain both data AND behavior:\n\n| Anemic (Anti-pattern) | Rich (Recommended) |\n|----------------------|-------------------|\n| Entity = data only | Entity = data + behavior |\n| Logic in services | Logic in entity methods |\n| Public setters | Private setters with methods |\n| No validation in entity | Entity enforces invariants |\n\n**Encapsulation is key**: Protect entity state by using private setters and exposing behavior through methods.\n\n## Entities\n\n### Entity Example (Rich Model)\n```csharp\npublic class OrderLine : Entity<Guid>\n{\n    public Guid ProductId { get; private set; }\n    public int Count { get; private set; }\n    public decimal Price { get; private set; }\n\n    protected OrderLine() { } // For ORM\n\n    internal OrderLine(Guid id, Guid productId, int count, decimal price) : base(id)\n    {\n        ProductId = productId;\n        SetCount(count); // Validates through method\n        Price = price;\n    }\n\n    public void SetCount(int count)\n    {\n        if (count <= 0)\n            throw new BusinessException(\"Orders:InvalidCount\");\n        Count = count;\n    }\n}\n```\n\n## Aggregate Roots\n\nAggregate roots are consistency boundaries that:\n- Own their child entities\n- Enforce business rules\n- Publish domain events\n\n```csharp\npublic class Order : AggregateRoot<Guid>\n{\n    public string OrderNumber { get; private set; }\n    public Guid CustomerId { get; private set; }\n    public OrderStatus Status { get; private set; }\n    public ICollection<OrderLine> Lines { get; private set; }\n\n    protected Order() { } // For ORM\n\n    public Order(Guid id, string orderNumber, Guid customerId) : base(id)\n    {\n        OrderNumber = Check.NotNullOrWhiteSpace(orderNumber, nameof(orderNumber));\n        CustomerId = customerId;\n        Status = OrderStatus.Created;\n        Lines = new List<OrderLine>();\n    }\n\n    public void AddLine(Guid lineId, Guid productId, int count, decimal price)\n    {\n        // Business rule: Can only add lines to created orders\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotModifyOrder\");\n\n        Lines.Add(new OrderLine(lineId, productId, count, price));\n    }\n\n    public void Complete()\n    {\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotCompleteOrder\");\n\n        Status = OrderStatus.Completed;\n\n        // Publish events for side effects\n        AddLocalEvent(new OrderCompletedEvent(Id));           // Same transaction\n        AddDistributedEvent(new OrderCompletedEto { OrderId = Id }); // Cross-service\n    }\n}\n```\n\n### Domain Events\n- `AddLocalEvent()` - Handled within same transaction, can access full entity\n- `AddDistributedEvent()` - Handled asynchronously, use ETOs (Event Transfer Objects)\n\n### Entity Best Practices\n- **Encapsulation**: Private setters, public methods that enforce rules\n- **Primary constructor**: Enforce invariants, accept `id` parameter\n- **Protected parameterless constructor**: Required for ORM\n- **Initialize collections**: In primary constructor\n- **Virtual members**: For ORM proxy compatibility\n- **Reference by Id**: Don't add navigation properties to other aggregates\n- **Don't generate GUID in constructor**: Use `IGuidGenerator` externally\n\n## Repository Pattern\n\n### When to Use Custom Repository\n- **Generic repository** (`IRepository<T, TKey>`): Sufficient for simple CRUD operations\n- **Custom repository**: Only when you need custom query methods\n\n### Interface (Domain Layer)\n```csharp\n// Define custom interface only when custom queries are needed\npublic interface IOrderRepository : IRepository<Order, Guid>\n{\n    Task<Order> FindByOrderNumberAsync(string orderNumber, bool includeDetails = false);\n    Task<List<Order>> GetListByCustomerAsync(Guid customerId, bool includeDetails = false);\n}\n```\n\n### Repository Best Practices\n- **One repository per aggregate root only** - Never create repositories for child entities\n- Child entities must be accessed/modified only through their aggregate root\n- Creating repositories for child entities breaks data consistency (bypasses aggregate root's business rules)\n- In ABP, use `AddDefaultRepositories()` without `includeAllEntities: true` to enforce this\n- Define custom repository only when custom queries are needed\n- ABP handles `CancellationToken` automatically; add parameter only for explicit cancellation control\n- Single entity methods: `includeDetails = true` by default\n- List methods: `includeDetails = false` by default\n- Don't return projection classes\n- Interface in Domain, implementation in data layer\n\n```csharp\n// ✅ Correct: Repository for aggregate root (Order)\npublic interface IOrderRepository : IRepository<Order, Guid> { }\n\n// ❌ Wrong: Repository for child entity (OrderLine)\n// OrderLine should only be accessed through Order aggregate\npublic interface IOrderLineRepository : IRepository<OrderLine, Guid> { } // Don't do this!\n```\n\n## Domain Services\n\nUse domain services for business logic that:\n- Spans multiple aggregates\n- Requires repository queries to enforce rules\n\n```csharp\npublic class OrderManager : DomainService\n{\n    private readonly IOrderRepository _orderRepository;\n    private readonly IProductRepository _productRepository;\n\n    public OrderManager(\n        IOrderRepository orderRepository,\n        IProductRepository productRepository)\n    {\n        _orderRepository = orderRepository;\n        _productRepository = productRepository;\n    }\n\n    public async Task<Order> CreateAsync(string orderNumber, Guid customerId)\n    {\n        // Business rule: Order number must be unique\n        var existing = await _orderRepository.FindByOrderNumberAsync(orderNumber);\n        if (existing != null)\n        {\n            throw new BusinessException(\"Orders:OrderNumberAlreadyExists\")\n                .WithData(\"OrderNumber\", orderNumber);\n        }\n\n        return new Order(GuidGenerator.Create(), orderNumber, customerId);\n    }\n\n    public async Task AddProductAsync(Order order, Guid productId, int count)\n    {\n        var product = await _productRepository.GetAsync(productId);\n        order.AddLine(productId, count, product.Price);\n    }\n}\n```\n\n### Domain Service Best Practices\n- Use `*Manager` suffix naming\n- No interface by default (create only if needed)\n- Accept/return domain objects, not DTOs\n- Don't depend on authenticated user - pass values from application layer\n- Use base class properties (`GuidGenerator`, `Clock`) instead of injecting these services\n\n## Domain Events\n\n### Local Events\n```csharp\n// In aggregate\nAddLocalEvent(new OrderCompletedEvent(Id));\n\n// Handler\npublic class OrderCompletedEventHandler : ILocalEventHandler<OrderCompletedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCompletedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n```\n\n### Distributed Events (ETO)\nFor inter-module/microservice communication:\n```csharp\n// In Domain.Shared\n[EventName(\"Orders.OrderCompleted\")]\npublic class OrderCompletedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n```\n\n## Specifications\n\nReusable query conditions:\n```csharp\npublic class CompletedOrdersSpec : Specification<Order>\n{\n    public override Expression<Func<Order, bool>> ToExpression()\n    {\n        return o => o.Status == OrderStatus.Completed;\n    }\n}\n\n// Usage\nvar orders = await _orderRepository.GetListAsync(new CompletedOrdersSpec());\n```\n",".agents/skills/abp-dependency-rules/SKILL.md":"---\nname: abp-dependency-rules\ndescription: ABP project layer dependency rules - which projects can reference which, domain/application/infrastructure separation, cross-layer violations to avoid. Use when reviewing project structure, adding new project references, or checking if a dependency direction is correct.\n---\n\n# ABP Dependency Rules\n\n## Core Principles (All Templates)\n\nThese principles apply regardless of solution structure:\n\n1. **Domain logic never depends on infrastructure** (no DbContext in domain/application)\n2. **Use abstractions** (interfaces) for dependencies\n3. **Higher layers depend on lower layers**, never the reverse\n4. **Data access through repositories**, not direct DbContext\n\n## Layered Template Structure\n\n> **Note**: This section applies to layered templates (app, module). Single-layer and microservice templates have different structures.\n\n```\nDomain.Shared    → Constants, enums, localization keys\n       ↑\n    Domain       → Entities, repository interfaces, domain services\n       ↑\nApplication.Contracts → App service interfaces, DTOs\n       ↑\n  Application    → App service implementations\n       ↑\n   HttpApi       → REST controllers (optional)\n       ↑\n     Host        → Final application with DI and middleware\n```\n\n### Layered Dependency Direction\n\n| Project | Can Reference | Referenced By |\n|---------|---------------|---------------|\n| Domain.Shared | Nothing | All |\n| Domain | Domain.Shared | Application, Data layer |\n| Application.Contracts | Domain.Shared | Application, HttpApi, Clients |\n| Application | Domain, Contracts | Host |\n| EntityFrameworkCore/MongoDB | Domain | Host only |\n| HttpApi | Contracts only | Host |\n\n## Critical Rules\n\n### ❌ Never Do\n```csharp\n// Application layer accessing DbContext directly\npublic class BookAppService : ApplicationService\n{\n    private readonly MyDbContext _dbContext; // ❌ WRONG\n}\n\n// Domain depending on application layer\npublic class BookManager : DomainService\n{\n    private readonly IBookAppService _appService; // ❌ WRONG\n}\n\n// HttpApi depending on Application implementation\npublic class BookController : AbpController\n{\n    private readonly BookAppService _bookAppService; // ❌ WRONG - Use interface\n}\n```\n\n### ✅ Always Do\n```csharp\n// Application layer using repository abstraction\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// Domain service using domain abstractions\npublic class BookManager : DomainService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// HttpApi depending on contracts only\npublic class BookController : AbpController\n{\n    private readonly IBookAppService _bookAppService; // ✅ CORRECT\n}\n```\n\n## Repository Pattern Enforcement\n\n### Interface Location\n```csharp\n// In Domain project\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### Implementation Location\n```csharp\n// In EntityFrameworkCore project\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n\n// In MongoDB project\npublic class BookRepository : MongoDbRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n```\n\n## Multi-Application Scenarios\n\nWhen you have multiple applications (e.g., Admin + Public API):\n\n### Vertical Separation\n```\nMyProject.Admin.Application      - Admin-specific services\nMyProject.Public.Application     - Public-specific services\nMyProject.Domain                 - Shared domain (both reference this)\n```\n\n### Rules\n- Admin and Public application layers **MUST NOT** reference each other\n- Share domain logic, not application logic\n- Each vertical can have its own DTOs even if similar\n\n## Enforcement Checklist (Layered Templates)\n\nWhen adding a new feature:\n1. **Entity changes?** → Domain project\n2. **Constants/enums?** → Domain.Shared project\n3. **Repository interface?** → Domain project (only if custom queries needed)\n4. **Repository implementation?** → EntityFrameworkCore/MongoDB project\n5. **DTOs and service interface?** → Application.Contracts project\n6. **Service implementation?** → Application project\n7. **API endpoint?** → HttpApi project (if not using auto API controllers)\n\n## Common Violations to Watch\n\n| Violation | Impact | Fix |\n|-----------|--------|-----|\n| DbContext in Application | Breaks DB independence | Use repository |\n| Entity in DTO | Exposes internals | Map to DTO |\n| IQueryable in interface | Breaks abstraction | Return concrete types |\n| Cross-module app service call | Tight coupling | Use events or domain |\n",".agents/skills/abp-development-flow/SKILL.md":"---\nname: abp-development-flow\ndescription: ABP development workflow - step-by-step guide for adding new entities, migrations, application services, localization, permissions, and tests. Use when adding new features or entities to an ABP project.\n---\n\n# ABP Development Workflow\n\n> **Tutorials**: https://abp.io/docs/latest/tutorials\n\n## Adding a New Entity (Full Flow)\n\n### 1. Domain Layer\nCreate entity (location varies by template: `*.Domain/Entities/` for layered, `Entities/` for single-layer/microservice):\n\n```csharp\npublic class Book : AggregateRoot<Guid>\n{\n    public string Name { get; private set; }\n    public decimal Price { get; private set; }\n    public Guid AuthorId { get; private set; }\n\n    protected Book() { }\n\n    public Book(Guid id, string name, decimal price, Guid authorId) : base(id)\n    {\n        Name = Check.NotNullOrWhiteSpace(name, nameof(name));\n        SetPrice(price);\n        AuthorId = authorId;\n    }\n\n    public void SetPrice(decimal price)\n    {\n        Price = Check.Range(price, nameof(price), 0, 9999);\n    }\n}\n```\n\n### 2. Domain.Shared\nAdd constants and enums in `*.Domain.Shared/`:\n\n```csharp\npublic static class BookConsts\n{\n    public const int MaxNameLength = 128;\n}\n\npublic enum BookType\n{\n    Novel,\n    Science,\n    Biography\n}\n```\n\n### 3. Repository Interface (Optional)\nDefine custom repository in `*.Domain/` only if you need custom query methods. For simple CRUD, use generic `IRepository<Book, Guid>` directly:\n\n```csharp\n// Only if custom queries are needed\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### 4. EF Core Configuration\nIn `*.EntityFrameworkCore/`:\n\n**DbContext:**\n```csharp\npublic DbSet<Book> Books { get; set; }\n```\n\n**OnModelCreating:**\n```csharp\nbuilder.Entity<Book>(b =>\n{\n    b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n    b.ConfigureByConvention();\n    b.Property(x => x.Name).IsRequired().HasMaxLength(BookConsts.MaxNameLength);\n    b.HasIndex(x => x.Name);\n});\n```\n\n**Repository Implementation (only if custom interface defined):**\n```csharp\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(string name)\n    {\n        return await (await GetDbSetAsync())\n            .FirstOrDefaultAsync(b => b.Name == name);\n    }\n}\n```\n\n### 5. Run Migration\nSee `abp-ef-core` skill for migration commands. Recommended: use `DbMigrator` project to apply migrations and seed data.\n\n### 6. Application.Contracts\nCreate DTOs and service interface:\n\n```csharp\n// DTOs\npublic class BookDto : EntityDto<Guid>\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n    public Guid AuthorId { get; set; }\n}\n\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(BookConsts.MaxNameLength)]\n    public string Name { get; set; }\n\n    [Range(0, 9999)]\n    public decimal Price { get; set; }\n\n    [Required]\n    public Guid AuthorId { get; set; }\n}\n\n// Service Interface\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookDto>> GetListAsync(PagedAndSortedResultRequestDto input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n}\n```\n\n### 7. Object Mapping (Mapperly / AutoMapper)\nABP supports both Mapperly and AutoMapper. Prefer the provider already used in the solution.\n\nIf the solution uses **Mapperly**, create a mapper in the Application project:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\ncontext.Services.AddSingleton<BookMapper>();\n```\n\n### 8. Application Service\nImplement service (using generic repository - use `IBookRepository` if you defined custom interface in step 3):\n\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // Or IBookRepository\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IRepository<Book, Guid> bookRepository,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(MyProjectPermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = new Book(\n            GuidGenerator.Create(),\n            input.Name,\n            input.Price,\n            input.AuthorId\n        );\n\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n### 9. Add Localization\nIn `*.Domain.Shared/Localization/*/en.json`:\n\n```json\n{\n  \"Book\": \"Book\",\n  \"Books\": \"Books\",\n  \"BookName\": \"Name\",\n  \"BookPrice\": \"Price\"\n}\n```\n\n### 10. Add Permissions (if needed)\n```csharp\npublic static class MyProjectPermissions\n{\n    public static class Books\n    {\n        public const string Default = \"MyProject.Books\";\n        public const string Create = Default + \".Create\";\n    }\n}\n```\n\n### 11. Add Tests\n```csharp\npublic class BookAppService_Tests : MyProjectApplicationTestBase\n{\n    private readonly IBookAppService _bookAppService;\n\n    public BookAppService_Tests()\n    {\n        _bookAppService = GetRequiredService<IBookAppService>();\n    }\n\n    [Fact]\n    public async Task Should_Create_Book()\n    {\n        var result = await _bookAppService.CreateAsync(new CreateBookDto\n        {\n            Name = \"Test Book\",\n            Price = 19.99m\n        });\n\n        result.Id.ShouldNotBe(Guid.Empty);\n        result.Name.ShouldBe(\"Test Book\");\n    }\n}\n```\n\n## Checklist for New Features\n\n- [ ] Entity created with proper constructors\n- [ ] Constants in Domain.Shared\n- [ ] Custom repository interface in Domain (only if custom queries needed)\n- [ ] EF Core configuration added\n- [ ] Custom repository implementation (only if interface defined)\n- [ ] Migration generated and applied (use DbMigrator)\n- [ ] Mapperly mapper created and registered\n- [ ] DTOs created in Application.Contracts\n- [ ] Service interface defined\n- [ ] Service implementation with authorization\n- [ ] Localization keys added\n- [ ] Permissions defined (if applicable)\n- [ ] Tests written\n",".agents/skills/abp-microservice/SKILL.md":"# abp-microservice\n\nPath: `.agents/skills/abp-microservice/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-microservice/SKILL.md)",".agents/skills/abp-module/SKILL.md":"# abp-module\n\nPath: `.agents/skills/abp-module/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-module/SKILL.md)",".agents/skills/abp-mongodb/SKILL.md":"# abp-mongodb\n\nPath: `.agents/skills/abp-mongodb/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mongodb/SKILL.md)",".agents/skills/abp-multi-tenancy/SKILL.md":"# abp-multi-tenancy\n\nPath: `.agents/skills/abp-multi-tenancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-multi-tenancy/SKILL.md)",".agents/skills/abp-mvc/SKILL.md":"# abp-mvc\n\nPath: `.agents/skills/abp-mvc/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mvc/SKILL.md)",".agents/skills/abp-testing/SKILL.md":"# abp-testing\n\nPath: `.agents/skills/abp-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-testing/SKILL.md)",".claude/skills/abp-angular/SKILL.md":"# abp-angular\n\nPath: `.claude/skills/abp-angular/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-angular/SKILL.md)",".claude/skills/abp-app-nolayers/SKILL.md":"# abp-app-nolayers\n\nPath: `.claude/skills/abp-app-nolayers/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-app-nolayers/SKILL.md)",".claude/skills/abp-application-layer/SKILL.md":"# abp-application-layer\n\nPath: `.claude/skills/abp-application-layer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-application-layer/SKILL.md)",".claude/skills/abp-authorization/SKILL.md":"# abp-authorization\n\nPath: `.claude/skills/abp-authorization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-authorization/SKILL.md)",".claude/skills/abp-blazor/SKILL.md":"# abp-blazor\n\nPath: `.claude/skills/abp-blazor/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-blazor/SKILL.md)",".claude/skills/abp-cli/SKILL.md":"# abp-cli\n\nPath: `.claude/skills/abp-cli/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-cli/SKILL.md)",".claude/skills/abp-core/SKILL.md":"# abp-core\n\nPath: `.claude/skills/abp-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-core/SKILL.md)",".claude/skills/abp-ddd/SKILL.md":"# abp-ddd\n\nPath: `.claude/skills/abp-ddd/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ddd/SKILL.md)",".claude/skills/abp-dependency-rules/SKILL.md":"# abp-dependency-rules\n\nPath: `.claude/skills/abp-dependency-rules/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-dependency-rules/SKILL.md)",".claude/skills/abp-development-flow/SKILL.md":"# abp-development-flow\n\nPath: `.claude/skills/abp-development-flow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-development-flow/SKILL.md)",".claude/skills/abp-ef-core/SKILL.md":"# abp-ef-core\n\nPath: `.claude/skills/abp-ef-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ef-core/SKILL.md)",".claude/skills/abp-infrastructure/SKILL.md":"# abp-infrastructure\n\nPath: `.claude/skills/abp-infrastructure/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-infrastructure/SKILL.md)",".claude/skills/abp-microservice/SKILL.md":"# abp-microservice\n\nPath: `.claude/skills/abp-microservice/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-microservice/SKILL.md)",".claude/skills/abp-module/SKILL.md":"# abp-module\n\nPath: `.claude/skills/abp-module/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-module/SKILL.md)",".claude/skills/abp-mongodb/SKILL.md":"# abp-mongodb\n\nPath: `.claude/skills/abp-mongodb/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mongodb/SKILL.md)",".claude/skills/abp-multi-tenancy/SKILL.md":"# abp-multi-tenancy\n\nPath: `.claude/skills/abp-multi-tenancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-multi-tenancy/SKILL.md)",".claude/skills/abp-mvc/SKILL.md":"# abp-mvc\n\nPath: `.claude/skills/abp-mvc/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mvc/SKILL.md)",".claude/skills/abp-testing/SKILL.md":"# abp-testing\n\nPath: `.claude/skills/abp-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-testing/SKILL.md)",".cursorrules":"# Cursor IDE Native Rules\n\nPath: `.cursorrules`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.cursorrules)",".github/copilot-instructions.md":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.github/copilot-instructions.md)","tools/github-changelog-generator/README.md":"# github-changelog-generator Documentation\n\nPath: `tools/github-changelog-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/README.md)","tools/github-changelog-generator/config.yaml":"# Github-changelog-generator Skill\n\nPath: `tools/github-changelog-generator/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/config.yaml)","tools/localization-key-synchronizer/README.md":"# localization-key-synchronizer Documentation\n\nPath: `tools/localization-key-synchronizer/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/localization-key-synchronizer/README.md)","npm/ng-packs/tools/tsconfig.tools.json":"# Tools Skill\n\nPath: `npm/ng-packs/tools/tsconfig.tools.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/tsconfig.tools.json)","docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md":"# 2023-07-09-Cascading-Option-Loading-With-Extensions Documentation\n\nPath: `docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md)","npm/ng-packs/packages/account-core/.eslintrc.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/.eslintrc.json)","npm/ng-packs/packages/account-core/README.md":"# account-core Documentation\n\nPath: `npm/ng-packs/packages/account-core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/README.md)","npm/ng-packs/packages/account-core/ng-package.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/ng-package.json)","npm/ng-packs/packages/account-core/package.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/package.json)","npm/ng-packs/packages/account-core/project.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/project.json)","npm/ng-packs/packages/account-core/tsconfig.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.json)","npm/ng-packs/packages/account-core/tsconfig.lib.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.json)","npm/ng-packs/packages/account-core/tsconfig.lib.prod.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.prod.json)","npm/ng-packs/packages/account-core/tsconfig.spec.json":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.spec.json)","npm/ng-packs/packages/account/.eslintrc.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/.eslintrc.json)","npm/ng-packs/packages/account/README.md":"# account Documentation\n\nPath: `npm/ng-packs/packages/account/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/README.md)","npm/ng-packs/packages/account/ng-package.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/ng-package.json)","npm/ng-packs/packages/account/package.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/package.json)","npm/ng-packs/packages/account/project.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/project.json)","npm/ng-packs/packages/account/tsconfig.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.json)","npm/ng-packs/packages/account/tsconfig.lib.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.json)","npm/ng-packs/packages/account/tsconfig.lib.prod.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.prod.json)","npm/ng-packs/packages/account/tsconfig.spec.json":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.spec.json)","npm/ng-packs/packages/cms-kit/README.md":"# cms-kit Documentation\n\nPath: `npm/ng-packs/packages/cms-kit/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/README.md)","npm/ng-packs/packages/cms-kit/ng-package.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/ng-package.json)","npm/ng-packs/packages/cms-kit/package.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/package.json)","npm/ng-packs/packages/cms-kit/project.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/project.json)","npm/ng-packs/packages/cms-kit/tsconfig.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.json)","npm/ng-packs/packages/cms-kit/tsconfig.lib.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.json)","npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json)","npm/ng-packs/packages/cms-kit/tsconfig.spec.json":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.spec.json)","npm/ng-packs/packages/components/.eslintrc.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/.eslintrc.json)","npm/ng-packs/packages/components/README.md":"# components Documentation\n\nPath: `npm/ng-packs/packages/components/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/README.md)","npm/ng-packs/packages/components/ng-package.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/ng-package.json)","npm/ng-packs/packages/components/package.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/package.json)","npm/ng-packs/packages/components/project.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/project.json)","npm/ng-packs/packages/components/tsconfig.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.json)","npm/ng-packs/packages/components/tsconfig.lib.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.json)","npm/ng-packs/packages/components/tsconfig.lib.prod.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.prod.json)","npm/ng-packs/packages/components/tsconfig.spec.json":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.spec.json)","npm/ng-packs/packages/core/.eslintrc.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/.eslintrc.json)","npm/ng-packs/packages/core/README.md":"# core Documentation\n\nPath: `npm/ng-packs/packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/README.md)","npm/ng-packs/packages/core/ng-package.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/ng-package.json)","npm/ng-packs/packages/core/package.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/package.json)","npm/ng-packs/packages/core/project.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/project.json)","npm/ng-packs/packages/core/tsconfig.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.json)","npm/ng-packs/packages/core/tsconfig.lib.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.json)","npm/ng-packs/packages/core/tsconfig.lib.prod.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.prod.json)","npm/ng-packs/packages/core/tsconfig.spec.json":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.spec.json)","npm/ng-packs/packages/feature-management/.eslintrc.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/.eslintrc.json)","npm/ng-packs/packages/feature-management/README.md":"# feature-management Documentation\n\nPath: `npm/ng-packs/packages/feature-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/README.md)","npm/ng-packs/packages/feature-management/ng-package.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/ng-package.json)","npm/ng-packs/packages/feature-management/package.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/package.json)","npm/ng-packs/packages/feature-management/project.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/project.json)","npm/ng-packs/packages/feature-management/tsconfig.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.json)","npm/ng-packs/packages/feature-management/tsconfig.lib.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.json)","npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/feature-management/tsconfig.spec.json":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.spec.json)","npm/ng-packs/packages/generators/.eslintrc.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/.eslintrc.json)","npm/ng-packs/packages/generators/README.md":"# generators Documentation\n\nPath: `npm/ng-packs/packages/generators/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/README.md)","npm/ng-packs/packages/generators/generators.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/generators.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/generators.json)","npm/ng-packs/packages/generators/package.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/package.json)","npm/ng-packs/packages/generators/project.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/project.json)","npm/ng-packs/packages/generators/tsconfig.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.json)","npm/ng-packs/packages/generators/tsconfig.lib.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.lib.json)","npm/ng-packs/packages/generators/tsconfig.spec.json":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.spec.json)","npm/ng-packs/packages/identity/.eslintrc.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/.eslintrc.json)","npm/ng-packs/packages/identity/README.md":"# identity Documentation\n\nPath: `npm/ng-packs/packages/identity/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/README.md)","npm/ng-packs/packages/identity/ng-package.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/ng-package.json)","npm/ng-packs/packages/identity/package.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/package.json)","npm/ng-packs/packages/identity/project.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/project.json)","npm/ng-packs/packages/identity/tsconfig.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.json)","npm/ng-packs/packages/identity/tsconfig.lib.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.json)","npm/ng-packs/packages/identity/tsconfig.lib.prod.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.prod.json)","npm/ng-packs/packages/identity/tsconfig.spec.json":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.spec.json)","npm/ng-packs/packages/oauth/.eslintrc.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/.eslintrc.json)","npm/ng-packs/packages/oauth/README.md":"# oauth Documentation\n\nPath: `npm/ng-packs/packages/oauth/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/README.md)","npm/ng-packs/packages/oauth/ng-package.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/ng-package.json)","npm/ng-packs/packages/oauth/package.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/package.json)","npm/ng-packs/packages/oauth/project.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/project.json)","npm/ng-packs/packages/oauth/tsconfig.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.json)","npm/ng-packs/packages/oauth/tsconfig.lib.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.json)","npm/ng-packs/packages/oauth/tsconfig.lib.prod.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.prod.json)","npm/ng-packs/packages/oauth/tsconfig.spec.json":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.spec.json)","npm/ng-packs/packages/permission-management/.eslintrc.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/.eslintrc.json)","npm/ng-packs/packages/permission-management/README.md":"# permission-management Documentation\n\nPath: `npm/ng-packs/packages/permission-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/README.md)","npm/ng-packs/packages/permission-management/ng-package.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/ng-package.json)","npm/ng-packs/packages/permission-management/package.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/package.json)","npm/ng-packs/packages/permission-management/project.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/project.json)","npm/ng-packs/packages/permission-management/tsconfig.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.json)","npm/ng-packs/packages/permission-management/tsconfig.lib.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.json)","npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/permission-management/tsconfig.spec.json":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.spec.json)","npm/ng-packs/packages/schematics/.eslintrc.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/.eslintrc.json)","npm/ng-packs/packages/schematics/README.md":"# schematics Documentation\n\nPath: `npm/ng-packs/packages/schematics/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/README.md)","npm/ng-packs/packages/schematics/package.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/package.json)","npm/ng-packs/packages/schematics/project.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/project.json)","npm/ng-packs/packages/schematics/tsconfig.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.json)","npm/ng-packs/packages/schematics/tsconfig.lib.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.lib.json)","npm/ng-packs/packages/schematics/tsconfig.spec.json":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.spec.json)","npm/ng-packs/packages/setting-management/.eslintrc.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/.eslintrc.json)","npm/ng-packs/packages/setting-management/README.md":"# setting-management Documentation\n\nPath: `npm/ng-packs/packages/setting-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/README.md)","npm/ng-packs/packages/setting-management/ng-package.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/ng-package.json)","npm/ng-packs/packages/setting-management/package.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/package.json)","npm/ng-packs/packages/setting-management/project.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/project.json)","npm/ng-packs/packages/setting-management/tsconfig.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.json)","npm/ng-packs/packages/setting-management/tsconfig.lib.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.json)","npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/setting-management/tsconfig.spec.json":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.spec.json)","npm/ng-packs/packages/tenant-management/.eslintrc.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/.eslintrc.json)","npm/ng-packs/packages/tenant-management/README.md":"# tenant-management Documentation\n\nPath: `npm/ng-packs/packages/tenant-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/README.md)","npm/ng-packs/packages/tenant-management/ng-package.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/ng-package.json)","npm/ng-packs/packages/tenant-management/package.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/package.json)","npm/ng-packs/packages/tenant-management/project.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/project.json)","npm/ng-packs/packages/tenant-management/tsconfig.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.json)","npm/ng-packs/packages/tenant-management/tsconfig.lib.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.json)","npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json)","npm/ng-packs/packages/tenant-management/tsconfig.spec.json":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.spec.json)","npm/ng-packs/packages/theme-basic/.eslintrc.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/.eslintrc.json)","npm/ng-packs/packages/theme-basic/README.md":"# theme-basic Documentation\n\nPath: `npm/ng-packs/packages/theme-basic/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/README.md)","npm/ng-packs/packages/theme-basic/ng-package.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/ng-package.json)","npm/ng-packs/packages/theme-basic/package.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/package.json)","npm/ng-packs/packages/theme-basic/project.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/project.json)","npm/ng-packs/packages/theme-basic/tsconfig.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.json)","npm/ng-packs/packages/theme-basic/tsconfig.lib.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.json)","npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json)","npm/ng-packs/packages/theme-basic/tsconfig.spec.json":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.spec.json)","npm/ng-packs/packages/theme-shared/.eslintrc.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/.eslintrc.json)","npm/ng-packs/packages/theme-shared/README.md":"# theme-shared Documentation\n\nPath: `npm/ng-packs/packages/theme-shared/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/README.md)","npm/ng-packs/packages/theme-shared/ng-package.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/ng-package.json)","npm/ng-packs/packages/theme-shared/package.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/package.json)","npm/ng-packs/packages/theme-shared/project.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/project.json)","npm/ng-packs/packages/theme-shared/tsconfig.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.json)","npm/ng-packs/packages/theme-shared/tsconfig.lib.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.json)","npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json)","npm/ng-packs/packages/theme-shared/tsconfig.spec.json":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.spec.json)","npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md":"# Ai-migrations Skill\n\nPath: `npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md)","npm/ng-packs/packages/account-core/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/account-core/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/ng-package.json)","npm/ng-packs/packages/account/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/account/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/config/ng-package.json)","npm/ng-packs/packages/cms-kit/admin/ng-package.json":"# Admin Skill\n\nPath: `npm/ng-packs/packages/cms-kit/admin/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/ng-package.json)","npm/ng-packs/packages/cms-kit/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/ng-package.json)","npm/ng-packs/packages/cms-kit/public/ng-package.json":"# Public Skill\n\nPath: `npm/ng-packs/packages/cms-kit/public/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/ng-package.json)","npm/ng-packs/packages/components/chart.js/ng-package.json":"# Chart.js Skill\n\nPath: `npm/ng-packs/packages/components/chart.js/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/chart.js/ng-package.json)","npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md":"# Dynamic-form Skill\n\nPath: `npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md)","npm/ng-packs/packages/components/dynamic-form/ng-package.json":"# Dynamic-form Skill\n\nPath: `npm/ng-packs/packages/components/dynamic-form/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/ng-package.json)","npm/ng-packs/packages/components/extensible/ng-package.json":"# Extensible Skill\n\nPath: `npm/ng-packs/packages/components/extensible/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/extensible/ng-package.json)","npm/ng-packs/packages/components/lookup/ng-package.json":"# Lookup Skill\n\nPath: `npm/ng-packs/packages/components/lookup/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/lookup/ng-package.json)","npm/ng-packs/packages/components/page/ng-package.json":"# Page Skill\n\nPath: `npm/ng-packs/packages/components/page/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/page/ng-package.json)","npm/ng-packs/packages/components/tree/ng-package.json":"# Tree Skill\n\nPath: `npm/ng-packs/packages/components/tree/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tree/ng-package.json)","npm/ng-packs/packages/core/locale/ng-package.json":"# Locale Skill\n\nPath: `npm/ng-packs/packages/core/locale/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/locale/ng-package.json)","npm/ng-packs/packages/core/testing/ng-package.json":"# Testing Skill\n\nPath: `npm/ng-packs/packages/core/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/testing/ng-package.json)","npm/ng-packs/packages/feature-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/feature-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/ng-package.json)","npm/ng-packs/packages/identity/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/identity/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/config/ng-package.json)","npm/ng-packs/packages/identity/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/identity/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/ng-package.json)","npm/ng-packs/packages/permission-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/permission-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/ng-package.json)","npm/ng-packs/packages/schematics/src/collection.json":"# Src Skill\n\nPath: `npm/ng-packs/packages/schematics/src/collection.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/collection.json)","npm/ng-packs/packages/setting-management/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/setting-management/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/ng-package.json)","npm/ng-packs/packages/setting-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/ng-package.json)","npm/ng-packs/packages/tenant-management/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/tenant-management/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/config/ng-package.json)","npm/ng-packs/packages/tenant-management/proxy/ng-package.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/ng-package.json)","npm/ng-packs/packages/theme-basic/testing/ng-package.json":"# Testing Skill\n\nPath: `npm/ng-packs/packages/theme-basic/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/testing/ng-package.json)","npm/ng-packs/packages/theme-shared/testing/ng-package.json":"# Testing Skill\n\nPath: `npm/ng-packs/packages/theme-shared/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/testing/ng-package.json)","tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml":"# Config Skill\n\nPath: `tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml)","npm/ng-packs/packages/cms-kit/admin/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/cms-kit/admin/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/config/ng-package.json)","npm/ng-packs/packages/cms-kit/public/config/ng-package.json":"# Config Skill\n\nPath: `npm/ng-packs/packages/cms-kit/public/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/config/ng-package.json)","npm/ng-packs/packages/core/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/core/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/README.md)","npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/generators/src/generators/change-theme/schema.json":"# Change-theme Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/change-theme/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/change-theme/schema.json)","npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json":"# Generate-proxy Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json)","npm/ng-packs/packages/generators/src/generators/update-version/schema.json":"# Update-version Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/update-version/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/update-version/schema.json)","npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json":"# Ai-config Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json)","npm/ng-packs/packages/schematics/src/commands/api/schema.json":"# Api Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/api/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/api/schema.json)","npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json":"# Change-theme Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json)","npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json":"# Create-lib Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json":"# Proxy-add Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json":"# Proxy-index Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json":"# Proxy-refresh Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json)","npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json":"# Proxy-remove Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json)","npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json":"# Ssr-add Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json)","npm/ng-packs/packages/schematics/src/utils/angular/README.md":"# angular Documentation\n\nPath: `npm/ng-packs/packages/schematics/src/utils/angular/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/README.md)","npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json":"# Server Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json)","npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json":"# Latest-versions Skill\n\nPath: `npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json)","npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md)","npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md)","npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md":"# Command: /claude\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md":"# Command: /copilot-instructions\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md":"# Command: /gemini\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md":"# Command: /guidelines\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc":"# Cursor Rule: cursor\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc)","npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md":"# Command: /guidelines\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md)"},"items":[{"name":"SKILL.md","path":".agents/skills/abp-angular/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-angular/SKILL.md","title":"abp-angular","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-angular\ndescription: ABP Angular UI patterns - generate-proxy, ListService, PermissionGuard, abpLocalization pipe, ConfirmationService, ToasterService, ConfigStateService. Use when building or reviewing Angular UI components, routing, or service integration in ABP Angular projects.\n---\n\n# ABP Angular UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/angular/overview\n\n## Project Structure\n```\nsrc/app/\n├── proxy/              # Auto-generated service proxies\n├── shared/             # Shared components, pipes, directives\n├── book/               # Feature module\n│   ├── book.module.ts\n│   ├── book-routing.module.ts\n│   ├── book-list/\n│   │   ├── book-list.component.ts\n│   │   ├── book-list.component.html\n│   │   └── book-list.component.scss\n│   └── book-detail/\n```\n\n## Generate Service Proxies\n```bash\nabp generate-proxy -t ng\n```\n\nThis generates typed service classes in `src/app/proxy/`.\n\n## List Component Pattern\n```typescript\n@Component({\n  selector: 'app-book-list',\n  templateUrl: './book-list.component.html'\n})\nexport class BookListComponent implements OnInit {\n  books = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;\n\n  constructor(\n    public readonly list: ListService,\n    private bookService: BookService,\n    private confirmation: ConfirmationService\n  ) {}\n\n  ngOnInit(): void {\n    this.hookToQuery();\n  }\n\n  private hookToQuery(): void {\n    this.list.hookToQuery(query =>\n      this.bookService.getList(query)\n    ).subscribe(response => {\n      this.books = response;\n    });\n  }\n\n  create(): void {\n    // Open create modal\n  }\n\n  delete(book: BookDto): void {\n    this.confirmation\n      .warn('::AreYouSureToDelete', '::AreYouSure')\n      .subscribe(status => {\n        if (status === Confirmation.Status.confirm) {\n          this.bookService.delete(book.id).subscribe(() => this.list.get());\n        }\n      });\n  }\n}\n```\n\n## Localization\n```typescript\n// In component\nconstructor(private localizationService: LocalizationService) {}\n\ngetText(): string {\n  return this.localizationService.instant('::Books');\n}\n```\n\n```html\n<!-- In template -->\n<h1>{{ '::Books' | abpLocalization }}</h1>\n\n<!-- With parameters -->\n<p>{{ '::WelcomeMessage' | abpLocalization: userName }}</p>\n```\n\n## Authorization\n\n### Permission Directive\n```html\n<button *abpPermission=\"'BookStore.Books.Create'\">Create</button>\n```\n\n### Permission Guard\n```typescript\nconst routes: Routes = [\n  {\n    path: '',\n    component: BookListComponent,\n    canActivate: [PermissionGuard],\n    data: {\n      requiredPolicy: 'BookStore.Books'\n    }\n  }\n];\n```\n\n### Programmatic Check\n```typescript\nconstructor(private permissionService: PermissionService) {}\n\ncanCreate(): boolean {\n  return this.permissionService.getGrantedPolicy('BookStore.Books.Create');\n}\n```\n\n## Forms with Validation\n```typescript\n@Component({...})\nexport class BookFormComponent {\n  form: FormGroup;\n\n  constructor(private fb: FormBuilder) {\n    this.buildForm();\n  }\n\n  buildForm(): void {\n    this.form = this.fb.group({\n      name: ['', [Validators.required, Validators.maxLength(128)]],\n      price: [0, [Validators.required, Validators.min(0)]]\n    });\n  }\n\n  save(): void {\n    if (this.form.invalid) return;\n\n    this.bookService.create(this.form.value).subscribe(() => {\n      // Handle success\n    });\n  }\n}\n```\n\n```html\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n  <div class=\"form-group\">\n    <label for=\"name\">{{ '::Name' | abpLocalization }}</label>\n    <input type=\"text\" id=\"name\" formControlName=\"name\" class=\"form-control\" />\n  </div>\n\n  <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\n    {{ '::Save' | abpLocalization }}\n  </button>\n</form>\n```\n\n## Configuration API\n```typescript\nconstructor(private configService: ConfigStateService) {}\n\ngetCurrentUser(): CurrentUserDto {\n  return this.configService.getOne('currentUser');\n}\n\ngetSettings(): void {\n  const setting = this.configService.getSetting('MyApp.MaxItemCount');\n}\n```\n\n## Modal Service\n```typescript\nconstructor(private modalService: ModalService) {}\n\nopenCreateModal(): void {\n  const modalRef = this.modalService.open(BookFormComponent, {\n    size: 'lg'\n  });\n\n  modalRef.result.then(result => {\n    if (result) {\n      this.list.get();\n    }\n  });\n}\n```\n\n## Toast Notifications\n```typescript\nconstructor(private toaster: ToasterService) {}\n\nshowSuccess(): void {\n  this.toaster.success('::BookCreatedSuccessfully', '::Success');\n}\n\nshowError(error: string): void {\n  this.toaster.error(error, '::Error');\n}\n```\n\n## Lazy Loading Modules\n```typescript\n// app-routing.module.ts\nconst routes: Routes = [\n  {\n    path: 'books',\n    loadChildren: () => import('./book/book.module').then(m => m.BookModule)\n  }\n];\n```\n\n## Theme & Styling\n- Use Bootstrap classes\n- ABP provides theme variables via CSS custom properties\n- Component-specific styles in `.component.scss`\n","frontmatter":{"name":"abp-angular","description":"ABP Angular UI patterns - generate-proxy, ListService, PermissionGuard, abpLocalization pipe, ConfirmationService, ToasterService, ConfigStateService. Use when building or reviewing Angular UI components, routing, or service integration in ABP Angular projects."},"isInternal":false,"tokens":1141,"sizeBytes":4946},{"name":"SKILL.md","path":".agents/skills/abp-app-nolayers/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-app-nolayers/SKILL.md","title":"abp-app-nolayers","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-app-nolayers\ndescription: ABP Single-Layer (No-Layers / nolayers) application template - single project structure, feature-based file organization, no separate Domain/Application.Contracts projects. Use when working with the single-layer web application template or when the project has no layered separation.\n---\n\n# ABP Single-Layer Application Template\n\n> **Docs**: https://abp.io/docs/latest/solution-templates/single-layer-web-application\n\n## Solution Structure\n\nSingle project containing everything:\n\n```\nMyProject/\n├── src/\n│   └── MyProject/\n│       ├── Data/              # DbContext, migrations\n│       ├── Entities/          # Domain entities\n│       ├── Services/          # Application services + DTOs\n│       ├── Pages/             # Razor pages / Blazor components\n│       └── MyProjectModule.cs\n└── test/\n    └── MyProject.Tests/\n```\n\n## Key Differences from Layered\n\n| Layered Template | Single-Layer Template |\n|------------------|----------------------|\n| DTOs in Application.Contracts | DTOs in Services folder (same project) |\n| Repository interfaces in Domain | Use generic `IRepository<T, TKey>` directly |\n| Separate Domain.Shared for constants | Constants in same project |\n| Multiple module classes | Single module class |\n\n## File Organization\n\nGroup related files by feature:\n\n```\nServices/\n├── Books/\n│   ├── BookAppService.cs\n│   ├── BookDto.cs\n│   ├── CreateBookDto.cs\n│   └── IBookAppService.cs\n└── Authors/\n    ├── AuthorAppService.cs\n    └── ...\n```\n\n## Simplified Entity (Still keep invariants)\n\nSingle-layer templates are structurally simpler, but you may still have real business invariants.\n\n- For **trivial CRUD** entities, public setters can be acceptable.\n- For **non-trivial business rules**, still prefer encapsulation (private setters + methods) to prevent invalid states.\n\n```csharp\npublic class Book : AuditedAggregateRoot<Guid>\n{\n    public string Name { get; set; }  // OK for trivial CRUD only\n    public decimal Price { get; set; }\n}\n```\n\n## No Custom Repository Needed\n\nUse generic repository directly - no need to define custom interfaces:\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n\n    // Generic repository is sufficient for single-layer apps\n}\n```\n","frontmatter":{"name":"abp-app-nolayers","description":"ABP Single-Layer (No-Layers / nolayers) application template - single project structure, feature-based file organization, no separate Domain/Application.Contracts projects. Use when working with the single-layer web application template or when the project has no layered separation."},"isInternal":false,"tokens":516,"sizeBytes":2420},{"name":"SKILL.md","path":".agents/skills/abp-application-layer/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-application-layer/SKILL.md","title":"abp-application-layer","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-application-layer\ndescription: ABP Application Services, DTOs, CRUD service, object mapping (Mapperly/AutoMapper), validation, error handling. Use when creating or reviewing application services, DTOs, or working in the Application or Application.Contracts projects.\n---\n\n# ABP Application Layer Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design/application-services\n\n## Anti-Patterns to Avoid\n\n- **Entity name in method**: use `GetAsync` not `GetBookAsync`\n- **ID inside UpdateDto**: pass `id` as a separate parameter, not inside the DTO\n- **Calling other app services in the same module**: use domain services or repositories directly\n- **Using `IFormFile`/`Stream` in app service**: accept `byte[]` from controllers instead\n- **Business logic in app service**: put it in domain entities or domain services\n\n## Application Service Structure\n\n### Interface (Application.Contracts)\n```csharp\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookListItemDto>> GetListAsync(GetBookListInput input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n    Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input);\n    Task DeleteAsync(Guid id);\n}\n```\n\n### Implementation (Application)\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IBookRepository _bookRepository;\n    private readonly BookManager _bookManager;\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IBookRepository bookRepository,\n        BookManager bookManager,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookManager = bookManager;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = await _bookManager.CreateAsync(input.Name, input.Price);\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Edit)]\n    public async Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        await _bookManager.ChangeNameAsync(book, input.Name);\n        book.SetPrice(input.Price);\n        await _bookRepository.UpdateAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n## Application Service Best Practices\n- Don't repeat entity name in method names (`GetAsync` not `GetBookAsync`)\n- Accept/return DTOs only, never entities\n- ID not inside UpdateDto - pass separately\n- Use custom repositories when you need custom queries, generic repository is fine for simple CRUD\n- Call `UpdateAsync` explicitly (don't assume change tracking)\n- Don't call other app services in same module\n- Don't use `IFormFile`/`Stream` - pass `byte[]` from controllers\n- Use base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) instead of injecting these services\n\n## DTO Naming Conventions\n\n| Purpose | Convention | Example |\n|---------|------------|---------|\n| Query input | `Get{Entity}Input` | `GetBookInput` |\n| List query input | `Get{Entity}ListInput` | `GetBookListInput` |\n| Create input | `Create{Entity}Dto` | `CreateBookDto` |\n| Update input | `Update{Entity}Dto` | `UpdateBookDto` |\n| Single entity output | `{Entity}Dto` | `BookDto` |\n| List item output | `{Entity}ListItemDto` | `BookListItemDto` |\n\n## DTO Location\n- Define DTOs in `*.Application.Contracts` project\n- This allows sharing with clients (Blazor, HttpApi.Client)\n\n## Validation\n\n### Data Annotations\n```csharp\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(100, MinimumLength = 3)]\n    public string Name { get; set; }\n\n    [Range(0, 999.99)]\n    public decimal Price { get; set; }\n}\n```\n\n### Custom Validation with IValidatableObject\nBefore adding custom validation, decide if it's a **domain rule** or **application rule**:\n- **Domain rule**: Put validation in entity constructor or domain service (enforces business invariants)\n- **Application rule**: Use DTO validation (input format, required fields)\n\nOnly use `IValidatableObject` for application-level validation that can't be expressed with data annotations:\n\n```csharp\npublic class CreateBookDto : IValidatableObject\n{\n    public string Name { get; set; }\n    public string Description { get; set; }\n\n    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)\n    {\n        if (Name == Description)\n        {\n            yield return new ValidationResult(\n                \"Name and Description cannot be the same!\",\n                new[] { nameof(Name), nameof(Description) }\n            );\n        }\n    }\n}\n```\n\n### FluentValidation\n```csharp\npublic class CreateBookDtoValidator : AbstractValidator<CreateBookDto>\n{\n    public CreateBookDtoValidator()\n    {\n        RuleFor(x => x.Name).NotEmpty().Length(3, 100);\n        RuleFor(x => x.Price).GreaterThan(0);\n    }\n}\n```\n\n## Error Handling\n\n### Business Exceptions\n```csharp\nthrow new BusinessException(\"BookStore:010001\")\n    .WithData(\"BookName\", name);\n```\n\n### Entity Not Found\n```csharp\nvar book = await _bookRepository.FindAsync(id);\nif (book == null)\n{\n    throw new EntityNotFoundException(typeof(Book), id);\n}\n```\n\n### User-Friendly Exceptions\n```csharp\nthrow new UserFriendlyException(L[\"BookNotAvailable\"]);\n```\n\n### HTTP Status Code Mapping\nStatus code mapping is **configurable** in ABP (do not rely on a fixed mapping in business logic).\n\n| Exception | Typical HTTP Status |\n|-----------|-------------|\n| `AbpValidationException` | 400 |\n| `AbpAuthorizationException` | 401/403 |\n| `EntityNotFoundException` | 404 |\n| `BusinessException` | 403 (but configurable) |\n| Other exceptions | 500 |\n\n## Auto API Controllers\nABP automatically generates API controllers for application services:\n- Interface must inherit `IApplicationService` (which already has `[RemoteService]` attribute)\n- HTTP methods determined by method name prefix (Get, Create, Update, Delete)\n- Use `[RemoteService(false)]` to disable auto API generation for specific methods\n\n## Object Mapping (Mapperly / AutoMapper)\nABP supports **both Mapperly and AutoMapper** integrations. But the default mapping library is Mapperly. You need to first check the project's active mapping library.\n- Prefer the mapping provider already used in the solution (check existing mapping files / loaded modules).\n- In mixed solutions, explicitly setting the default provider may be required (see `docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md`).\n\n### Mapperly (compile-time)\nDefine mappers as partial classes:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\npublic override void ConfigureServices(ServiceConfigurationContext context)\n{\n    context.Services.AddSingleton<BookMapper>();\n}\n```\n\nUsage in application service:\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(BookMapper bookMapper)\n    {\n        _bookMapper = bookMapper;\n    }\n\n    public BookDto GetBook(Book book)\n    {\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n> **Note**: Mapperly generates mapping code at compile-time, providing better performance than runtime mappers.\n\n### AutoMapper (runtime)\nIf the solution uses AutoMapper, mappings are typically defined in `Profile` classes and registered via ABP's AutoMapper integration.\n","frontmatter":{"name":"abp-application-layer","description":"ABP Application Services, DTOs, CRUD service, object mapping (Mapperly/AutoMapper), validation, error handling. Use when creating or reviewing application services, DTOs, or working in the Application or Application.Contracts projects."},"isInternal":false,"tokens":1750,"sizeBytes":7819},{"name":"SKILL.md","path":".agents/skills/abp-authorization/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-authorization/SKILL.md","title":"abp-authorization","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-authorization\ndescription: ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side. Use when working with permissions, authorization, role-based access, or security in ABP projects.\n---\n\n# ABP Authorization\n\n> **Docs**: https://abp.io/docs/latest/framework/fundamentals/authorization\n\n## Permission Definition\nDefine permissions in `*.Application.Contracts` project:\n\n```csharp\npublic static class BookStorePermissions\n{\n    public const string GroupName = \"BookStore\";\n\n    public static class Books\n    {\n        public const string Default = GroupName + \".Books\";\n        public const string Create = Default + \".Create\";\n        public const string Edit = Default + \".Edit\";\n        public const string Delete = Default + \".Delete\";\n    }\n}\n```\n\nRegister in provider:\n```csharp\npublic class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider\n{\n    public override void Define(IPermissionDefinitionContext context)\n    {\n        var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L(\"Permission:BookStore\"));\n\n        var booksPermission = bookStoreGroup.AddPermission(\n            BookStorePermissions.Books.Default,\n            L(\"Permission:Books\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Create,\n            L(\"Permission:Books.Create\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Edit,\n            L(\"Permission:Books.Edit\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Delete,\n            L(\"Permission:Books.Delete\"));\n    }\n\n    private static LocalizableString L(string name)\n    {\n        return LocalizableString.Create<BookStoreResource>(name);\n    }\n}\n```\n\n## Using Permissions\n\n### Declarative (Attribute)\n```csharp\n[Authorize(BookStorePermissions.Books.Create)]\npublic virtual async Task<BookDto> CreateAsync(CreateBookDto input)\n{\n    // Only users with Books.Create permission can execute\n}\n```\n\n### Programmatic Check\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // Check and throw if not granted\n        await CheckPolicyAsync(BookStorePermissions.Books.Edit);\n\n        // Or check without throwing\n        if (await IsGrantedAsync(BookStorePermissions.Books.Delete))\n        {\n            // Has permission\n        }\n    }\n}\n```\n\n### Allow Anonymous Access\n```csharp\n[AllowAnonymous]\npublic virtual async Task<BookDto> GetPublicBookAsync(Guid id)\n{\n    // No authentication required\n}\n```\n\n## Current User\nAccess authenticated user info via `CurrentUser` property (available in base classes like `ApplicationService`, `DomainService`, `AbpController`):\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // CurrentUser is available from base class - no injection needed\n        var userId = CurrentUser.Id;\n        var userName = CurrentUser.UserName;\n        var email = CurrentUser.Email;\n        var isAuthenticated = CurrentUser.IsAuthenticated;\n        var roles = CurrentUser.Roles;\n        var tenantId = CurrentUser.TenantId;\n    }\n}\n\n// In other services, inject ICurrentUser\npublic class MyService : ITransientDependency\n{\n    private readonly ICurrentUser _currentUser;\n    public MyService(ICurrentUser currentUser) => _currentUser = currentUser;\n}\n```\n\n### Ownership Validation\n```csharp\npublic async Task UpdateMyBookAsync(Guid bookId, UpdateBookDto input)\n{\n    var book = await _bookRepository.GetAsync(bookId);\n\n    if (book.CreatorId != CurrentUser.Id)\n    {\n        throw new AbpAuthorizationException();\n    }\n\n    // Update book...\n}\n```\n\n## Multi-Tenancy Permissions\nControl permission availability per tenant side:\n\n```csharp\nbookStoreGroup.AddPermission(\n    BookStorePermissions.Books.Default,\n    L(\"Permission:Books\"),\n    multiTenancySide: MultiTenancySides.Tenant // Only for tenants\n);\n```\n\nOptions: `MultiTenancySides.Host`, `Tenant`, or `Both`\n\n## Feature-Dependent Permissions\n```csharp\nbooksPermission.RequireFeatures(\"BookStore.PremiumFeature\");\n```\n\n## Permission Management\nGrant/revoke permissions programmatically:\n\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly IPermissionManager _permissionManager;\n\n    public async Task GrantPermissionToUserAsync(Guid userId, string permissionName)\n    {\n        await _permissionManager.SetForUserAsync(userId, permissionName, true);\n    }\n\n    public async Task GrantPermissionToRoleAsync(string roleName, string permissionName)\n    {\n        await _permissionManager.SetForRoleAsync(roleName, permissionName, true);\n    }\n}\n```\n\n## Security Best Practices\n- Never trust client input for user identity\n- Use `CurrentUser` property (from base class) or inject `ICurrentUser`\n- Validate ownership in application service methods\n- Filter queries by current user when appropriate\n- Don't expose sensitive fields in DTOs\n","frontmatter":{"name":"abp-authorization","description":"ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side. Use when working with permissions, authorization, role-based access, or security in ABP projects."},"isInternal":false,"tokens":1047,"sizeBytes":5045},{"name":"SKILL.md","path":".agents/skills/abp-blazor/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-blazor/SKILL.md","title":"abp-blazor","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-blazor\ndescription: ABP Blazor UI patterns - AbpComponentBase, AbpCrudPageBase, DataGrid, IMenuContributor, Message/Notify, Validations, JavaScript interop. Use when building or reviewing Blazor Server or WebAssembly UI components in ABP projects.\n---\n\n# ABP Blazor UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/blazor/overall\n\n## Component Base Classes\n\n### Basic Component\n```razor\n@inherits AbpComponentBase\n\n<h1>@L[\"Books\"]</h1>\n```\n\n### CRUD Page\n```razor\n@page \"/books\"\n@inherits AbpCrudPageBase<IBookAppService, BookDto, Guid, PagedAndSortedResultRequestDto, CreateUpdateBookDto>\n\n<Card>\n    <CardHeader>\n        <Row>\n            <Column>\n                <h2>@L[\"Books\"]</h2>\n            </Column>\n            <Column TextAlignment=\"TextAlignment.End\">\n                @if (HasCreatePermission)\n                {\n                    <Button Color=\"Color.Primary\" Clicked=\"OpenCreateModalAsync\">\n                        @L[\"NewBook\"]\n                    </Button>\n                }\n            </Column>\n        </Row>\n    </CardHeader>\n    <CardBody>\n        <DataGrid TItem=\"BookDto\"\n                  Data=\"Entities\"\n                  ReadData=\"OnDataGridReadAsync\"\n                  TotalItems=\"TotalCount\"\n                  ShowPager=\"true\"\n                  PageSize=\"PageSize\">\n            <DataGridColumns>\n                <DataGridColumn Field=\"@nameof(BookDto.Name)\" Caption=\"@L[\"Name\"]\" />\n                <DataGridColumn Field=\"@nameof(BookDto.Price)\" Caption=\"@L[\"Price\"]\" />\n                <DataGridEntityActionsColumn TItem=\"BookDto\">\n                    <DisplayTemplate>\n                        <EntityActions TItem=\"BookDto\">\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Edit\"]\"\n                                          Visible=\"HasUpdatePermission\"\n                                          Clicked=\"() => OpenEditModalAsync(context)\" />\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Delete\"]\"\n                                          Visible=\"HasDeletePermission\"\n                                          Clicked=\"() => DeleteEntityAsync(context)\"\n                                          ConfirmationMessage=\"() => GetDeleteConfirmationMessage(context)\" />\n                        </EntityActions>\n                    </DisplayTemplate>\n                </DataGridEntityActionsColumn>\n            </DataGridColumns>\n        </DataGrid>\n    </CardBody>\n</Card>\n```\n\n## Localization\n```razor\n@* Using L property from base class *@\n<h1>@L[\"PageTitle\"]</h1>\n\n@* With parameters *@\n<p>@L[\"WelcomeMessage\", CurrentUser.UserName]</p>\n```\n\n## Authorization\n```razor\n@* Check permission before rendering *@\n@if (await AuthorizationService.IsGrantedAsync(\"MyPermission\"))\n{\n    <Button>Admin Action</Button>\n}\n\n@* Using policy-based authorization *@\n<AuthorizeView Policy=\"MyPolicy\">\n    <Authorized>\n        <p>You have access!</p>\n    </Authorized>\n</AuthorizeView>\n```\n\n## Navigation & Menu\nConfigure in `*MenuContributor.cs`:\n\n```csharp\npublic class MyMenuContributor : IMenuContributor\n{\n    public async Task ConfigureMenuAsync(MenuConfigurationContext context)\n    {\n        if (context.Menu.Name == StandardMenus.Main)\n        {\n            var bookMenu = new ApplicationMenuItem(\n                \"Books\",\n                l[\"Menu:Books\"],\n                \"/books\",\n                icon: \"fa fa-book\"\n            );\n\n            if (await context.IsGrantedAsync(MyPermissions.Books.Default))\n            {\n                context.Menu.AddItem(bookMenu);\n            }\n        }\n    }\n}\n```\n\n## Notifications & Messages\n```csharp\n// Success message\nawait Message.Success(L[\"BookCreatedSuccessfully\"]);\n\n// Confirmation dialog\nif (await Message.Confirm(L[\"AreYouSure\"]))\n{\n    // User confirmed\n}\n\n// Toast notification\nawait Notify.Success(L[\"OperationCompleted\"]);\n```\n\n## Forms & Validation\n```razor\n<Form @ref=\"CreateForm\">\n    <Validations @ref=\"CreateValidationsRef\" Model=\"@NewEntity\" ValidateOnLoad=\"false\">\n        <Validation MessageLocalizer=\"@LH.Localize\">\n            <Field>\n                <FieldLabel>@L[\"Name\"]</FieldLabel>\n                <TextEdit @bind-Text=\"@NewEntity.Name\">\n                    <Feedback>\n                        <ValidationError />\n                    </Feedback>\n                </TextEdit>\n            </Field>\n        </Validation>\n    </Validations>\n</Form>\n```\n\n## JavaScript Interop\n```csharp\n@inject IJSRuntime JsRuntime\n\n@code {\n    private async Task CallJavaScript()\n    {\n        await JsRuntime.InvokeVoidAsync(\"myFunction\", arg1, arg2);\n        var result = await JsRuntime.InvokeAsync<string>(\"myFunctionWithReturn\");\n    }\n}\n```\n\n## State Management\n```csharp\n// Inject service proxy from HttpApi.Client\n@inject IBookAppService BookAppService\n\n@code {\n    private List<BookDto> Books { get; set; }\n\n    protected override async Task OnInitializedAsync()\n    {\n        var result = await BookAppService.GetListAsync(new PagedAndSortedResultRequestDto());\n        Books = result.Items.ToList();\n    }\n}\n```\n\n## Code-Behind Pattern\n**Books.razor:**\n```razor\n@page \"/books\"\n@inherits BooksBase\n```\n\n**Books.razor.cs:**\n```csharp\npublic partial class Books : BooksBase\n{\n    // Component logic here\n}\n```\n\n**BooksBase.cs:**\n```csharp\npublic abstract class BooksBase : AbpComponentBase\n{\n    [Inject]\n    protected IBookAppService BookAppService { get; set; }\n}\n```\n","frontmatter":{"name":"abp-blazor","description":"ABP Blazor UI patterns - AbpComponentBase, AbpCrudPageBase, DataGrid, IMenuContributor, Message/Notify, Validations, JavaScript interop. Use when building or reviewing Blazor Server or WebAssembly UI components in ABP projects."},"isInternal":false,"tokens":1187,"sizeBytes":5495},{"name":"SKILL.md","path":".agents/skills/abp-cli/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-cli/SKILL.md","title":"abp-cli","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-cli\ndescription: ABP CLI commands - generate-proxy, install-libs, add-package-ref, new-module, install-module, abp update, abp clean, abp suite generate. Use when the user asks how to run ABP CLI commands, generate proxies, install libraries, or use ABP Suite.\n---\n\n# ABP CLI Commands\n\n> **Full documentation**: https://abp.io/docs/latest/cli\n> Use `abp help [command]` for detailed options.\n\n## Generate Client Proxies\n\n```bash\n# URL flag: `-u` (short) or `--url` (long). Use whichever your team prefers, but keep it consistent.\n#\n# Angular (host must be running)\nabp generate-proxy -t ng\n\n# C# client proxies\nabp generate-proxy -t csharp -u https://localhost:44300\n\n# Integration services only (microservices)\nabp generate-proxy -t csharp -u https://localhost:44300 -st integration\n\n# JavaScript\nabp generate-proxy -t js -u https://localhost:44300\n```\n\n## Install Client-Side Libraries\n\n```bash\n# Install NPM packages for MVC/Blazor Server\nabp install-libs\n```\n\n## Add Package Reference\n\n```bash\n# Add project reference with module dependency\nabp add-package-ref Acme.BookStore.Domain\nabp add-package-ref Acme.BookStore.Domain -t Acme.BookStore.Application\n```\n\n## Module Operations\n\n```bash\n# Create new module in solution\nabp new-module Acme.OrderManagement -t module:ddd\n\n# Install published module\nabp install-module Volo.Blogging\n\n# Add ABP NuGet package\nabp add-package Volo.Abp.Caching.StackExchangeRedis\n```\n\n## Update & Clean\n\n```bash\nabp update                  # Update all ABP packages\nabp update --version 8.0.0  # Specific version\nabp clean                   # Delete bin/obj folders\n```\n\n## ABP Suite (CRUD Generation)\n\nGenerate CRUD pages from entity JSON (created via Suite UI):\n\n```bash\nabp suite generate --entity .suite/entities/Book.json --solution ./Acme.BookStore.sln\n```\n\n> **Note**: Entity JSON files are created when you generate an entity via ABP Suite UI. They are stored in `.suite/entities/` folder.\n> **Suite docs**: https://abp.io/docs/latest/suite\n\n## Quick Reference\n\n| Task | Command |\n|------|---------|\n| Angular proxies | `abp generate-proxy -t ng` |\n| C# proxies | `abp generate-proxy -t csharp -u URL` |\n| Install JS libs | `abp install-libs` |\n| Add reference | `abp add-package-ref PackageName` |\n| Create module | `abp new-module ModuleName` |\n| Install module | `abp install-module ModuleName` |\n| Update packages | `abp update` |\n| Clean solution | `abp clean` |\n| Suite CRUD | `abp suite generate -e entity.json -s solution.sln` |\n| Get help | `abp help [command]` |\n","frontmatter":{"name":"abp-cli","description":"ABP CLI commands - generate-proxy, install-libs, add-package-ref, new-module, install-module, abp update, abp clean, abp suite generate. Use when the user asks how to run ABP CLI commands, generate proxies, install libraries, or use ABP Suite."},"isInternal":false,"tokens":669,"sizeBytes":2529},{"name":"SKILL.md","path":".agents/skills/abp-core/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-core/SKILL.md","title":"abp-core","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-core\ndescription: Core ABP Framework conventions - module system, DI registration, base classes (ApplicationService, DomainService), IClock, BusinessException, localization, async patterns. Use when working on any ABP project, asking about ABP fundamentals, or unsure which skill applies.\n---\n\n# ABP Core Conventions\n\n> **Documentation**: https://abp.io/docs/latest\n> **API Reference**: https://abp.io/docs/api/\n\n## Key Rules\n\n- Use `IClock` / `Clock.Now` instead of `DateTime.Now` / `DateTime.UtcNow`\n- Use `ITransientDependency` / `ISingletonDependency` instead of `AddScoped/AddTransient/AddSingleton`\n- Use `IRepository<T>` instead of injecting `DbContext` directly\n- Check base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) before injecting services\n- Use `BusinessException` with namespaced error codes for domain rule violations\n\n## Module System\nEvery ABP application/module has a module class that configures services:\n\n```csharp\n[DependsOn(\n    typeof(AbpDddDomainModule),\n    typeof(AbpEntityFrameworkCoreModule)\n)]\npublic class MyAppModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        // Service registration and configuration\n    }\n}\n```\n\n> **Note**: Middleware configuration (`OnApplicationInitialization`) should only be done in the final host application, not in reusable modules.\n\n## Dependency Injection Conventions\n\n### Automatic Registration\nABP automatically registers services implementing marker interfaces:\n- `ITransientDependency` → Transient lifetime\n- `ISingletonDependency` → Singleton lifetime\n- `IScopedDependency` → Scoped lifetime\n\nClasses inheriting from `ApplicationService`, `DomainService`, `AbpController` are also auto-registered.\n\n### Repository Usage\nYou can use the generic `IRepository<TEntity, TKey>` for simple CRUD operations. Define custom repository interfaces only when you need custom query methods:\n\n```csharp\n// Simple CRUD - Generic repository is fine\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // ✅ OK for simple operations\n}\n\n// Custom queries needed - Define custom interface\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name); // Custom query\n}\n\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ Use custom when needed\n}\n```\n\n### Exposing Services\n```csharp\n[ExposeServices(typeof(IMyService))]\npublic class MyService : IMyService, ITransientDependency { }\n```\n\n## Important Base Classes\n\n| Base Class | Purpose |\n|------------|---------|\n| `Entity<TKey>` | Basic entity with ID |\n| `AggregateRoot<TKey>` | DDD aggregate root |\n| `DomainService` | Domain business logic |\n| `ApplicationService` | Use case orchestration |\n| `AbpController` | REST API controller |\n\nABP base classes already inject commonly used services as properties. Before injecting a service, check if it's already available:\n\n| Property | Available In | Description |\n|----------|--------------|-------------|\n| `GuidGenerator` | All base classes | Generate GUIDs |\n| `Clock` | All base classes | Current time (use instead of `DateTime`) |\n| `CurrentUser` | All base classes | Authenticated user info |\n| `CurrentTenant` | All base classes | Multi-tenancy context |\n| `L` (StringLocalizer) | `ApplicationService`, `AbpController` | Localization |\n| `AuthorizationService` | `ApplicationService`, `AbpController` | Permission checks |\n| `FeatureChecker` | `ApplicationService`, `AbpController` | Feature availability |\n| `DataFilter` | All base classes | Data filtering (soft-delete, tenant) |\n| `UnitOfWorkManager` | `ApplicationService`, `DomainService` | Unit of work management |\n| `LoggerFactory` | All base classes | Create loggers |\n| `Logger` | All base classes | Logging (auto-created) |\n| `LazyServiceProvider` | All base classes | Lazy service resolution |\n\n**Useful methods from base classes:**\n- `CheckPolicyAsync()` - Check permission and throw if not granted\n- `IsGrantedAsync()` - Check permission without throwing\n\n## Async Best Practices\n- Use async all the way - never use `.Result` or `.Wait()`\n- All async methods should end with `Async` suffix\n- ABP automatically handles `CancellationToken` in most cases (e.g., from `HttpContext.RequestAborted`)\n- Only pass `CancellationToken` explicitly when implementing custom cancellation logic\n\n## Time Handling\nNever use `DateTime.Now` or `DateTime.UtcNow` directly. Use ABP's `IClock` service:\n\n```csharp\n// In classes inheriting from base classes (ApplicationService, DomainService, etc.)\npublic class BookAppService : ApplicationService\n{\n    public void DoSomething()\n    {\n        var now = Clock.Now; // ✅ Already available as property\n    }\n}\n\n// In other services - inject IClock\npublic class MyService : ITransientDependency\n{\n    private readonly IClock _clock;\n\n    public MyService(IClock clock) => _clock = clock;\n\n    public void DoSomething()\n    {\n        var now = _clock.Now; // ✅ Correct\n        // var now = DateTime.Now; // ❌ Wrong - not testable, ignores timezone settings\n    }\n}\n```\n\n> **Tip**: Before injecting a service, check if it's already available as a property in your base classes.\n\n## Business Exceptions\nUse `BusinessException` for domain rule violations with namespaced error codes:\n\n```csharp\nthrow new BusinessException(\"MyModule:BookNameAlreadyExists\")\n    .WithData(\"Name\", bookName);\n```\n\nConfigure localization mapping:\n```csharp\nConfigure<AbpExceptionLocalizationOptions>(options =>\n{\n    options.MapCodeNamespace(\"MyModule\", typeof(MyModuleResource));\n});\n```\n\n## Localization\n- In base classes (`ApplicationService`, `AbpController`, etc.): Use `L[\"Key\"]` - this is the `IStringLocalizer` property\n- In other services: Inject `IStringLocalizer<TResource>`\n- Always localize user-facing messages and exceptions\n\n**Localization file location**: `*.Domain.Shared/Localization/{ResourceName}/{lang}.json`\n\n```json\n// Example: MyProject.Domain.Shared/Localization/MyProject/en.json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"Menu:Home\": \"Home\",\n    \"Welcome\": \"Welcome\",\n    \"BookName\": \"Book Name\"\n  }\n}\n```\n\n## ❌ Never Use (ABP Anti-Patterns)\n\n| Don't Use | Use Instead |\n|-----------|-------------|\n| Minimal APIs | ABP Controllers or Auto API Controllers |\n| MediatR | Application Services |\n| `DbContext` directly in App Services | `IRepository<T>` |\n| `AddScoped/AddTransient/AddSingleton` | `ITransientDependency`, `ISingletonDependency` |\n| `DateTime.Now` | `IClock` / `Clock.Now` |\n| Custom UnitOfWork | ABP's `IUnitOfWorkManager` |\n| Manual HTTP calls from UI | ABP client proxies (`generate-proxy`) |\n| Hardcoded role checks | Permission-based authorization |\n| Business logic in Controllers | Application Services |\n","frontmatter":{"name":"abp-core","description":"Core ABP Framework conventions - module system, DI registration, base classes (ApplicationService, DomainService), IClock, BusinessException, localization, async patterns. Use when working on any ABP project, asking about ABP fundamentals, or unsure which skill applies."},"isInternal":false,"tokens":1543,"sizeBytes":6851},{"name":"SKILL.md","path":".agents/skills/abp-ddd/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-ddd/SKILL.md","title":"abp-ddd","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-ddd\ndescription: ABP DDD patterns - Entities, Aggregate Roots, value objects, Repositories, Domain Services, Domain Events, Specifications. Use when designing domain layer, creating entities, repositories, or domain services in ABP projects.\n---\n\n# ABP DDD Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design\n\n## Anti-Patterns to Avoid\n\n- **Anemic entities**: public setters with no behavior — use private setters + methods that enforce invariants\n- **Repository for child entities**: only aggregate roots get repositories — access child entities through their root\n- **Generating GUID in entity constructor**: use `IGuidGenerator` from outside and pass `id` parameter\n- **Navigation properties to other aggregates**: reference by `Id` only, never add full navigation properties across aggregates\n- **Domain service depending on current user**: accept values from the application layer instead\n\n## Rich Domain Model vs Anemic Domain Model\n\nABP promotes **Rich Domain Model** pattern where entities contain both data AND behavior:\n\n| Anemic (Anti-pattern) | Rich (Recommended) |\n|----------------------|-------------------|\n| Entity = data only | Entity = data + behavior |\n| Logic in services | Logic in entity methods |\n| Public setters | Private setters with methods |\n| No validation in entity | Entity enforces invariants |\n\n**Encapsulation is key**: Protect entity state by using private setters and exposing behavior through methods.\n\n## Entities\n\n### Entity Example (Rich Model)\n```csharp\npublic class OrderLine : Entity<Guid>\n{\n    public Guid ProductId { get; private set; }\n    public int Count { get; private set; }\n    public decimal Price { get; private set; }\n\n    protected OrderLine() { } // For ORM\n\n    internal OrderLine(Guid id, Guid productId, int count, decimal price) : base(id)\n    {\n        ProductId = productId;\n        SetCount(count); // Validates through method\n        Price = price;\n    }\n\n    public void SetCount(int count)\n    {\n        if (count <= 0)\n            throw new BusinessException(\"Orders:InvalidCount\");\n        Count = count;\n    }\n}\n```\n\n## Aggregate Roots\n\nAggregate roots are consistency boundaries that:\n- Own their child entities\n- Enforce business rules\n- Publish domain events\n\n```csharp\npublic class Order : AggregateRoot<Guid>\n{\n    public string OrderNumber { get; private set; }\n    public Guid CustomerId { get; private set; }\n    public OrderStatus Status { get; private set; }\n    public ICollection<OrderLine> Lines { get; private set; }\n\n    protected Order() { } // For ORM\n\n    public Order(Guid id, string orderNumber, Guid customerId) : base(id)\n    {\n        OrderNumber = Check.NotNullOrWhiteSpace(orderNumber, nameof(orderNumber));\n        CustomerId = customerId;\n        Status = OrderStatus.Created;\n        Lines = new List<OrderLine>();\n    }\n\n    public void AddLine(Guid lineId, Guid productId, int count, decimal price)\n    {\n        // Business rule: Can only add lines to created orders\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotModifyOrder\");\n\n        Lines.Add(new OrderLine(lineId, productId, count, price));\n    }\n\n    public void Complete()\n    {\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotCompleteOrder\");\n\n        Status = OrderStatus.Completed;\n\n        // Publish events for side effects\n        AddLocalEvent(new OrderCompletedEvent(Id));           // Same transaction\n        AddDistributedEvent(new OrderCompletedEto { OrderId = Id }); // Cross-service\n    }\n}\n```\n\n### Domain Events\n- `AddLocalEvent()` - Handled within same transaction, can access full entity\n- `AddDistributedEvent()` - Handled asynchronously, use ETOs (Event Transfer Objects)\n\n### Entity Best Practices\n- **Encapsulation**: Private setters, public methods that enforce rules\n- **Primary constructor**: Enforce invariants, accept `id` parameter\n- **Protected parameterless constructor**: Required for ORM\n- **Initialize collections**: In primary constructor\n- **Virtual members**: For ORM proxy compatibility\n- **Reference by Id**: Don't add navigation properties to other aggregates\n- **Don't generate GUID in constructor**: Use `IGuidGenerator` externally\n\n## Repository Pattern\n\n### When to Use Custom Repository\n- **Generic repository** (`IRepository<T, TKey>`): Sufficient for simple CRUD operations\n- **Custom repository**: Only when you need custom query methods\n\n### Interface (Domain Layer)\n```csharp\n// Define custom interface only when custom queries are needed\npublic interface IOrderRepository : IRepository<Order, Guid>\n{\n    Task<Order> FindByOrderNumberAsync(string orderNumber, bool includeDetails = false);\n    Task<List<Order>> GetListByCustomerAsync(Guid customerId, bool includeDetails = false);\n}\n```\n\n### Repository Best Practices\n- **One repository per aggregate root only** - Never create repositories for child entities\n- Child entities must be accessed/modified only through their aggregate root\n- Creating repositories for child entities breaks data consistency (bypasses aggregate root's business rules)\n- In ABP, use `AddDefaultRepositories()` without `includeAllEntities: true` to enforce this\n- Define custom repository only when custom queries are needed\n- ABP handles `CancellationToken` automatically; add parameter only for explicit cancellation control\n- Single entity methods: `includeDetails = true` by default\n- List methods: `includeDetails = false` by default\n- Don't return projection classes\n- Interface in Domain, implementation in data layer\n\n```csharp\n// ✅ Correct: Repository for aggregate root (Order)\npublic interface IOrderRepository : IRepository<Order, Guid> { }\n\n// ❌ Wrong: Repository for child entity (OrderLine)\n// OrderLine should only be accessed through Order aggregate\npublic interface IOrderLineRepository : IRepository<OrderLine, Guid> { } // Don't do this!\n```\n\n## Domain Services\n\nUse domain services for business logic that:\n- Spans multiple aggregates\n- Requires repository queries to enforce rules\n\n```csharp\npublic class OrderManager : DomainService\n{\n    private readonly IOrderRepository _orderRepository;\n    private readonly IProductRepository _productRepository;\n\n    public OrderManager(\n        IOrderRepository orderRepository,\n        IProductRepository productRepository)\n    {\n        _orderRepository = orderRepository;\n        _productRepository = productRepository;\n    }\n\n    public async Task<Order> CreateAsync(string orderNumber, Guid customerId)\n    {\n        // Business rule: Order number must be unique\n        var existing = await _orderRepository.FindByOrderNumberAsync(orderNumber);\n        if (existing != null)\n        {\n            throw new BusinessException(\"Orders:OrderNumberAlreadyExists\")\n                .WithData(\"OrderNumber\", orderNumber);\n        }\n\n        return new Order(GuidGenerator.Create(), orderNumber, customerId);\n    }\n\n    public async Task AddProductAsync(Order order, Guid productId, int count)\n    {\n        var product = await _productRepository.GetAsync(productId);\n        order.AddLine(productId, count, product.Price);\n    }\n}\n```\n\n### Domain Service Best Practices\n- Use `*Manager` suffix naming\n- No interface by default (create only if needed)\n- Accept/return domain objects, not DTOs\n- Don't depend on authenticated user - pass values from application layer\n- Use base class properties (`GuidGenerator`, `Clock`) instead of injecting these services\n\n## Domain Events\n\n### Local Events\n```csharp\n// In aggregate\nAddLocalEvent(new OrderCompletedEvent(Id));\n\n// Handler\npublic class OrderCompletedEventHandler : ILocalEventHandler<OrderCompletedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCompletedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n```\n\n### Distributed Events (ETO)\nFor inter-module/microservice communication:\n```csharp\n// In Domain.Shared\n[EventName(\"Orders.OrderCompleted\")]\npublic class OrderCompletedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n```\n\n## Specifications\n\nReusable query conditions:\n```csharp\npublic class CompletedOrdersSpec : Specification<Order>\n{\n    public override Expression<Func<Order, bool>> ToExpression()\n    {\n        return o => o.Status == OrderStatus.Completed;\n    }\n}\n\n// Usage\nvar orders = await _orderRepository.GetListAsync(new CompletedOrdersSpec());\n```\n","frontmatter":{"name":"abp-ddd","description":"ABP DDD patterns - Entities, Aggregate Roots, value objects, Repositories, Domain Services, Domain Events, Specifications. Use when designing domain layer, creating entities, repositories, or domain services in ABP projects."},"isInternal":false,"tokens":1757,"sizeBytes":8476},{"name":"SKILL.md","path":".agents/skills/abp-dependency-rules/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-dependency-rules/SKILL.md","title":"abp-dependency-rules","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-dependency-rules\ndescription: ABP project layer dependency rules - which projects can reference which, domain/application/infrastructure separation, cross-layer violations to avoid. Use when reviewing project structure, adding new project references, or checking if a dependency direction is correct.\n---\n\n# ABP Dependency Rules\n\n## Core Principles (All Templates)\n\nThese principles apply regardless of solution structure:\n\n1. **Domain logic never depends on infrastructure** (no DbContext in domain/application)\n2. **Use abstractions** (interfaces) for dependencies\n3. **Higher layers depend on lower layers**, never the reverse\n4. **Data access through repositories**, not direct DbContext\n\n## Layered Template Structure\n\n> **Note**: This section applies to layered templates (app, module). Single-layer and microservice templates have different structures.\n\n```\nDomain.Shared    → Constants, enums, localization keys\n       ↑\n    Domain       → Entities, repository interfaces, domain services\n       ↑\nApplication.Contracts → App service interfaces, DTOs\n       ↑\n  Application    → App service implementations\n       ↑\n   HttpApi       → REST controllers (optional)\n       ↑\n     Host        → Final application with DI and middleware\n```\n\n### Layered Dependency Direction\n\n| Project | Can Reference | Referenced By |\n|---------|---------------|---------------|\n| Domain.Shared | Nothing | All |\n| Domain | Domain.Shared | Application, Data layer |\n| Application.Contracts | Domain.Shared | Application, HttpApi, Clients |\n| Application | Domain, Contracts | Host |\n| EntityFrameworkCore/MongoDB | Domain | Host only |\n| HttpApi | Contracts only | Host |\n\n## Critical Rules\n\n### ❌ Never Do\n```csharp\n// Application layer accessing DbContext directly\npublic class BookAppService : ApplicationService\n{\n    private readonly MyDbContext _dbContext; // ❌ WRONG\n}\n\n// Domain depending on application layer\npublic class BookManager : DomainService\n{\n    private readonly IBookAppService _appService; // ❌ WRONG\n}\n\n// HttpApi depending on Application implementation\npublic class BookController : AbpController\n{\n    private readonly BookAppService _bookAppService; // ❌ WRONG - Use interface\n}\n```\n\n### ✅ Always Do\n```csharp\n// Application layer using repository abstraction\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// Domain service using domain abstractions\npublic class BookManager : DomainService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// HttpApi depending on contracts only\npublic class BookController : AbpController\n{\n    private readonly IBookAppService _bookAppService; // ✅ CORRECT\n}\n```\n\n## Repository Pattern Enforcement\n\n### Interface Location\n```csharp\n// In Domain project\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### Implementation Location\n```csharp\n// In EntityFrameworkCore project\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n\n// In MongoDB project\npublic class BookRepository : MongoDbRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n```\n\n## Multi-Application Scenarios\n\nWhen you have multiple applications (e.g., Admin + Public API):\n\n### Vertical Separation\n```\nMyProject.Admin.Application      - Admin-specific services\nMyProject.Public.Application     - Public-specific services\nMyProject.Domain                 - Shared domain (both reference this)\n```\n\n### Rules\n- Admin and Public application layers **MUST NOT** reference each other\n- Share domain logic, not application logic\n- Each vertical can have its own DTOs even if similar\n\n## Enforcement Checklist (Layered Templates)\n\nWhen adding a new feature:\n1. **Entity changes?** → Domain project\n2. **Constants/enums?** → Domain.Shared project\n3. **Repository interface?** → Domain project (only if custom queries needed)\n4. **Repository implementation?** → EntityFrameworkCore/MongoDB project\n5. **DTOs and service interface?** → Application.Contracts project\n6. **Service implementation?** → Application project\n7. **API endpoint?** → HttpApi project (if not using auto API controllers)\n\n## Common Violations to Watch\n\n| Violation | Impact | Fix |\n|-----------|--------|-----|\n| DbContext in Application | Breaks DB independence | Use repository |\n| Entity in DTO | Exposes internals | Map to DTO |\n| IQueryable in interface | Breaks abstraction | Return concrete types |\n| Cross-module app service call | Tight coupling | Use events or domain |\n","frontmatter":{"name":"abp-dependency-rules","description":"ABP project layer dependency rules - which projects can reference which, domain/application/infrastructure separation, cross-layer violations to avoid. Use when reviewing project structure, adding new project references, or checking if a dependency direction is correct."},"isInternal":false,"tokens":979,"sizeBytes":4675},{"name":"SKILL.md","path":".agents/skills/abp-development-flow/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-development-flow/SKILL.md","title":"abp-development-flow","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-development-flow\ndescription: ABP development workflow - step-by-step guide for adding new entities, migrations, application services, localization, permissions, and tests. Use when adding new features or entities to an ABP project.\n---\n\n# ABP Development Workflow\n\n> **Tutorials**: https://abp.io/docs/latest/tutorials\n\n## Adding a New Entity (Full Flow)\n\n### 1. Domain Layer\nCreate entity (location varies by template: `*.Domain/Entities/` for layered, `Entities/` for single-layer/microservice):\n\n```csharp\npublic class Book : AggregateRoot<Guid>\n{\n    public string Name { get; private set; }\n    public decimal Price { get; private set; }\n    public Guid AuthorId { get; private set; }\n\n    protected Book() { }\n\n    public Book(Guid id, string name, decimal price, Guid authorId) : base(id)\n    {\n        Name = Check.NotNullOrWhiteSpace(name, nameof(name));\n        SetPrice(price);\n        AuthorId = authorId;\n    }\n\n    public void SetPrice(decimal price)\n    {\n        Price = Check.Range(price, nameof(price), 0, 9999);\n    }\n}\n```\n\n### 2. Domain.Shared\nAdd constants and enums in `*.Domain.Shared/`:\n\n```csharp\npublic static class BookConsts\n{\n    public const int MaxNameLength = 128;\n}\n\npublic enum BookType\n{\n    Novel,\n    Science,\n    Biography\n}\n```\n\n### 3. Repository Interface (Optional)\nDefine custom repository in `*.Domain/` only if you need custom query methods. For simple CRUD, use generic `IRepository<Book, Guid>` directly:\n\n```csharp\n// Only if custom queries are needed\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### 4. EF Core Configuration\nIn `*.EntityFrameworkCore/`:\n\n**DbContext:**\n```csharp\npublic DbSet<Book> Books { get; set; }\n```\n\n**OnModelCreating:**\n```csharp\nbuilder.Entity<Book>(b =>\n{\n    b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n    b.ConfigureByConvention();\n    b.Property(x => x.Name).IsRequired().HasMaxLength(BookConsts.MaxNameLength);\n    b.HasIndex(x => x.Name);\n});\n```\n\n**Repository Implementation (only if custom interface defined):**\n```csharp\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(string name)\n    {\n        return await (await GetDbSetAsync())\n            .FirstOrDefaultAsync(b => b.Name == name);\n    }\n}\n```\n\n### 5. Run Migration\nSee `abp-ef-core` skill for migration commands. Recommended: use `DbMigrator` project to apply migrations and seed data.\n\n### 6. Application.Contracts\nCreate DTOs and service interface:\n\n```csharp\n// DTOs\npublic class BookDto : EntityDto<Guid>\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n    public Guid AuthorId { get; set; }\n}\n\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(BookConsts.MaxNameLength)]\n    public string Name { get; set; }\n\n    [Range(0, 9999)]\n    public decimal Price { get; set; }\n\n    [Required]\n    public Guid AuthorId { get; set; }\n}\n\n// Service Interface\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookDto>> GetListAsync(PagedAndSortedResultRequestDto input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n}\n```\n\n### 7. Object Mapping (Mapperly / AutoMapper)\nABP supports both Mapperly and AutoMapper. Prefer the provider already used in the solution.\n\nIf the solution uses **Mapperly**, create a mapper in the Application project:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\ncontext.Services.AddSingleton<BookMapper>();\n```\n\n### 8. Application Service\nImplement service (using generic repository - use `IBookRepository` if you defined custom interface in step 3):\n\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // Or IBookRepository\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IRepository<Book, Guid> bookRepository,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(MyProjectPermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = new Book(\n            GuidGenerator.Create(),\n            input.Name,\n            input.Price,\n            input.AuthorId\n        );\n\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n### 9. Add Localization\nIn `*.Domain.Shared/Localization/*/en.json`:\n\n```json\n{\n  \"Book\": \"Book\",\n  \"Books\": \"Books\",\n  \"BookName\": \"Name\",\n  \"BookPrice\": \"Price\"\n}\n```\n\n### 10. Add Permissions (if needed)\n```csharp\npublic static class MyProjectPermissions\n{\n    public static class Books\n    {\n        public const string Default = \"MyProject.Books\";\n        public const string Create = Default + \".Create\";\n    }\n}\n```\n\n### 11. Add Tests\n```csharp\npublic class BookAppService_Tests : MyProjectApplicationTestBase\n{\n    private readonly IBookAppService _bookAppService;\n\n    public BookAppService_Tests()\n    {\n        _bookAppService = GetRequiredService<IBookAppService>();\n    }\n\n    [Fact]\n    public async Task Should_Create_Book()\n    {\n        var result = await _bookAppService.CreateAsync(new CreateBookDto\n        {\n            Name = \"Test Book\",\n            Price = 19.99m\n        });\n\n        result.Id.ShouldNotBe(Guid.Empty);\n        result.Name.ShouldBe(\"Test Book\");\n    }\n}\n```\n\n## Checklist for New Features\n\n- [ ] Entity created with proper constructors\n- [ ] Constants in Domain.Shared\n- [ ] Custom repository interface in Domain (only if custom queries needed)\n- [ ] EF Core configuration added\n- [ ] Custom repository implementation (only if interface defined)\n- [ ] Migration generated and applied (use DbMigrator)\n- [ ] Mapperly mapper created and registered\n- [ ] DTOs created in Application.Contracts\n- [ ] Service interface defined\n- [ ] Service implementation with authorization\n- [ ] Localization keys added\n- [ ] Permissions defined (if applicable)\n- [ ] Tests written\n","frontmatter":{"name":"abp-development-flow","description":"ABP development workflow - step-by-step guide for adding new entities, migrations, application services, localization, permissions, and tests. Use when adding new features or entities to an ABP project."},"isInternal":false,"tokens":1546,"sizeBytes":6561},{"name":"SKILL.md","path":".agents/skills/abp-ef-core/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-ef-core/SKILL.md","title":"abp-ef-core","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-ef-core\ndescription: ABP Entity Framework Core - DbContext, entity configuration, EfCoreRepository implementation, migrations (dotnet ef migrations add), data seeding. Use when working in EntityFrameworkCore projects, adding migrations, or implementing EF Core repositories.\n---\n\n# ABP Entity Framework Core\n\n> **Docs**: https://abp.io/docs/latest/framework/data/entity-framework-core\n\n## Never Do\n\n| Don't | Do Instead |\n|-------|-----------|\n| Skip `b.ConfigureByConvention()` | Always call it first in entity config |\n| `AddDefaultRepositories(includeAllEntities: true)` | Use `AddDefaultRepositories()` only for aggregate roots |\n| Inject `DbContext` in application/domain services | Use `IRepository<T>` or custom repository interface |\n| Use `DbContext` directly outside the EF Core project | Access via `GetDbContextAsync()` inside repository only |\n\n## DbContext Configuration\n\n```csharp\n[ConnectionStringName(\"Default\")]\npublic class MyProjectDbContext : AbpDbContext<MyProjectDbContext>\n{\n    public DbSet<Book> Books { get; set; }\n    public DbSet<Author> Authors { get; set; }\n\n    public MyProjectDbContext(DbContextOptions<MyProjectDbContext> options)\n        : base(options)\n    {\n    }\n\n    protected override void OnModelCreating(ModelBuilder builder)\n    {\n        base.OnModelCreating(builder);\n\n        // Configure all entities\n        builder.ConfigureMyProject();\n    }\n}\n```\n\n## Entity Configuration\n\n```csharp\npublic static class MyProjectDbContextModelCreatingExtensions\n{\n    public static void ConfigureMyProject(this ModelBuilder builder)\n    {\n        Check.NotNull(builder, nameof(builder));\n\n        builder.Entity<Book>(b =>\n        {\n            b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n            b.ConfigureByConvention(); // ABP conventions (audit, soft-delete, etc.)\n\n            // Property configurations\n            b.Property(x => x.Name)\n                .IsRequired()\n                .HasMaxLength(BookConsts.MaxNameLength);\n\n            b.Property(x => x.Price)\n                .HasColumnType(\"decimal(18,2)\");\n\n            // Indexes\n            b.HasIndex(x => x.Name);\n\n            // Relationships\n            b.HasOne<Author>()\n                .WithMany()\n                .HasForeignKey(x => x.AuthorId)\n                .OnDelete(DeleteBehavior.Restrict);\n        });\n    }\n}\n```\n\n## Repository Implementation\n\n```csharp\npublic class BookRepository : EfCoreRepository<MyProjectDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyProjectDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(\n        string name,\n        bool includeDetails = true,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .FirstOrDefaultAsync(\n                b => b.Name == name,\n                GetCancellationToken(cancellationToken));\n    }\n\n    public async Task<List<Book>> GetListByAuthorAsync(\n        Guid authorId,\n        bool includeDetails = false,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .Where(b => b.AuthorId == authorId)\n            .ToListAsync(GetCancellationToken(cancellationToken));\n    }\n\n    public override async Task<IQueryable<Book>> WithDetailsAsync()\n    {\n        return (await GetQueryableAsync())\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Extension Method for Include\n```csharp\npublic static class BookEfCoreQueryableExtensions\n{\n    public static IQueryable<Book> IncludeDetails(\n        this IQueryable<Book> queryable,\n        bool include = true)\n    {\n        if (!include)\n        {\n            return queryable;\n        }\n\n        return queryable\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Migration Commands\n\n```bash\n# Navigate to EF Core project\ncd src/MyProject.EntityFrameworkCore\n\n# Add migration\ndotnet ef migrations add MigrationName\n\n# Apply migration (choose one):\ndotnet run --project ../MyProject.DbMigrator   # Recommended - also seeds data\ndotnet ef database update  # EF Core command only\n\n# Remove last migration (if not applied)\ndotnet ef migrations remove\n\n# Generate SQL script\ndotnet ef migrations script\n```\n\n> **Note**: ABP templates include `IDesignTimeDbContextFactory` in the EF Core project, so `-s` (startup project) parameter is not needed.\n\n## Module Configuration\n\n```csharp\n[DependsOn(typeof(AbpEntityFrameworkCoreModule))]\npublic class MyProjectEntityFrameworkCoreModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        context.Services.AddAbpDbContext<MyProjectDbContext>(options =>\n        {\n            // Add default repositories for aggregate roots only (DDD best practice)\n            options.AddDefaultRepositories();\n            // ⚠️ Avoid includeAllEntities: true - it creates repositories for child entities,\n            // allowing them to be modified without going through the aggregate root,\n            // which breaks data consistency\n        });\n\n        Configure<AbpDbContextOptions>(options =>\n        {\n            options.UseSqlServer(); // or UseNpgsql(), UseMySql(), etc.\n        });\n    }\n}\n```\n\n## Best Practices\n\n### Repositories for Aggregate Roots Only\nDon't use `includeAllEntities: true` in `AddDefaultRepositories()`. This creates repositories for child entities, allowing direct modification without going through the aggregate root - breaking DDD data consistency rules.\n\n```csharp\n// ✅ Correct - Only aggregate roots get repositories\noptions.AddDefaultRepositories();\n\n// ❌ Avoid - Creates repositories for ALL entities including child entities\noptions.AddDefaultRepositories(includeAllEntities: true);\n```\n\n### Always Call ConfigureByConvention\n```csharp\nbuilder.Entity<MyEntity>(b =>\n{\n    b.ConfigureByConvention(); // Don't forget this!\n    // Other configurations...\n});\n```\n\n### Use Table Prefix\n```csharp\npublic static class MyProjectConsts\n{\n    public const string DbTablePrefix = \"App\";\n    public const string DbSchema = null; // Or \"myschema\"\n}\n```\n\n### Performance Tips\n- Add explicit indexes for frequently queried fields\n- Use `AsNoTracking()` for read-only queries\n- Avoid N+1 queries with `.Include()` or specifications\n- ABP handles cancellation automatically; use `GetCancellationToken(cancellationToken)` only in custom repository methods\n- Consider query splitting for complex queries with multiple collections\n\n### Accessing Raw DbContext\n```csharp\npublic async Task CustomOperationAsync()\n{\n    var dbContext = await GetDbContextAsync();\n\n    // Raw SQL\n    await dbContext.Database.ExecuteSqlRawAsync(\n        \"UPDATE Books SET IsPublished = 1 WHERE AuthorId = {0}\",\n        authorId\n    );\n}\n```\n\n## Data Seeding\n\n```csharp\npublic class MyProjectDataSeedContributor : IDataSeedContributor, ITransientDependency\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n    private readonly IGuidGenerator _guidGenerator;\n\n    public async Task SeedAsync(DataSeedContext context)\n    {\n        if (await _bookRepository.GetCountAsync() > 0)\n        {\n            return;\n        }\n\n        await _bookRepository.InsertAsync(\n            new Book(_guidGenerator.Create(), \"Sample Book\", 19.99m, Guid.Empty),\n            autoSave: true\n        );\n    }\n}\n```\n","frontmatter":{"name":"abp-ef-core","description":"ABP Entity Framework Core - DbContext, entity configuration, EfCoreRepository implementation, migrations (dotnet ef migrations add), data seeding. Use when working in EntityFrameworkCore projects, adding migrations, or implementing EF Core repositories."},"isInternal":false,"tokens":1546,"sizeBytes":7550},{"name":"SKILL.md","path":".agents/skills/abp-infrastructure/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-infrastructure/SKILL.md","title":"abp-infrastructure","category":"anthropic-skill","format":"markdown","content":"---\nname: abp-infrastructure\ndescription: ABP infrastructure services - ISettingProvider, IFeatureChecker, IDistributedCache, ILocalEventBus, IDistributedEventBus, IBackgroundJobManager, localization resource. Use when working with settings, feature flags, caching, event bus, or background jobs in ABP.\n---\n\n# ABP Infrastructure Services\n\n> **Docs**: https://abp.io/docs/latest/framework/infrastructure\n\n## Settings\n\n### Define Settings\n```csharp\npublic class MySettingDefinitionProvider : SettingDefinitionProvider\n{\n    public override void Define(ISettingDefinitionContext context)\n    {\n        context.Add(\n            new SettingDefinition(\"MyApp.MaxItemCount\", \"10\"),\n            new SettingDefinition(\"MyApp.EnableFeature\", \"false\"),\n            new SettingDefinition(\"MyApp.SecretKey\", isEncrypted: true)\n        );\n    }\n}\n```\n\n### Read Settings\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly ISettingProvider _settingProvider;\n\n    public async Task DoSomethingAsync()\n    {\n        var maxCount = await _settingProvider.GetAsync<int>(\"MyApp.MaxItemCount\");\n        var isEnabled = await _settingProvider.IsTrueAsync(\"MyApp.EnableFeature\");\n    }\n}\n```\n\n### Setting Value Providers (Priority Order)\n1. User settings (highest)\n2. Tenant settings\n3. Global settings\n4. Configuration (appsettings.json)\n5. Default value (lowest)\n\n## Features\n\n### Define Features\n```csharp\npublic class MyFeatureDefinitionProvider : FeatureDefinitionProvider\n{\n    public override void Define(IFeatureDefinitionContext context)\n    {\n        var myGroup = context.AddGroup(\"MyApp\");\n\n        myGroup.AddFeature(\n            \"MyApp.PdfReporting\",\n            defaultValue: \"false\",\n            valueType: new ToggleStringValueType()\n        );\n\n        myGroup.AddFeature(\n            \"MyApp.MaxProductCount\",\n            defaultValue: \"10\",\n            valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000))\n        );\n    }\n}\n```\n\n### Check Features\n```csharp\n[RequiresFeature(\"MyApp.PdfReporting\")]\npublic async Task<PdfReportDto> GetPdfReportAsync()\n{\n    // Only executes if feature is enabled\n}\n\n// Or programmatically\nif (await _featureChecker.IsEnabledAsync(\"MyApp.PdfReporting\"))\n{\n    // Feature is enabled for current tenant\n}\n\nvar maxCount = await _featureChecker.GetAsync<int>(\"MyApp.MaxProductCount\");\n```\n\n## Distributed Caching\n\n### Typed Cache\n```csharp\npublic class BookService : ITransientDependency\n{\n    private readonly IDistributedCache<BookCacheItem> _cache;\n    private readonly IClock _clock;\n\n    public BookService(IDistributedCache<BookCacheItem> cache, IClock clock)\n    {\n        _cache = cache;\n        _clock = clock;\n    }\n\n    public async Task<BookCacheItem> GetAsync(Guid bookId)\n    {\n        return await _cache.GetOrAddAsync(\n            bookId.ToString(),\n            async () => await GetBookFromDatabaseAsync(bookId),\n            () => new DistributedCacheEntryOptions\n            {\n                AbsoluteExpiration = _clock.Now.AddHours(1)\n            }\n        );\n    }\n}\n\n[CacheName(\"Books\")]\npublic class BookCacheItem\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n}\n```\n\n## Event Bus\n\n### Local Events (Same Process)\n```csharp\n// Event class\npublic class OrderCreatedEvent\n{\n    public Order Order { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEventHandler : ILocalEventHandler<OrderCreatedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n\n// Publish\nawait _localEventBus.PublishAsync(new OrderCreatedEvent { Order = order });\n```\n\n### Distributed Events (Cross-Service)\n```csharp\n// Event Transfer Object (in Domain.Shared)\n[EventName(\"MyApp.Order.Created\")]\npublic class OrderCreatedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEtoHandler : IDistributedEventHandler<OrderCreatedEto>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEto eventData)\n    {\n        // Handle distributed event\n    }\n}\n\n// Publish\nawait _distributedEventBus.PublishAsync(new OrderCreatedEto { ... });\n```\n\n### When to Use Which\n- **Local**: Within same module/bounded context\n- **Distributed**: Cross-module or microservice communication\n\n## Background Jobs\n\n### Define Job\n```csharp\npublic class EmailSendingArgs\n{\n    public string EmailAddress { get; set; }\n    public string Subject { get; set; }\n    public string Body { get; set; }\n}\n\npublic class EmailSendingJob : AsyncBackgroundJob<EmailSendingArgs>, ITransientDependency\n{\n    private readonly IEmailSender _emailSender;\n\n    public EmailSendingJob(IEmailSender emailSender)\n    {\n        _emailSender = emailSender;\n    }\n\n    public override async Task ExecuteAsync(EmailSendingArgs args)\n    {\n        await _emailSender.SendAsync(args.EmailAddress, args.Subject, args.Body);\n    }\n}\n```\n\n### Enqueue Job\n```csharp\nawait _backgroundJobManager.EnqueueAsync(\n    new EmailSendingArgs\n    {\n        EmailAddress = \"user@example.com\",\n        Subject = \"Hello\",\n        Body = \"...\"\n    },\n    delay: TimeSpan.FromMinutes(5) // Optional delay\n);\n```\n\n## Localization\n\n### Define Resource\n```csharp\n[LocalizationResourceName(\"MyModule\")]\npublic class MyModuleResource { }\n```\n\n### JSON Structure\n```json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"HelloWorld\": \"Hello World!\",\n    \"Menu:Books\": \"Books\"\n  }\n}\n```\n\n### Usage\n- In `ApplicationService`: Use `L[\"Key\"]` property (already available from base class)\n- In other services: Inject `IStringLocalizer<MyResource>`\n\n> **Tip**: ABP base classes already provide commonly used services as properties. Check before injecting:\n> - `StringLocalizer` (L), `Clock`, `CurrentUser`, `CurrentTenant`, `GuidGenerator`\n> - `AuthorizationService`, `FeatureChecker`, `DataFilter`\n> - `LoggerFactory`, `Logger`\n> - Methods like `CheckPolicyAsync()` for authorization checks\n","frontmatter":{"name":"abp-infrastructure","description":"ABP infrastructure services - ISettingProvider, IFeatureChecker, IDistributedCache, ILocalEventBus, IDistributedEventBus, IBackgroundJobManager, localization resource. Use when working with settings, feature flags, caching, event bus, or background jobs in ABP."},"isInternal":false,"tokens":1351,"sizeBytes":5992},{"name":"SKILL.md","path":".agents/skills/abp-microservice/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-microservice/SKILL.md","title":"abp-microservice","category":"anthropic-skill","format":"markdown","content":"# abp-microservice\n\nPath: `.agents/skills/abp-microservice/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-microservice/SKILL.md)","tokens":300,"sizeBytes":196},{"name":"SKILL.md","path":".agents/skills/abp-module/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-module/SKILL.md","title":"abp-module","category":"anthropic-skill","format":"markdown","content":"# abp-module\n\nPath: `.agents/skills/abp-module/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-module/SKILL.md)","tokens":300,"sizeBytes":178},{"name":"SKILL.md","path":".agents/skills/abp-mongodb/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mongodb/SKILL.md","title":"abp-mongodb","category":"anthropic-skill","format":"markdown","content":"# abp-mongodb\n\nPath: `.agents/skills/abp-mongodb/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mongodb/SKILL.md)","tokens":300,"sizeBytes":181},{"name":"SKILL.md","path":".agents/skills/abp-multi-tenancy/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-multi-tenancy/SKILL.md","title":"abp-multi-tenancy","category":"anthropic-skill","format":"markdown","content":"# abp-multi-tenancy\n\nPath: `.agents/skills/abp-multi-tenancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-multi-tenancy/SKILL.md)","tokens":300,"sizeBytes":199},{"name":"SKILL.md","path":".agents/skills/abp-mvc/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mvc/SKILL.md","title":"abp-mvc","category":"anthropic-skill","format":"markdown","content":"# abp-mvc\n\nPath: `.agents/skills/abp-mvc/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mvc/SKILL.md)","tokens":300,"sizeBytes":169},{"name":"SKILL.md","path":".agents/skills/abp-testing/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-testing/SKILL.md","title":"abp-testing","category":"anthropic-skill","format":"markdown","content":"# abp-testing\n\nPath: `.agents/skills/abp-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-testing/SKILL.md)","tokens":300,"sizeBytes":181},{"name":"SKILL.md","path":".claude/skills/abp-angular/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-angular/SKILL.md","title":"abp-angular","category":"anthropic-skill","format":"markdown","content":"# abp-angular\n\nPath: `.claude/skills/abp-angular/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-angular/SKILL.md)","tokens":300,"sizeBytes":181},{"name":"SKILL.md","path":".claude/skills/abp-app-nolayers/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-app-nolayers/SKILL.md","title":"abp-app-nolayers","category":"anthropic-skill","format":"markdown","content":"# abp-app-nolayers\n\nPath: `.claude/skills/abp-app-nolayers/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-app-nolayers/SKILL.md)","tokens":300,"sizeBytes":196},{"name":"SKILL.md","path":".claude/skills/abp-application-layer/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-application-layer/SKILL.md","title":"abp-application-layer","category":"anthropic-skill","format":"markdown","content":"# abp-application-layer\n\nPath: `.claude/skills/abp-application-layer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-application-layer/SKILL.md)","tokens":300,"sizeBytes":211},{"name":"SKILL.md","path":".claude/skills/abp-authorization/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-authorization/SKILL.md","title":"abp-authorization","category":"anthropic-skill","format":"markdown","content":"# abp-authorization\n\nPath: `.claude/skills/abp-authorization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-authorization/SKILL.md)","tokens":300,"sizeBytes":199},{"name":"SKILL.md","path":".claude/skills/abp-blazor/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-blazor/SKILL.md","title":"abp-blazor","category":"anthropic-skill","format":"markdown","content":"# abp-blazor\n\nPath: `.claude/skills/abp-blazor/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-blazor/SKILL.md)","tokens":300,"sizeBytes":178},{"name":"SKILL.md","path":".claude/skills/abp-cli/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-cli/SKILL.md","title":"abp-cli","category":"anthropic-skill","format":"markdown","content":"# abp-cli\n\nPath: `.claude/skills/abp-cli/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-cli/SKILL.md)","tokens":300,"sizeBytes":169},{"name":"SKILL.md","path":".claude/skills/abp-core/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-core/SKILL.md","title":"abp-core","category":"anthropic-skill","format":"markdown","content":"# abp-core\n\nPath: `.claude/skills/abp-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-core/SKILL.md)","tokens":300,"sizeBytes":172},{"name":"SKILL.md","path":".claude/skills/abp-ddd/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ddd/SKILL.md","title":"abp-ddd","category":"anthropic-skill","format":"markdown","content":"# abp-ddd\n\nPath: `.claude/skills/abp-ddd/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ddd/SKILL.md)","tokens":300,"sizeBytes":169},{"name":"SKILL.md","path":".claude/skills/abp-dependency-rules/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-dependency-rules/SKILL.md","title":"abp-dependency-rules","category":"anthropic-skill","format":"markdown","content":"# abp-dependency-rules\n\nPath: `.claude/skills/abp-dependency-rules/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-dependency-rules/SKILL.md)","tokens":300,"sizeBytes":208},{"name":"SKILL.md","path":".claude/skills/abp-development-flow/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-development-flow/SKILL.md","title":"abp-development-flow","category":"anthropic-skill","format":"markdown","content":"# abp-development-flow\n\nPath: `.claude/skills/abp-development-flow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-development-flow/SKILL.md)","tokens":300,"sizeBytes":208},{"name":"SKILL.md","path":".claude/skills/abp-ef-core/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ef-core/SKILL.md","title":"abp-ef-core","category":"anthropic-skill","format":"markdown","content":"# abp-ef-core\n\nPath: `.claude/skills/abp-ef-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ef-core/SKILL.md)","tokens":300,"sizeBytes":181},{"name":"SKILL.md","path":".claude/skills/abp-infrastructure/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-infrastructure/SKILL.md","title":"abp-infrastructure","category":"anthropic-skill","format":"markdown","content":"# abp-infrastructure\n\nPath: `.claude/skills/abp-infrastructure/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-infrastructure/SKILL.md)","tokens":300,"sizeBytes":202},{"name":"SKILL.md","path":".claude/skills/abp-microservice/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-microservice/SKILL.md","title":"abp-microservice","category":"anthropic-skill","format":"markdown","content":"# abp-microservice\n\nPath: `.claude/skills/abp-microservice/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-microservice/SKILL.md)","tokens":300,"sizeBytes":196},{"name":"SKILL.md","path":".claude/skills/abp-module/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-module/SKILL.md","title":"abp-module","category":"anthropic-skill","format":"markdown","content":"# abp-module\n\nPath: `.claude/skills/abp-module/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-module/SKILL.md)","tokens":300,"sizeBytes":178},{"name":"SKILL.md","path":".claude/skills/abp-mongodb/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mongodb/SKILL.md","title":"abp-mongodb","category":"anthropic-skill","format":"markdown","content":"# abp-mongodb\n\nPath: `.claude/skills/abp-mongodb/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mongodb/SKILL.md)","tokens":300,"sizeBytes":181},{"name":"SKILL.md","path":".claude/skills/abp-multi-tenancy/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-multi-tenancy/SKILL.md","title":"abp-multi-tenancy","category":"anthropic-skill","format":"markdown","content":"# abp-multi-tenancy\n\nPath: `.claude/skills/abp-multi-tenancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-multi-tenancy/SKILL.md)","tokens":300,"sizeBytes":199},{"name":"SKILL.md","path":".claude/skills/abp-mvc/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mvc/SKILL.md","title":"abp-mvc","category":"anthropic-skill","format":"markdown","content":"# abp-mvc\n\nPath: `.claude/skills/abp-mvc/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-mvc/SKILL.md)","tokens":300,"sizeBytes":169},{"name":"SKILL.md","path":".claude/skills/abp-testing/SKILL.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-testing/SKILL.md","title":"abp-testing","category":"anthropic-skill","format":"markdown","content":"# abp-testing\n\nPath: `.claude/skills/abp-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-testing/SKILL.md)","tokens":300,"sizeBytes":181},{"name":".eslintrc.json","path":"npm/ng-packs/packages/account-core/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/.eslintrc.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/.eslintrc.json)","tokens":300,"sizeBytes":216},{"name":"ng-package.json","path":"npm/ng-packs/packages/account-core/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/ng-package.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/ng-package.json)","tokens":300,"sizeBytes":218},{"name":"package.json","path":"npm/ng-packs/packages/account-core/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/package.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/package.json)","tokens":300,"sizeBytes":212},{"name":"project.json","path":"npm/ng-packs/packages/account-core/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/project.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/project.json)","tokens":300,"sizeBytes":212},{"name":"ng-package.json","path":"npm/ng-packs/packages/account-core/proxy/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/ng-package.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/account-core/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/ng-package.json)","tokens":300,"sizeBytes":223},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":259},{"name":"tsconfig.json","path":"npm/ng-packs/packages/account-core/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.json)","tokens":300,"sizeBytes":214},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/account-core/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.json)","tokens":300,"sizeBytes":222},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/account-core/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.prod.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":232},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/account-core/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.spec.json","title":"Account-core Skill","category":"anthropic-skill","format":"json","content":"# Account-core Skill\n\nPath: `npm/ng-packs/packages/account-core/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/tsconfig.spec.json)","tokens":300,"sizeBytes":224},{"name":".eslintrc.json","path":"npm/ng-packs/packages/account/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/.eslintrc.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/.eslintrc.json)","tokens":300,"sizeBytes":201},{"name":"ng-package.json","path":"npm/ng-packs/packages/account/config/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/config/ng-package.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"# Config Skill\n\nPath: `npm/ng-packs/packages/account/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/config/ng-package.json)","tokens":300,"sizeBytes":216},{"name":"ng-package.json","path":"npm/ng-packs/packages/account/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/ng-package.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/ng-package.json)","tokens":300,"sizeBytes":203},{"name":"package.json","path":"npm/ng-packs/packages/account/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/package.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/package.json)","tokens":300,"sizeBytes":197},{"name":"project.json","path":"npm/ng-packs/packages/account/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/project.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/project.json)","tokens":300,"sizeBytes":197},{"name":"tsconfig.json","path":"npm/ng-packs/packages/account/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.json)","tokens":300,"sizeBytes":199},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/account/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.json)","tokens":300,"sizeBytes":207},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/account/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.prod.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":217},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/account/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.spec.json","title":"Account Skill","category":"anthropic-skill","format":"json","content":"# Account Skill\n\nPath: `npm/ng-packs/packages/account/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/tsconfig.spec.json)","tokens":300,"sizeBytes":209},{"name":"ng-package.json","path":"npm/ng-packs/packages/cms-kit/admin/config/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/config/ng-package.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"# Config Skill\n\nPath: `npm/ng-packs/packages/cms-kit/admin/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/config/ng-package.json)","tokens":300,"sizeBytes":228},{"name":"ng-package.json","path":"npm/ng-packs/packages/cms-kit/admin/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/ng-package.json","title":"Admin Skill","category":"anthropic-skill","format":"json","content":"# Admin Skill\n\nPath: `npm/ng-packs/packages/cms-kit/admin/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/admin/ng-package.json)","tokens":300,"sizeBytes":213},{"name":"ng-package.json","path":"npm/ng-packs/packages/cms-kit/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/ng-package.json","title":"Cms-kit Skill","category":"anthropic-skill","format":"json","content":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/ng-package.json)","tokens":300,"sizeBytes":203},{"name":"package.json","path":"npm/ng-packs/packages/cms-kit/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/package.json","title":"Cms-kit Skill","category":"anthropic-skill","format":"json","content":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/package.json)","tokens":300,"sizeBytes":197},{"name":"project.json","path":"npm/ng-packs/packages/cms-kit/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/project.json","title":"Cms-kit Skill","category":"anthropic-skill","format":"json","content":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/project.json)","tokens":300,"sizeBytes":197},{"name":"ng-package.json","path":"npm/ng-packs/packages/cms-kit/proxy/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/ng-package.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/ng-package.json)","tokens":300,"sizeBytes":213},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":249},{"name":"ng-package.json","path":"npm/ng-packs/packages/cms-kit/public/config/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/config/ng-package.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"# Config Skill\n\nPath: `npm/ng-packs/packages/cms-kit/public/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/config/ng-package.json)","tokens":300,"sizeBytes":230},{"name":"ng-package.json","path":"npm/ng-packs/packages/cms-kit/public/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/ng-package.json","title":"Public Skill","category":"anthropic-skill","format":"json","content":"# Public Skill\n\nPath: `npm/ng-packs/packages/cms-kit/public/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/public/ng-package.json)","tokens":300,"sizeBytes":216},{"name":"tsconfig.json","path":"npm/ng-packs/packages/cms-kit/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.json","title":"Cms-kit Skill","category":"anthropic-skill","format":"json","content":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.json)","tokens":300,"sizeBytes":199},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/cms-kit/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.json","title":"Cms-kit Skill","category":"anthropic-skill","format":"json","content":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.json)","tokens":300,"sizeBytes":207},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json","title":"Cms-kit Skill","category":"anthropic-skill","format":"json","content":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":217},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/cms-kit/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.spec.json","title":"Cms-kit Skill","category":"anthropic-skill","format":"json","content":"# Cms-kit Skill\n\nPath: `npm/ng-packs/packages/cms-kit/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/tsconfig.spec.json)","tokens":300,"sizeBytes":209},{"name":".eslintrc.json","path":"npm/ng-packs/packages/components/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/.eslintrc.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/.eslintrc.json)","tokens":300,"sizeBytes":210},{"name":"ng-package.json","path":"npm/ng-packs/packages/components/chart.js/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/chart.js/ng-package.json","title":"Chart.js Skill","category":"anthropic-skill","format":"json","content":"# Chart.js Skill\n\nPath: `npm/ng-packs/packages/components/chart.js/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/chart.js/ng-package.json)","tokens":300,"sizeBytes":228},{"name":"NESTED-FORMS.md","path":"npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md","title":"Dynamic-form Skill","category":"anthropic-skill","format":"markdown","content":"# Dynamic-form Skill\n\nPath: `npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/NESTED-FORMS.md)","tokens":300,"sizeBytes":240},{"name":"ng-package.json","path":"npm/ng-packs/packages/components/dynamic-form/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/ng-package.json","title":"Dynamic-form Skill","category":"anthropic-skill","format":"json","content":"# Dynamic-form Skill\n\nPath: `npm/ng-packs/packages/components/dynamic-form/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/dynamic-form/ng-package.json)","tokens":300,"sizeBytes":240},{"name":"ng-package.json","path":"npm/ng-packs/packages/components/extensible/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/extensible/ng-package.json","title":"Extensible Skill","category":"anthropic-skill","format":"json","content":"# Extensible Skill\n\nPath: `npm/ng-packs/packages/components/extensible/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/extensible/ng-package.json)","tokens":300,"sizeBytes":234},{"name":"ng-package.json","path":"npm/ng-packs/packages/components/lookup/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/lookup/ng-package.json","title":"Lookup Skill","category":"anthropic-skill","format":"json","content":"# Lookup Skill\n\nPath: `npm/ng-packs/packages/components/lookup/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/lookup/ng-package.json)","tokens":300,"sizeBytes":222},{"name":"ng-package.json","path":"npm/ng-packs/packages/components/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/ng-package.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/ng-package.json)","tokens":300,"sizeBytes":212},{"name":"package.json","path":"npm/ng-packs/packages/components/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/package.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/package.json)","tokens":300,"sizeBytes":206},{"name":"ng-package.json","path":"npm/ng-packs/packages/components/page/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/page/ng-package.json","title":"Page Skill","category":"anthropic-skill","format":"json","content":"# Page Skill\n\nPath: `npm/ng-packs/packages/components/page/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/page/ng-package.json)","tokens":300,"sizeBytes":216},{"name":"project.json","path":"npm/ng-packs/packages/components/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/project.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/project.json)","tokens":300,"sizeBytes":206},{"name":"ng-package.json","path":"npm/ng-packs/packages/components/tree/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tree/ng-package.json","title":"Tree Skill","category":"anthropic-skill","format":"json","content":"# Tree Skill\n\nPath: `npm/ng-packs/packages/components/tree/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tree/ng-package.json)","tokens":300,"sizeBytes":216},{"name":"tsconfig.json","path":"npm/ng-packs/packages/components/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.json)","tokens":300,"sizeBytes":208},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/components/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.json)","tokens":300,"sizeBytes":216},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/components/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.prod.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":226},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/components/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.spec.json","title":"Components Skill","category":"anthropic-skill","format":"json","content":"# Components Skill\n\nPath: `npm/ng-packs/packages/components/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/tsconfig.spec.json)","tokens":300,"sizeBytes":218},{"name":".eslintrc.json","path":"npm/ng-packs/packages/core/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/.eslintrc.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/.eslintrc.json)","tokens":300,"sizeBytes":192},{"name":"ng-package.json","path":"npm/ng-packs/packages/core/locale/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/locale/ng-package.json","title":"Locale Skill","category":"anthropic-skill","format":"json","content":"# Locale Skill\n\nPath: `npm/ng-packs/packages/core/locale/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/locale/ng-package.json)","tokens":300,"sizeBytes":210},{"name":"ng-package.json","path":"npm/ng-packs/packages/core/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/ng-package.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/ng-package.json)","tokens":300,"sizeBytes":194},{"name":"package.json","path":"npm/ng-packs/packages/core/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/package.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/package.json)","tokens":300,"sizeBytes":188},{"name":"project.json","path":"npm/ng-packs/packages/core/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/project.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/project.json)","tokens":300,"sizeBytes":188},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":231},{"name":"ng-package.json","path":"npm/ng-packs/packages/core/testing/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/testing/ng-package.json","title":"Testing Skill","category":"anthropic-skill","format":"json","content":"# Testing Skill\n\nPath: `npm/ng-packs/packages/core/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/testing/ng-package.json)","tokens":300,"sizeBytes":213},{"name":"tsconfig.json","path":"npm/ng-packs/packages/core/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.json)","tokens":300,"sizeBytes":190},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/core/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.json)","tokens":300,"sizeBytes":198},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/core/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.prod.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":208},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/core/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.spec.json","title":"Core Skill","category":"anthropic-skill","format":"json","content":"# Core Skill\n\nPath: `npm/ng-packs/packages/core/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/tsconfig.spec.json)","tokens":300,"sizeBytes":200},{"name":".eslintrc.json","path":"npm/ng-packs/packages/feature-management/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/.eslintrc.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/.eslintrc.json)","tokens":300,"sizeBytes":234},{"name":"ng-package.json","path":"npm/ng-packs/packages/feature-management/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/ng-package.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/ng-package.json)","tokens":300,"sizeBytes":236},{"name":"package.json","path":"npm/ng-packs/packages/feature-management/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/package.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/package.json)","tokens":300,"sizeBytes":230},{"name":"project.json","path":"npm/ng-packs/packages/feature-management/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/project.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/project.json)","tokens":300,"sizeBytes":230},{"name":"ng-package.json","path":"npm/ng-packs/packages/feature-management/proxy/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/ng-package.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/feature-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/ng-package.json)","tokens":300,"sizeBytes":235},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":271},{"name":"tsconfig.json","path":"npm/ng-packs/packages/feature-management/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.json)","tokens":300,"sizeBytes":232},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/feature-management/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.json)","tokens":300,"sizeBytes":240},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":250},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/feature-management/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.spec.json","title":"Feature-management Skill","category":"anthropic-skill","format":"json","content":"# Feature-management Skill\n\nPath: `npm/ng-packs/packages/feature-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/tsconfig.spec.json)","tokens":300,"sizeBytes":242},{"name":".eslintrc.json","path":"npm/ng-packs/packages/generators/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/.eslintrc.json","title":"Generators Skill","category":"anthropic-skill","format":"json","content":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/.eslintrc.json)","tokens":300,"sizeBytes":210},{"name":"generators.json","path":"npm/ng-packs/packages/generators/generators.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/generators.json","title":"Generators Skill","category":"anthropic-skill","format":"json","content":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/generators.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/generators.json)","tokens":300,"sizeBytes":212},{"name":"package.json","path":"npm/ng-packs/packages/generators/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/package.json","title":"Generators Skill","category":"anthropic-skill","format":"json","content":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/package.json)","tokens":300,"sizeBytes":206},{"name":"project.json","path":"npm/ng-packs/packages/generators/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/project.json","title":"Generators Skill","category":"anthropic-skill","format":"json","content":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/project.json)","tokens":300,"sizeBytes":206},{"name":"schema.json","path":"npm/ng-packs/packages/generators/src/generators/change-theme/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/change-theme/schema.json","title":"Change-theme Skill","category":"anthropic-skill","format":"json","content":"# Change-theme Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/change-theme/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/change-theme/schema.json)","tokens":300,"sizeBytes":262},{"name":"schema.json","path":"npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json","title":"Generate-proxy Skill","category":"anthropic-skill","format":"json","content":"# Generate-proxy Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/generate-proxy/schema.json)","tokens":300,"sizeBytes":268},{"name":"schema.json","path":"npm/ng-packs/packages/generators/src/generators/update-version/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/update-version/schema.json","title":"Update-version Skill","category":"anthropic-skill","format":"json","content":"# Update-version Skill\n\nPath: `npm/ng-packs/packages/generators/src/generators/update-version/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/src/generators/update-version/schema.json)","tokens":300,"sizeBytes":268},{"name":"tsconfig.json","path":"npm/ng-packs/packages/generators/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.json","title":"Generators Skill","category":"anthropic-skill","format":"json","content":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.json)","tokens":300,"sizeBytes":208},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/generators/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.lib.json","title":"Generators Skill","category":"anthropic-skill","format":"json","content":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.lib.json)","tokens":300,"sizeBytes":216},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/generators/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.spec.json","title":"Generators Skill","category":"anthropic-skill","format":"json","content":"# Generators Skill\n\nPath: `npm/ng-packs/packages/generators/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/tsconfig.spec.json)","tokens":300,"sizeBytes":218},{"name":".eslintrc.json","path":"npm/ng-packs/packages/identity/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/.eslintrc.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/.eslintrc.json)","tokens":300,"sizeBytes":204},{"name":"ng-package.json","path":"npm/ng-packs/packages/identity/config/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/config/ng-package.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"# Config Skill\n\nPath: `npm/ng-packs/packages/identity/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/config/ng-package.json)","tokens":300,"sizeBytes":218},{"name":"ng-package.json","path":"npm/ng-packs/packages/identity/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/ng-package.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/ng-package.json)","tokens":300,"sizeBytes":206},{"name":"package.json","path":"npm/ng-packs/packages/identity/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/package.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/package.json)","tokens":300,"sizeBytes":200},{"name":"project.json","path":"npm/ng-packs/packages/identity/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/project.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/project.json)","tokens":300,"sizeBytes":200},{"name":"ng-package.json","path":"npm/ng-packs/packages/identity/proxy/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/ng-package.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/identity/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/ng-package.json)","tokens":300,"sizeBytes":215},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":251},{"name":"tsconfig.json","path":"npm/ng-packs/packages/identity/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.json)","tokens":300,"sizeBytes":202},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/identity/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.json)","tokens":300,"sizeBytes":210},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/identity/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.prod.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":220},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/identity/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.spec.json","title":"Identity Skill","category":"anthropic-skill","format":"json","content":"# Identity Skill\n\nPath: `npm/ng-packs/packages/identity/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/tsconfig.spec.json)","tokens":300,"sizeBytes":212},{"name":".eslintrc.json","path":"npm/ng-packs/packages/oauth/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/.eslintrc.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/.eslintrc.json)","tokens":300,"sizeBytes":195},{"name":"ng-package.json","path":"npm/ng-packs/packages/oauth/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/ng-package.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/ng-package.json)","tokens":300,"sizeBytes":197},{"name":"package.json","path":"npm/ng-packs/packages/oauth/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/package.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/package.json)","tokens":300,"sizeBytes":191},{"name":"project.json","path":"npm/ng-packs/packages/oauth/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/project.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/project.json)","tokens":300,"sizeBytes":191},{"name":"tsconfig.json","path":"npm/ng-packs/packages/oauth/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.json)","tokens":300,"sizeBytes":193},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/oauth/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.json)","tokens":300,"sizeBytes":201},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/oauth/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.prod.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":211},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/oauth/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.spec.json","title":"Oauth Skill","category":"anthropic-skill","format":"json","content":"# Oauth Skill\n\nPath: `npm/ng-packs/packages/oauth/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/tsconfig.spec.json)","tokens":300,"sizeBytes":203},{"name":".eslintrc.json","path":"npm/ng-packs/packages/permission-management/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/.eslintrc.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/.eslintrc.json)","tokens":300,"sizeBytes":243},{"name":"ng-package.json","path":"npm/ng-packs/packages/permission-management/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/ng-package.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/ng-package.json)","tokens":300,"sizeBytes":245},{"name":"package.json","path":"npm/ng-packs/packages/permission-management/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/package.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/package.json)","tokens":300,"sizeBytes":239},{"name":"project.json","path":"npm/ng-packs/packages/permission-management/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/project.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/project.json)","tokens":300,"sizeBytes":239},{"name":"ng-package.json","path":"npm/ng-packs/packages/permission-management/proxy/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/ng-package.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/permission-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/ng-package.json)","tokens":300,"sizeBytes":241},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":277},{"name":"tsconfig.json","path":"npm/ng-packs/packages/permission-management/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.json)","tokens":300,"sizeBytes":241},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/permission-management/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.json)","tokens":300,"sizeBytes":249},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":259},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/permission-management/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.spec.json","title":"Permission-management Skill","category":"anthropic-skill","format":"json","content":"# Permission-management Skill\n\nPath: `npm/ng-packs/packages/permission-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/tsconfig.spec.json)","tokens":300,"sizeBytes":251},{"name":".eslintrc.json","path":"npm/ng-packs/packages/schematics/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/.eslintrc.json","title":"Schematics Skill","category":"anthropic-skill","format":"json","content":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/.eslintrc.json)","tokens":300,"sizeBytes":210},{"name":"package.json","path":"npm/ng-packs/packages/schematics/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/package.json","title":"Schematics Skill","category":"anthropic-skill","format":"json","content":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/package.json)","tokens":300,"sizeBytes":206},{"name":"project.json","path":"npm/ng-packs/packages/schematics/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/project.json","title":"Schematics Skill","category":"anthropic-skill","format":"json","content":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/project.json)","tokens":300,"sizeBytes":206},{"name":"collection.json","path":"npm/ng-packs/packages/schematics/src/collection.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/collection.json","title":"Src Skill","category":"anthropic-skill","format":"json","content":"# Src Skill\n\nPath: `npm/ng-packs/packages/schematics/src/collection.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/collection.json)","tokens":300,"sizeBytes":213},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json","title":"Ai-config Skill","category":"anthropic-skill","format":"json","content":"# Ai-config Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/schema.json)","tokens":300,"sizeBytes":249},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/api/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/api/schema.json","title":"Api Skill","category":"anthropic-skill","format":"json","content":"# Api Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/api/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/api/schema.json)","tokens":300,"sizeBytes":231},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json","title":"Change-theme Skill","category":"anthropic-skill","format":"json","content":"# Change-theme Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/change-theme/schema.json)","tokens":300,"sizeBytes":258},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json","title":"Create-lib Skill","category":"anthropic-skill","format":"json","content":"# Create-lib Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/create-lib/schema.json)","tokens":300,"sizeBytes":252},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json","title":"Proxy-add Skill","category":"anthropic-skill","format":"json","content":"# Proxy-add Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-add/schema.json)","tokens":300,"sizeBytes":249},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json","title":"Proxy-index Skill","category":"anthropic-skill","format":"json","content":"# Proxy-index Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-index/schema.json)","tokens":300,"sizeBytes":255},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json","title":"Proxy-refresh Skill","category":"anthropic-skill","format":"json","content":"# Proxy-refresh Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-refresh/schema.json)","tokens":300,"sizeBytes":261},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json","title":"Proxy-remove Skill","category":"anthropic-skill","format":"json","content":"# Proxy-remove Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/proxy-remove/schema.json)","tokens":300,"sizeBytes":258},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json","title":"Ssr-add Skill","category":"anthropic-skill","format":"json","content":"# Ssr-add Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/schema.json)","tokens":300,"sizeBytes":243},{"name":"schema.json","path":"npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json","title":"Server Skill","category":"anthropic-skill","format":"json","content":"# Server Skill\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ssr-add/server/schema.json)","tokens":300,"sizeBytes":256},{"name":"package.json","path":"npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json","title":"Latest-versions Skill","category":"anthropic-skill","format":"json","content":"# Latest-versions Skill\n\nPath: `npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/latest-versions/package.json)","tokens":300,"sizeBytes":279},{"name":"tsconfig.json","path":"npm/ng-packs/packages/schematics/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.json","title":"Schematics Skill","category":"anthropic-skill","format":"json","content":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.json)","tokens":300,"sizeBytes":208},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/schematics/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.lib.json","title":"Schematics Skill","category":"anthropic-skill","format":"json","content":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.lib.json)","tokens":300,"sizeBytes":216},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/schematics/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.spec.json","title":"Schematics Skill","category":"anthropic-skill","format":"json","content":"# Schematics Skill\n\nPath: `npm/ng-packs/packages/schematics/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/tsconfig.spec.json)","tokens":300,"sizeBytes":218},{"name":".eslintrc.json","path":"npm/ng-packs/packages/setting-management/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/.eslintrc.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/.eslintrc.json)","tokens":300,"sizeBytes":234},{"name":"ng-package.json","path":"npm/ng-packs/packages/setting-management/config/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/ng-package.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"# Config Skill\n\nPath: `npm/ng-packs/packages/setting-management/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/ng-package.json)","tokens":300,"sizeBytes":238},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":273},{"name":"ng-package.json","path":"npm/ng-packs/packages/setting-management/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/ng-package.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/ng-package.json)","tokens":300,"sizeBytes":236},{"name":"package.json","path":"npm/ng-packs/packages/setting-management/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/package.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/package.json)","tokens":300,"sizeBytes":230},{"name":"project.json","path":"npm/ng-packs/packages/setting-management/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/project.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/project.json)","tokens":300,"sizeBytes":230},{"name":"ng-package.json","path":"npm/ng-packs/packages/setting-management/proxy/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/ng-package.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/ng-package.json)","tokens":300,"sizeBytes":235},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/proxy/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":271},{"name":"tsconfig.json","path":"npm/ng-packs/packages/setting-management/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.json)","tokens":300,"sizeBytes":232},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/setting-management/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.json)","tokens":300,"sizeBytes":240},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":250},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/setting-management/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.spec.json","title":"Setting-management Skill","category":"anthropic-skill","format":"json","content":"# Setting-management Skill\n\nPath: `npm/ng-packs/packages/setting-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/tsconfig.spec.json)","tokens":300,"sizeBytes":242},{"name":".eslintrc.json","path":"npm/ng-packs/packages/tenant-management/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/.eslintrc.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/.eslintrc.json)","tokens":300,"sizeBytes":231},{"name":"ng-package.json","path":"npm/ng-packs/packages/tenant-management/config/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/config/ng-package.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"# Config Skill\n\nPath: `npm/ng-packs/packages/tenant-management/config/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/config/ng-package.json)","tokens":300,"sizeBytes":236},{"name":"ng-package.json","path":"npm/ng-packs/packages/tenant-management/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/ng-package.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/ng-package.json)","tokens":300,"sizeBytes":233},{"name":"package.json","path":"npm/ng-packs/packages/tenant-management/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/package.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/package.json)","tokens":300,"sizeBytes":227},{"name":"project.json","path":"npm/ng-packs/packages/tenant-management/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/project.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/project.json)","tokens":300,"sizeBytes":227},{"name":"ng-package.json","path":"npm/ng-packs/packages/tenant-management/proxy/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/ng-package.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/ng-package.json)","tokens":300,"sizeBytes":233},{"name":"generate-proxy.json","path":"npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json","title":"Proxy Skill","category":"anthropic-skill","format":"json","content":"# Proxy Skill\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/generate-proxy.json)","tokens":300,"sizeBytes":269},{"name":"tsconfig.json","path":"npm/ng-packs/packages/tenant-management/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.json)","tokens":300,"sizeBytes":229},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/tenant-management/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.json)","tokens":300,"sizeBytes":237},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":247},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/tenant-management/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.spec.json","title":"Tenant-management Skill","category":"anthropic-skill","format":"json","content":"# Tenant-management Skill\n\nPath: `npm/ng-packs/packages/tenant-management/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/tsconfig.spec.json)","tokens":300,"sizeBytes":239},{"name":".eslintrc.json","path":"npm/ng-packs/packages/theme-basic/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/.eslintrc.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/.eslintrc.json)","tokens":300,"sizeBytes":213},{"name":"ng-package.json","path":"npm/ng-packs/packages/theme-basic/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/ng-package.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/ng-package.json)","tokens":300,"sizeBytes":215},{"name":"package.json","path":"npm/ng-packs/packages/theme-basic/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/package.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/package.json)","tokens":300,"sizeBytes":209},{"name":"project.json","path":"npm/ng-packs/packages/theme-basic/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/project.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/project.json)","tokens":300,"sizeBytes":209},{"name":"ng-package.json","path":"npm/ng-packs/packages/theme-basic/testing/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/testing/ng-package.json","title":"Testing Skill","category":"anthropic-skill","format":"json","content":"# Testing Skill\n\nPath: `npm/ng-packs/packages/theme-basic/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/testing/ng-package.json)","tokens":300,"sizeBytes":227},{"name":"tsconfig.json","path":"npm/ng-packs/packages/theme-basic/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.json)","tokens":300,"sizeBytes":211},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/theme-basic/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.json)","tokens":300,"sizeBytes":219},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":229},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/theme-basic/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.spec.json","title":"Theme-basic Skill","category":"anthropic-skill","format":"json","content":"# Theme-basic Skill\n\nPath: `npm/ng-packs/packages/theme-basic/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/tsconfig.spec.json)","tokens":300,"sizeBytes":221},{"name":".eslintrc.json","path":"npm/ng-packs/packages/theme-shared/.eslintrc.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/.eslintrc.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/.eslintrc.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/.eslintrc.json)","tokens":300,"sizeBytes":216},{"name":"ng-package.json","path":"npm/ng-packs/packages/theme-shared/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/ng-package.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/ng-package.json)","tokens":300,"sizeBytes":218},{"name":"package.json","path":"npm/ng-packs/packages/theme-shared/package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/package.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/package.json)","tokens":300,"sizeBytes":212},{"name":"project.json","path":"npm/ng-packs/packages/theme-shared/project.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/project.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/project.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/project.json)","tokens":300,"sizeBytes":212},{"name":"ng-package.json","path":"npm/ng-packs/packages/theme-shared/testing/ng-package.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/testing/ng-package.json","title":"Testing Skill","category":"anthropic-skill","format":"json","content":"# Testing Skill\n\nPath: `npm/ng-packs/packages/theme-shared/testing/ng-package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/testing/ng-package.json)","tokens":300,"sizeBytes":229},{"name":"tsconfig.json","path":"npm/ng-packs/packages/theme-shared/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.json)","tokens":300,"sizeBytes":214},{"name":"tsconfig.lib.json","path":"npm/ng-packs/packages/theme-shared/tsconfig.lib.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.lib.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.json)","tokens":300,"sizeBytes":222},{"name":"tsconfig.lib.prod.json","path":"npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.lib.prod.json)","tokens":300,"sizeBytes":232},{"name":"tsconfig.spec.json","path":"npm/ng-packs/packages/theme-shared/tsconfig.spec.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.spec.json","title":"Theme-shared Skill","category":"anthropic-skill","format":"json","content":"# Theme-shared Skill\n\nPath: `npm/ng-packs/packages/theme-shared/tsconfig.spec.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/tsconfig.spec.json)","tokens":300,"sizeBytes":224},{"name":"MIGRATE_VITEST_4.md","path":"npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md","title":"Ai-migrations Skill","category":"anthropic-skill","format":"markdown","content":"# Ai-migrations Skill\n\nPath: `npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/ai-migrations/MIGRATE_VITEST_4.md)","tokens":300,"sizeBytes":223},{"name":"tsconfig.tools.json","path":"npm/ng-packs/tools/tsconfig.tools.json","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/tsconfig.tools.json","title":"Tools Skill","category":"anthropic-skill","format":"json","content":"# Tools Skill\n\nPath: `npm/ng-packs/tools/tsconfig.tools.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/tools/tsconfig.tools.json)","tokens":300,"sizeBytes":187},{"name":"config.yaml","path":"tools/github-changelog-generator/config.yaml","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/config.yaml","title":"Github-changelog-generator Skill","category":"anthropic-skill","format":"yaml","content":"# Github-changelog-generator Skill\n\nPath: `tools/github-changelog-generator/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/config.yaml)","tokens":300,"sizeBytes":220},{"name":"config.yaml","path":"tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml","title":"Config Skill","category":"anthropic-skill","format":"yaml","content":"# Config Skill\n\nPath: `tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/src/GithubChangelogGenerator/config/config.yaml)","tokens":300,"sizeBytes":272},{"name":".cursorrules","path":".cursorrules","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.cursorrules","title":"Cursor IDE Native Rules","category":"cursor-rule","format":"markdown","content":"# Cursor IDE Native Rules\n\nPath: `.cursorrules`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.cursorrules)","tokens":300,"sizeBytes":147},{"name":"cursor.mdc","path":"npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc","title":"Cursor Rule: cursor","category":"cursor-rule","format":"mdc","content":"# Cursor Rule: cursor\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/cursor/.cursor/rules/cursor.mdc)","tokens":300,"sizeBytes":305},{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/.github/copilot-instructions.md","title":"GitHub Copilot Instructions","category":"copilot-instructions","format":"markdown","content":"# GitHub Copilot Instructions\n\nPath: `.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.github/copilot-instructions.md)","tokens":300,"sizeBytes":189},{"name":"README.md","path":"docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md","title":"2023-07-09-Cascading-Option-Loading-With-Extensions Documentation","category":"plugin-manifest","format":"markdown","content":"# 2023-07-09-Cascading-Option-Loading-With-Extensions Documentation\n\nPath: `docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/docs/en/Community-Articles/2023-07-09-Cascading-Option-Loading-With-Extensions/README.md)","tokens":300,"sizeBytes":341},{"name":"README.md","path":"npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/proxy/src/lib/proxy/README.md)","tokens":300,"sizeBytes":247},{"name":"README.md","path":"npm/ng-packs/packages/account-core/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/README.md","title":"account-core Documentation","category":"plugin-manifest","format":"markdown","content":"# account-core Documentation\n\nPath: `npm/ng-packs/packages/account-core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account-core/README.md)","tokens":300,"sizeBytes":214},{"name":"README.md","path":"npm/ng-packs/packages/account/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/README.md","title":"account Documentation","category":"plugin-manifest","format":"markdown","content":"# account Documentation\n\nPath: `npm/ng-packs/packages/account/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/account/README.md)","tokens":300,"sizeBytes":199},{"name":"README.md","path":"npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/proxy/src/lib/proxy/README.md)","tokens":300,"sizeBytes":237},{"name":"README.md","path":"npm/ng-packs/packages/cms-kit/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/README.md","title":"cms-kit Documentation","category":"plugin-manifest","format":"markdown","content":"# cms-kit Documentation\n\nPath: `npm/ng-packs/packages/cms-kit/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/cms-kit/README.md)","tokens":300,"sizeBytes":199},{"name":"README.md","path":"npm/ng-packs/packages/components/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/README.md","title":"components Documentation","category":"plugin-manifest","format":"markdown","content":"# components Documentation\n\nPath: `npm/ng-packs/packages/components/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/components/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"npm/ng-packs/packages/core/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/README.md","title":"core Documentation","category":"plugin-manifest","format":"markdown","content":"# core Documentation\n\nPath: `npm/ng-packs/packages/core/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/README.md)","tokens":300,"sizeBytes":190},{"name":"README.md","path":"npm/ng-packs/packages/core/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/core/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/core/src/lib/proxy/README.md)","tokens":300,"sizeBytes":219},{"name":"README.md","path":"npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/proxy/src/lib/proxy/README.md)","tokens":300,"sizeBytes":259},{"name":"README.md","path":"npm/ng-packs/packages/feature-management/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/README.md","title":"feature-management Documentation","category":"plugin-manifest","format":"markdown","content":"# feature-management Documentation\n\nPath: `npm/ng-packs/packages/feature-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/feature-management/README.md)","tokens":300,"sizeBytes":232},{"name":"README.md","path":"npm/ng-packs/packages/generators/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/README.md","title":"generators Documentation","category":"plugin-manifest","format":"markdown","content":"# generators Documentation\n\nPath: `npm/ng-packs/packages/generators/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/generators/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/proxy/src/lib/proxy/README.md)","tokens":300,"sizeBytes":239},{"name":"README.md","path":"npm/ng-packs/packages/identity/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/README.md","title":"identity Documentation","category":"plugin-manifest","format":"markdown","content":"# identity Documentation\n\nPath: `npm/ng-packs/packages/identity/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/identity/README.md)","tokens":300,"sizeBytes":202},{"name":"README.md","path":"npm/ng-packs/packages/oauth/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/README.md","title":"oauth Documentation","category":"plugin-manifest","format":"markdown","content":"# oauth Documentation\n\nPath: `npm/ng-packs/packages/oauth/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/oauth/README.md)","tokens":300,"sizeBytes":193},{"name":"README.md","path":"npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/proxy/src/lib/proxy/README.md)","tokens":300,"sizeBytes":265},{"name":"README.md","path":"npm/ng-packs/packages/permission-management/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/README.md","title":"permission-management Documentation","category":"plugin-manifest","format":"markdown","content":"# permission-management Documentation\n\nPath: `npm/ng-packs/packages/permission-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/permission-management/README.md)","tokens":300,"sizeBytes":241},{"name":"README.md","path":"npm/ng-packs/packages/schematics/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/README.md","title":"schematics Documentation","category":"plugin-manifest","format":"markdown","content":"# schematics Documentation\n\nPath: `npm/ng-packs/packages/schematics/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/README.md)","tokens":300,"sizeBytes":208},{"name":"README.md","path":"npm/ng-packs/packages/schematics/src/utils/angular/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/README.md","title":"angular Documentation","category":"plugin-manifest","format":"markdown","content":"# angular Documentation\n\nPath: `npm/ng-packs/packages/schematics/src/utils/angular/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/utils/angular/README.md)","tokens":300,"sizeBytes":241},{"name":"README.md","path":"npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/config/src/lib/proxy/README.md)","tokens":300,"sizeBytes":261},{"name":"README.md","path":"npm/ng-packs/packages/setting-management/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/README.md","title":"setting-management Documentation","category":"plugin-manifest","format":"markdown","content":"# setting-management Documentation\n\nPath: `npm/ng-packs/packages/setting-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/setting-management/README.md)","tokens":300,"sizeBytes":232},{"name":"README.md","path":"npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md","title":"proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# proxy Documentation\n\nPath: `npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/proxy/src/lib/proxy/README.md)","tokens":300,"sizeBytes":257},{"name":"README.md","path":"npm/ng-packs/packages/tenant-management/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/README.md","title":"tenant-management Documentation","category":"plugin-manifest","format":"markdown","content":"# tenant-management Documentation\n\nPath: `npm/ng-packs/packages/tenant-management/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/tenant-management/README.md)","tokens":300,"sizeBytes":229},{"name":"README.md","path":"npm/ng-packs/packages/theme-basic/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/README.md","title":"theme-basic Documentation","category":"plugin-manifest","format":"markdown","content":"# theme-basic Documentation\n\nPath: `npm/ng-packs/packages/theme-basic/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-basic/README.md)","tokens":300,"sizeBytes":211},{"name":"README.md","path":"npm/ng-packs/packages/theme-shared/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/README.md","title":"theme-shared Documentation","category":"plugin-manifest","format":"markdown","content":"# theme-shared Documentation\n\nPath: `npm/ng-packs/packages/theme-shared/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/theme-shared/README.md)","tokens":300,"sizeBytes":214},{"name":"README.md","path":"tools/github-changelog-generator/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/README.md","title":"github-changelog-generator Documentation","category":"plugin-manifest","format":"markdown","content":"# github-changelog-generator Documentation\n\nPath: `tools/github-changelog-generator/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/github-changelog-generator/README.md)","tokens":300,"sizeBytes":224},{"name":"README.md","path":"tools/localization-key-synchronizer/README.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/localization-key-synchronizer/README.md","title":"localization-key-synchronizer Documentation","category":"plugin-manifest","format":"markdown","content":"# localization-key-synchronizer Documentation\n\nPath: `tools/localization-key-synchronizer/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/tools/localization-key-synchronizer/README.md)","tokens":300,"sizeBytes":233},{"name":"CLAUDE.md","path":"npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md","title":"Command: /claude","category":"command-prompt","format":"markdown","content":"# Command: /claude\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/claude/.claude/CLAUDE.md)","tokens":300,"sizeBytes":288},{"name":"copilot-instructions.md","path":"npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md","title":"Command: /copilot-instructions","category":"command-prompt","format":"markdown","content":"# Command: /copilot-instructions\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/copilot/.github/copilot-instructions.md)","tokens":300,"sizeBytes":332},{"name":"GEMINI.md","path":"npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md","title":"Command: /gemini","category":"command-prompt","format":"markdown","content":"# Command: /gemini\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/gemini/.gemini/GEMINI.md)","tokens":300,"sizeBytes":288},{"name":"guidelines.md","path":"npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md","title":"Command: /guidelines","category":"command-prompt","format":"markdown","content":"# Command: /guidelines\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/junie/.junie/guidelines.md)","tokens":300,"sizeBytes":296},{"name":"guidelines.md","path":"npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md","rawUrl":"https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md","title":"Command: /guidelines","category":"command-prompt","format":"markdown","content":"# Command: /guidelines\n\nPath: `npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/npm/ng-packs/packages/schematics/src/commands/ai-config/files/windsurf/.windsurf/rules/guidelines.md)","tokens":300,"sizeBytes":320}],"systemPromptSnippet":"<yakaai_skills repo=\"abpframework/abp\">\n<!-- File: .agents/skills/abp-angular/SKILL.md (Tokens: ~1141 | Category: anthropic-skill) -->\n---\nname: abp-angular\ndescription: ABP Angular UI patterns - generate-proxy, ListService, PermissionGuard, abpLocalization pipe, ConfirmationService, ToasterService, ConfigStateService. Use when building or reviewing Angular UI components, routing, or service integration in ABP Angular projects.\n---\n\n# ABP Angular UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/angular/overview\n\n## Project Structure\n```\nsrc/app/\n├── proxy/              # Auto-generated service proxies\n├── shared/             # Shared components, pipes, directives\n├── book/               # Feature module\n│   ├── book.module.ts\n│   ├── book-routing.module.ts\n│   ├── book-list/\n│   │   ├── book-list.component.ts\n│   │   ├── book-list.component.html\n│   │   └── book-list.component.scss\n│   └── book-detail/\n```\n\n## Generate Service Proxies\n```bash\nabp generate-proxy -t ng\n```\n\nThis generates typed service classes in `src/app/proxy/`.\n\n## List Component Pattern\n```typescript\n@Component({\n  selector: 'app-book-list',\n  templateUrl: './book-list.component.html'\n})\nexport class BookListComponent implements OnInit {\n  books = { items: [], totalCount: 0 } as PagedResultDto<BookDto>;\n\n  constructor(\n    public readonly list: ListService,\n    private bookService: BookService,\n    private confirmation: ConfirmationService\n  ) {}\n\n  ngOnInit(): void {\n    this.hookToQuery();\n  }\n\n  private hookToQuery(): void {\n    this.list.hookToQuery(query =>\n      this.bookService.getList(query)\n    ).subscribe(response => {\n      this.books = response;\n    });\n  }\n\n  create(): void {\n    // Open create modal\n  }\n\n  delete(book: BookDto): void {\n    this.confirmation\n      .warn('::AreYouSureToDelete', '::AreYouSure')\n      .subscribe(status => {\n        if (status === Confirmation.Status.confirm) {\n          this.bookService.delete(book.id).subscribe(() => this.list.get());\n        }\n      });\n  }\n}\n```\n\n## Localization\n```typescript\n// In component\nconstructor(private localizationService: LocalizationService) {}\n\ngetText(): string {\n  return this.localizationService.instant('::Books');\n}\n```\n\n```html\n<!-- In template -->\n<h1>{{ '::Books' | abpLocalization }}</h1>\n\n<!-- With parameters -->\n<p>{{ '::WelcomeMessage' | abpLocalization: userName }}</p>\n```\n\n## Authorization\n\n### Permission Directive\n```html\n<button *abpPermission=\"'BookStore.Books.Create'\">Create</button>\n```\n\n### Permission Guard\n```typescript\nconst routes: Routes = [\n  {\n    path: '',\n    component: BookListComponent,\n    canActivate: [PermissionGuard],\n    data: {\n      requiredPolicy: 'BookStore.Books'\n    }\n  }\n];\n```\n\n### Programmatic Check\n```typescript\nconstructor(private permissionService: PermissionService) {}\n\ncanCreate(): boolean {\n  return this.permissionService.getGrantedPolicy('BookStore.Books.Create');\n}\n```\n\n## Forms with Validation\n```typescript\n@Component({...})\nexport class BookFormComponent {\n  form: FormGroup;\n\n  constructor(private fb: FormBuilder) {\n    this.buildForm();\n  }\n\n  buildForm(): void {\n    this.form = this.fb.group({\n      name: ['', [Validators.required, Validators.maxLength(128)]],\n      price: [0, [Validators.required, Validators.min(0)]]\n    });\n  }\n\n  save(): void {\n    if (this.form.invalid) return;\n\n    this.bookService.create(this.form.value).subscribe(() => {\n      // Handle success\n    });\n  }\n}\n```\n\n```html\n<form [formGroup]=\"form\" (ngSubmit)=\"save()\">\n  <div class=\"form-group\">\n    <label for=\"name\">{{ '::Name' | abpLocalization }}</label>\n    <input type=\"text\" id=\"name\" formControlName=\"name\" class=\"form-control\" />\n  </div>\n\n  <button type=\"submit\" class=\"btn btn-primary\" [disabled]=\"form.invalid\">\n    {{ '::Save' | abpLocalization }}\n  </button>\n</form>\n```\n\n## Configuration API\n```typescript\nconstructor(private configService: ConfigStateService) {}\n\ngetCurrentUser(): CurrentUserDto {\n  return this.configService.getOne('currentUser');\n}\n\ngetSettings(): void {\n  const setting = this.configService.getSetting('MyApp.MaxItemCount');\n}\n```\n\n## Modal Service\n```typescript\nconstructor(private modalService: ModalService) {}\n\nopenCreateModal(): void {\n  const modalRef = this.modalService.open(BookFormComponent, {\n    size: 'lg'\n  });\n\n  modalRef.result.then(result => {\n    if (result) {\n      this.list.get();\n    }\n  });\n}\n```\n\n## Toast Notifications\n```typescript\nconstructor(private toaster: ToasterService) {}\n\nshowSuccess(): void {\n  this.toaster.success('::BookCreatedSuccessfully', '::Success');\n}\n\nshowError(error: string): void {\n  this.toaster.error(error, '::Error');\n}\n```\n\n## Lazy Loading Modules\n```typescript\n// app-routing.module.ts\nconst routes: Routes = [\n  {\n    path: 'books',\n    loadChildren: () => import('./book/book.module').then(m => m.BookModule)\n  }\n];\n```\n\n## Theme & Styling\n- Use Bootstrap classes\n- ABP provides theme variables via CSS custom properties\n- Component-specific styles in `.component.scss`\n\n<!-- File: .agents/skills/abp-app-nolayers/SKILL.md (Tokens: ~516 | Category: anthropic-skill) -->\n---\nname: abp-app-nolayers\ndescription: ABP Single-Layer (No-Layers / nolayers) application template - single project structure, feature-based file organization, no separate Domain/Application.Contracts projects. Use when working with the single-layer web application template or when the project has no layered separation.\n---\n\n# ABP Single-Layer Application Template\n\n> **Docs**: https://abp.io/docs/latest/solution-templates/single-layer-web-application\n\n## Solution Structure\n\nSingle project containing everything:\n\n```\nMyProject/\n├── src/\n│   └── MyProject/\n│       ├── Data/              # DbContext, migrations\n│       ├── Entities/          # Domain entities\n│       ├── Services/          # Application services + DTOs\n│       ├── Pages/             # Razor pages / Blazor components\n│       └── MyProjectModule.cs\n└── test/\n    └── MyProject.Tests/\n```\n\n## Key Differences from Layered\n\n| Layered Template | Single-Layer Template |\n|------------------|----------------------|\n| DTOs in Application.Contracts | DTOs in Services folder (same project) |\n| Repository interfaces in Domain | Use generic `IRepository<T, TKey>` directly |\n| Separate Domain.Shared for constants | Constants in same project |\n| Multiple module classes | Single module class |\n\n## File Organization\n\nGroup related files by feature:\n\n```\nServices/\n├── Books/\n│   ├── BookAppService.cs\n│   ├── BookDto.cs\n│   ├── CreateBookDto.cs\n│   └── IBookAppService.cs\n└── Authors/\n    ├── AuthorAppService.cs\n    └── ...\n```\n\n## Simplified Entity (Still keep invariants)\n\nSingle-layer templates are structurally simpler, but you may still have real business invariants.\n\n- For **trivial CRUD** entities, public setters can be acceptable.\n- For **non-trivial business rules**, still prefer encapsulation (private setters + methods) to prevent invalid states.\n\n```csharp\npublic class Book : AuditedAggregateRoot<Guid>\n{\n    public string Name { get; set; }  // OK for trivial CRUD only\n    public decimal Price { get; set; }\n}\n```\n\n## No Custom Repository Needed\n\nUse generic repository directly - no need to define custom interfaces:\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n\n    // Generic repository is sufficient for single-layer apps\n}\n```\n\n<!-- File: .agents/skills/abp-application-layer/SKILL.md (Tokens: ~1750 | Category: anthropic-skill) -->\n---\nname: abp-application-layer\ndescription: ABP Application Services, DTOs, CRUD service, object mapping (Mapperly/AutoMapper), validation, error handling. Use when creating or reviewing application services, DTOs, or working in the Application or Application.Contracts projects.\n---\n\n# ABP Application Layer Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design/application-services\n\n## Anti-Patterns to Avoid\n\n- **Entity name in method**: use `GetAsync` not `GetBookAsync`\n- **ID inside UpdateDto**: pass `id` as a separate parameter, not inside the DTO\n- **Calling other app services in the same module**: use domain services or repositories directly\n- **Using `IFormFile`/`Stream` in app service**: accept `byte[]` from controllers instead\n- **Business logic in app service**: put it in domain entities or domain services\n\n## Application Service Structure\n\n### Interface (Application.Contracts)\n```csharp\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookListItemDto>> GetListAsync(GetBookListInput input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n    Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input);\n    Task DeleteAsync(Guid id);\n}\n```\n\n### Implementation (Application)\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IBookRepository _bookRepository;\n    private readonly BookManager _bookManager;\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IBookRepository bookRepository,\n        BookManager bookManager,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookManager = bookManager;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = await _bookManager.CreateAsync(input.Name, input.Price);\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(BookStorePermissions.Books.Edit)]\n    public async Task<BookDto> UpdateAsync(Guid id, UpdateBookDto input)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        await _bookManager.ChangeNameAsync(book, input.Name);\n        book.SetPrice(input.Price);\n        await _bookRepository.UpdateAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n## Application Service Best Practices\n- Don't repeat entity name in method names (`GetAsync` not `GetBookAsync`)\n- Accept/return DTOs only, never entities\n- ID not inside UpdateDto - pass separately\n- Use custom repositories when you need custom queries, generic repository is fine for simple CRUD\n- Call `UpdateAsync` explicitly (don't assume change tracking)\n- Don't call other app services in same module\n- Don't use `IFormFile`/`Stream` - pass `byte[]` from controllers\n- Use base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) instead of injecting these services\n\n## DTO Naming Conventions\n\n| Purpose | Convention | Example |\n|---------|------------|---------|\n| Query input | `Get{Entity}Input` | `GetBookInput` |\n| List query input | `Get{Entity}ListInput` | `GetBookListInput` |\n| Create input | `Create{Entity}Dto` | `CreateBookDto` |\n| Update input | `Update{Entity}Dto` | `UpdateBookDto` |\n| Single entity output | `{Entity}Dto` | `BookDto` |\n| List item output | `{Entity}ListItemDto` | `BookListItemDto` |\n\n## DTO Location\n- Define DTOs in `*.Application.Contracts` project\n- This allows sharing with clients (Blazor, HttpApi.Client)\n\n## Validation\n\n### Data Annotations\n```csharp\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(100, MinimumLength = 3)]\n    public string Name { get; set; }\n\n    [Range(0, 999.99)]\n    public decimal Price { get; set; }\n}\n```\n\n### Custom Validation with IValidatableObject\nBefore adding custom validation, decide if it's a **domain rule** or **application rule**:\n- **Domain rule**: Put validation in entity constructor or domain service (enforces business invariants)\n- **Application rule**: Use DTO validation (input format, required fields)\n\nOnly use `IValidatableObject` for application-level validation that can't be expressed with data annotations:\n\n```csharp\npublic class CreateBookDto : IValidatableObject\n{\n    public string Name { get; set; }\n    public string Description { get; set; }\n\n    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)\n    {\n        if (Name == Description)\n        {\n            yield return new ValidationResult(\n                \"Name and Description cannot be the same!\",\n                new[] { nameof(Name), nameof(Description) }\n            );\n        }\n    }\n}\n```\n\n### FluentValidation\n```csharp\npublic class CreateBookDtoValidator : AbstractValidator<CreateBookDto>\n{\n    public CreateBookDtoValidator()\n    {\n        RuleFor(x => x.Name).NotEmpty().Length(3, 100);\n        RuleFor(x => x.Price).GreaterThan(0);\n    }\n}\n```\n\n## Error Handling\n\n### Business Exceptions\n```csharp\nthrow new BusinessException(\"BookStore:010001\")\n    .WithData(\"BookName\", name);\n```\n\n### Entity Not Found\n```csharp\nvar book = await _bookRepository.FindAsync(id);\nif (book == null)\n{\n    throw new EntityNotFoundException(typeof(Book), id);\n}\n```\n\n### User-Friendly Exceptions\n```csharp\nthrow new UserFriendlyException(L[\"BookNotAvailable\"]);\n```\n\n### HTTP Status Code Mapping\nStatus code mapping is **configurable** in ABP (do not rely on a fixed mapping in business logic).\n\n| Exception | Typical HTTP Status |\n|-----------|-------------|\n| `AbpValidationException` | 400 |\n| `AbpAuthorizationException` | 401/403 |\n| `EntityNotFoundException` | 404 |\n| `BusinessException` | 403 (but configurable) |\n| Other exceptions | 500 |\n\n## Auto API Controllers\nABP automatically generates API controllers for application services:\n- Interface must inherit `IApplicationService` (which already has `[RemoteService]` attribute)\n- HTTP methods determined by method name prefix (Get, Create, Update, Delete)\n- Use `[RemoteService(false)]` to disable auto API generation for specific methods\n\n## Object Mapping (Mapperly / AutoMapper)\nABP supports **both Mapperly and AutoMapper** integrations. But the default mapping library is Mapperly. You need to first check the project's active mapping library.\n- Prefer the mapping provider already used in the solution (check existing mapping files / loaded modules).\n- In mixed solutions, explicitly setting the default provider may be required (see `docs/en/release-info/migration-guides/AutoMapper-To-Mapperly.md`).\n\n### Mapperly (compile-time)\nDefine mappers as partial classes:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\npublic override void ConfigureServices(ServiceConfigurationContext context)\n{\n    context.Services.AddSingleton<BookMapper>();\n}\n```\n\nUsage in application service:\n```csharp\npublic class BookAppService : ApplicationService\n{\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(BookMapper bookMapper)\n    {\n        _bookMapper = bookMapper;\n    }\n\n    public BookDto GetBook(Book book)\n    {\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n> **Note**: Mapperly generates mapping code at compile-time, providing better performance than runtime mappers.\n\n### AutoMapper (runtime)\nIf the solution uses AutoMapper, mappings are typically defined in `Profile` classes and registered via ABP's AutoMapper integration.\n\n<!-- File: .agents/skills/abp-authorization/SKILL.md (Tokens: ~1047 | Category: anthropic-skill) -->\n---\nname: abp-authorization\ndescription: ABP permission system - PermissionDefinitionProvider, [Authorize] attribute, CheckPolicyAsync, IsGrantedAsync, ICurrentUser, IPermissionManager, multi-tenancy side. Use when working with permissions, authorization, role-based access, or security in ABP projects.\n---\n\n# ABP Authorization\n\n> **Docs**: https://abp.io/docs/latest/framework/fundamentals/authorization\n\n## Permission Definition\nDefine permissions in `*.Application.Contracts` project:\n\n```csharp\npublic static class BookStorePermissions\n{\n    public const string GroupName = \"BookStore\";\n\n    public static class Books\n    {\n        public const string Default = GroupName + \".Books\";\n        public const string Create = Default + \".Create\";\n        public const string Edit = Default + \".Edit\";\n        public const string Delete = Default + \".Delete\";\n    }\n}\n```\n\nRegister in provider:\n```csharp\npublic class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider\n{\n    public override void Define(IPermissionDefinitionContext context)\n    {\n        var bookStoreGroup = context.AddGroup(BookStorePermissions.GroupName, L(\"Permission:BookStore\"));\n\n        var booksPermission = bookStoreGroup.AddPermission(\n            BookStorePermissions.Books.Default,\n            L(\"Permission:Books\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Create,\n            L(\"Permission:Books.Create\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Edit,\n            L(\"Permission:Books.Edit\"));\n\n        booksPermission.AddChild(\n            BookStorePermissions.Books.Delete,\n            L(\"Permission:Books.Delete\"));\n    }\n\n    private static LocalizableString L(string name)\n    {\n        return LocalizableString.Create<BookStoreResource>(name);\n    }\n}\n```\n\n## Using Permissions\n\n### Declarative (Attribute)\n```csharp\n[Authorize(BookStorePermissions.Books.Create)]\npublic virtual async Task<BookDto> CreateAsync(CreateBookDto input)\n{\n    // Only users with Books.Create permission can execute\n}\n```\n\n### Programmatic Check\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // Check and throw if not granted\n        await CheckPolicyAsync(BookStorePermissions.Books.Edit);\n\n        // Or check without throwing\n        if (await IsGrantedAsync(BookStorePermissions.Books.Delete))\n        {\n            // Has permission\n        }\n    }\n}\n```\n\n### Allow Anonymous Access\n```csharp\n[AllowAnonymous]\npublic virtual async Task<BookDto> GetPublicBookAsync(Guid id)\n{\n    // No authentication required\n}\n```\n\n## Current User\nAccess authenticated user info via `CurrentUser` property (available in base classes like `ApplicationService`, `DomainService`, `AbpController`):\n\n```csharp\npublic class BookAppService : ApplicationService\n{\n    public async Task DoSomethingAsync()\n    {\n        // CurrentUser is available from base class - no injection needed\n        var userId = CurrentUser.Id;\n        var userName = CurrentUser.UserName;\n        var email = CurrentUser.Email;\n        var isAuthenticated = CurrentUser.IsAuthenticated;\n        var roles = CurrentUser.Roles;\n        var tenantId = CurrentUser.TenantId;\n    }\n}\n\n// In other services, inject ICurrentUser\npublic class MyService : ITransientDependency\n{\n    private readonly ICurrentUser _currentUser;\n    public MyService(ICurrentUser currentUser) => _currentUser = currentUser;\n}\n```\n\n### Ownership Validation\n```csharp\npublic async Task UpdateMyBookAsync(Guid bookId, UpdateBookDto input)\n{\n    var book = await _bookRepository.GetAsync(bookId);\n\n    if (book.CreatorId != CurrentUser.Id)\n    {\n        throw new AbpAuthorizationException();\n    }\n\n    // Update book...\n}\n```\n\n## Multi-Tenancy Permissions\nControl permission availability per tenant side:\n\n```csharp\nbookStoreGroup.AddPermission(\n    BookStorePermissions.Books.Default,\n    L(\"Permission:Books\"),\n    multiTenancySide: MultiTenancySides.Tenant // Only for tenants\n);\n```\n\nOptions: `MultiTenancySides.Host`, `Tenant`, or `Both`\n\n## Feature-Dependent Permissions\n```csharp\nbooksPermission.RequireFeatures(\"BookStore.PremiumFeature\");\n```\n\n## Permission Management\nGrant/revoke permissions programmatically:\n\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly IPermissionManager _permissionManager;\n\n    public async Task GrantPermissionToUserAsync(Guid userId, string permissionName)\n    {\n        await _permissionManager.SetForUserAsync(userId, permissionName, true);\n    }\n\n    public async Task GrantPermissionToRoleAsync(string roleName, string permissionName)\n    {\n        await _permissionManager.SetForRoleAsync(roleName, permissionName, true);\n    }\n}\n```\n\n## Security Best Practices\n- Never trust client input for user identity\n- Use `CurrentUser` property (from base class) or inject `ICurrentUser`\n- Validate ownership in application service methods\n- Filter queries by current user when appropriate\n- Don't expose sensitive fields in DTOs\n\n<!-- File: .agents/skills/abp-blazor/SKILL.md (Tokens: ~1187 | Category: anthropic-skill) -->\n---\nname: abp-blazor\ndescription: ABP Blazor UI patterns - AbpComponentBase, AbpCrudPageBase, DataGrid, IMenuContributor, Message/Notify, Validations, JavaScript interop. Use when building or reviewing Blazor Server or WebAssembly UI components in ABP projects.\n---\n\n# ABP Blazor UI\n\n> **Docs**: https://abp.io/docs/latest/framework/ui/blazor/overall\n\n## Component Base Classes\n\n### Basic Component\n```razor\n@inherits AbpComponentBase\n\n<h1>@L[\"Books\"]</h1>\n```\n\n### CRUD Page\n```razor\n@page \"/books\"\n@inherits AbpCrudPageBase<IBookAppService, BookDto, Guid, PagedAndSortedResultRequestDto, CreateUpdateBookDto>\n\n<Card>\n    <CardHeader>\n        <Row>\n            <Column>\n                <h2>@L[\"Books\"]</h2>\n            </Column>\n            <Column TextAlignment=\"TextAlignment.End\">\n                @if (HasCreatePermission)\n                {\n                    <Button Color=\"Color.Primary\" Clicked=\"OpenCreateModalAsync\">\n                        @L[\"NewBook\"]\n                    </Button>\n                }\n            </Column>\n        </Row>\n    </CardHeader>\n    <CardBody>\n        <DataGrid TItem=\"BookDto\"\n                  Data=\"Entities\"\n                  ReadData=\"OnDataGridReadAsync\"\n                  TotalItems=\"TotalCount\"\n                  ShowPager=\"true\"\n                  PageSize=\"PageSize\">\n            <DataGridColumns>\n                <DataGridColumn Field=\"@nameof(BookDto.Name)\" Caption=\"@L[\"Name\"]\" />\n                <DataGridColumn Field=\"@nameof(BookDto.Price)\" Caption=\"@L[\"Price\"]\" />\n                <DataGridEntityActionsColumn TItem=\"BookDto\">\n                    <DisplayTemplate>\n                        <EntityActions TItem=\"BookDto\">\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Edit\"]\"\n                                          Visible=\"HasUpdatePermission\"\n                                          Clicked=\"() => OpenEditModalAsync(context)\" />\n                            <EntityAction TItem=\"BookDto\"\n                                          Text=\"@L[\"Delete\"]\"\n                                          Visible=\"HasDeletePermission\"\n                                          Clicked=\"() => DeleteEntityAsync(context)\"\n                                          ConfirmationMessage=\"() => GetDeleteConfirmationMessage(context)\" />\n                        </EntityActions>\n                    </DisplayTemplate>\n                </DataGridEntityActionsColumn>\n            </DataGridColumns>\n        </DataGrid>\n    </CardBody>\n</Card>\n```\n\n## Localization\n```razor\n@* Using L property from base class *@\n<h1>@L[\"PageTitle\"]</h1>\n\n@* With parameters *@\n<p>@L[\"WelcomeMessage\", CurrentUser.UserName]</p>\n```\n\n## Authorization\n```razor\n@* Check permission before rendering *@\n@if (await AuthorizationService.IsGrantedAsync(\"MyPermission\"))\n{\n    <Button>Admin Action</Button>\n}\n\n@* Using policy-based authorization *@\n<AuthorizeView Policy=\"MyPolicy\">\n    <Authorized>\n        <p>You have access!</p>\n    </Authorized>\n</AuthorizeView>\n```\n\n## Navigation & Menu\nConfigure in `*MenuContributor.cs`:\n\n```csharp\npublic class MyMenuContributor : IMenuContributor\n{\n    public async Task ConfigureMenuAsync(MenuConfigurationContext context)\n    {\n        if (context.Menu.Name == StandardMenus.Main)\n        {\n            var bookMenu = new ApplicationMenuItem(\n                \"Books\",\n                l[\"Menu:Books\"],\n                \"/books\",\n                icon: \"fa fa-book\"\n            );\n\n            if (await context.IsGrantedAsync(MyPermissions.Books.Default))\n            {\n                context.Menu.AddItem(bookMenu);\n            }\n        }\n    }\n}\n```\n\n## Notifications & Messages\n```csharp\n// Success message\nawait Message.Success(L[\"BookCreatedSuccessfully\"]);\n\n// Confirmation dialog\nif (await Message.Confirm(L[\"AreYouSure\"]))\n{\n    // User confirmed\n}\n\n// Toast notification\nawait Notify.Success(L[\"OperationCompleted\"]);\n```\n\n## Forms & Validation\n```razor\n<Form @ref=\"CreateForm\">\n    <Validations @ref=\"CreateValidationsRef\" Model=\"@NewEntity\" ValidateOnLoad=\"false\">\n        <Validation MessageLocalizer=\"@LH.Localize\">\n            <Field>\n                <FieldLabel>@L[\"Name\"]</FieldLabel>\n                <TextEdit @bind-Text=\"@NewEntity.Name\">\n                    <Feedback>\n                        <ValidationError />\n                    </Feedback>\n                </TextEdit>\n            </Field>\n        </Validation>\n    </Validations>\n</Form>\n```\n\n## JavaScript Interop\n```csharp\n@inject IJSRuntime JsRuntime\n\n@code {\n    private async Task CallJavaScript()\n    {\n        await JsRuntime.InvokeVoidAsync(\"myFunction\", arg1, arg2);\n        var result = await JsRuntime.InvokeAsync<string>(\"myFunctionWithReturn\");\n    }\n}\n```\n\n## State Management\n```csharp\n// Inject service proxy from HttpApi.Client\n@inject IBookAppService BookAppService\n\n@code {\n    private List<BookDto> Books { get; set; }\n\n    protected override async Task OnInitializedAsync()\n    {\n        var result = await BookAppService.GetListAsync(new PagedAndSortedResultRequestDto());\n        Books = result.Items.ToList();\n    }\n}\n```\n\n## Code-Behind Pattern\n**Books.razor:**\n```razor\n@page \"/books\"\n@inherits BooksBase\n```\n\n**Books.razor.cs:**\n```csharp\npublic partial class Books : BooksBase\n{\n    // Component logic here\n}\n```\n\n**BooksBase.cs:**\n```csharp\npublic abstract class BooksBase : AbpComponentBase\n{\n    [Inject]\n    protected IBookAppService BookAppService { get; set; }\n}\n```\n\n<!-- File: .agents/skills/abp-cli/SKILL.md (Tokens: ~669 | Category: anthropic-skill) -->\n---\nname: abp-cli\ndescription: ABP CLI commands - generate-proxy, install-libs, add-package-ref, new-module, install-module, abp update, abp clean, abp suite generate. Use when the user asks how to run ABP CLI commands, generate proxies, install libraries, or use ABP Suite.\n---\n\n# ABP CLI Commands\n\n> **Full documentation**: https://abp.io/docs/latest/cli\n> Use `abp help [command]` for detailed options.\n\n## Generate Client Proxies\n\n```bash\n# URL flag: `-u` (short) or `--url` (long). Use whichever your team prefers, but keep it consistent.\n#\n# Angular (host must be running)\nabp generate-proxy -t ng\n\n# C# client proxies\nabp generate-proxy -t csharp -u https://localhost:44300\n\n# Integration services only (microservices)\nabp generate-proxy -t csharp -u https://localhost:44300 -st integration\n\n# JavaScript\nabp generate-proxy -t js -u https://localhost:44300\n```\n\n## Install Client-Side Libraries\n\n```bash\n# Install NPM packages for MVC/Blazor Server\nabp install-libs\n```\n\n## Add Package Reference\n\n```bash\n# Add project reference with module dependency\nabp add-package-ref Acme.BookStore.Domain\nabp add-package-ref Acme.BookStore.Domain -t Acme.BookStore.Application\n```\n\n## Module Operations\n\n```bash\n# Create new module in solution\nabp new-module Acme.OrderManagement -t module:ddd\n\n# Install published module\nabp install-module Volo.Blogging\n\n# Add ABP NuGet package\nabp add-package Volo.Abp.Caching.StackExchangeRedis\n```\n\n## Update & Clean\n\n```bash\nabp update                  # Update all ABP packages\nabp update --version 8.0.0  # Specific version\nabp clean                   # Delete bin/obj folders\n```\n\n## ABP Suite (CRUD Generation)\n\nGenerate CRUD pages from entity JSON (created via Suite UI):\n\n```bash\nabp suite generate --entity .suite/entities/Book.json --solution ./Acme.BookStore.sln\n```\n\n> **Note**: Entity JSON files are created when you generate an entity via ABP Suite UI. They are stored in `.suite/entities/` folder.\n> **Suite docs**: https://abp.io/docs/latest/suite\n\n## Quick Reference\n\n| Task | Command |\n|------|---------|\n| Angular proxies | `abp generate-proxy -t ng` |\n| C# proxies | `abp generate-proxy -t csharp -u URL` |\n| Install JS libs | `abp install-libs` |\n| Add reference | `abp add-package-ref PackageName` |\n| Create module | `abp new-module ModuleName` |\n| Install module | `abp install-module ModuleName` |\n| Update packages | `abp update` |\n| Clean solution | `abp clean` |\n| Suite CRUD | `abp suite generate -e entity.json -s solution.sln` |\n| Get help | `abp help [command]` |\n\n<!-- File: .agents/skills/abp-core/SKILL.md (Tokens: ~1543 | Category: anthropic-skill) -->\n---\nname: abp-core\ndescription: Core ABP Framework conventions - module system, DI registration, base classes (ApplicationService, DomainService), IClock, BusinessException, localization, async patterns. Use when working on any ABP project, asking about ABP fundamentals, or unsure which skill applies.\n---\n\n# ABP Core Conventions\n\n> **Documentation**: https://abp.io/docs/latest\n> **API Reference**: https://abp.io/docs/api/\n\n## Key Rules\n\n- Use `IClock` / `Clock.Now` instead of `DateTime.Now` / `DateTime.UtcNow`\n- Use `ITransientDependency` / `ISingletonDependency` instead of `AddScoped/AddTransient/AddSingleton`\n- Use `IRepository<T>` instead of injecting `DbContext` directly\n- Check base class properties (`Clock`, `CurrentUser`, `GuidGenerator`, `L`) before injecting services\n- Use `BusinessException` with namespaced error codes for domain rule violations\n\n## Module System\nEvery ABP application/module has a module class that configures services:\n\n```csharp\n[DependsOn(\n    typeof(AbpDddDomainModule),\n    typeof(AbpEntityFrameworkCoreModule)\n)]\npublic class MyAppModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        // Service registration and configuration\n    }\n}\n```\n\n> **Note**: Middleware configuration (`OnApplicationInitialization`) should only be done in the final host application, not in reusable modules.\n\n## Dependency Injection Conventions\n\n### Automatic Registration\nABP automatically registers services implementing marker interfaces:\n- `ITransientDependency` → Transient lifetime\n- `ISingletonDependency` → Singleton lifetime\n- `IScopedDependency` → Scoped lifetime\n\nClasses inheriting from `ApplicationService`, `DomainService`, `AbpController` are also auto-registered.\n\n### Repository Usage\nYou can use the generic `IRepository<TEntity, TKey>` for simple CRUD operations. Define custom repository interfaces only when you need custom query methods:\n\n```csharp\n// Simple CRUD - Generic repository is fine\npublic class BookAppService : ApplicationService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // ✅ OK for simple operations\n}\n\n// Custom queries needed - Define custom interface\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name); // Custom query\n}\n\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ Use custom when needed\n}\n```\n\n### Exposing Services\n```csharp\n[ExposeServices(typeof(IMyService))]\npublic class MyService : IMyService, ITransientDependency { }\n```\n\n## Important Base Classes\n\n| Base Class | Purpose |\n|------------|---------|\n| `Entity<TKey>` | Basic entity with ID |\n| `AggregateRoot<TKey>` | DDD aggregate root |\n| `DomainService` | Domain business logic |\n| `ApplicationService` | Use case orchestration |\n| `AbpController` | REST API controller |\n\nABP base classes already inject commonly used services as properties. Before injecting a service, check if it's already available:\n\n| Property | Available In | Description |\n|----------|--------------|-------------|\n| `GuidGenerator` | All base classes | Generate GUIDs |\n| `Clock` | All base classes | Current time (use instead of `DateTime`) |\n| `CurrentUser` | All base classes | Authenticated user info |\n| `CurrentTenant` | All base classes | Multi-tenancy context |\n| `L` (StringLocalizer) | `ApplicationService`, `AbpController` | Localization |\n| `AuthorizationService` | `ApplicationService`, `AbpController` | Permission checks |\n| `FeatureChecker` | `ApplicationService`, `AbpController` | Feature availability |\n| `DataFilter` | All base classes | Data filtering (soft-delete, tenant) |\n| `UnitOfWorkManager` | `ApplicationService`, `DomainService` | Unit of work management |\n| `LoggerFactory` | All base classes | Create loggers |\n| `Logger` | All base classes | Logging (auto-created) |\n| `LazyServiceProvider` | All base classes | Lazy service resolution |\n\n**Useful methods from base classes:**\n- `CheckPolicyAsync()` - Check permission and throw if not granted\n- `IsGrantedAsync()` - Check permission without throwing\n\n## Async Best Practices\n- Use async all the way - never use `.Result` or `.Wait()`\n- All async methods should end with `Async` suffix\n- ABP automatically handles `CancellationToken` in most cases (e.g., from `HttpContext.RequestAborted`)\n- Only pass `CancellationToken` explicitly when implementing custom cancellation logic\n\n## Time Handling\nNever use `DateTime.Now` or `DateTime.UtcNow` directly. Use ABP's `IClock` service:\n\n```csharp\n// In classes inheriting from base classes (ApplicationService, DomainService, etc.)\npublic class BookAppService : ApplicationService\n{\n    public void DoSomething()\n    {\n        var now = Clock.Now; // ✅ Already available as property\n    }\n}\n\n// In other services - inject IClock\npublic class MyService : ITransientDependency\n{\n    private readonly IClock _clock;\n\n    public MyService(IClock clock) => _clock = clock;\n\n    public void DoSomething()\n    {\n        var now = _clock.Now; // ✅ Correct\n        // var now = DateTime.Now; // ❌ Wrong - not testable, ignores timezone settings\n    }\n}\n```\n\n> **Tip**: Before injecting a service, check if it's already available as a property in your base classes.\n\n## Business Exceptions\nUse `BusinessException` for domain rule violations with namespaced error codes:\n\n```csharp\nthrow new BusinessException(\"MyModule:BookNameAlreadyExists\")\n    .WithData(\"Name\", bookName);\n```\n\nConfigure localization mapping:\n```csharp\nConfigure<AbpExceptionLocalizationOptions>(options =>\n{\n    options.MapCodeNamespace(\"MyModule\", typeof(MyModuleResource));\n});\n```\n\n## Localization\n- In base classes (`ApplicationService`, `AbpController`, etc.): Use `L[\"Key\"]` - this is the `IStringLocalizer` property\n- In other services: Inject `IStringLocalizer<TResource>`\n- Always localize user-facing messages and exceptions\n\n**Localization file location**: `*.Domain.Shared/Localization/{ResourceName}/{lang}.json`\n\n```json\n// Example: MyProject.Domain.Shared/Localization/MyProject/en.json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"Menu:Home\": \"Home\",\n    \"Welcome\": \"Welcome\",\n    \"BookName\": \"Book Name\"\n  }\n}\n```\n\n## ❌ Never Use (ABP Anti-Patterns)\n\n| Don't Use | Use Instead |\n|-----------|-------------|\n| Minimal APIs | ABP Controllers or Auto API Controllers |\n| MediatR | Application Services |\n| `DbContext` directly in App Services | `IRepository<T>` |\n| `AddScoped/AddTransient/AddSingleton` | `ITransientDependency`, `ISingletonDependency` |\n| `DateTime.Now` | `IClock` / `Clock.Now` |\n| Custom UnitOfWork | ABP's `IUnitOfWorkManager` |\n| Manual HTTP calls from UI | ABP client proxies (`generate-proxy`) |\n| Hardcoded role checks | Permission-based authorization |\n| Business logic in Controllers | Application Services |\n\n<!-- File: .agents/skills/abp-ddd/SKILL.md (Tokens: ~1757 | Category: anthropic-skill) -->\n---\nname: abp-ddd\ndescription: ABP DDD patterns - Entities, Aggregate Roots, value objects, Repositories, Domain Services, Domain Events, Specifications. Use when designing domain layer, creating entities, repositories, or domain services in ABP projects.\n---\n\n# ABP DDD Patterns\n\n> **Docs**: https://abp.io/docs/latest/framework/architecture/domain-driven-design\n\n## Anti-Patterns to Avoid\n\n- **Anemic entities**: public setters with no behavior — use private setters + methods that enforce invariants\n- **Repository for child entities**: only aggregate roots get repositories — access child entities through their root\n- **Generating GUID in entity constructor**: use `IGuidGenerator` from outside and pass `id` parameter\n- **Navigation properties to other aggregates**: reference by `Id` only, never add full navigation properties across aggregates\n- **Domain service depending on current user**: accept values from the application layer instead\n\n## Rich Domain Model vs Anemic Domain Model\n\nABP promotes **Rich Domain Model** pattern where entities contain both data AND behavior:\n\n| Anemic (Anti-pattern) | Rich (Recommended) |\n|----------------------|-------------------|\n| Entity = data only | Entity = data + behavior |\n| Logic in services | Logic in entity methods |\n| Public setters | Private setters with methods |\n| No validation in entity | Entity enforces invariants |\n\n**Encapsulation is key**: Protect entity state by using private setters and exposing behavior through methods.\n\n## Entities\n\n### Entity Example (Rich Model)\n```csharp\npublic class OrderLine : Entity<Guid>\n{\n    public Guid ProductId { get; private set; }\n    public int Count { get; private set; }\n    public decimal Price { get; private set; }\n\n    protected OrderLine() { } // For ORM\n\n    internal OrderLine(Guid id, Guid productId, int count, decimal price) : base(id)\n    {\n        ProductId = productId;\n        SetCount(count); // Validates through method\n        Price = price;\n    }\n\n    public void SetCount(int count)\n    {\n        if (count <= 0)\n            throw new BusinessException(\"Orders:InvalidCount\");\n        Count = count;\n    }\n}\n```\n\n## Aggregate Roots\n\nAggregate roots are consistency boundaries that:\n- Own their child entities\n- Enforce business rules\n- Publish domain events\n\n```csharp\npublic class Order : AggregateRoot<Guid>\n{\n    public string OrderNumber { get; private set; }\n    public Guid CustomerId { get; private set; }\n    public OrderStatus Status { get; private set; }\n    public ICollection<OrderLine> Lines { get; private set; }\n\n    protected Order() { } // For ORM\n\n    public Order(Guid id, string orderNumber, Guid customerId) : base(id)\n    {\n        OrderNumber = Check.NotNullOrWhiteSpace(orderNumber, nameof(orderNumber));\n        CustomerId = customerId;\n        Status = OrderStatus.Created;\n        Lines = new List<OrderLine>();\n    }\n\n    public void AddLine(Guid lineId, Guid productId, int count, decimal price)\n    {\n        // Business rule: Can only add lines to created orders\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotModifyOrder\");\n\n        Lines.Add(new OrderLine(lineId, productId, count, price));\n    }\n\n    public void Complete()\n    {\n        if (Status != OrderStatus.Created)\n            throw new BusinessException(\"Orders:CannotCompleteOrder\");\n\n        Status = OrderStatus.Completed;\n\n        // Publish events for side effects\n        AddLocalEvent(new OrderCompletedEvent(Id));           // Same transaction\n        AddDistributedEvent(new OrderCompletedEto { OrderId = Id }); // Cross-service\n    }\n}\n```\n\n### Domain Events\n- `AddLocalEvent()` - Handled within same transaction, can access full entity\n- `AddDistributedEvent()` - Handled asynchronously, use ETOs (Event Transfer Objects)\n\n### Entity Best Practices\n- **Encapsulation**: Private setters, public methods that enforce rules\n- **Primary constructor**: Enforce invariants, accept `id` parameter\n- **Protected parameterless constructor**: Required for ORM\n- **Initialize collections**: In primary constructor\n- **Virtual members**: For ORM proxy compatibility\n- **Reference by Id**: Don't add navigation properties to other aggregates\n- **Don't generate GUID in constructor**: Use `IGuidGenerator` externally\n\n## Repository Pattern\n\n### When to Use Custom Repository\n- **Generic repository** (`IRepository<T, TKey>`): Sufficient for simple CRUD operations\n- **Custom repository**: Only when you need custom query methods\n\n### Interface (Domain Layer)\n```csharp\n// Define custom interface only when custom queries are needed\npublic interface IOrderRepository : IRepository<Order, Guid>\n{\n    Task<Order> FindByOrderNumberAsync(string orderNumber, bool includeDetails = false);\n    Task<List<Order>> GetListByCustomerAsync(Guid customerId, bool includeDetails = false);\n}\n```\n\n### Repository Best Practices\n- **One repository per aggregate root only** - Never create repositories for child entities\n- Child entities must be accessed/modified only through their aggregate root\n- Creating repositories for child entities breaks data consistency (bypasses aggregate root's business rules)\n- In ABP, use `AddDefaultRepositories()` without `includeAllEntities: true` to enforce this\n- Define custom repository only when custom queries are needed\n- ABP handles `CancellationToken` automatically; add parameter only for explicit cancellation control\n- Single entity methods: `includeDetails = true` by default\n- List methods: `includeDetails = false` by default\n- Don't return projection classes\n- Interface in Domain, implementation in data layer\n\n```csharp\n// ✅ Correct: Repository for aggregate root (Order)\npublic interface IOrderRepository : IRepository<Order, Guid> { }\n\n// ❌ Wrong: Repository for child entity (OrderLine)\n// OrderLine should only be accessed through Order aggregate\npublic interface IOrderLineRepository : IRepository<OrderLine, Guid> { } // Don't do this!\n```\n\n## Domain Services\n\nUse domain services for business logic that:\n- Spans multiple aggregates\n- Requires repository queries to enforce rules\n\n```csharp\npublic class OrderManager : DomainService\n{\n    private readonly IOrderRepository _orderRepository;\n    private readonly IProductRepository _productRepository;\n\n    public OrderManager(\n        IOrderRepository orderRepository,\n        IProductRepository productRepository)\n    {\n        _orderRepository = orderRepository;\n        _productRepository = productRepository;\n    }\n\n    public async Task<Order> CreateAsync(string orderNumber, Guid customerId)\n    {\n        // Business rule: Order number must be unique\n        var existing = await _orderRepository.FindByOrderNumberAsync(orderNumber);\n        if (existing != null)\n        {\n            throw new BusinessException(\"Orders:OrderNumberAlreadyExists\")\n                .WithData(\"OrderNumber\", orderNumber);\n        }\n\n        return new Order(GuidGenerator.Create(), orderNumber, customerId);\n    }\n\n    public async Task AddProductAsync(Order order, Guid productId, int count)\n    {\n        var product = await _productRepository.GetAsync(productId);\n        order.AddLine(productId, count, product.Price);\n    }\n}\n```\n\n### Domain Service Best Practices\n- Use `*Manager` suffix naming\n- No interface by default (create only if needed)\n- Accept/return domain objects, not DTOs\n- Don't depend on authenticated user - pass values from application layer\n- Use base class properties (`GuidGenerator`, `Clock`) instead of injecting these services\n\n## Domain Events\n\n### Local Events\n```csharp\n// In aggregate\nAddLocalEvent(new OrderCompletedEvent(Id));\n\n// Handler\npublic class OrderCompletedEventHandler : ILocalEventHandler<OrderCompletedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCompletedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n```\n\n### Distributed Events (ETO)\nFor inter-module/microservice communication:\n```csharp\n// In Domain.Shared\n[EventName(\"Orders.OrderCompleted\")]\npublic class OrderCompletedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n```\n\n## Specifications\n\nReusable query conditions:\n```csharp\npublic class CompletedOrdersSpec : Specification<Order>\n{\n    public override Expression<Func<Order, bool>> ToExpression()\n    {\n        return o => o.Status == OrderStatus.Completed;\n    }\n}\n\n// Usage\nvar orders = await _orderRepository.GetListAsync(new CompletedOrdersSpec());\n```\n\n<!-- File: .agents/skills/abp-dependency-rules/SKILL.md (Tokens: ~979 | Category: anthropic-skill) -->\n---\nname: abp-dependency-rules\ndescription: ABP project layer dependency rules - which projects can reference which, domain/application/infrastructure separation, cross-layer violations to avoid. Use when reviewing project structure, adding new project references, or checking if a dependency direction is correct.\n---\n\n# ABP Dependency Rules\n\n## Core Principles (All Templates)\n\nThese principles apply regardless of solution structure:\n\n1. **Domain logic never depends on infrastructure** (no DbContext in domain/application)\n2. **Use abstractions** (interfaces) for dependencies\n3. **Higher layers depend on lower layers**, never the reverse\n4. **Data access through repositories**, not direct DbContext\n\n## Layered Template Structure\n\n> **Note**: This section applies to layered templates (app, module). Single-layer and microservice templates have different structures.\n\n```\nDomain.Shared    → Constants, enums, localization keys\n       ↑\n    Domain       → Entities, repository interfaces, domain services\n       ↑\nApplication.Contracts → App service interfaces, DTOs\n       ↑\n  Application    → App service implementations\n       ↑\n   HttpApi       → REST controllers (optional)\n       ↑\n     Host        → Final application with DI and middleware\n```\n\n### Layered Dependency Direction\n\n| Project | Can Reference | Referenced By |\n|---------|---------------|---------------|\n| Domain.Shared | Nothing | All |\n| Domain | Domain.Shared | Application, Data layer |\n| Application.Contracts | Domain.Shared | Application, HttpApi, Clients |\n| Application | Domain, Contracts | Host |\n| EntityFrameworkCore/MongoDB | Domain | Host only |\n| HttpApi | Contracts only | Host |\n\n## Critical Rules\n\n### ❌ Never Do\n```csharp\n// Application layer accessing DbContext directly\npublic class BookAppService : ApplicationService\n{\n    private readonly MyDbContext _dbContext; // ❌ WRONG\n}\n\n// Domain depending on application layer\npublic class BookManager : DomainService\n{\n    private readonly IBookAppService _appService; // ❌ WRONG\n}\n\n// HttpApi depending on Application implementation\npublic class BookController : AbpController\n{\n    private readonly BookAppService _bookAppService; // ❌ WRONG - Use interface\n}\n```\n\n### ✅ Always Do\n```csharp\n// Application layer using repository abstraction\npublic class BookAppService : ApplicationService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// Domain service using domain abstractions\npublic class BookManager : DomainService\n{\n    private readonly IBookRepository _bookRepository; // ✅ CORRECT\n}\n\n// HttpApi depending on contracts only\npublic class BookController : AbpController\n{\n    private readonly IBookAppService _bookAppService; // ✅ CORRECT\n}\n```\n\n## Repository Pattern Enforcement\n\n### Interface Location\n```csharp\n// In Domain project\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### Implementation Location\n```csharp\n// In EntityFrameworkCore project\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n\n// In MongoDB project\npublic class BookRepository : MongoDbRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    // Implementation\n}\n```\n\n## Multi-Application Scenarios\n\nWhen you have multiple applications (e.g., Admin + Public API):\n\n### Vertical Separation\n```\nMyProject.Admin.Application      - Admin-specific services\nMyProject.Public.Application     - Public-specific services\nMyProject.Domain                 - Shared domain (both reference this)\n```\n\n### Rules\n- Admin and Public application layers **MUST NOT** reference each other\n- Share domain logic, not application logic\n- Each vertical can have its own DTOs even if similar\n\n## Enforcement Checklist (Layered Templates)\n\nWhen adding a new feature:\n1. **Entity changes?** → Domain project\n2. **Constants/enums?** → Domain.Shared project\n3. **Repository interface?** → Domain project (only if custom queries needed)\n4. **Repository implementation?** → EntityFrameworkCore/MongoDB project\n5. **DTOs and service interface?** → Application.Contracts project\n6. **Service implementation?** → Application project\n7. **API endpoint?** → HttpApi project (if not using auto API controllers)\n\n## Common Violations to Watch\n\n| Violation | Impact | Fix |\n|-----------|--------|-----|\n| DbContext in Application | Breaks DB independence | Use repository |\n| Entity in DTO | Exposes internals | Map to DTO |\n| IQueryable in interface | Breaks abstraction | Return concrete types |\n| Cross-module app service call | Tight coupling | Use events or domain |\n\n<!-- File: .agents/skills/abp-development-flow/SKILL.md (Tokens: ~1546 | Category: anthropic-skill) -->\n---\nname: abp-development-flow\ndescription: ABP development workflow - step-by-step guide for adding new entities, migrations, application services, localization, permissions, and tests. Use when adding new features or entities to an ABP project.\n---\n\n# ABP Development Workflow\n\n> **Tutorials**: https://abp.io/docs/latest/tutorials\n\n## Adding a New Entity (Full Flow)\n\n### 1. Domain Layer\nCreate entity (location varies by template: `*.Domain/Entities/` for layered, `Entities/` for single-layer/microservice):\n\n```csharp\npublic class Book : AggregateRoot<Guid>\n{\n    public string Name { get; private set; }\n    public decimal Price { get; private set; }\n    public Guid AuthorId { get; private set; }\n\n    protected Book() { }\n\n    public Book(Guid id, string name, decimal price, Guid authorId) : base(id)\n    {\n        Name = Check.NotNullOrWhiteSpace(name, nameof(name));\n        SetPrice(price);\n        AuthorId = authorId;\n    }\n\n    public void SetPrice(decimal price)\n    {\n        Price = Check.Range(price, nameof(price), 0, 9999);\n    }\n}\n```\n\n### 2. Domain.Shared\nAdd constants and enums in `*.Domain.Shared/`:\n\n```csharp\npublic static class BookConsts\n{\n    public const int MaxNameLength = 128;\n}\n\npublic enum BookType\n{\n    Novel,\n    Science,\n    Biography\n}\n```\n\n### 3. Repository Interface (Optional)\nDefine custom repository in `*.Domain/` only if you need custom query methods. For simple CRUD, use generic `IRepository<Book, Guid>` directly:\n\n```csharp\n// Only if custom queries are needed\npublic interface IBookRepository : IRepository<Book, Guid>\n{\n    Task<Book> FindByNameAsync(string name);\n}\n```\n\n### 4. EF Core Configuration\nIn `*.EntityFrameworkCore/`:\n\n**DbContext:**\n```csharp\npublic DbSet<Book> Books { get; set; }\n```\n\n**OnModelCreating:**\n```csharp\nbuilder.Entity<Book>(b =>\n{\n    b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n    b.ConfigureByConvention();\n    b.Property(x => x.Name).IsRequired().HasMaxLength(BookConsts.MaxNameLength);\n    b.HasIndex(x => x.Name);\n});\n```\n\n**Repository Implementation (only if custom interface defined):**\n```csharp\npublic class BookRepository : EfCoreRepository<MyDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(string name)\n    {\n        return await (await GetDbSetAsync())\n            .FirstOrDefaultAsync(b => b.Name == name);\n    }\n}\n```\n\n### 5. Run Migration\nSee `abp-ef-core` skill for migration commands. Recommended: use `DbMigrator` project to apply migrations and seed data.\n\n### 6. Application.Contracts\nCreate DTOs and service interface:\n\n```csharp\n// DTOs\npublic class BookDto : EntityDto<Guid>\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n    public Guid AuthorId { get; set; }\n}\n\npublic class CreateBookDto\n{\n    [Required]\n    [StringLength(BookConsts.MaxNameLength)]\n    public string Name { get; set; }\n\n    [Range(0, 9999)]\n    public decimal Price { get; set; }\n\n    [Required]\n    public Guid AuthorId { get; set; }\n}\n\n// Service Interface\npublic interface IBookAppService : IApplicationService\n{\n    Task<BookDto> GetAsync(Guid id);\n    Task<PagedResultDto<BookDto>> GetListAsync(PagedAndSortedResultRequestDto input);\n    Task<BookDto> CreateAsync(CreateBookDto input);\n}\n```\n\n### 7. Object Mapping (Mapperly / AutoMapper)\nABP supports both Mapperly and AutoMapper. Prefer the provider already used in the solution.\n\nIf the solution uses **Mapperly**, create a mapper in the Application project:\n\n```csharp\n[Mapper]\npublic partial class BookMapper\n{\n    public partial BookDto MapToDto(Book book);\n    public partial List<BookDto> MapToDtoList(List<Book> books);\n}\n```\n\nRegister in module:\n```csharp\ncontext.Services.AddSingleton<BookMapper>();\n```\n\n### 8. Application Service\nImplement service (using generic repository - use `IBookRepository` if you defined custom interface in step 3):\n\n```csharp\npublic class BookAppService : ApplicationService, IBookAppService\n{\n    private readonly IRepository<Book, Guid> _bookRepository; // Or IBookRepository\n    private readonly BookMapper _bookMapper;\n\n    public BookAppService(\n        IRepository<Book, Guid> bookRepository,\n        BookMapper bookMapper)\n    {\n        _bookRepository = bookRepository;\n        _bookMapper = bookMapper;\n    }\n\n    public async Task<BookDto> GetAsync(Guid id)\n    {\n        var book = await _bookRepository.GetAsync(id);\n        return _bookMapper.MapToDto(book);\n    }\n\n    [Authorize(MyProjectPermissions.Books.Create)]\n    public async Task<BookDto> CreateAsync(CreateBookDto input)\n    {\n        var book = new Book(\n            GuidGenerator.Create(),\n            input.Name,\n            input.Price,\n            input.AuthorId\n        );\n\n        await _bookRepository.InsertAsync(book);\n        return _bookMapper.MapToDto(book);\n    }\n}\n```\n\n### 9. Add Localization\nIn `*.Domain.Shared/Localization/*/en.json`:\n\n```json\n{\n  \"Book\": \"Book\",\n  \"Books\": \"Books\",\n  \"BookName\": \"Name\",\n  \"BookPrice\": \"Price\"\n}\n```\n\n### 10. Add Permissions (if needed)\n```csharp\npublic static class MyProjectPermissions\n{\n    public static class Books\n    {\n        public const string Default = \"MyProject.Books\";\n        public const string Create = Default + \".Create\";\n    }\n}\n```\n\n### 11. Add Tests\n```csharp\npublic class BookAppService_Tests : MyProjectApplicationTestBase\n{\n    private readonly IBookAppService _bookAppService;\n\n    public BookAppService_Tests()\n    {\n        _bookAppService = GetRequiredService<IBookAppService>();\n    }\n\n    [Fact]\n    public async Task Should_Create_Book()\n    {\n        var result = await _bookAppService.CreateAsync(new CreateBookDto\n        {\n            Name = \"Test Book\",\n            Price = 19.99m\n        });\n\n        result.Id.ShouldNotBe(Guid.Empty);\n        result.Name.ShouldBe(\"Test Book\");\n    }\n}\n```\n\n## Checklist for New Features\n\n- [ ] Entity created with proper constructors\n- [ ] Constants in Domain.Shared\n- [ ] Custom repository interface in Domain (only if custom queries needed)\n- [ ] EF Core configuration added\n- [ ] Custom repository implementation (only if interface defined)\n- [ ] Migration generated and applied (use DbMigrator)\n- [ ] Mapperly mapper created and registered\n- [ ] DTOs created in Application.Contracts\n- [ ] Service interface defined\n- [ ] Service implementation with authorization\n- [ ] Localization keys added\n- [ ] Permissions defined (if applicable)\n- [ ] Tests written\n\n<!-- File: .agents/skills/abp-ef-core/SKILL.md (Tokens: ~1546 | Category: anthropic-skill) -->\n---\nname: abp-ef-core\ndescription: ABP Entity Framework Core - DbContext, entity configuration, EfCoreRepository implementation, migrations (dotnet ef migrations add), data seeding. Use when working in EntityFrameworkCore projects, adding migrations, or implementing EF Core repositories.\n---\n\n# ABP Entity Framework Core\n\n> **Docs**: https://abp.io/docs/latest/framework/data/entity-framework-core\n\n## Never Do\n\n| Don't | Do Instead |\n|-------|-----------|\n| Skip `b.ConfigureByConvention()` | Always call it first in entity config |\n| `AddDefaultRepositories(includeAllEntities: true)` | Use `AddDefaultRepositories()` only for aggregate roots |\n| Inject `DbContext` in application/domain services | Use `IRepository<T>` or custom repository interface |\n| Use `DbContext` directly outside the EF Core project | Access via `GetDbContextAsync()` inside repository only |\n\n## DbContext Configuration\n\n```csharp\n[ConnectionStringName(\"Default\")]\npublic class MyProjectDbContext : AbpDbContext<MyProjectDbContext>\n{\n    public DbSet<Book> Books { get; set; }\n    public DbSet<Author> Authors { get; set; }\n\n    public MyProjectDbContext(DbContextOptions<MyProjectDbContext> options)\n        : base(options)\n    {\n    }\n\n    protected override void OnModelCreating(ModelBuilder builder)\n    {\n        base.OnModelCreating(builder);\n\n        // Configure all entities\n        builder.ConfigureMyProject();\n    }\n}\n```\n\n## Entity Configuration\n\n```csharp\npublic static class MyProjectDbContextModelCreatingExtensions\n{\n    public static void ConfigureMyProject(this ModelBuilder builder)\n    {\n        Check.NotNull(builder, nameof(builder));\n\n        builder.Entity<Book>(b =>\n        {\n            b.ToTable(MyProjectConsts.DbTablePrefix + \"Books\", MyProjectConsts.DbSchema);\n            b.ConfigureByConvention(); // ABP conventions (audit, soft-delete, etc.)\n\n            // Property configurations\n            b.Property(x => x.Name)\n                .IsRequired()\n                .HasMaxLength(BookConsts.MaxNameLength);\n\n            b.Property(x => x.Price)\n                .HasColumnType(\"decimal(18,2)\");\n\n            // Indexes\n            b.HasIndex(x => x.Name);\n\n            // Relationships\n            b.HasOne<Author>()\n                .WithMany()\n                .HasForeignKey(x => x.AuthorId)\n                .OnDelete(DeleteBehavior.Restrict);\n        });\n    }\n}\n```\n\n## Repository Implementation\n\n```csharp\npublic class BookRepository : EfCoreRepository<MyProjectDbContext, Book, Guid>, IBookRepository\n{\n    public BookRepository(IDbContextProvider<MyProjectDbContext> dbContextProvider)\n        : base(dbContextProvider)\n    {\n    }\n\n    public async Task<Book> FindByNameAsync(\n        string name,\n        bool includeDetails = true,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .FirstOrDefaultAsync(\n                b => b.Name == name,\n                GetCancellationToken(cancellationToken));\n    }\n\n    public async Task<List<Book>> GetListByAuthorAsync(\n        Guid authorId,\n        bool includeDetails = false,\n        CancellationToken cancellationToken = default)\n    {\n        var dbSet = await GetDbSetAsync();\n\n        return await dbSet\n            .IncludeDetails(includeDetails)\n            .Where(b => b.AuthorId == authorId)\n            .ToListAsync(GetCancellationToken(cancellationToken));\n    }\n\n    public override async Task<IQueryable<Book>> WithDetailsAsync()\n    {\n        return (await GetQueryableAsync())\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Extension Method for Include\n```csharp\npublic static class BookEfCoreQueryableExtensions\n{\n    public static IQueryable<Book> IncludeDetails(\n        this IQueryable<Book> queryable,\n        bool include = true)\n    {\n        if (!include)\n        {\n            return queryable;\n        }\n\n        return queryable\n            .Include(b => b.Reviews);\n    }\n}\n```\n\n## Migration Commands\n\n```bash\n# Navigate to EF Core project\ncd src/MyProject.EntityFrameworkCore\n\n# Add migration\ndotnet ef migrations add MigrationName\n\n# Apply migration (choose one):\ndotnet run --project ../MyProject.DbMigrator   # Recommended - also seeds data\ndotnet ef database update  # EF Core command only\n\n# Remove last migration (if not applied)\ndotnet ef migrations remove\n\n# Generate SQL script\ndotnet ef migrations script\n```\n\n> **Note**: ABP templates include `IDesignTimeDbContextFactory` in the EF Core project, so `-s` (startup project) parameter is not needed.\n\n## Module Configuration\n\n```csharp\n[DependsOn(typeof(AbpEntityFrameworkCoreModule))]\npublic class MyProjectEntityFrameworkCoreModule : AbpModule\n{\n    public override void ConfigureServices(ServiceConfigurationContext context)\n    {\n        context.Services.AddAbpDbContext<MyProjectDbContext>(options =>\n        {\n            // Add default repositories for aggregate roots only (DDD best practice)\n            options.AddDefaultRepositories();\n            // ⚠️ Avoid includeAllEntities: true - it creates repositories for child entities,\n            // allowing them to be modified without going through the aggregate root,\n            // which breaks data consistency\n        });\n\n        Configure<AbpDbContextOptions>(options =>\n        {\n            options.UseSqlServer(); // or UseNpgsql(), UseMySql(), etc.\n        });\n    }\n}\n```\n\n## Best Practices\n\n### Repositories for Aggregate Roots Only\nDon't use `includeAllEntities: true` in `AddDefaultRepositories()`. This creates repositories for child entities, allowing direct modification without going through the aggregate root - breaking DDD data consistency rules.\n\n```csharp\n// ✅ Correct - Only aggregate roots get repositories\noptions.AddDefaultRepositories();\n\n// ❌ Avoid - Creates repositories for ALL entities including child entities\noptions.AddDefaultRepositories(includeAllEntities: true);\n```\n\n### Always Call ConfigureByConvention\n```csharp\nbuilder.Entity<MyEntity>(b =>\n{\n    b.ConfigureByConvention(); // Don't forget this!\n    // Other configurations...\n});\n```\n\n### Use Table Prefix\n```csharp\npublic static class MyProjectConsts\n{\n    public const string DbTablePrefix = \"App\";\n    public const string DbSchema = null; // Or \"myschema\"\n}\n```\n\n### Performance Tips\n- Add explicit indexes for frequently queried fields\n- Use `AsNoTracking()` for read-only queries\n- Avoid N+1 queries with `.Include()` or specifications\n- ABP handles cancellation automatically; use `GetCancellationToken(cancellationToken)` only in custom repository methods\n- Consider query splitting for complex queries with multiple collections\n\n### Accessing Raw DbContext\n```csharp\npublic async Task CustomOperationAsync()\n{\n    var dbContext = await GetDbContextAsync();\n\n    // Raw SQL\n    await dbContext.Database.ExecuteSqlRawAsync(\n        \"UPDATE Books SET IsPublished = 1 WHERE AuthorId = {0}\",\n        authorId\n    );\n}\n```\n\n## Data Seeding\n\n```csharp\npublic class MyProjectDataSeedContributor : IDataSeedContributor, ITransientDependency\n{\n    private readonly IRepository<Book, Guid> _bookRepository;\n    private readonly IGuidGenerator _guidGenerator;\n\n    public async Task SeedAsync(DataSeedContext context)\n    {\n        if (await _bookRepository.GetCountAsync() > 0)\n        {\n            return;\n        }\n\n        await _bookRepository.InsertAsync(\n            new Book(_guidGenerator.Create(), \"Sample Book\", 19.99m, Guid.Empty),\n            autoSave: true\n        );\n    }\n}\n```\n\n<!-- File: .agents/skills/abp-infrastructure/SKILL.md (Tokens: ~1351 | Category: anthropic-skill) -->\n---\nname: abp-infrastructure\ndescription: ABP infrastructure services - ISettingProvider, IFeatureChecker, IDistributedCache, ILocalEventBus, IDistributedEventBus, IBackgroundJobManager, localization resource. Use when working with settings, feature flags, caching, event bus, or background jobs in ABP.\n---\n\n# ABP Infrastructure Services\n\n> **Docs**: https://abp.io/docs/latest/framework/infrastructure\n\n## Settings\n\n### Define Settings\n```csharp\npublic class MySettingDefinitionProvider : SettingDefinitionProvider\n{\n    public override void Define(ISettingDefinitionContext context)\n    {\n        context.Add(\n            new SettingDefinition(\"MyApp.MaxItemCount\", \"10\"),\n            new SettingDefinition(\"MyApp.EnableFeature\", \"false\"),\n            new SettingDefinition(\"MyApp.SecretKey\", isEncrypted: true)\n        );\n    }\n}\n```\n\n### Read Settings\n```csharp\npublic class MyService : ITransientDependency\n{\n    private readonly ISettingProvider _settingProvider;\n\n    public async Task DoSomethingAsync()\n    {\n        var maxCount = await _settingProvider.GetAsync<int>(\"MyApp.MaxItemCount\");\n        var isEnabled = await _settingProvider.IsTrueAsync(\"MyApp.EnableFeature\");\n    }\n}\n```\n\n### Setting Value Providers (Priority Order)\n1. User settings (highest)\n2. Tenant settings\n3. Global settings\n4. Configuration (appsettings.json)\n5. Default value (lowest)\n\n## Features\n\n### Define Features\n```csharp\npublic class MyFeatureDefinitionProvider : FeatureDefinitionProvider\n{\n    public override void Define(IFeatureDefinitionContext context)\n    {\n        var myGroup = context.AddGroup(\"MyApp\");\n\n        myGroup.AddFeature(\n            \"MyApp.PdfReporting\",\n            defaultValue: \"false\",\n            valueType: new ToggleStringValueType()\n        );\n\n        myGroup.AddFeature(\n            \"MyApp.MaxProductCount\",\n            defaultValue: \"10\",\n            valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000))\n        );\n    }\n}\n```\n\n### Check Features\n```csharp\n[RequiresFeature(\"MyApp.PdfReporting\")]\npublic async Task<PdfReportDto> GetPdfReportAsync()\n{\n    // Only executes if feature is enabled\n}\n\n// Or programmatically\nif (await _featureChecker.IsEnabledAsync(\"MyApp.PdfReporting\"))\n{\n    // Feature is enabled for current tenant\n}\n\nvar maxCount = await _featureChecker.GetAsync<int>(\"MyApp.MaxProductCount\");\n```\n\n## Distributed Caching\n\n### Typed Cache\n```csharp\npublic class BookService : ITransientDependency\n{\n    private readonly IDistributedCache<BookCacheItem> _cache;\n    private readonly IClock _clock;\n\n    public BookService(IDistributedCache<BookCacheItem> cache, IClock clock)\n    {\n        _cache = cache;\n        _clock = clock;\n    }\n\n    public async Task<BookCacheItem> GetAsync(Guid bookId)\n    {\n        return await _cache.GetOrAddAsync(\n            bookId.ToString(),\n            async () => await GetBookFromDatabaseAsync(bookId),\n            () => new DistributedCacheEntryOptions\n            {\n                AbsoluteExpiration = _clock.Now.AddHours(1)\n            }\n        );\n    }\n}\n\n[CacheName(\"Books\")]\npublic class BookCacheItem\n{\n    public string Name { get; set; }\n    public decimal Price { get; set; }\n}\n```\n\n## Event Bus\n\n### Local Events (Same Process)\n```csharp\n// Event class\npublic class OrderCreatedEvent\n{\n    public Order Order { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEventHandler : ILocalEventHandler<OrderCreatedEvent>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEvent eventData)\n    {\n        // Handle within same transaction\n    }\n}\n\n// Publish\nawait _localEventBus.PublishAsync(new OrderCreatedEvent { Order = order });\n```\n\n### Distributed Events (Cross-Service)\n```csharp\n// Event Transfer Object (in Domain.Shared)\n[EventName(\"MyApp.Order.Created\")]\npublic class OrderCreatedEto\n{\n    public Guid OrderId { get; set; }\n    public string OrderNumber { get; set; }\n}\n\n// Handler\npublic class OrderCreatedEtoHandler : IDistributedEventHandler<OrderCreatedEto>, ITransientDependency\n{\n    public async Task HandleEventAsync(OrderCreatedEto eventData)\n    {\n        // Handle distributed event\n    }\n}\n\n// Publish\nawait _distributedEventBus.PublishAsync(new OrderCreatedEto { ... });\n```\n\n### When to Use Which\n- **Local**: Within same module/bounded context\n- **Distributed**: Cross-module or microservice communication\n\n## Background Jobs\n\n### Define Job\n```csharp\npublic class EmailSendingArgs\n{\n    public string EmailAddress { get; set; }\n    public string Subject { get; set; }\n    public string Body { get; set; }\n}\n\npublic class EmailSendingJob : AsyncBackgroundJob<EmailSendingArgs>, ITransientDependency\n{\n    private readonly IEmailSender _emailSender;\n\n    public EmailSendingJob(IEmailSender emailSender)\n    {\n        _emailSender = emailSender;\n    }\n\n    public override async Task ExecuteAsync(EmailSendingArgs args)\n    {\n        await _emailSender.SendAsync(args.EmailAddress, args.Subject, args.Body);\n    }\n}\n```\n\n### Enqueue Job\n```csharp\nawait _backgroundJobManager.EnqueueAsync(\n    new EmailSendingArgs\n    {\n        EmailAddress = \"user@example.com\",\n        Subject = \"Hello\",\n        Body = \"...\"\n    },\n    delay: TimeSpan.FromMinutes(5) // Optional delay\n);\n```\n\n## Localization\n\n### Define Resource\n```csharp\n[LocalizationResourceName(\"MyModule\")]\npublic class MyModuleResource { }\n```\n\n### JSON Structure\n```json\n{\n  \"culture\": \"en\",\n  \"texts\": {\n    \"HelloWorld\": \"Hello World!\",\n    \"Menu:Books\": \"Books\"\n  }\n}\n```\n\n### Usage\n- In `ApplicationService`: Use `L[\"Key\"]` property (already available from base class)\n- In other services: Inject `IStringLocalizer<MyResource>`\n\n> **Tip**: ABP base classes already provide commonly used services as properties. Check before injecting:\n> - `StringLocalizer` (L), `Clock`, `CurrentUser`, `CurrentTenant`, `GuidGenerator`\n> - `AuthorizationService`, `FeatureChecker`, `DataFilter`\n> - `LoggerFactory`, `Logger`\n> - Methods like `CheckPolicyAsync()` for authorization checks\n\n<!-- File: .agents/skills/abp-microservice/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-microservice\n\nPath: `.agents/skills/abp-microservice/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-microservice/SKILL.md)\n\n<!-- File: .agents/skills/abp-module/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-module\n\nPath: `.agents/skills/abp-module/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-module/SKILL.md)\n\n<!-- File: .agents/skills/abp-mongodb/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-mongodb\n\nPath: `.agents/skills/abp-mongodb/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mongodb/SKILL.md)\n\n<!-- File: .agents/skills/abp-multi-tenancy/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-multi-tenancy\n\nPath: `.agents/skills/abp-multi-tenancy/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-multi-tenancy/SKILL.md)\n\n<!-- File: .agents/skills/abp-mvc/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-mvc\n\nPath: `.agents/skills/abp-mvc/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-mvc/SKILL.md)\n\n<!-- File: .agents/skills/abp-testing/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-testing\n\nPath: `.agents/skills/abp-testing/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.agents/skills/abp-testing/SKILL.md)\n\n<!-- File: .claude/skills/abp-angular/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-angular\n\nPath: `.claude/skills/abp-angular/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-angular/SKILL.md)\n\n<!-- File: .claude/skills/abp-app-nolayers/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-app-nolayers\n\nPath: `.claude/skills/abp-app-nolayers/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-app-nolayers/SKILL.md)\n\n<!-- File: .claude/skills/abp-application-layer/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-application-layer\n\nPath: `.claude/skills/abp-application-layer/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-application-layer/SKILL.md)\n\n<!-- File: .claude/skills/abp-authorization/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-authorization\n\nPath: `.claude/skills/abp-authorization/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-authorization/SKILL.md)\n\n<!-- File: .claude/skills/abp-blazor/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-blazor\n\nPath: `.claude/skills/abp-blazor/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-blazor/SKILL.md)\n\n<!-- File: .claude/skills/abp-cli/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-cli\n\nPath: `.claude/skills/abp-cli/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-cli/SKILL.md)\n\n<!-- File: .claude/skills/abp-core/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-core\n\nPath: `.claude/skills/abp-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-core/SKILL.md)\n\n<!-- File: .claude/skills/abp-ddd/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-ddd\n\nPath: `.claude/skills/abp-ddd/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ddd/SKILL.md)\n\n<!-- File: .claude/skills/abp-dependency-rules/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-dependency-rules\n\nPath: `.claude/skills/abp-dependency-rules/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-dependency-rules/SKILL.md)\n\n<!-- File: .claude/skills/abp-development-flow/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-development-flow\n\nPath: `.claude/skills/abp-development-flow/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-development-flow/SKILL.md)\n\n<!-- File: .claude/skills/abp-ef-core/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-ef-core\n\nPath: `.claude/skills/abp-ef-core/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-ef-core/SKILL.md)\n\n<!-- File: .claude/skills/abp-infrastructure/SKILL.md (Tokens: ~300 | Category: anthropic-skill) -->\n# abp-infrastructure\n\nPath: `.claude/skills/abp-infrastructure/SKILL.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/abpframework/abp/HEAD/.claude/skills/abp-infrastructure/SKILL.md)\n\n<!-- ... +211 more modular skills available via /api/skills/abpframework/abp?path={path} -->\n</yakaai_skills>"}