@atlashub/smartstack-cli 1.23.0 → 1.24.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 (33) hide show
  1. package/dist/index.js +13 -0
  2. package/dist/index.js.map +1 -1
  3. package/package.json +1 -1
  4. package/templates/skills/check-version/SKILL.md +183 -0
  5. package/templates/skills/debug/SKILL.md +161 -0
  6. package/templates/skills/explore/SKILL.md +96 -0
  7. package/templates/skills/quick-search/SKILL.md +87 -0
  8. package/templates/skills/refactor/SKILL.md +219 -0
  9. package/templates/skills/review-code/SKILL.md +72 -44
  10. package/templates/skills/review-code/references/smartstack-conventions.md +93 -33
  11. package/templates/skills/ui-components/responsive-guidelines.md +278 -0
  12. package/templates/skills/utils/SKILL.md +37 -0
  13. package/templates/{commands/utils → skills/utils/subcommands}/test-web-config.md +35 -43
  14. package/templates/{commands/utils → skills/utils/subcommands}/test-web.md +25 -53
  15. package/templates/{commands/validate.md → skills/validate/SKILL.md} +80 -139
  16. package/templates/commands/check-version.md +0 -267
  17. package/templates/commands/debug.md +0 -95
  18. package/templates/commands/efcore/_env-check.md +0 -153
  19. package/templates/commands/efcore/_shared.md +0 -352
  20. package/templates/commands/efcore/conflicts.md +0 -90
  21. package/templates/commands/efcore/db-deploy.md +0 -109
  22. package/templates/commands/efcore/db-reset.md +0 -180
  23. package/templates/commands/efcore/db-seed.md +0 -103
  24. package/templates/commands/efcore/db-status.md +0 -102
  25. package/templates/commands/efcore/migration.md +0 -186
  26. package/templates/commands/efcore/rebase-snapshot.md +0 -172
  27. package/templates/commands/efcore/scan.md +0 -94
  28. package/templates/commands/efcore/squash.md +0 -329
  29. package/templates/commands/efcore.md +0 -96
  30. package/templates/commands/explore.md +0 -45
  31. package/templates/commands/quick-search.md +0 -72
  32. package/templates/commands/refactor.md +0 -164
  33. /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
- # /test-web:config - Web test configuration
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:config # Ask for file interactively
18
- /test-web:config path/to/config.json # Load file directly
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 source file
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
- AskUserQuestion:
31
- question: "Which configuration file do you want to load?"
32
- header: "Config file"
33
- options:
34
- - label: "Search in project"
35
- description: "Glob to find *test-web*.json files"
36
- - label: "Enter path"
37
- description: "Manually specify file path"
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 file
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 replace
76
-
77
- ```
78
- AskUserQuestion:
79
- question: "How to apply new configuration?"
80
- header: "Mode"
81
- options:
82
- - label: "Replace"
83
- description: "Completely replace existing config"
84
- - label: "Merge (add)"
85
- description: "Add new targets to existing"
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 [.claude/test-web/config.json](.claude/test-web/config.json)
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 source files
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
- # /test-web - Web testing agent
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: [.claude/test-web/config.json](.claude/test-web/config.json)
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 [.claude/test-web/reports/](.claude/test-web/reports/):
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
- GitHub Repository 200 OK "README" found
118
- npm Package 200 OK "claude-tools" found
119
- Google Indexation Results Found in search
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
- GitHub Repository 200 OK "README" found
131
- npm Package 404 Package not found
132
- ⚠️ Google Indexation Results No relevant results
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
- ## BA/EPCT Integration
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
- ## Sources
111
+ ```bash
112
+ # Quick test of all configured URLs
113
+ /utils:test-web --quick
145
114
 
146
- - [Anthropic - Claude for Chrome](https://www.anthropic.com/news/claude-for-chrome)
147
- - [Claude Help Center](https://support.claude.com/en/articles/12012173-getting-started-with-claude-in-chrome)
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
- User: $ARGUMENTS
121
+ # Generate detailed report
122
+ /utils:test-web --report
123
+ ```