@atlashub/smartstack-cli 1.23.0 → 1.25.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/.documentation/agents.html +3 -3
- package/.documentation/apex.html +18 -18
- package/.documentation/business-analyse.html +38 -38
- package/.documentation/cli-commands.html +1 -1
- package/.documentation/commands.html +29 -29
- package/.documentation/efcore.html +246 -91
- package/.documentation/gitflow.html +1 -1
- package/.documentation/hooks.html +1 -1
- package/.documentation/index.html +8 -8
- package/.documentation/init.html +1 -1
- package/.documentation/installation.html +9 -9
- package/.documentation/ralph-loop.html +2 -2
- package/.documentation/test-web.html +2 -2
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/skills/check-version/SKILL.md +183 -0
- package/templates/skills/debug/SKILL.md +161 -0
- package/templates/skills/explore/SKILL.md +96 -0
- package/templates/skills/quick-search/SKILL.md +87 -0
- package/templates/skills/refactor/SKILL.md +219 -0
- package/templates/skills/review-code/SKILL.md +72 -44
- package/templates/skills/review-code/references/smartstack-conventions.md +93 -33
- package/templates/skills/ui-components/responsive-guidelines.md +278 -0
- package/templates/skills/utils/SKILL.md +37 -0
- package/templates/{commands/utils → skills/utils/subcommands}/test-web-config.md +35 -43
- package/templates/{commands/utils → skills/utils/subcommands}/test-web.md +25 -53
- package/templates/{commands/validate.md → skills/validate/SKILL.md} +80 -139
- package/templates/commands/check-version.md +0 -267
- package/templates/commands/debug.md +0 -95
- package/templates/commands/efcore/_env-check.md +0 -153
- package/templates/commands/efcore/_shared.md +0 -352
- package/templates/commands/efcore/conflicts.md +0 -90
- package/templates/commands/efcore/db-deploy.md +0 -109
- package/templates/commands/efcore/db-reset.md +0 -180
- package/templates/commands/efcore/db-seed.md +0 -103
- package/templates/commands/efcore/db-status.md +0 -102
- package/templates/commands/efcore/migration.md +0 -186
- package/templates/commands/efcore/rebase-snapshot.md +0 -172
- package/templates/commands/efcore/scan.md +0 -94
- package/templates/commands/efcore/squash.md +0 -329
- package/templates/commands/efcore.md +0 -96
- package/templates/commands/explore.md +0 -45
- package/templates/commands/quick-search.md +0 -72
- package/templates/commands/refactor.md +0 -164
- /package/templates/{commands → skills}/_resources/formatting-guide.md +0 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# SmartStack Responsive Design Guidelines
|
|
2
|
+
|
|
3
|
+
> **Objectif:** Toutes les pages SmartStack DOIVENT etre 100% responsives.
|
|
4
|
+
> Strategy: Progressive degradation (Desktop → Tablet → Mobile)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## REGLE ABSOLUE
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
Toute page avec un tableau DOIT implementer:
|
|
12
|
+
1. Desktop (lg+) → Tableau complet avec toutes les colonnes
|
|
13
|
+
2. Tablette (md) → Tableau avec colonnes secondaires masquees
|
|
14
|
+
3. Mobile (<md) → Vue carte (cards), pas de tableau
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Pattern: Table Responsive + Cards Mobile
|
|
20
|
+
|
|
21
|
+
### Structure JSX
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
// ============================================================
|
|
25
|
+
// CONTENU RESPONSIVE
|
|
26
|
+
// ============================================================
|
|
27
|
+
|
|
28
|
+
{/* Mobile: Toujours afficher les cartes */}
|
|
29
|
+
<div className="md:hidden">
|
|
30
|
+
{renderCardsView()}
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
{/* Tablette+: Afficher la vue selectionnee */}
|
|
34
|
+
<div className="hidden md:block">
|
|
35
|
+
{viewMode === 'table' && renderTableView()}
|
|
36
|
+
{viewMode === 'cards' && renderCardsView()}
|
|
37
|
+
{viewMode === 'kanban' && renderKanbanView()}
|
|
38
|
+
</div>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### ViewToggle (masquer sur mobile)
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
{/* View Toggle - masque sur mobile (toujours cartes sur mobile) */}
|
|
45
|
+
<div className="hidden md:block">
|
|
46
|
+
<ViewToggle
|
|
47
|
+
viewMode={viewMode}
|
|
48
|
+
onChange={setViewMode}
|
|
49
|
+
tableLabel="Table"
|
|
50
|
+
cardsLabel="Cards"
|
|
51
|
+
kanbanLabel="Kanban"
|
|
52
|
+
/>
|
|
53
|
+
</div>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Pattern: Colonnes Responsives dans Table
|
|
59
|
+
|
|
60
|
+
### Priorite des colonnes
|
|
61
|
+
|
|
62
|
+
| Priorite | Breakpoint | Exemple colonnes |
|
|
63
|
+
|----------|------------|------------------|
|
|
64
|
+
| 1 - Critique | Toujours visible | Nom, Status, Actions |
|
|
65
|
+
| 2 - Important | `md:table-cell` | Email, Role |
|
|
66
|
+
| 3 - Secondaire | `lg:table-cell` | Date creation |
|
|
67
|
+
| 4 - Optionnel | `xl:table-cell` | Source, Groupe, Audit |
|
|
68
|
+
|
|
69
|
+
### Implementation
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
<thead>
|
|
73
|
+
<tr className="bg-[var(--bg-secondary)]">
|
|
74
|
+
{/* Toujours visible */}
|
|
75
|
+
<th className="px-4 py-3">Nom</th>
|
|
76
|
+
|
|
77
|
+
{/* Visible md+ (tablette) */}
|
|
78
|
+
<th className="px-4 py-3 hidden md:table-cell">Email</th>
|
|
79
|
+
|
|
80
|
+
{/* Visible lg+ (desktop) */}
|
|
81
|
+
<th className="px-4 py-3 hidden lg:table-cell">Role</th>
|
|
82
|
+
|
|
83
|
+
{/* Toujours visible */}
|
|
84
|
+
<th className="px-4 py-3">Status</th>
|
|
85
|
+
|
|
86
|
+
{/* Visible xl+ (grand ecran) */}
|
|
87
|
+
<th className="px-4 py-3 hidden xl:table-cell">Source</th>
|
|
88
|
+
<th className="px-4 py-3 hidden xl:table-cell">Groupe</th>
|
|
89
|
+
|
|
90
|
+
{/* Toujours visible */}
|
|
91
|
+
<th className="px-4 py-3">Actions</th>
|
|
92
|
+
</tr>
|
|
93
|
+
</thead>
|
|
94
|
+
|
|
95
|
+
<tbody>
|
|
96
|
+
{items.map(item => (
|
|
97
|
+
<tr key={item.id}>
|
|
98
|
+
<td className="px-4 py-3">{item.name}</td>
|
|
99
|
+
<td className="px-4 py-3 hidden md:table-cell">{item.email}</td>
|
|
100
|
+
<td className="px-4 py-3 hidden lg:table-cell">{item.role}</td>
|
|
101
|
+
<td className="px-4 py-3">{item.status}</td>
|
|
102
|
+
<td className="px-4 py-3 hidden xl:table-cell">{item.source}</td>
|
|
103
|
+
<td className="px-4 py-3 hidden xl:table-cell">{item.group}</td>
|
|
104
|
+
<td className="px-4 py-3">{/* Actions */}</td>
|
|
105
|
+
</tr>
|
|
106
|
+
))}
|
|
107
|
+
</tbody>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Afficher info masquee sur petits ecrans
|
|
111
|
+
|
|
112
|
+
```tsx
|
|
113
|
+
{/* Dans la cellule Nom, afficher l'email sur mobile */}
|
|
114
|
+
<td className="px-4 py-3">
|
|
115
|
+
<div className="font-medium">{item.name}</div>
|
|
116
|
+
{/* Email visible uniquement sur mobile (quand colonne email masquee) */}
|
|
117
|
+
<div className="text-sm text-[var(--text-tertiary)] md:hidden">
|
|
118
|
+
{item.email}
|
|
119
|
+
</div>
|
|
120
|
+
</td>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Pattern: Cards View
|
|
126
|
+
|
|
127
|
+
### Grid responsive
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4">
|
|
131
|
+
{items.map(item => (
|
|
132
|
+
<div key={item.id} className="card p-4">
|
|
133
|
+
{/* Header avec avatar et status */}
|
|
134
|
+
<div className="flex items-center justify-between mb-3">
|
|
135
|
+
<div className="flex items-center gap-3">
|
|
136
|
+
<Avatar name={item.name} />
|
|
137
|
+
<div>
|
|
138
|
+
<div className="font-medium">{item.name}</div>
|
|
139
|
+
<div className="text-sm text-[var(--text-tertiary)]">{item.email}</div>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
<StatusBadge status={item.status} />
|
|
143
|
+
</div>
|
|
144
|
+
|
|
145
|
+
{/* Corps avec infos supplementaires */}
|
|
146
|
+
<div className="space-y-2 mb-4">
|
|
147
|
+
<div className="flex items-center gap-2 text-sm">
|
|
148
|
+
<Shield className="w-4 h-4 text-[var(--text-tertiary)]" />
|
|
149
|
+
<span>{item.role}</span>
|
|
150
|
+
</div>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
{/* Actions */}
|
|
154
|
+
<div className="flex items-center justify-end gap-1 pt-3 border-t border-[var(--border-color)]">
|
|
155
|
+
<button className="btn btn-ghost p-2">
|
|
156
|
+
<Eye className="w-4 h-4" />
|
|
157
|
+
</button>
|
|
158
|
+
<button className="btn btn-ghost p-2">
|
|
159
|
+
<Edit2 className="w-4 h-4" />
|
|
160
|
+
</button>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
))}
|
|
164
|
+
</div>
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Pattern: Header Responsive
|
|
170
|
+
|
|
171
|
+
```tsx
|
|
172
|
+
<div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
|
|
173
|
+
<div>
|
|
174
|
+
<h1 className="text-2xl font-bold">{title}</h1>
|
|
175
|
+
<p className="text-sm text-[var(--text-tertiary)] mt-1">
|
|
176
|
+
{count} elements
|
|
177
|
+
</p>
|
|
178
|
+
</div>
|
|
179
|
+
<div className="flex items-center gap-2">
|
|
180
|
+
<button className="btn btn-primary">
|
|
181
|
+
<Plus className="w-4 h-4" />
|
|
182
|
+
<span className="hidden sm:inline">Creer</span>
|
|
183
|
+
</button>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Pattern: Filters Responsive
|
|
191
|
+
|
|
192
|
+
```tsx
|
|
193
|
+
{/* Barre de recherche + filtres */}
|
|
194
|
+
<div className="flex flex-col md:flex-row md:items-center justify-between gap-4">
|
|
195
|
+
{/* Recherche - pleine largeur sur mobile */}
|
|
196
|
+
<div className="flex items-center gap-3 flex-1">
|
|
197
|
+
<div className="relative flex-1 max-w-md">
|
|
198
|
+
<input type="text" className="input w-full" />
|
|
199
|
+
</div>
|
|
200
|
+
<button className="btn btn-secondary">
|
|
201
|
+
<Filter className="w-4 h-4" />
|
|
202
|
+
<span className="hidden sm:inline">Filtres</span>
|
|
203
|
+
</button>
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
{/* View Toggle - masque sur mobile */}
|
|
207
|
+
<div className="hidden md:block">
|
|
208
|
+
<ViewToggle viewMode={viewMode} onChange={setViewMode} />
|
|
209
|
+
</div>
|
|
210
|
+
</div>
|
|
211
|
+
|
|
212
|
+
{/* Panel filtres avances */}
|
|
213
|
+
{showFilters && (
|
|
214
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
215
|
+
{/* Chaque filtre */}
|
|
216
|
+
</div>
|
|
217
|
+
)}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## Breakpoints Tailwind Reference
|
|
223
|
+
|
|
224
|
+
| Breakpoint | Min Width | Usage |
|
|
225
|
+
|------------|-----------|-------|
|
|
226
|
+
| `sm:` | 640px | Petit mobile → Grand mobile |
|
|
227
|
+
| `md:` | 768px | Mobile → Tablette |
|
|
228
|
+
| `lg:` | 1024px | Tablette → Desktop |
|
|
229
|
+
| `xl:` | 1280px | Desktop → Grand ecran |
|
|
230
|
+
| `2xl:` | 1536px | Grand ecran |
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Checklist Responsive
|
|
235
|
+
|
|
236
|
+
Avant de valider une page, verifier:
|
|
237
|
+
|
|
238
|
+
- [ ] **Mobile** : Vue carte fonctionne (pas de tableau)
|
|
239
|
+
- [ ] **Tablette** : Colonnes secondaires masquees
|
|
240
|
+
- [ ] **Desktop** : Toutes les colonnes visibles
|
|
241
|
+
- [ ] **ViewToggle** : Masque sur mobile
|
|
242
|
+
- [ ] **Boutons** : Texte masque sur petit ecran (`hidden sm:inline`)
|
|
243
|
+
- [ ] **Header** : Stack vertical sur mobile (`flex-col sm:flex-row`)
|
|
244
|
+
- [ ] **Filtres** : Grid responsive (`grid-cols-1 sm:grid-cols-2 lg:grid-cols-4`)
|
|
245
|
+
- [ ] **Cards** : Grid responsive (`grid-cols-1 md:grid-cols-2 lg:grid-cols-3`)
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Anti-Patterns a Eviter
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
// ❌ MAUVAIS: Pas de breakpoint
|
|
253
|
+
<th>Email</th>
|
|
254
|
+
|
|
255
|
+
// ✅ BON: Avec breakpoint responsive
|
|
256
|
+
<th className="hidden md:table-cell">Email</th>
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
```tsx
|
|
260
|
+
// ❌ MAUVAIS: Meme vue partout
|
|
261
|
+
{viewMode === 'table' && renderTableView()}
|
|
262
|
+
|
|
263
|
+
// ✅ BON: Cards forces sur mobile
|
|
264
|
+
<div className="md:hidden">{renderCardsView()}</div>
|
|
265
|
+
<div className="hidden md:block">
|
|
266
|
+
{viewMode === 'table' && renderTableView()}
|
|
267
|
+
</div>
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
```tsx
|
|
271
|
+
// ❌ MAUVAIS: ViewToggle visible sur mobile
|
|
272
|
+
<ViewToggle viewMode={viewMode} onChange={setViewMode} />
|
|
273
|
+
|
|
274
|
+
// ✅ BON: Masque sur mobile
|
|
275
|
+
<div className="hidden md:block">
|
|
276
|
+
<ViewToggle viewMode={viewMode} onChange={setViewMode} />
|
|
277
|
+
</div>
|
|
278
|
+
```
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: utils
|
|
3
|
+
description: Utility skills for SmartStack CLI development
|
|
4
|
+
argument-hint: "<subcommand> [options]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<objective>
|
|
8
|
+
Collection of utility skills for SmartStack CLI development and testing.
|
|
9
|
+
</objective>
|
|
10
|
+
|
|
11
|
+
<quick_start>
|
|
12
|
+
```bash
|
|
13
|
+
/utils:test-web --quick # Quick web accessibility test
|
|
14
|
+
/utils:test-web --chrome # E2E tests with Claude for Chrome
|
|
15
|
+
/utils:test-web-config # Configure test targets
|
|
16
|
+
```
|
|
17
|
+
</quick_start>
|
|
18
|
+
|
|
19
|
+
<subcommands>
|
|
20
|
+
|
|
21
|
+
| Command | Description |
|
|
22
|
+
|---------|-------------|
|
|
23
|
+
| `/utils:test-web` | Test web accessibility and content validation |
|
|
24
|
+
| `/utils:test-web-config` | Configure test-web targets from external file |
|
|
25
|
+
|
|
26
|
+
</subcommands>
|
|
27
|
+
|
|
28
|
+
<entry_point>
|
|
29
|
+
|
|
30
|
+
Route to subcommand file:
|
|
31
|
+
|
|
32
|
+
| Subcommand | File |
|
|
33
|
+
|------------|------|
|
|
34
|
+
| `test-web` | `subcommands/test-web.md` |
|
|
35
|
+
| `test-web-config` | `subcommands/test-web-config.md` |
|
|
36
|
+
|
|
37
|
+
</entry_point>
|
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: test-web-config
|
|
2
3
|
description: Configure test-web targets from external config file
|
|
3
|
-
argument-hint: [path/to/config.json]
|
|
4
|
+
argument-hint: "[path/to/config.json]"
|
|
4
5
|
allowed-tools: Read, Write, AskUserQuestion, Glob
|
|
5
6
|
model: haiku
|
|
6
7
|
---
|
|
7
8
|
|
|
8
|
-
#
|
|
9
|
+
# Test Web Configuration
|
|
9
10
|
|
|
10
11
|
Updates web test configuration from external file.
|
|
11
12
|
|
|
12
|
-
> **CLAUDE INSTRUCTION:** The `AskUserQuestion({...})` blocks are instructions to use the `AskUserQuestion` tool **interactively**. You MUST execute the tool with these parameters to get user response BEFORE continuing.
|
|
13
|
-
|
|
14
13
|
## Usage
|
|
15
14
|
|
|
16
|
-
```
|
|
17
|
-
/test-web
|
|
18
|
-
/test-web
|
|
15
|
+
```bash
|
|
16
|
+
/utils:test-web-config # Ask for file interactively
|
|
17
|
+
/utils:test-web-config path/to/config.json # Load file directly
|
|
19
18
|
```
|
|
20
19
|
|
|
21
20
|
## Workflow
|
|
22
21
|
|
|
23
|
-
### 1. Get
|
|
22
|
+
### 1. Get Source File
|
|
24
23
|
|
|
25
24
|
**If argument provided**: Use given path
|
|
26
25
|
|
|
27
26
|
**Otherwise**: Ask user
|
|
28
27
|
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
```yaml
|
|
29
|
+
questions:
|
|
30
|
+
- header: "Config file"
|
|
31
|
+
question: "Which configuration file do you want to load?"
|
|
32
|
+
options:
|
|
33
|
+
- label: "Search in project"
|
|
34
|
+
description: "Glob to find *test-web*.json files"
|
|
35
|
+
- label: "Enter path"
|
|
36
|
+
description: "Manually specify file path"
|
|
37
|
+
multiSelect: false
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
### 2. Validate
|
|
40
|
+
### 2. Validate File
|
|
41
41
|
|
|
42
42
|
1. Check file exists
|
|
43
43
|
2. Read JSON content
|
|
@@ -72,22 +72,23 @@ AskUserQuestion:
|
|
|
72
72
|
}
|
|
73
73
|
```
|
|
74
74
|
|
|
75
|
-
### 3. Merge or
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
75
|
+
### 3. Merge or Replace
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
questions:
|
|
79
|
+
- header: "Mode"
|
|
80
|
+
question: "How to apply new configuration?"
|
|
81
|
+
options:
|
|
82
|
+
- label: "Replace"
|
|
83
|
+
description: "Completely replace existing config"
|
|
84
|
+
- label: "Merge (add)"
|
|
85
|
+
description: "Add new targets to existing"
|
|
86
|
+
multiSelect: false
|
|
86
87
|
```
|
|
87
88
|
|
|
88
89
|
### 4. Apply
|
|
89
90
|
|
|
90
|
-
1. Read existing
|
|
91
|
+
1. Read existing `.claude/test-web/config.json`
|
|
91
92
|
2. Apply chosen mode (replace or merge)
|
|
92
93
|
3. Write result
|
|
93
94
|
|
|
@@ -95,17 +96,17 @@ AskUserQuestion:
|
|
|
95
96
|
|
|
96
97
|
```
|
|
97
98
|
CONFIG UPDATED
|
|
98
|
-
|
|
99
|
+
------------------------------------
|
|
99
100
|
Source: {source_file_path}
|
|
100
101
|
Mode: {replace|merge}
|
|
101
102
|
Targets: {total_count}
|
|
102
|
-
|
|
103
|
+
------------------------------------
|
|
103
104
|
|
|
104
105
|
Test now:
|
|
105
|
-
/test-web --quick
|
|
106
|
+
/utils:test-web --quick
|
|
106
107
|
```
|
|
107
108
|
|
|
108
|
-
## Example
|
|
109
|
+
## Example Source Files
|
|
109
110
|
|
|
110
111
|
### Minimal
|
|
111
112
|
|
|
@@ -149,12 +150,3 @@ Test now:
|
|
|
149
150
|
}
|
|
150
151
|
}
|
|
151
152
|
```
|
|
152
|
-
|
|
153
|
-
## Available templates
|
|
154
|
-
|
|
155
|
-
Configuration templates are available in:
|
|
156
|
-
[templates/test-web/](templates/test-web/)
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
User: $ARGUMENTS
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
+
name: test-web
|
|
2
3
|
description: Test web accessibility and content validation
|
|
3
4
|
argument-hint: --quick|--chrome|--report|<url>
|
|
4
5
|
allowed-tools: WebFetch, WebSearch, Read, Write, Bash
|
|
5
6
|
model: sonnet
|
|
6
7
|
---
|
|
7
8
|
|
|
8
|
-
#
|
|
9
|
+
# Test Web Accessibility
|
|
9
10
|
|
|
10
11
|
Tests accessibility and content of project web resources.
|
|
11
12
|
|
|
@@ -20,7 +21,7 @@ Tests accessibility and content of project web resources.
|
|
|
20
21
|
|
|
21
22
|
## Configuration
|
|
22
23
|
|
|
23
|
-
Reads configuration from:
|
|
24
|
+
Reads configuration from: `.claude/test-web/config.json`
|
|
24
25
|
|
|
25
26
|
## Workflow
|
|
26
27
|
|
|
@@ -59,7 +60,7 @@ Reads configuration from: [.claude/test-web/config.json](.claude/test-web/config
|
|
|
59
60
|
|
|
60
61
|
### Report Mode (--report)
|
|
61
62
|
|
|
62
|
-
Generates markdown file in
|
|
63
|
+
Generates markdown file in `.claude/test-web/reports/`:
|
|
63
64
|
|
|
64
65
|
```markdown
|
|
65
66
|
# Test Web Report - YYYY-MM-DD HH:mm
|
|
@@ -77,75 +78,46 @@ Generates markdown file in [.claude/test-web/reports/](.claude/test-web/reports/
|
|
|
77
78
|
- Screenshot: (if chrome mode)
|
|
78
79
|
```
|
|
79
80
|
|
|
80
|
-
## Examples
|
|
81
|
-
|
|
82
|
-
### Quick test of all configured URLs
|
|
83
|
-
|
|
84
|
-
```
|
|
85
|
-
/test-web --quick
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### E2E test with browser
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
# First launch Claude Code with Chrome
|
|
92
|
-
claude --chrome
|
|
93
|
-
|
|
94
|
-
# Then execute tests
|
|
95
|
-
/test-web --chrome
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
### Test specific URL
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
/test-web https://github.com/SIMON-Atlashub/atlashub-claudecode-cli
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### Generate detailed report
|
|
105
|
-
|
|
106
|
-
```
|
|
107
|
-
/test-web --report
|
|
108
|
-
```
|
|
109
|
-
|
|
110
81
|
## Output Format
|
|
111
82
|
|
|
112
83
|
### Success
|
|
113
84
|
|
|
114
85
|
```
|
|
115
86
|
TEST WEB RESULTS
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
87
|
+
------------------------------------
|
|
88
|
+
OK GitHub Repository 200 OK "README" found
|
|
89
|
+
OK npm Package 200 OK "claude-tools" found
|
|
90
|
+
OK Google Indexation Results Found in search
|
|
120
91
|
|
|
121
92
|
Status: 3/3 PASS
|
|
122
|
-
|
|
93
|
+
------------------------------------
|
|
123
94
|
```
|
|
124
95
|
|
|
125
96
|
### Failure
|
|
126
97
|
|
|
127
98
|
```
|
|
128
99
|
TEST WEB RESULTS
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
100
|
+
------------------------------------
|
|
101
|
+
OK GitHub Repository 200 OK "README" found
|
|
102
|
+
FAIL npm Package 404 Package not found
|
|
103
|
+
WARN Google Indexation Results No relevant results
|
|
133
104
|
|
|
134
105
|
Status: 1/3 PASS, 1 FAIL, 1 WARNING
|
|
135
|
-
|
|
106
|
+
------------------------------------
|
|
136
107
|
```
|
|
137
108
|
|
|
138
|
-
##
|
|
139
|
-
|
|
140
|
-
This command can be called automatically in:
|
|
141
|
-
- Phase T (Test) of BA workflow: `/ba:5-verify`
|
|
142
|
-
- Phase T of EPCT workflow
|
|
109
|
+
## Examples
|
|
143
110
|
|
|
144
|
-
|
|
111
|
+
```bash
|
|
112
|
+
# Quick test of all configured URLs
|
|
113
|
+
/utils:test-web --quick
|
|
145
114
|
|
|
146
|
-
|
|
147
|
-
-
|
|
115
|
+
# E2E test with browser (requires claude --chrome)
|
|
116
|
+
/utils:test-web --chrome
|
|
148
117
|
|
|
149
|
-
|
|
118
|
+
# Test specific URL
|
|
119
|
+
/utils:test-web https://github.com/example/repo
|
|
150
120
|
|
|
151
|
-
|
|
121
|
+
# Generate detailed report
|
|
122
|
+
/utils:test-web --report
|
|
123
|
+
```
|