@smartsoft001-mobilems/claude-plugins 2.76.0 → 2.78.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.
- package/package.json +1 -1
- package/plugins/flow/.claude-plugin/merge-permissions.js +17 -0
- package/plugins/flow/.claude-plugin/plugin.json +1 -1
- package/plugins/flow/.claude-plugin/settings.template.json +5 -0
- package/plugins/flow/agents/shared-impl-teammate.md +201 -0
- package/plugins/flow/agents/shared-linear-subtask-iterator.md +1 -1
- package/plugins/flow/agents/shared-plan-perspective.md +269 -0
- package/plugins/flow/agents/shared-report-synthesizer.md +188 -0
- package/plugins/flow/agents/shared-review-teammate.md +189 -0
- package/plugins/flow/agents/shared-subtask-dependency-analyzer.md +188 -0
- package/plugins/flow/agents/shared-team-coordinator.md +189 -0
- package/plugins/flow/skills/impl/SKILL.md +102 -1
- package/plugins/flow/skills/plan/SKILL.md +164 -1
- package/plugins/flow/skills/review/SKILL.md +443 -0
- package/plugins/flow-external/.claude-plugin/README.md +152 -0
- package/plugins/flow-external/.claude-plugin/merge-permissions.js +80 -0
- package/plugins/flow-external/.claude-plugin/plugin.json +5 -0
- package/plugins/flow-external/.claude-plugin/settings.template.json +75 -0
- package/plugins/flow-external/agents/angular-component-scaffolder.md +269 -0
- package/plugins/flow-external/agents/angular-directive-builder.md +130 -0
- package/plugins/flow-external/agents/angular-guard-builder.md +70 -0
- package/plugins/flow-external/agents/angular-pipe-builder.md +82 -0
- package/plugins/flow-external/agents/angular-resolver-builder.md +74 -0
- package/plugins/flow-external/agents/angular-service-builder.md +160 -0
- package/plugins/flow-external/agents/angular-state-builder.md +254 -0
- package/plugins/flow-external/agents/shared-build-verifier.md +67 -0
- package/plugins/flow-external/agents/shared-impl-orchestrator.md +88 -0
- package/plugins/flow-external/agents/shared-impl-reporter.md +107 -0
- package/plugins/flow-external/agents/shared-linear-subtask-iterator.md +70 -0
- package/plugins/flow-external/agents/shared-ui-classifier.md +38 -0
- package/plugins/flow-external/agents/ui-web-designer.md +179 -0
- package/plugins/flow-external/skills/a11y-audit/SKILL.md +96 -0
- package/plugins/flow-external/skills/angular-cli-conventions/SKILL.md +267 -0
- package/plugins/flow-external/skills/angular-patterns/SKILL.md +170 -0
- package/plugins/flow-external/skills/browser-capture/SKILL.md +68 -0
- package/plugins/flow-external/skills/commit/SKILL.md +113 -0
- package/plugins/flow-external/skills/debug-helper/SKILL.md +131 -0
- package/plugins/flow-external/skills/impl/SKILL.md +158 -0
- package/plugins/flow-external/skills/linear-suggestion/SKILL.md +62 -0
- package/plugins/flow-external/skills/maia-files-delete/SKILL.md +34 -0
- package/plugins/flow-external/skills/maia-files-upload/SKILL.md +41 -0
- package/plugins/flow-external/skills/plan/SKILL.md +163 -0
- package/plugins/flow-external/skills/push/SKILL.md +201 -0
- package/plugins/flow-legacy/.claude-plugin/plugin.json +1 -1
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review
|
|
3
|
+
description: Run parallel multi-dimensional code review using Agent Teams. Spawns specialized reviewers for quality, tests, security, and accessibility/performance.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash
|
|
6
|
+
- Read
|
|
7
|
+
- Glob
|
|
8
|
+
- Grep
|
|
9
|
+
- Task
|
|
10
|
+
- TaskCreate
|
|
11
|
+
- TaskUpdate
|
|
12
|
+
- TaskList
|
|
13
|
+
- TaskGet
|
|
14
|
+
- AskUserQuestion
|
|
15
|
+
- mcp__linear-server__get_issue
|
|
16
|
+
- mcp__linear-server__list_comments
|
|
17
|
+
- mcp__linear-server__create_comment
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Review Skill
|
|
21
|
+
|
|
22
|
+
Run parallel multi-dimensional code review using Agent Teams. Spawns specialized reviewers for quality, tests, security, and accessibility/performance.
|
|
23
|
+
|
|
24
|
+
## Execution Checklist
|
|
25
|
+
|
|
26
|
+
Execute each step in order. Do not skip any step marked as MANDATORY.
|
|
27
|
+
|
|
28
|
+
- [ ] **1. Determine review scope** — analyze git diff for changed files + affected projects
|
|
29
|
+
- [ ] **2. Check team prerequisites** — verify `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`
|
|
30
|
+
- [ ] **3. Create Review Board team** — spawn 4 specialized reviewer teammates
|
|
31
|
+
- [ ] **4. Monitor reviews** — track task completions, handle questions between reviewers
|
|
32
|
+
- [ ] **5. Synthesize findings** — delegate to `shared-report-synthesizer`
|
|
33
|
+
- [ ] **6. Post to Linear** — create single review comment in Polish
|
|
34
|
+
- [ ] **7. Present to user** — show findings with severity ratings
|
|
35
|
+
- [ ] **8. Cleanup team**
|
|
36
|
+
|
|
37
|
+
### Task Progress Tracking
|
|
38
|
+
|
|
39
|
+
**MANDATORY**: Use Claude Code's built-in task tracking to provide real-time progress visibility.
|
|
40
|
+
|
|
41
|
+
**Task naming convention**: Every task subject MUST be prefixed with the Linear task ID (or scope):
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
[REVIEW] <linearTaskId> <step description>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**At skill start**: Create tasks for each review dimension:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
TaskCreate({
|
|
51
|
+
subject: "[REVIEW] MM-123 Quality review",
|
|
52
|
+
description: "Lint, type-check, code style, import ordering",
|
|
53
|
+
activeForm: "[REVIEW] MM-123 Running quality review"
|
|
54
|
+
})
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Role
|
|
58
|
+
|
|
59
|
+
**You are an experienced code review lead** with:
|
|
60
|
+
|
|
61
|
+
- Over 10 years of reviewing production code
|
|
62
|
+
- Deep knowledge of TypeScript, Angular, NestJS security patterns
|
|
63
|
+
- WCAG 2.1 accessibility expertise
|
|
64
|
+
- Performance optimization and bundle analysis skills
|
|
65
|
+
- Ability to coordinate multiple review perspectives
|
|
66
|
+
|
|
67
|
+
You produce reviews that are:
|
|
68
|
+
|
|
69
|
+
- **Thorough**: covering quality, tests, security, and accessibility
|
|
70
|
+
- **Actionable**: each finding has a clear severity and fix recommendation
|
|
71
|
+
- **Balanced**: acknowledging good patterns alongside issues
|
|
72
|
+
- **Prioritized**: critical issues first, minor suggestions last
|
|
73
|
+
|
|
74
|
+
## Usage
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
/review [linearTaskId] # Review changes for a Linear task
|
|
78
|
+
/review --staged # Review all staged changes
|
|
79
|
+
/review --diff=main # Review diff against main branch
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Parameters
|
|
83
|
+
|
|
84
|
+
- `linearTaskId` - Linear task ID (e.g., ENG-123)
|
|
85
|
+
- `--staged` - Review all staged changes (no Linear task required)
|
|
86
|
+
- `--diff=<branch>` - Review diff against specified branch
|
|
87
|
+
|
|
88
|
+
## Instructions
|
|
89
|
+
|
|
90
|
+
### Step 1: Determine Review Scope
|
|
91
|
+
|
|
92
|
+
Analyze the changes to review:
|
|
93
|
+
|
|
94
|
+
**If `linearTaskId` provided:**
|
|
95
|
+
|
|
96
|
+
1. Fetch task from Linear via MCP
|
|
97
|
+
2. Find related branch/commits via `git log --all --grep="<taskId>"`
|
|
98
|
+
3. Determine changed files via `git diff main...<branch>`
|
|
99
|
+
|
|
100
|
+
**If `--staged` provided:**
|
|
101
|
+
|
|
102
|
+
1. Use `git diff --cached --name-only` to find staged files
|
|
103
|
+
2. Use `git diff --cached` for full diff
|
|
104
|
+
|
|
105
|
+
**If `--diff=<branch>` provided:**
|
|
106
|
+
|
|
107
|
+
1. Use `git diff <branch>...HEAD --name-only` for changed files
|
|
108
|
+
2. Use `git diff <branch>...HEAD` for full diff
|
|
109
|
+
|
|
110
|
+
**Extract:**
|
|
111
|
+
|
|
112
|
+
- List of changed files with change type (added/modified/deleted)
|
|
113
|
+
- Affected Nx projects (from file paths)
|
|
114
|
+
- Change statistics (lines added/removed per file)
|
|
115
|
+
|
|
116
|
+
### Step 2: Check Team Prerequisites
|
|
117
|
+
|
|
118
|
+
**Check `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1`**:
|
|
119
|
+
|
|
120
|
+
If env var is NOT set:
|
|
121
|
+
|
|
122
|
+
→ Fall back to sequential review using `shared-verification-orchestrator` agent.
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
Tryb zespołowy niedostępny — brak CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1.
|
|
126
|
+
Uruchamiam sekwencyjną weryfikację...
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Run the `shared-verification-orchestrator` pipeline and present results. Stop here.
|
|
130
|
+
|
|
131
|
+
**If env var IS set** → Continue to Step 3.
|
|
132
|
+
|
|
133
|
+
### Step 3: Create Review Board Team
|
|
134
|
+
|
|
135
|
+
Create 4 specialized reviewer tasks and spawn teammates:
|
|
136
|
+
|
|
137
|
+
#### Reviewer 1: Quality Reviewer
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
TaskCreate({
|
|
141
|
+
subject: "[REVIEW] <taskId> Quality review: lint and type-check",
|
|
142
|
+
description: "Check lint errors, TypeScript type safety, code style, import ordering",
|
|
143
|
+
activeForm: "[REVIEW] <taskId> Running quality review"
|
|
144
|
+
})
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Spawn prompt:**
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
You are the Quality Reviewer in a Review Board for [scope description].
|
|
151
|
+
|
|
152
|
+
Changed files:
|
|
153
|
+
[list of changed files with diffs]
|
|
154
|
+
|
|
155
|
+
YOUR FOCUS:
|
|
156
|
+
- Run linting: `nx lint [project]` for each affected project
|
|
157
|
+
- Run type-check: `npx tsc --noEmit` for affected projects
|
|
158
|
+
- Check code style: naming conventions, function length, complexity
|
|
159
|
+
- Verify import ordering matches ESLint rules
|
|
160
|
+
- Check for unused imports, dead code, TODO comments
|
|
161
|
+
- Verify Angular modern APIs (signals, @if/@for, inject())
|
|
162
|
+
|
|
163
|
+
DELEGATE TO existing agents as needed:
|
|
164
|
+
- `shared-style-enforcer` for detailed style analysis
|
|
165
|
+
- `shared-verification-runner` for running lint/type-check commands
|
|
166
|
+
|
|
167
|
+
OUTPUT FORMAT:
|
|
168
|
+
## Quality Review Report
|
|
169
|
+
|
|
170
|
+
### Critical Issues
|
|
171
|
+
- [issue] — severity: CRITICAL — file: path/to/file.ts:line
|
|
172
|
+
|
|
173
|
+
### Warnings
|
|
174
|
+
- [warning] — severity: MEDIUM — file: path/to/file.ts:line
|
|
175
|
+
|
|
176
|
+
### Passed Checks
|
|
177
|
+
- [x] Check passed
|
|
178
|
+
|
|
179
|
+
### Summary
|
|
180
|
+
Issues found: X critical, Y medium, Z low
|
|
181
|
+
Recommendation: PASS / PASS_WITH_WARNINGS / BLOCK
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
#### Reviewer 2: Test Reviewer
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
TaskCreate({
|
|
188
|
+
subject: "[REVIEW] <taskId> Test review: coverage and quality",
|
|
189
|
+
description: "Unit test coverage, test quality, AAA pattern compliance",
|
|
190
|
+
activeForm: "[REVIEW] <taskId> Running test review"
|
|
191
|
+
})
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**Spawn prompt:**
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
You are the Test Reviewer in a Review Board for [scope description].
|
|
198
|
+
|
|
199
|
+
Changed files:
|
|
200
|
+
[list of changed files with diffs]
|
|
201
|
+
|
|
202
|
+
YOUR FOCUS:
|
|
203
|
+
- Run unit tests: `nx test [project] --coverage` for affected projects
|
|
204
|
+
- Check coverage meets 90% minimum for new code
|
|
205
|
+
- Verify AAA pattern (Arrange-Act-Assert) in all test files
|
|
206
|
+
- Check test naming: describe('@smartsoft001-mobilems/...'), it('should...')
|
|
207
|
+
- Verify mock patterns match project conventions
|
|
208
|
+
- Check for missing edge case tests
|
|
209
|
+
- Verify no skipped tests (xit, xdescribe)
|
|
210
|
+
|
|
211
|
+
DELEGATE TO existing agents as needed:
|
|
212
|
+
- `shared-coverage-enforcer` for coverage analysis
|
|
213
|
+
- `shared-test-runner` for test execution
|
|
214
|
+
|
|
215
|
+
OUTPUT FORMAT:
|
|
216
|
+
## Test Review Report
|
|
217
|
+
|
|
218
|
+
### Critical Issues
|
|
219
|
+
- [issue] — severity: CRITICAL — file: path/to/file.spec.ts:line
|
|
220
|
+
|
|
221
|
+
### Warnings
|
|
222
|
+
- [warning] — severity: MEDIUM — file: path/to/file.spec.ts:line
|
|
223
|
+
|
|
224
|
+
### Coverage Report
|
|
225
|
+
| Project | Coverage | Required | Status |
|
|
226
|
+
| --- | --- | --- | --- |
|
|
227
|
+
| [project] | 85% | 90% | ❌ BELOW |
|
|
228
|
+
|
|
229
|
+
### Passed Checks
|
|
230
|
+
- [x] Check passed
|
|
231
|
+
|
|
232
|
+
### Summary
|
|
233
|
+
Issues found: X critical, Y medium, Z low
|
|
234
|
+
Recommendation: PASS / PASS_WITH_WARNINGS / BLOCK
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
#### Reviewer 3: Security Reviewer
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
TaskCreate({
|
|
241
|
+
subject: "[REVIEW] <taskId> Security review: OWASP and deps",
|
|
242
|
+
description: "OWASP top 10, dependency audit, secrets detection",
|
|
243
|
+
activeForm: "[REVIEW] <taskId> Running security review"
|
|
244
|
+
})
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
**Spawn prompt:**
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
You are the Security Reviewer in a Review Board for [scope description].
|
|
251
|
+
|
|
252
|
+
Changed files:
|
|
253
|
+
[list of changed files with diffs]
|
|
254
|
+
|
|
255
|
+
YOUR FOCUS:
|
|
256
|
+
- Check for OWASP Top 10 vulnerabilities in changed code:
|
|
257
|
+
- XSS (innerHTML, bypassSecurityTrust*, template injection)
|
|
258
|
+
- SQL/NoSQL injection (unsanitized query parameters)
|
|
259
|
+
- Broken authentication (token handling, session management)
|
|
260
|
+
- Sensitive data exposure (logging secrets, hardcoded credentials)
|
|
261
|
+
- CSRF protection
|
|
262
|
+
- Run dependency audit: `npm audit --audit-level=moderate`
|
|
263
|
+
- Check for hardcoded secrets, API keys, tokens
|
|
264
|
+
- Verify input validation at system boundaries
|
|
265
|
+
- Check for insecure HTTP calls (http:// vs https://)
|
|
266
|
+
- Review authorization checks in backend code
|
|
267
|
+
|
|
268
|
+
DELEGATE TO existing agents as needed:
|
|
269
|
+
- `shared-security-scanner` for automated security scanning
|
|
270
|
+
|
|
271
|
+
OUTPUT FORMAT:
|
|
272
|
+
## Security Review Report
|
|
273
|
+
|
|
274
|
+
### Critical Issues
|
|
275
|
+
- [issue] — severity: CRITICAL — file: path/to/file.ts:line — OWASP: [category]
|
|
276
|
+
|
|
277
|
+
### Warnings
|
|
278
|
+
- [warning] — severity: MEDIUM — file: path/to/file.ts:line
|
|
279
|
+
|
|
280
|
+
### Dependency Audit
|
|
281
|
+
- Vulnerabilities found: [count by severity]
|
|
282
|
+
|
|
283
|
+
### Passed Checks
|
|
284
|
+
- [x] Check passed
|
|
285
|
+
|
|
286
|
+
### Summary
|
|
287
|
+
Issues found: X critical, Y medium, Z low
|
|
288
|
+
Recommendation: PASS / PASS_WITH_WARNINGS / BLOCK
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### Reviewer 4: A11y + Performance Reviewer
|
|
292
|
+
|
|
293
|
+
```
|
|
294
|
+
TaskCreate({
|
|
295
|
+
subject: "[REVIEW] <taskId> A11y + Performance review",
|
|
296
|
+
description: "WCAG 2.1 accessibility, bundle sizes, performance patterns",
|
|
297
|
+
activeForm: "[REVIEW] <taskId> Running a11y + performance review"
|
|
298
|
+
})
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Spawn prompt:**
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
You are the Accessibility & Performance Reviewer in a Review Board for [scope description].
|
|
305
|
+
|
|
306
|
+
Changed files:
|
|
307
|
+
[list of changed files with diffs]
|
|
308
|
+
|
|
309
|
+
YOUR FOCUS (Accessibility):
|
|
310
|
+
- WCAG 2.1 compliance in templates:
|
|
311
|
+
- Alt text for images
|
|
312
|
+
- ARIA labels for interactive elements
|
|
313
|
+
- Keyboard navigation support
|
|
314
|
+
- Color contrast (check Tailwind classes)
|
|
315
|
+
- Focus management
|
|
316
|
+
- Semantic HTML usage
|
|
317
|
+
- Screen reader compatibility
|
|
318
|
+
|
|
319
|
+
YOUR FOCUS (Performance):
|
|
320
|
+
- Bundle size impact (new imports, lazy loading)
|
|
321
|
+
- Change detection optimization (OnPush, signals)
|
|
322
|
+
- Template performance (trackBy/@for track, computed signals)
|
|
323
|
+
- Memory leaks (unsubscribed observables, event listeners)
|
|
324
|
+
- Unnecessary re-renders
|
|
325
|
+
|
|
326
|
+
DELEGATE TO existing agents as needed:
|
|
327
|
+
- `ui-a11y-validator` for accessibility scanning
|
|
328
|
+
- `shared-performance-validator` for performance analysis
|
|
329
|
+
|
|
330
|
+
OUTPUT FORMAT:
|
|
331
|
+
## A11y + Performance Review Report
|
|
332
|
+
|
|
333
|
+
### Critical Issues
|
|
334
|
+
- [issue] — severity: CRITICAL — file: path/to/file.ts:line — type: A11Y/PERF
|
|
335
|
+
|
|
336
|
+
### Warnings
|
|
337
|
+
- [warning] — severity: MEDIUM — file: path/to/file.ts:line
|
|
338
|
+
|
|
339
|
+
### Accessibility Audit
|
|
340
|
+
- WCAG violations: [count]
|
|
341
|
+
- Missing ARIA labels: [count]
|
|
342
|
+
|
|
343
|
+
### Performance Impact
|
|
344
|
+
- New dependencies added: [list]
|
|
345
|
+
- Bundle size estimate: [impact]
|
|
346
|
+
|
|
347
|
+
### Passed Checks
|
|
348
|
+
- [x] Check passed
|
|
349
|
+
|
|
350
|
+
### Summary
|
|
351
|
+
Issues found: X critical, Y medium, Z low
|
|
352
|
+
Recommendation: PASS / PASS_WITH_WARNINGS / BLOCK
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### Step 4: Monitor Reviews
|
|
356
|
+
|
|
357
|
+
While teammates are working:
|
|
358
|
+
|
|
359
|
+
1. **Track progress** via `TaskList` — check which reviewers have completed
|
|
360
|
+
2. **Handle cross-reviewer communication**:
|
|
361
|
+
- When a reviewer finishes with CRITICAL or HIGH findings, broadcast to other reviewers
|
|
362
|
+
- Example: Security reviewer finds XSS → notify Quality reviewer to check sanitization
|
|
363
|
+
3. **Wait for all reviewers** to complete (or timeout after reasonable period)
|
|
364
|
+
|
|
365
|
+
**Cross-reviewer broadcast logic:**
|
|
366
|
+
|
|
367
|
+
```
|
|
368
|
+
When reviewer finishes:
|
|
369
|
+
IF findings contain CRITICAL or HIGH severity:
|
|
370
|
+
FOR each other active reviewer:
|
|
371
|
+
Send broadcast: "[Reviewer] found [severity] issue: [summary]"
|
|
372
|
+
Ask them to check related areas
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Step 5: Synthesize Findings
|
|
376
|
+
|
|
377
|
+
After all 4 reviewers complete:
|
|
378
|
+
|
|
379
|
+
1. **Collect all reports** from reviewer tasks
|
|
380
|
+
2. **Delegate to `shared-report-synthesizer`** with:
|
|
381
|
+
- Team type: REVIEW
|
|
382
|
+
- All 4 reviewer reports
|
|
383
|
+
- Linear task ID (if available)
|
|
384
|
+
|
|
385
|
+
The synthesizer will:
|
|
386
|
+
|
|
387
|
+
- Merge findings by category
|
|
388
|
+
- Deduplicate identical issues
|
|
389
|
+
- Flag conflicts between reviewers
|
|
390
|
+
- Produce single Polish-language report
|
|
391
|
+
|
|
392
|
+
### Step 6: Post to Linear
|
|
393
|
+
|
|
394
|
+
**If `linearTaskId` was provided:**
|
|
395
|
+
|
|
396
|
+
Post the synthesized review report as a comment on the Linear task via MCP.
|
|
397
|
+
|
|
398
|
+
**If `--staged` or `--diff`:**
|
|
399
|
+
|
|
400
|
+
Skip Linear posting (no task to attach to).
|
|
401
|
+
|
|
402
|
+
### Step 7: Present to User
|
|
403
|
+
|
|
404
|
+
Show the synthesized review results to the user:
|
|
405
|
+
|
|
406
|
+
1. **Overall verdict**: PASS / PASS_WITH_WARNINGS / BLOCK
|
|
407
|
+
2. **Summary table** with per-dimension results
|
|
408
|
+
3. **Critical issues** requiring immediate attention
|
|
409
|
+
4. **Warnings** for consideration
|
|
410
|
+
5. **Passed checks** for confidence
|
|
411
|
+
|
|
412
|
+
### Step 8: Cleanup Team
|
|
413
|
+
|
|
414
|
+
Mark all review tasks as completed and clean up team resources.
|
|
415
|
+
|
|
416
|
+
## Fallback: Sequential Review
|
|
417
|
+
|
|
418
|
+
When `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` is NOT set, run a sequential review:
|
|
419
|
+
|
|
420
|
+
1. Delegate to `shared-verification-orchestrator` for the full 5-stage pipeline
|
|
421
|
+
2. Present results to user
|
|
422
|
+
3. Post to Linear if task ID provided
|
|
423
|
+
|
|
424
|
+
This provides the same verification coverage, just without the parallelism and specialization.
|
|
425
|
+
|
|
426
|
+
## Guidelines
|
|
427
|
+
|
|
428
|
+
1. **All Linear comments in Polish** — review reports posted to Linear must be in Polish
|
|
429
|
+
2. **User-facing output can be in user's language** — terminal output matches user's language
|
|
430
|
+
3. **Severity ratings are mandatory** — every finding must have CRITICAL/HIGH/MEDIUM/LOW
|
|
431
|
+
4. **Recommendations must be actionable** — don't just flag issues, suggest fixes
|
|
432
|
+
5. **Respect existing patterns** — don't flag patterns that are established conventions
|
|
433
|
+
6. **Consider context** — new code vs modified code may have different standards
|
|
434
|
+
7. **Be constructive** — balance criticism with positive observations
|
|
435
|
+
8. **Track everything** — use TaskCreate/TaskUpdate for visibility into review progress
|
|
436
|
+
|
|
437
|
+
## Agent Team Mode (Experimental)
|
|
438
|
+
|
|
439
|
+
**Prerequisite**: `CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1` in settings.
|
|
440
|
+
|
|
441
|
+
**Activation**: Automatic when env var is set.
|
|
442
|
+
|
|
443
|
+
**Fallback**: If env var not set, skill runs in standard sequential mode via `shared-verification-orchestrator`.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Flow-External Plugin for Claude Code
|
|
2
|
+
|
|
3
|
+
Development flow skills for **standalone Angular 6-11 projects** without the MobileMS framework. These are external projects using Angular CLI with their own styling approach (Bootstrap 4, custom SCSS, or other).
|
|
4
|
+
|
|
5
|
+
## Target Projects
|
|
6
|
+
|
|
7
|
+
This plugin is designed for standalone MobileMS projects:
|
|
8
|
+
|
|
9
|
+
- **mobilems-asp** (Angular 11)
|
|
10
|
+
- **mobilems-etno** (Angular 11)
|
|
11
|
+
- **mobilems-mnw** (Angular 9)
|
|
12
|
+
- **mobilems-muzuem-malopolskie** (Angular 8)
|
|
13
|
+
- **mobilems-muzeum-powstan-slaskich** (Angular 6)
|
|
14
|
+
|
|
15
|
+
### Technology Stack
|
|
16
|
+
|
|
17
|
+
| Feature | External Projects |
|
|
18
|
+
|---------|-------------------|
|
|
19
|
+
| Angular | 6 - 11 |
|
|
20
|
+
| Build system | Angular CLI (`ng`) |
|
|
21
|
+
| Styling | Project-specific (Bootstrap 4 / custom SCSS) |
|
|
22
|
+
| i18n | ngx-translate + LocalizeRouter |
|
|
23
|
+
| State | NgRx + localStorage sync |
|
|
24
|
+
| Project structure | Standalone (app/cli/docker) |
|
|
25
|
+
|
|
26
|
+
### Patterns (what this plugin supports)
|
|
27
|
+
|
|
28
|
+
| Feature | External (Angular 6-11) | Legacy (Angular 14) | Modern (Angular 20+) |
|
|
29
|
+
|---------|-------------------------|---------------------|----------------------|
|
|
30
|
+
| Control flow | `*ngIf`, `*ngFor` | `*ngIf`, `*ngFor` | `@if`, `@for` |
|
|
31
|
+
| DI | Constructor injection | Constructor injection | `inject()` |
|
|
32
|
+
| Inputs/Outputs | `@Input()`, `@Output()` | `@Input()`, `@Output()` | `input()`, `output()` |
|
|
33
|
+
| State | BehaviorSubject, NgRx | BehaviorSubject | Signals |
|
|
34
|
+
| Components | NgModules | NgModules | Standalone |
|
|
35
|
+
| Styling | Bootstrap 4 / custom SCSS | Tailwind CSS | Tailwind CSS |
|
|
36
|
+
| Build | `ng build` | `nx build` | `nx build` |
|
|
37
|
+
|
|
38
|
+
## Workflow Skills
|
|
39
|
+
|
|
40
|
+
| Skill | Description |
|
|
41
|
+
|-------|-------------|
|
|
42
|
+
| `/commit` | Create conventional commit based on Linear task |
|
|
43
|
+
| `/impl` | Implement plans from Linear task comments |
|
|
44
|
+
| `/plan` | Create implementation plan and save to Linear |
|
|
45
|
+
| `/push` | Push changes and update Linear status |
|
|
46
|
+
|
|
47
|
+
## Installation
|
|
48
|
+
|
|
49
|
+
### 1. Enable plugin in project's `.claude/settings.json`:
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"enabledPlugins": {
|
|
54
|
+
"flow-external@mobilems": true
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Merge permissions from template
|
|
60
|
+
|
|
61
|
+
Run the merge script:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
node node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow-external/.claude-plugin/merge-permissions.js
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Required MCP Servers
|
|
68
|
+
|
|
69
|
+
Configure these in your `.mcp.json`:
|
|
70
|
+
|
|
71
|
+
- `linear-server` - Linear API integration
|
|
72
|
+
- `playwright` - Browser automation for screenshots
|
|
73
|
+
|
|
74
|
+
## Permission Strategy
|
|
75
|
+
|
|
76
|
+
### Automatic (allow)
|
|
77
|
+
- Git read operations (status, diff, log, show)
|
|
78
|
+
- Angular CLI commands (ng build, ng lint, ng serve)
|
|
79
|
+
- Linear API (read/write issues, comments)
|
|
80
|
+
- Playwright (screenshots)
|
|
81
|
+
- Utility skills
|
|
82
|
+
|
|
83
|
+
### Requires Confirmation (ask)
|
|
84
|
+
- Workflow skills (/commit, /impl, /plan, /push)
|
|
85
|
+
- `git commit` - creating commits
|
|
86
|
+
- `git push` - pushing to remote
|
|
87
|
+
- `gh pr create` - creating pull requests
|
|
88
|
+
|
|
89
|
+
## Utility Skills
|
|
90
|
+
|
|
91
|
+
| Skill | Description |
|
|
92
|
+
|-------|-------------|
|
|
93
|
+
| `maia-files-upload` | Upload files to Maia API |
|
|
94
|
+
| `maia-files-delete` | Delete files from Maia API |
|
|
95
|
+
| `browser-capture` | Capture screenshots with Playwright |
|
|
96
|
+
| `linear-suggestion` | Create Linear issues for improvements |
|
|
97
|
+
| `a11y-audit` | Accessibility audit |
|
|
98
|
+
|
|
99
|
+
## Agents
|
|
100
|
+
|
|
101
|
+
### Angular Agents (Legacy CLI patterns)
|
|
102
|
+
- `angular-component-scaffolder` - Components with NgModules, `*ngIf`/`*ngFor`, constructor DI
|
|
103
|
+
- `angular-service-builder` - Services with BehaviorSubject, constructor DI
|
|
104
|
+
- `angular-state-builder` - NgRx state management with reducers and effects
|
|
105
|
+
- `angular-directive-builder` - Directives with constructor DI
|
|
106
|
+
- `angular-pipe-builder` - Pipes with constructor DI
|
|
107
|
+
- `angular-guard-builder` - Class-based guards with constructor DI
|
|
108
|
+
- `angular-resolver-builder` - Class-based resolvers with constructor DI
|
|
109
|
+
|
|
110
|
+
### Shared Agents
|
|
111
|
+
- `shared-impl-orchestrator` - Implementation orchestration
|
|
112
|
+
- `shared-impl-reporter` - Implementation reporting
|
|
113
|
+
- `shared-linear-subtask-iterator` - Linear subtask iteration
|
|
114
|
+
- `shared-build-verifier` - Build verification via `ng build`
|
|
115
|
+
- `shared-ui-classifier` - UI change classification
|
|
116
|
+
- `ui-web-designer` - Styling with project-specific approach (Bootstrap 4 or custom SCSS)
|
|
117
|
+
|
|
118
|
+
## Differences from other plugins
|
|
119
|
+
|
|
120
|
+
| Aspect | `flow` (modern) | `flow-legacy` | `flow-external` |
|
|
121
|
+
|--------|-----------------|---------------|-----------------|
|
|
122
|
+
| Angular version | 20+ | 14 | 6-11 |
|
|
123
|
+
| Build system | Nx | Nx | Angular CLI |
|
|
124
|
+
| Styling | Tailwind | Tailwind | Project-specific |
|
|
125
|
+
| State | Signals | BehaviorSubject | NgRx + BehaviorSubject |
|
|
126
|
+
| Project structure | Nx monorepo | Nx monorepo | Standalone app/ |
|
|
127
|
+
|
|
128
|
+
## Example Project Structure
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
project-root/
|
|
132
|
+
app/ # Frontend Angular application
|
|
133
|
+
src/
|
|
134
|
+
app/
|
|
135
|
+
components/
|
|
136
|
+
services/
|
|
137
|
+
pipes/
|
|
138
|
+
directives/
|
|
139
|
+
interceptors/
|
|
140
|
+
guards/
|
|
141
|
+
state/ # NgRx store
|
|
142
|
+
assets/
|
|
143
|
+
environments/
|
|
144
|
+
angular.json
|
|
145
|
+
package.json
|
|
146
|
+
tsconfig.json
|
|
147
|
+
cli/ # CLI scripts
|
|
148
|
+
frontend-cli
|
|
149
|
+
docker/ # Docker configuration
|
|
150
|
+
Dockerfile
|
|
151
|
+
.env
|
|
152
|
+
```
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Merge flow-external plugin permissions into project's .claude/settings.json
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx @smartsoft001-mobilems/claude-plugins flow-external:merge-permissions
|
|
7
|
+
*
|
|
8
|
+
* Or directly:
|
|
9
|
+
* node node_modules/@smartsoft001-mobilems/claude-plugins/plugins/flow-external/.claude-plugin/merge-permissions.js
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const fs = require('fs');
|
|
13
|
+
const path = require('path');
|
|
14
|
+
|
|
15
|
+
const SETTINGS_PATH = path.join(process.cwd(), '.claude', 'settings.json');
|
|
16
|
+
const TEMPLATE_PATH = path.join(__dirname, 'settings.template.json');
|
|
17
|
+
|
|
18
|
+
function loadJson(filePath) {
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
21
|
+
} catch (e) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function mergeArrays(existing, template) {
|
|
27
|
+
return [...new Set([...existing, ...template])];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function main() {
|
|
31
|
+
console.log('Flow-External Plugin - Merge Permissions\n');
|
|
32
|
+
|
|
33
|
+
// Load template
|
|
34
|
+
const template = loadJson(TEMPLATE_PATH);
|
|
35
|
+
if (!template) {
|
|
36
|
+
console.error('ERROR: Could not load template from:', TEMPLATE_PATH);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Load or create settings
|
|
41
|
+
let settings = loadJson(SETTINGS_PATH);
|
|
42
|
+
if (!settings) {
|
|
43
|
+
console.log('Creating new .claude/settings.json...');
|
|
44
|
+
fs.mkdirSync(path.dirname(SETTINGS_PATH), { recursive: true });
|
|
45
|
+
settings = { permissions: { allow: [], deny: [], ask: [] } };
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Ensure permissions structure exists
|
|
49
|
+
settings.permissions = settings.permissions || { allow: [], deny: [], ask: [] };
|
|
50
|
+
settings.permissions.allow = settings.permissions.allow || [];
|
|
51
|
+
settings.permissions.ask = settings.permissions.ask || [];
|
|
52
|
+
settings.permissions.deny = settings.permissions.deny || [];
|
|
53
|
+
|
|
54
|
+
// Count before
|
|
55
|
+
const beforeAllow = settings.permissions.allow.length;
|
|
56
|
+
const beforeAsk = settings.permissions.ask.length;
|
|
57
|
+
|
|
58
|
+
// Merge permissions
|
|
59
|
+
settings.permissions.allow = mergeArrays(settings.permissions.allow, template.permissions.allow);
|
|
60
|
+
settings.permissions.ask = mergeArrays(settings.permissions.ask, template.permissions.ask);
|
|
61
|
+
|
|
62
|
+
// Enable plugin
|
|
63
|
+
settings.enabledPlugins = settings.enabledPlugins || {};
|
|
64
|
+
settings.enabledPlugins['flow-external@mobilems'] = true;
|
|
65
|
+
|
|
66
|
+
// Write back
|
|
67
|
+
fs.writeFileSync(SETTINGS_PATH, JSON.stringify(settings, null, 2) + '\n');
|
|
68
|
+
|
|
69
|
+
// Report
|
|
70
|
+
const addedAllow = settings.permissions.allow.length - beforeAllow;
|
|
71
|
+
const addedAsk = settings.permissions.ask.length - beforeAsk;
|
|
72
|
+
|
|
73
|
+
console.log('Permissions merged successfully!\n');
|
|
74
|
+
console.log(` allow: ${beforeAllow} -> ${settings.permissions.allow.length} (+${addedAllow})`);
|
|
75
|
+
console.log(` ask: ${beforeAsk} -> ${settings.permissions.ask.length} (+${addedAsk})`);
|
|
76
|
+
console.log(`\nPlugin enabled: flow-external@mobilems`);
|
|
77
|
+
console.log(`\nFile updated: ${SETTINGS_PATH}`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
main();
|