@smartsoft001-mobilems/claude-plugins 2.84.0 → 2.86.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/.claude-plugin/marketplace.json +2 -6
  2. package/README.md +97 -0
  3. package/package.json +2 -2
  4. package/plugins/flow/scripts/refresh-mobilems-api-spec.sh +372 -0
  5. package/plugins/flow/skills/mobilems-docs-reader/SKILL.md +116 -0
  6. package/plugins/flow-external/scripts/refresh-mobilems-api-spec.sh +372 -0
  7. package/plugins/flow-external/skills/mobilems-docs-reader/SKILL.md +116 -0
  8. package/plugins/flow-legacy/scripts/refresh-mobilems-api-spec.sh +372 -0
  9. package/plugins/flow-legacy/skills/mobilems-docs-reader/SKILL.md +116 -0
  10. package/plugins/mobilems/.claude-plugin/README.md +30 -0
  11. package/plugins/mobilems/.claude-plugin/plugin.json +5 -0
  12. package/plugins/mobilems/scripts/refresh-mobilems-api-spec.sh +372 -0
  13. package/plugins/mobilems/skills/mobilems-docs-reader/SKILL.md +116 -0
  14. package/plugins/flow/.claude-plugin/README.md +0 -91
  15. package/plugins/flow/.claude-plugin/merge-permissions.js +0 -97
  16. package/plugins/flow/.claude-plugin/plugin.json +0 -5
  17. package/plugins/flow/.claude-plugin/settings.template.json +0 -86
  18. package/plugins/flow/agents/angular-component-scaffolder.md +0 -175
  19. package/plugins/flow/agents/angular-directive-builder.md +0 -153
  20. package/plugins/flow/agents/angular-guard-builder.md +0 -243
  21. package/plugins/flow/agents/angular-jest-test-writer.md +0 -474
  22. package/plugins/flow/agents/angular-pipe-builder.md +0 -169
  23. package/plugins/flow/agents/angular-resolver-builder.md +0 -286
  24. package/plugins/flow/agents/angular-service-builder.md +0 -161
  25. package/plugins/flow/agents/angular-signal-state-builder.md +0 -339
  26. package/plugins/flow/agents/angular-test-diagnostician.md +0 -279
  27. package/plugins/flow/agents/angular-testbed-configurator.md +0 -315
  28. package/plugins/flow/agents/arch-scaffolder.md +0 -278
  29. package/plugins/flow/agents/e2e-data-testid-injector.md +0 -197
  30. package/plugins/flow/agents/e2e-project-scaffolder.md +0 -194
  31. package/plugins/flow/agents/e2e-test-writer.md +0 -350
  32. package/plugins/flow/agents/shared-agent-evolver.md +0 -294
  33. package/plugins/flow/agents/shared-build-verifier.md +0 -160
  34. package/plugins/flow/agents/shared-config-updater.md +0 -310
  35. package/plugins/flow/agents/shared-coverage-enforcer.md +0 -184
  36. package/plugins/flow/agents/shared-error-handler.md +0 -217
  37. package/plugins/flow/agents/shared-file-creator.md +0 -344
  38. package/plugins/flow/agents/shared-impl-orchestrator.md +0 -312
  39. package/plugins/flow/agents/shared-impl-reporter.md +0 -339
  40. package/plugins/flow/agents/shared-impl-teammate.md +0 -201
  41. package/plugins/flow/agents/shared-linear-subtask-iterator.md +0 -337
  42. package/plugins/flow/agents/shared-logic-implementer.md +0 -243
  43. package/plugins/flow/agents/shared-maia-api.md +0 -26
  44. package/plugins/flow/agents/shared-parallelization-analyzer.md +0 -343
  45. package/plugins/flow/agents/shared-performance-validator.md +0 -168
  46. package/plugins/flow/agents/shared-plan-perspective.md +0 -269
  47. package/plugins/flow/agents/shared-project-standardizer.md +0 -205
  48. package/plugins/flow/agents/shared-report-synthesizer.md +0 -188
  49. package/plugins/flow/agents/shared-review-teammate.md +0 -189
  50. package/plugins/flow/agents/shared-security-scanner.md +0 -186
  51. package/plugins/flow/agents/shared-style-enforcer.md +0 -230
  52. package/plugins/flow/agents/shared-subtask-dependency-analyzer.md +0 -188
  53. package/plugins/flow/agents/shared-tdd-developer.md +0 -350
  54. package/plugins/flow/agents/shared-team-coordinator.md +0 -189
  55. package/plugins/flow/agents/shared-test-fixer.md +0 -186
  56. package/plugins/flow/agents/shared-test-runner.md +0 -191
  57. package/plugins/flow/agents/shared-ui-classifier.md +0 -263
  58. package/plugins/flow/agents/shared-verification-orchestrator.md +0 -194
  59. package/plugins/flow/agents/shared-verification-runner.md +0 -140
  60. package/plugins/flow/agents/ui-a11y-validator.md +0 -305
  61. package/plugins/flow/agents/ui-screenshot-reporter.md +0 -329
  62. package/plugins/flow/agents/ui-web-designer.md +0 -214
  63. package/plugins/flow/skills/a11y-audit/SKILL.md +0 -214
  64. package/plugins/flow/skills/angular-patterns/SKILL.md +0 -191
  65. package/plugins/flow/skills/browser-capture/SKILL.md +0 -238
  66. package/plugins/flow/skills/commit/SKILL.md +0 -259
  67. package/plugins/flow/skills/debug-helper/SKILL.md +0 -375
  68. package/plugins/flow/skills/impl/SKILL.md +0 -992
  69. package/plugins/flow/skills/linear-suggestion/SKILL.md +0 -132
  70. package/plugins/flow/skills/maia-files-delete/SKILL.md +0 -59
  71. package/plugins/flow/skills/maia-files-upload/SKILL.md +0 -57
  72. package/plugins/flow/skills/nx-conventions/SKILL.md +0 -326
  73. package/plugins/flow/skills/plan/SKILL.md +0 -1003
  74. package/plugins/flow/skills/push/SKILL.md +0 -737
  75. package/plugins/flow/skills/review/SKILL.md +0 -443
  76. package/plugins/flow/skills/test-e2e/SKILL.md +0 -161
  77. package/plugins/flow/skills/test-unit/SKILL.md +0 -456
  78. package/plugins/flow-external/.claude-plugin/README.md +0 -152
  79. package/plugins/flow-external/.claude-plugin/merge-permissions.js +0 -80
  80. package/plugins/flow-external/.claude-plugin/plugin.json +0 -5
  81. package/plugins/flow-external/.claude-plugin/settings.template.json +0 -78
  82. package/plugins/flow-external/agents/angular-component-scaffolder.md +0 -269
  83. package/plugins/flow-external/agents/angular-directive-builder.md +0 -130
  84. package/plugins/flow-external/agents/angular-guard-builder.md +0 -70
  85. package/plugins/flow-external/agents/angular-pipe-builder.md +0 -82
  86. package/plugins/flow-external/agents/angular-resolver-builder.md +0 -74
  87. package/plugins/flow-external/agents/angular-service-builder.md +0 -160
  88. package/plugins/flow-external/agents/angular-state-builder.md +0 -254
  89. package/plugins/flow-external/agents/shared-build-verifier.md +0 -67
  90. package/plugins/flow-external/agents/shared-impl-orchestrator.md +0 -88
  91. package/plugins/flow-external/agents/shared-impl-reporter.md +0 -107
  92. package/plugins/flow-external/agents/shared-linear-subtask-iterator.md +0 -70
  93. package/plugins/flow-external/agents/shared-ui-classifier.md +0 -38
  94. package/plugins/flow-external/agents/ui-web-designer.md +0 -179
  95. package/plugins/flow-external/skills/a11y-audit/SKILL.md +0 -96
  96. package/plugins/flow-external/skills/angular-cli-conventions/SKILL.md +0 -267
  97. package/plugins/flow-external/skills/angular-patterns/SKILL.md +0 -170
  98. package/plugins/flow-external/skills/browser-capture/SKILL.md +0 -68
  99. package/plugins/flow-external/skills/commit/SKILL.md +0 -114
  100. package/plugins/flow-external/skills/debug-helper/SKILL.md +0 -131
  101. package/plugins/flow-external/skills/impl/SKILL.md +0 -217
  102. package/plugins/flow-external/skills/linear-suggestion/SKILL.md +0 -62
  103. package/plugins/flow-external/skills/maia-files-delete/SKILL.md +0 -34
  104. package/plugins/flow-external/skills/maia-files-upload/SKILL.md +0 -41
  105. package/plugins/flow-external/skills/plan/SKILL.md +0 -302
  106. package/plugins/flow-external/skills/push/SKILL.md +0 -210
  107. package/plugins/flow-legacy/.claude-plugin/README.md +0 -143
  108. package/plugins/flow-legacy/.claude-plugin/merge-permissions.js +0 -94
  109. package/plugins/flow-legacy/.claude-plugin/plugin.json +0 -5
  110. package/plugins/flow-legacy/.claude-plugin/settings.template.json +0 -79
  111. package/plugins/flow-legacy/agents/angular-component-scaffolder.md +0 -323
  112. package/plugins/flow-legacy/agents/angular-directive-builder.md +0 -258
  113. package/plugins/flow-legacy/agents/angular-guard-builder.md +0 -322
  114. package/plugins/flow-legacy/agents/angular-pipe-builder.md +0 -227
  115. package/plugins/flow-legacy/agents/angular-resolver-builder.md +0 -332
  116. package/plugins/flow-legacy/agents/angular-service-builder.md +0 -271
  117. package/plugins/flow-legacy/agents/angular-state-builder.md +0 -479
  118. package/plugins/flow-legacy/agents/shared-impl-orchestrator.md +0 -174
  119. package/plugins/flow-legacy/agents/shared-impl-reporter.md +0 -204
  120. package/plugins/flow-legacy/agents/shared-linear-subtask-iterator.md +0 -187
  121. package/plugins/flow-legacy/agents/shared-tdd-developer.md +0 -306
  122. package/plugins/flow-legacy/agents/shared-test-runner.md +0 -131
  123. package/plugins/flow-legacy/agents/shared-ui-classifier.md +0 -145
  124. package/plugins/flow-legacy/skills/a11y-audit/SKILL.md +0 -214
  125. package/plugins/flow-legacy/skills/angular-patterns/SKILL.md +0 -346
  126. package/plugins/flow-legacy/skills/browser-capture/SKILL.md +0 -238
  127. package/plugins/flow-legacy/skills/commit/SKILL.md +0 -215
  128. package/plugins/flow-legacy/skills/debug-helper/SKILL.md +0 -395
  129. package/plugins/flow-legacy/skills/impl/SKILL.md +0 -710
  130. package/plugins/flow-legacy/skills/linear-suggestion/SKILL.md +0 -132
  131. package/plugins/flow-legacy/skills/maia-files-delete/SKILL.md +0 -59
  132. package/plugins/flow-legacy/skills/maia-files-upload/SKILL.md +0 -57
  133. package/plugins/flow-legacy/skills/nx-conventions/SKILL.md +0 -368
  134. package/plugins/flow-legacy/skills/plan/SKILL.md +0 -708
  135. package/plugins/flow-legacy/skills/push/SKILL.md +0 -623
  136. package/plugins/flow-legacy/skills/test-unit/SKILL.md +0 -500
@@ -1,286 +0,0 @@
1
- ---
2
- name: angular-resolver-builder
3
- description: Create Angular functional resolvers. Use when building route resolvers for data preloading.
4
- tools: Read, Write, Glob, Grep
5
- model: sonnet
6
- color: "#DD0031"
7
- ---
8
-
9
- You are an expert at creating Angular functional resolvers following modern patterns.
10
-
11
- ## Primary Responsibility
12
-
13
- Create Angular resolvers using the modern functional approach for route data preloading.
14
-
15
- ## When to Use
16
-
17
- - Preloading data before route activation
18
- - Fetching required resources for components
19
- - Handling loading states during navigation
20
-
21
- ## Project-Specific Patterns
22
-
23
- This project uses:
24
-
25
- - **Functional resolvers** (not class-based)
26
- - **`inject()`** for dependency injection inside resolver functions
27
- - **`toSignal()`** for accessing resolved data in components
28
- - **`catchError()`** for error handling with redirects
29
-
30
- ## Resolver Templates
31
-
32
- ### Basic Resolver
33
-
34
- ```typescript
35
- import { inject } from '@angular/core';
36
- import { ResolveFn } from '@angular/router';
37
-
38
- import { DataService } from './data.service';
39
- import { Data } from './data.model';
40
-
41
- export const dataResolver: ResolveFn<Data[]> = (route, state) => {
42
- const dataService = inject(DataService);
43
-
44
- return dataService.getAll();
45
- };
46
- ```
47
-
48
- ### Resolver with Route Params
49
-
50
- ```typescript
51
- import { inject } from '@angular/core';
52
- import { ResolveFn, Router } from '@angular/router';
53
- import { catchError, of } from 'rxjs';
54
-
55
- import { ItemService } from './item.service';
56
- import { Item } from './item.model';
57
-
58
- export const itemResolver: ResolveFn<Item | null> = (route, state) => {
59
- const itemService = inject(ItemService);
60
- const router = inject(Router);
61
-
62
- const id = route.paramMap.get('id');
63
-
64
- if (!id) {
65
- router.navigate(['/items']);
66
- return of(null);
67
- }
68
-
69
- return itemService.getById(id).pipe(
70
- catchError((error) => {
71
- console.error('Failed to load item:', error);
72
- router.navigate(['/items']);
73
- return of(null);
74
- }),
75
- );
76
- };
77
- ```
78
-
79
- ### Resolver with Multiple Dependencies
80
-
81
- ```typescript
82
- import { inject } from '@angular/core';
83
- import { ResolveFn } from '@angular/router';
84
- import { forkJoin, map } from 'rxjs';
85
-
86
- import { UserService } from './user.service';
87
- import { SettingsService } from './settings.service';
88
-
89
- export interface ProfileData {
90
- user: User;
91
- settings: UserSettings;
92
- }
93
-
94
- export const profileResolver: ResolveFn<ProfileData> = (route, state) => {
95
- const userService = inject(UserService);
96
- const settingsService = inject(SettingsService);
97
-
98
- const userId = route.paramMap.get('userId')!;
99
-
100
- return forkJoin({
101
- user: userService.getById(userId),
102
- settings: settingsService.getByUserId(userId),
103
- });
104
- };
105
- ```
106
-
107
- ### Resolver with Query Params
108
-
109
- ```typescript
110
- import { inject } from '@angular/core';
111
- import { ResolveFn } from '@angular/router';
112
-
113
- import { SearchService } from './search.service';
114
- import { SearchResult } from './search.model';
115
-
116
- export const searchResolver: ResolveFn<SearchResult[]> = (route, state) => {
117
- const searchService = inject(SearchService);
118
-
119
- const query = route.queryParamMap.get('q') || '';
120
- const page = parseInt(route.queryParamMap.get('page') || '1', 10);
121
- const limit = parseInt(route.queryParamMap.get('limit') || '10', 10);
122
-
123
- return searchService.search({
124
- query,
125
- page,
126
- limit,
127
- });
128
- };
129
- ```
130
-
131
- ### Resolver with Default Value
132
-
133
- ```typescript
134
- import { inject } from '@angular/core';
135
- import { ResolveFn } from '@angular/router';
136
- import { catchError, of } from 'rxjs';
137
-
138
- import { ConfigService } from './config.service';
139
- import { AppConfig, DEFAULT_CONFIG } from './config.model';
140
-
141
- export const configResolver: ResolveFn<AppConfig> = (route, state) => {
142
- const configService = inject(ConfigService);
143
-
144
- return configService.getConfig().pipe(
145
- catchError((error) => {
146
- console.warn('Using default config:', error);
147
- return of(DEFAULT_CONFIG);
148
- }),
149
- );
150
- };
151
- ```
152
-
153
- ## Route Configuration
154
-
155
- ```typescript
156
- const routes: Routes = [
157
- {
158
- path: 'items',
159
- component: ItemListComponent,
160
- resolve: {
161
- items: itemsResolver,
162
- },
163
- },
164
- {
165
- path: 'items/:id',
166
- component: ItemDetailComponent,
167
- resolve: {
168
- item: itemResolver,
169
- },
170
- },
171
- {
172
- path: 'profile/:userId',
173
- component: ProfileComponent,
174
- resolve: {
175
- profile: profileResolver,
176
- },
177
- },
178
- ];
179
- ```
180
-
181
- ## Accessing Resolved Data
182
-
183
- ### In Component
184
-
185
- ```typescript
186
- @Component({...})
187
- export class ItemDetailComponent {
188
- private readonly route = inject(ActivatedRoute);
189
-
190
- // Using toSignal
191
- readonly item = toSignal(
192
- this.route.data.pipe(map(data => data['item'] as Item))
193
- );
194
-
195
- // Or with async pipe in template
196
- readonly data$ = this.route.data;
197
- }
198
- ```
199
-
200
- ### In Template
201
-
202
- ```html
203
- @if (item(); as item) {
204
- <h1>{{ item.name }}</h1>
205
- <p>{{ item.description }}</p>
206
- }
207
- ```
208
-
209
- ## Error Handling Strategies
210
-
211
- ### Redirect on Error
212
-
213
- ```typescript
214
- catchError((error) => {
215
- router.navigate(['/error']);
216
- return of(null);
217
- });
218
- ```
219
-
220
- ### Return Empty/Default
221
-
222
- ```typescript
223
- catchError((error) => {
224
- return of([]);
225
- });
226
- ```
227
-
228
- ### Throw and Handle in Component
229
-
230
- ```typescript
231
- // Let error propagate - handle in error boundary
232
- ```
233
-
234
- ## Checklist
235
-
236
- - [ ] Uses functional resolver pattern
237
- - [ ] Uses `inject()` for dependencies
238
- - [ ] Handles null/missing params
239
- - [ ] Implements error handling
240
- - [ ] Returns Observable or Promise
241
- - [ ] Test file created
242
-
243
- ## Output Format
244
-
245
- ````markdown
246
- ## Resolver Created
247
-
248
- ### File
249
-
250
- `item.resolver.ts`
251
-
252
- ### Type
253
-
254
- `ResolveFn<Item | null>`
255
-
256
- ### Route Param
257
-
258
- `id` (from URL path)
259
-
260
- ### Dependencies
261
-
262
- - ItemService
263
- - Router
264
-
265
- ### Route Configuration
266
-
267
- ```typescript
268
- {
269
- path: 'items/:id',
270
- component: ItemDetailComponent,
271
- resolve: { item: itemResolver },
272
- }
273
- ```
274
- ````
275
-
276
- ### Component Access
277
-
278
- ```typescript
279
- readonly item = toSignal(
280
- this.route.data.pipe(map(data => data['item']))
281
- );
282
- ```
283
-
284
- ```
285
-
286
- ```
@@ -1,161 +0,0 @@
1
- ---
2
- name: angular-service-builder
3
- description: Create Angular injectable services with signals and modern patterns. Use when building services for data management and business logic.
4
- tools: Read, Write, Glob, Grep
5
- model: sonnet
6
- color: "#DD0031"
7
- ---
8
-
9
- You are an expert at creating Angular services following modern best practices.
10
-
11
- ## Primary Responsibility
12
-
13
- Create Angular services using modern patterns including signals for reactive state and `inject()` for dependency injection.
14
-
15
- ## When to Use
16
-
17
- - Creating new Angular services
18
- - Building data access services
19
- - Implementing state management with signals
20
-
21
- ## Project-Specific Patterns
22
-
23
- This project uses:
24
-
25
- - **`@Injectable({ providedIn: 'root' })`** for root-level services
26
- - **`@Injectable()`** (without providedIn) for module-scoped services
27
- - **`signal()`** for reactive state
28
- - **`.asReadonly()`** to expose signals publicly
29
- - **`inject()`** for DI (not constructor)
30
-
31
- ## Service Templates
32
-
33
- ### Root-Level Service with Signals
34
-
35
- ```typescript
36
- import { Injectable, signal } from '@angular/core';
37
-
38
- export interface ModalConfig {
39
- title?: string;
40
- message: string;
41
- confirmText?: string;
42
- cancelText?: string;
43
- }
44
-
45
- @Injectable({
46
- providedIn: 'root',
47
- })
48
- export class ModalService {
49
- // Private signals
50
- private readonly _isOpen = signal(false);
51
- private readonly _config = signal<ModalConfig | null>(null);
52
-
53
- // Public readonly signals
54
- readonly isOpen = this._isOpen.asReadonly();
55
- readonly config = this._config.asReadonly();
56
-
57
- open(config: ModalConfig): void {
58
- this._config.set(config);
59
- this._isOpen.set(true);
60
- }
61
-
62
- close(): void {
63
- this._isOpen.set(false);
64
- this._config.set(null);
65
- }
66
- }
67
- ```
68
-
69
- ### Service with inject()
70
-
71
- ```typescript
72
- import { inject, Injectable, PLATFORM_ID } from '@angular/core';
73
- import { isPlatformBrowser } from '@angular/common';
74
- import { TranslateService } from '@ngx-translate/core';
75
-
76
- @Injectable({ providedIn: 'root' })
77
- export class LocalStorageService {
78
- private readonly translateService = inject(TranslateService);
79
- private readonly platformId = inject(PLATFORM_ID);
80
-
81
- initLang(forceLang?: string): void {
82
- if (isPlatformBrowser(this.platformId)) {
83
- const savedLang = localStorage.getItem('LANGUAGE');
84
- const lang = forceLang ?? savedLang ?? 'pl';
85
- this.translateService.use(lang);
86
- }
87
- }
88
-
89
- saveLanguagePreference(lang: string): void {
90
- if (typeof localStorage !== 'undefined') {
91
- localStorage.setItem('LANGUAGE', lang);
92
- }
93
- }
94
- }
95
- ```
96
-
97
- ### Data Service extending base
98
-
99
- ```typescript
100
- import { Injectable } from '@angular/core';
101
- import { CrudBaseService } from '@smartsoft001-mobilems/angular';
102
- import { firstValueFrom } from 'rxjs';
103
-
104
- import { environment } from '@msr/angular';
105
- import { FeatureModel } from '@msr/feature/domain';
106
-
107
- @Injectable()
108
- export class FeatureService extends CrudBaseService<FeatureModel> {
109
- getUrlNameForDetails(): string {
110
- return 'feature';
111
- }
112
-
113
- protected override getBaseListUrl(
114
- page: number,
115
- filter: { limit: number; searchText?: string },
116
- ): string {
117
- let url = `${this.config.apiUrl}feature/search/page/${page}?maxPerPage=${filter.limit}`;
118
- if (filter.searchText) {
119
- url += `&q=${encodeURIComponent(filter.searchText)}`;
120
- }
121
- return url;
122
- }
123
-
124
- getUrlNameForList(): string {
125
- return '';
126
- }
127
- }
128
- ```
129
-
130
- ## Checklist
131
-
132
- - [ ] Uses `@Injectable({ providedIn: 'root' })` for root services
133
- - [ ] Uses `inject()` for DI (not constructor)
134
- - [ ] Uses `signal()` for reactive state
135
- - [ ] Uses `.asReadonly()` for public signals
136
- - [ ] Private signals prefixed with `_`
137
- - [ ] SSR-safe (checks `isPlatformBrowser` for browser APIs)
138
-
139
- ## Output Format
140
-
141
- ```markdown
142
- ## Service Created
143
-
144
- ### File
145
-
146
- `feature.service.ts`
147
-
148
- ### API
149
-
150
- | Method | Parameters | Returns | Description |
151
- | ------- | --------------------- | ------- | ------------ |
152
- | `open` | `config: ModalConfig` | `void` | Opens modal |
153
- | `close` | - | `void` | Closes modal |
154
-
155
- ### Signals
156
-
157
- | Signal | Type | Description |
158
- | -------- | ----------------------------- | ---------------- |
159
- | `isOpen` | `Signal<boolean>` | Modal open state |
160
- | `config` | `Signal<ModalConfig \| null>` | Current config |
161
- ```