@atlashub/smartstack-cli 1.4.0 → 1.5.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 +8 -4
- package/.documentation/apex.html +8 -4
- package/.documentation/business-analyse.html +833 -406
- package/.documentation/commands.html +8 -4
- package/.documentation/css/styles.css +153 -15
- package/.documentation/efcore.html +8 -4
- package/.documentation/gitflow.html +795 -230
- package/.documentation/hooks.html +8 -4
- package/.documentation/index.html +13 -9
- package/.documentation/installation.html +23 -19
- package/.documentation/ralph-loop.html +530 -0
- package/.documentation/test-web.html +8 -4
- package/README.md +52 -10
- package/dist/index.js +813 -283
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/efcore/conflicts.md +44 -17
- package/templates/agents/efcore/db-status.md +27 -6
- package/templates/agents/efcore/scan.md +43 -13
- package/templates/commands/ai-prompt.md +315 -315
- package/templates/commands/application/create.md +362 -362
- package/templates/commands/controller/create.md +216 -216
- package/templates/commands/controller.md +59 -0
- package/templates/commands/create/agent.md +138 -0
- package/templates/commands/create/command.md +166 -0
- package/templates/commands/create/hook.md +234 -0
- package/templates/commands/create/plugin.md +329 -0
- package/templates/commands/create/project.md +507 -0
- package/templates/commands/create/skill.md +199 -0
- package/templates/commands/create.md +220 -0
- package/templates/commands/documentation/module.md +202 -202
- package/templates/commands/efcore/_env-check.md +153 -153
- package/templates/commands/efcore/conflicts.md +109 -192
- package/templates/commands/efcore/db-status.md +101 -89
- package/templates/commands/efcore/migration.md +23 -11
- package/templates/commands/efcore/scan.md +115 -119
- package/templates/commands/efcore.md +54 -6
- package/templates/commands/feature-full.md +267 -267
- package/templates/commands/gitflow/11-finish.md +145 -11
- package/templates/commands/gitflow/13-sync.md +216 -216
- package/templates/commands/gitflow/14-rebase.md +251 -251
- package/templates/commands/gitflow/2-status.md +120 -10
- package/templates/commands/gitflow/3-commit.md +150 -0
- package/templates/commands/gitflow/7-pull-request.md +134 -5
- package/templates/commands/gitflow/9-merge.md +142 -1
- package/templates/commands/implement.md +663 -663
- package/templates/commands/init.md +562 -0
- package/templates/commands/mcp-integration.md +330 -0
- package/templates/commands/notification.md +129 -129
- package/templates/commands/validate.md +233 -0
- package/templates/commands/workflow.md +193 -193
- package/templates/skills/ai-prompt/SKILL.md +778 -778
- package/templates/skills/application/SKILL.md +563 -563
- package/templates/skills/application/templates-backend.md +450 -450
- package/templates/skills/application/templates-frontend.md +531 -531
- package/templates/skills/application/templates-i18n.md +520 -520
- package/templates/skills/application/templates-seed.md +647 -647
- package/templates/skills/controller/SKILL.md +240 -240
- package/templates/skills/controller/postman-templates.md +614 -614
- package/templates/skills/controller/templates.md +1468 -1468
- package/templates/skills/documentation/SKILL.md +133 -133
- package/templates/skills/documentation/templates.md +476 -476
- package/templates/skills/feature-full/SKILL.md +838 -838
- package/templates/skills/notification/SKILL.md +555 -555
- package/templates/skills/ui-components/SKILL.md +870 -870
- package/templates/skills/workflow/SKILL.md +582 -582
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Create SmartStack projects and extensions
|
|
3
|
+
argument-hint: <type> <name> [description]
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SmartStack Creator
|
|
7
|
+
|
|
8
|
+
Create complete project structures for SmartStack applications and extensions.
|
|
9
|
+
|
|
10
|
+
## Supported Types
|
|
11
|
+
|
|
12
|
+
| Type | Command | Description |
|
|
13
|
+
|------|---------|-------------|
|
|
14
|
+
| **project** | `/create:project` | Full-stack app (.NET + React + Vite + Tailwind) |
|
|
15
|
+
| **command** | `/create:command` | Slash command (like /apex, /gitflow) |
|
|
16
|
+
| **agent** | `/create:agent` | Specialized execution agent |
|
|
17
|
+
| **skill** | `/create:skill` | Multi-phase workflow orchestrator |
|
|
18
|
+
| **hook** | `/create:hook` | Git operation validator |
|
|
19
|
+
| **plugin** | `/create:plugin` | Full CLI extension with all types |
|
|
20
|
+
|
|
21
|
+
## Quick Usage
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
/create project MyApp "My awesome full-stack application"
|
|
25
|
+
/create command my-feature "Description of my feature command"
|
|
26
|
+
/create agent code-reviewer "Agent for reviewing code quality"
|
|
27
|
+
/create skill deployment "Multi-phase deployment workflow"
|
|
28
|
+
/create hook security-check "Pre-commit security validation"
|
|
29
|
+
/create plugin my-toolkit "Complete CLI toolkit extension"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Workflow
|
|
33
|
+
|
|
34
|
+
### 1. PARSE ARGUMENTS
|
|
35
|
+
|
|
36
|
+
Extract from `$ARGUMENTS`:
|
|
37
|
+
- **type**: command | agent | skill | hook | plugin
|
|
38
|
+
- **name**: Extension name (kebab-case)
|
|
39
|
+
- **description**: Optional description
|
|
40
|
+
|
|
41
|
+
If arguments missing, use AskUserQuestion to gather:
|
|
42
|
+
- Type of extension
|
|
43
|
+
- Name (validate kebab-case)
|
|
44
|
+
- Description
|
|
45
|
+
|
|
46
|
+
### 2. VALIDATE
|
|
47
|
+
|
|
48
|
+
Check:
|
|
49
|
+
- Name is valid kebab-case: `^[a-z][a-z0-9-]*$`
|
|
50
|
+
- Type is supported
|
|
51
|
+
- Target directory doesn't already exist
|
|
52
|
+
|
|
53
|
+
### 3. CREATE PROJECT STRUCTURE
|
|
54
|
+
|
|
55
|
+
Create the following structure:
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
smartstack-{name}/
|
|
59
|
+
├── package.json # npm package configuration
|
|
60
|
+
├── tsconfig.json # TypeScript configuration
|
|
61
|
+
├── tsup.config.ts # Build configuration
|
|
62
|
+
├── README.md # Documentation
|
|
63
|
+
├── .gitignore # Git ignore rules
|
|
64
|
+
├── src/
|
|
65
|
+
│ └── index.ts # Main entry point
|
|
66
|
+
└── templates/
|
|
67
|
+
├── commands/ # Command templates
|
|
68
|
+
│ └── {name}.md
|
|
69
|
+
├── agents/ # Agent templates
|
|
70
|
+
│ └── {name}.md
|
|
71
|
+
├── skills/ # Skill templates
|
|
72
|
+
│ └── {name}/
|
|
73
|
+
│ ├── SKILL.md
|
|
74
|
+
│ └── 1-*.md (phases)
|
|
75
|
+
└── hooks/ # Hook templates
|
|
76
|
+
└── {name}.md
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 4. GENERATE FILES
|
|
80
|
+
|
|
81
|
+
Use the Write tool to create each file with proper content.
|
|
82
|
+
|
|
83
|
+
**File Generation Order:**
|
|
84
|
+
1. Create root directory
|
|
85
|
+
2. Create package.json
|
|
86
|
+
3. Create tsconfig.json
|
|
87
|
+
4. Create tsup.config.ts
|
|
88
|
+
5. Create src/index.ts
|
|
89
|
+
6. Create README.md
|
|
90
|
+
7. Create .gitignore
|
|
91
|
+
8. Create templates based on type
|
|
92
|
+
|
|
93
|
+
### 5. SHOW NEXT STEPS
|
|
94
|
+
|
|
95
|
+
Display instructions for:
|
|
96
|
+
- Installing dependencies
|
|
97
|
+
- Editing templates
|
|
98
|
+
- Building the extension
|
|
99
|
+
- Publishing
|
|
100
|
+
|
|
101
|
+
## Type-Specific Templates
|
|
102
|
+
|
|
103
|
+
### Command Template Structure
|
|
104
|
+
|
|
105
|
+
```yaml
|
|
106
|
+
---
|
|
107
|
+
description: {description}
|
|
108
|
+
argument-hint: <task-description>
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
# {PascalCaseName}
|
|
112
|
+
|
|
113
|
+
{description}
|
|
114
|
+
|
|
115
|
+
## Workflow
|
|
116
|
+
[phases]
|
|
117
|
+
|
|
118
|
+
## Execution Rules
|
|
119
|
+
[rules]
|
|
120
|
+
|
|
121
|
+
## Priority
|
|
122
|
+
[priority statement]
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
User: $ARGUMENTS
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Agent Template Structure
|
|
129
|
+
|
|
130
|
+
```yaml
|
|
131
|
+
---
|
|
132
|
+
name: {kebab-case-name}
|
|
133
|
+
description: {description}
|
|
134
|
+
color: yellow
|
|
135
|
+
model: haiku
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
# {PascalCaseName} Agent
|
|
139
|
+
|
|
140
|
+
## Search Strategy
|
|
141
|
+
[strategy]
|
|
142
|
+
|
|
143
|
+
## Output Format
|
|
144
|
+
[format]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Skill Template Structure
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
---
|
|
151
|
+
name: {kebab-case-name}
|
|
152
|
+
description: {description}
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
# {PascalCaseName} Skill
|
|
156
|
+
|
|
157
|
+
## Phases
|
|
158
|
+
[phase table]
|
|
159
|
+
|
|
160
|
+
## Workflow Diagram
|
|
161
|
+
[ASCII diagram]
|
|
162
|
+
|
|
163
|
+
## Model Strategy
|
|
164
|
+
[cost table]
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Hook Template Structure
|
|
168
|
+
|
|
169
|
+
```yaml
|
|
170
|
+
---
|
|
171
|
+
description: {description}
|
|
172
|
+
trigger: pre-commit
|
|
173
|
+
blocking: true
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
# {PascalCaseName} Hook
|
|
177
|
+
|
|
178
|
+
## Patterns to Detect
|
|
179
|
+
[patterns]
|
|
180
|
+
|
|
181
|
+
## Detection Script
|
|
182
|
+
[bash script]
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Execution Rules
|
|
186
|
+
|
|
187
|
+
1. **ALWAYS** validate name format before creating files
|
|
188
|
+
2. **NEVER** overwrite existing directories
|
|
189
|
+
3. Use Write tool for all file creation
|
|
190
|
+
4. Generate complete, working templates
|
|
191
|
+
5. Include practical examples in generated code
|
|
192
|
+
|
|
193
|
+
## Output Format
|
|
194
|
+
|
|
195
|
+
After creation, display:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
199
|
+
║ SMARTSTACK EXTENSION CREATED ║
|
|
200
|
+
╠═══════════════════════════════════════════════════════════╣
|
|
201
|
+
║ Name: smartstack-{name} ║
|
|
202
|
+
║ Type: {type} ║
|
|
203
|
+
║ Location: {full-path} ║
|
|
204
|
+
╠═══════════════════════════════════════════════════════════╣
|
|
205
|
+
║ Next steps: ║
|
|
206
|
+
║ 1. cd smartstack-{name} ║
|
|
207
|
+
║ 2. npm install ║
|
|
208
|
+
║ 3. Edit templates in templates/ folder ║
|
|
209
|
+
║ 4. npm run build ║
|
|
210
|
+
║ 5. npm publish (when ready) ║
|
|
211
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
## Priority
|
|
215
|
+
|
|
216
|
+
Completeness > Correctness > Speed
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
User: $ARGUMENTS
|
|
@@ -1,202 +1,202 @@
|
|
|
1
|
-
# /documentation:module - Génération Documentation SmartStack
|
|
2
|
-
|
|
3
|
-
> **Synergie Skill/Commande:**
|
|
4
|
-
> - **Skill** (`.claude/skills/documentation/`) → Invocation automatique par Claude
|
|
5
|
-
> - **Commande** (`/documentation:module`) → Invocation manuelle par l'utilisateur
|
|
6
|
-
> - Templates partagés dans `.claude/skills/documentation/templates.md`
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## ARGUMENTS
|
|
11
|
-
|
|
12
|
-
```
|
|
13
|
-
/documentation:module <type> <target>
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
| Variable | Extraction | Valeurs |
|
|
17
|
-
|----------|------------|---------|
|
|
18
|
-
| `$TYPE` | Premier mot | `user` \| `developer` \| `database` \| `testing` |
|
|
19
|
-
| `$TARGET` | Reste de la ligne | Nom du module, outil, ou schéma |
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## RÈGLES ABSOLUES
|
|
24
|
-
|
|
25
|
-
1. **JAMAIS** de texte en dur → `useTranslation('docs')`
|
|
26
|
-
2. **JAMAIS** d'ASCII art → composants React/HTML pour MCD
|
|
27
|
-
3. **TOUJOURS** lire les sources existantes avant de générer
|
|
28
|
-
4. **TOUJOURS** demander confirmation avant de créer les fichiers
|
|
29
|
-
5. **TOUJOURS** mettre à jour App.tsx et les index parents
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
## WORKFLOW
|
|
34
|
-
|
|
35
|
-
### ÉTAPE 1: PARSING DES ARGUMENTS
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
EXTRAIRE $TYPE = premier mot des arguments
|
|
39
|
-
EXTRAIRE $TARGET = reste des arguments
|
|
40
|
-
|
|
41
|
-
SI $TYPE absent OU non reconnu → AskUserQuestion
|
|
42
|
-
SI $TARGET absent → AskUserQuestion
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### ÉTAPE 2: ANALYSE (selon $TYPE)
|
|
46
|
-
|
|
47
|
-
#### SI $TYPE == "user"
|
|
48
|
-
|
|
49
|
-
| Action | Commande |
|
|
50
|
-
|--------|----------|
|
|
51
|
-
| Trouver le module | `Grep "code.*$TARGET" src/.../Navigation/` |
|
|
52
|
-
| Composants React | `Glob "web/.../pages/**/*$TARGET*"` |
|
|
53
|
-
| Permissions | `Grep "$TARGET" src/.../Permissions.cs` |
|
|
54
|
-
| Endpoints API | `Grep "$TARGET" src/.../Controllers/` |
|
|
55
|
-
|
|
56
|
-
#### SI $TYPE == "database"
|
|
57
|
-
|
|
58
|
-
| Action | Commande |
|
|
59
|
-
|--------|----------|
|
|
60
|
-
| Tables du schéma | `Read ApplicationDbContextModelSnapshot.cs` |
|
|
61
|
-
| Configurations | `Glob "Persistence/Configurations/$TARGET/*.cs"` |
|
|
62
|
-
| Entités Domain | `Glob "Domain/Entities/$TARGET/*.cs"` |
|
|
63
|
-
|
|
64
|
-
#### SI $TYPE == "developer" ou "testing"
|
|
65
|
-
|
|
66
|
-
| Action | Commande |
|
|
67
|
-
|--------|----------|
|
|
68
|
-
| Doc existante | `Glob "pages/docs/developer/**/*$TARGET*"` |
|
|
69
|
-
| Fichiers config | `Glob "**/$TARGET*.{json,yaml}"` |
|
|
70
|
-
| Doc officielle | `WebSearch` |
|
|
71
|
-
|
|
72
|
-
### ÉTAPE 3: CONFIRMATION UTILISATEUR
|
|
73
|
-
|
|
74
|
-
```typescript
|
|
75
|
-
AskUserQuestion({
|
|
76
|
-
questions: [{
|
|
77
|
-
header: "Détail",
|
|
78
|
-
question: "Quel niveau de détail pour '$TARGET' ?",
|
|
79
|
-
options: [
|
|
80
|
-
{ label: "Complet (Recommended)", description: "Toutes sections" },
|
|
81
|
-
{ label: "Standard", description: "Sections principales" },
|
|
82
|
-
{ label: "Minimal", description: "Référence rapide" }
|
|
83
|
-
]
|
|
84
|
-
}]
|
|
85
|
-
})
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
### ÉTAPE 4: GÉNÉRATION
|
|
89
|
-
|
|
90
|
-
| $TYPE | Fichier | Chemin |
|
|
91
|
-
|-------|---------|--------|
|
|
92
|
-
| `user` | `{Module}DocPage.tsx` | `pages/docs/user/{context}/` |
|
|
93
|
-
| `developer` | `{Tool}Page.tsx` | `pages/docs/developer/tools/` |
|
|
94
|
-
| `database` | `{Schema}SchemaPage.tsx` | `pages/docs/developer/database/` |
|
|
95
|
-
| `testing` | `{Tool}TestingPage.tsx` | `pages/docs/developer/testing/` |
|
|
96
|
-
|
|
97
|
-
**Fichiers à créer/modifier:**
|
|
98
|
-
1. Page React (utiliser template de `templates.md`)
|
|
99
|
-
2. Traductions EN → `i18n/locales/en/docs.json`
|
|
100
|
-
3. Traductions FR → `i18n/locales/fr/docs.json`
|
|
101
|
-
4. Route → `App.tsx`
|
|
102
|
-
5. Index parent → lien de navigation
|
|
103
|
-
6. **UserIndexPage.tsx** → Ajouter le module à la hiérarchie (SI $TYPE == "user")
|
|
104
|
-
|
|
105
|
-
### ÉTAPE 4bis: INTÉGRATION UserIndexPage (SI $TYPE == "user")
|
|
106
|
-
|
|
107
|
-
**OBLIGATOIRE** pour les modules utilisateur: Vérifier et mettre à jour `UserIndexPage.tsx`
|
|
108
|
-
|
|
109
|
-
```typescript
|
|
110
|
-
// Fichier: web/smartstack-web/src/pages/docs/user/UserIndexPage.tsx
|
|
111
|
-
|
|
112
|
-
// 1. Ajouter l'icône si nécessaire
|
|
113
|
-
import { ..., {IconName} } from 'lucide-react';
|
|
114
|
-
|
|
115
|
-
// 2. Trouver l'application parente dans la hiérarchie
|
|
116
|
-
// - Platform > Administration: pour les modules admin
|
|
117
|
-
// - Platform > Support: pour les modules support
|
|
118
|
-
// - Personal > MySpace: pour les modules personnels
|
|
119
|
-
|
|
120
|
-
// 3. Ajouter le module dans le tableau `modules` de l'application:
|
|
121
|
-
{
|
|
122
|
-
name: t('user.modules.{module}.name'),
|
|
123
|
-
icon: {IconName},
|
|
124
|
-
href: '/docs/user/{slug}',
|
|
125
|
-
description: t('user.modules.{module}.description')
|
|
126
|
-
},
|
|
127
|
-
|
|
128
|
-
// 4. Ajouter les traductions dans docs.json (fr + en):
|
|
129
|
-
"modules": {
|
|
130
|
-
"{module}": {
|
|
131
|
-
"name": "Nom du module",
|
|
132
|
-
"description": "Description courte"
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
**Vérification:**
|
|
138
|
-
- Le module doit apparaître dans la page `/docs/user` sous son application parente
|
|
139
|
-
- Le lien doit pointer vers `/docs/user/{slug}`
|
|
140
|
-
|
|
141
|
-
### ÉTAPE 5: INTÉGRATION
|
|
142
|
-
|
|
143
|
-
```typescript
|
|
144
|
-
// App.tsx
|
|
145
|
-
import { {Name}DocPage } from '@/pages/docs/{path}/{Name}DocPage';
|
|
146
|
-
<Route path="{slug}" element={<{Name}DocPage />} />
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### ÉTAPE 6: RÉSUMÉ FINAL
|
|
150
|
-
|
|
151
|
-
Afficher:
|
|
152
|
-
- ✅ Fichiers créés (chemins cliquables)
|
|
153
|
-
- 🔗 URL: `/docs/{path}/{slug}`
|
|
154
|
-
- 📝 Prochaines étapes
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## TEMPLATES
|
|
159
|
-
|
|
160
|
-
→ **Voir `.claude/skills/documentation/templates.md`**
|
|
161
|
-
|
|
162
|
-
Templates disponibles:
|
|
163
|
-
- User Module (maquettes UI, FAQ, API)
|
|
164
|
-
- Database Schema (MCD HTML, tables détaillées)
|
|
165
|
-
- Developer Tool (installation, config, CI/CD)
|
|
166
|
-
- Patterns réutilisables (CodeBlock, Stats, Badges)
|
|
167
|
-
|
|
168
|
-
---
|
|
169
|
-
|
|
170
|
-
## SOURCES DE DONNÉES
|
|
171
|
-
|
|
172
|
-
| Donnée | Source |
|
|
173
|
-
|--------|--------|
|
|
174
|
-
| Tables DB | `ApplicationDbContextModelSnapshot.cs` |
|
|
175
|
-
| Configurations | `Persistence/Configurations/{schema}/*.cs` |
|
|
176
|
-
| Permissions | `Domain/Authorization/Permissions.cs` |
|
|
177
|
-
| Routes | `App.tsx` |
|
|
178
|
-
| Traductions | `i18n/locales/*/docs.json` |
|
|
179
|
-
| Doc outils | WebSearch |
|
|
180
|
-
|
|
181
|
-
---
|
|
182
|
-
|
|
183
|
-
## STRUCTURE i18n
|
|
184
|
-
|
|
185
|
-
```json
|
|
186
|
-
{
|
|
187
|
-
"breadcrumb": { "documentation": "...", "user": "...", "developer": "..." },
|
|
188
|
-
"common": { "tableOfContents": "...", "externalResources": "..." },
|
|
189
|
-
"user": { "{module}": { "title": "...", "sections": {...} } },
|
|
190
|
-
"developer": { "tools": {...}, "database": {...} }
|
|
191
|
-
}
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## CONTRAINTES
|
|
197
|
-
|
|
198
|
-
- Variables CSS: `var(--text-primary)`, `var(--bg-secondary)`, `var(--color-primary-600)`
|
|
199
|
-
- Responsive: `grid-cols-1 md:grid-cols-2 lg:grid-cols-3`
|
|
200
|
-
- Icônes: `lucide-react` uniquement
|
|
201
|
-
- Liens externes: avec `<ExternalLink />` icon
|
|
202
|
-
- MCD: composants React/HTML (JAMAIS ASCII)
|
|
1
|
+
# /documentation:module - Génération Documentation SmartStack
|
|
2
|
+
|
|
3
|
+
> **Synergie Skill/Commande:**
|
|
4
|
+
> - **Skill** (`.claude/skills/documentation/`) → Invocation automatique par Claude
|
|
5
|
+
> - **Commande** (`/documentation:module`) → Invocation manuelle par l'utilisateur
|
|
6
|
+
> - Templates partagés dans `.claude/skills/documentation/templates.md`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ARGUMENTS
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
/documentation:module <type> <target>
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
| Variable | Extraction | Valeurs |
|
|
17
|
+
|----------|------------|---------|
|
|
18
|
+
| `$TYPE` | Premier mot | `user` \| `developer` \| `database` \| `testing` |
|
|
19
|
+
| `$TARGET` | Reste de la ligne | Nom du module, outil, ou schéma |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## RÈGLES ABSOLUES
|
|
24
|
+
|
|
25
|
+
1. **JAMAIS** de texte en dur → `useTranslation('docs')`
|
|
26
|
+
2. **JAMAIS** d'ASCII art → composants React/HTML pour MCD
|
|
27
|
+
3. **TOUJOURS** lire les sources existantes avant de générer
|
|
28
|
+
4. **TOUJOURS** demander confirmation avant de créer les fichiers
|
|
29
|
+
5. **TOUJOURS** mettre à jour App.tsx et les index parents
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## WORKFLOW
|
|
34
|
+
|
|
35
|
+
### ÉTAPE 1: PARSING DES ARGUMENTS
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
EXTRAIRE $TYPE = premier mot des arguments
|
|
39
|
+
EXTRAIRE $TARGET = reste des arguments
|
|
40
|
+
|
|
41
|
+
SI $TYPE absent OU non reconnu → AskUserQuestion
|
|
42
|
+
SI $TARGET absent → AskUserQuestion
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### ÉTAPE 2: ANALYSE (selon $TYPE)
|
|
46
|
+
|
|
47
|
+
#### SI $TYPE == "user"
|
|
48
|
+
|
|
49
|
+
| Action | Commande |
|
|
50
|
+
|--------|----------|
|
|
51
|
+
| Trouver le module | `Grep "code.*$TARGET" src/.../Navigation/` |
|
|
52
|
+
| Composants React | `Glob "web/.../pages/**/*$TARGET*"` |
|
|
53
|
+
| Permissions | `Grep "$TARGET" src/.../Permissions.cs` |
|
|
54
|
+
| Endpoints API | `Grep "$TARGET" src/.../Controllers/` |
|
|
55
|
+
|
|
56
|
+
#### SI $TYPE == "database"
|
|
57
|
+
|
|
58
|
+
| Action | Commande |
|
|
59
|
+
|--------|----------|
|
|
60
|
+
| Tables du schéma | `Read ApplicationDbContextModelSnapshot.cs` |
|
|
61
|
+
| Configurations | `Glob "Persistence/Configurations/$TARGET/*.cs"` |
|
|
62
|
+
| Entités Domain | `Glob "Domain/Entities/$TARGET/*.cs"` |
|
|
63
|
+
|
|
64
|
+
#### SI $TYPE == "developer" ou "testing"
|
|
65
|
+
|
|
66
|
+
| Action | Commande |
|
|
67
|
+
|--------|----------|
|
|
68
|
+
| Doc existante | `Glob "pages/docs/developer/**/*$TARGET*"` |
|
|
69
|
+
| Fichiers config | `Glob "**/$TARGET*.{json,yaml}"` |
|
|
70
|
+
| Doc officielle | `WebSearch` |
|
|
71
|
+
|
|
72
|
+
### ÉTAPE 3: CONFIRMATION UTILISATEUR
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
AskUserQuestion({
|
|
76
|
+
questions: [{
|
|
77
|
+
header: "Détail",
|
|
78
|
+
question: "Quel niveau de détail pour '$TARGET' ?",
|
|
79
|
+
options: [
|
|
80
|
+
{ label: "Complet (Recommended)", description: "Toutes sections" },
|
|
81
|
+
{ label: "Standard", description: "Sections principales" },
|
|
82
|
+
{ label: "Minimal", description: "Référence rapide" }
|
|
83
|
+
]
|
|
84
|
+
}]
|
|
85
|
+
})
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### ÉTAPE 4: GÉNÉRATION
|
|
89
|
+
|
|
90
|
+
| $TYPE | Fichier | Chemin |
|
|
91
|
+
|-------|---------|--------|
|
|
92
|
+
| `user` | `{Module}DocPage.tsx` | `pages/docs/user/{context}/` |
|
|
93
|
+
| `developer` | `{Tool}Page.tsx` | `pages/docs/developer/tools/` |
|
|
94
|
+
| `database` | `{Schema}SchemaPage.tsx` | `pages/docs/developer/database/` |
|
|
95
|
+
| `testing` | `{Tool}TestingPage.tsx` | `pages/docs/developer/testing/` |
|
|
96
|
+
|
|
97
|
+
**Fichiers à créer/modifier:**
|
|
98
|
+
1. Page React (utiliser template de `templates.md`)
|
|
99
|
+
2. Traductions EN → `i18n/locales/en/docs.json`
|
|
100
|
+
3. Traductions FR → `i18n/locales/fr/docs.json`
|
|
101
|
+
4. Route → `App.tsx`
|
|
102
|
+
5. Index parent → lien de navigation
|
|
103
|
+
6. **UserIndexPage.tsx** → Ajouter le module à la hiérarchie (SI $TYPE == "user")
|
|
104
|
+
|
|
105
|
+
### ÉTAPE 4bis: INTÉGRATION UserIndexPage (SI $TYPE == "user")
|
|
106
|
+
|
|
107
|
+
**OBLIGATOIRE** pour les modules utilisateur: Vérifier et mettre à jour `UserIndexPage.tsx`
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
// Fichier: web/smartstack-web/src/pages/docs/user/UserIndexPage.tsx
|
|
111
|
+
|
|
112
|
+
// 1. Ajouter l'icône si nécessaire
|
|
113
|
+
import { ..., {IconName} } from 'lucide-react';
|
|
114
|
+
|
|
115
|
+
// 2. Trouver l'application parente dans la hiérarchie
|
|
116
|
+
// - Platform > Administration: pour les modules admin
|
|
117
|
+
// - Platform > Support: pour les modules support
|
|
118
|
+
// - Personal > MySpace: pour les modules personnels
|
|
119
|
+
|
|
120
|
+
// 3. Ajouter le module dans le tableau `modules` de l'application:
|
|
121
|
+
{
|
|
122
|
+
name: t('user.modules.{module}.name'),
|
|
123
|
+
icon: {IconName},
|
|
124
|
+
href: '/docs/user/{slug}',
|
|
125
|
+
description: t('user.modules.{module}.description')
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
// 4. Ajouter les traductions dans docs.json (fr + en):
|
|
129
|
+
"modules": {
|
|
130
|
+
"{module}": {
|
|
131
|
+
"name": "Nom du module",
|
|
132
|
+
"description": "Description courte"
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Vérification:**
|
|
138
|
+
- Le module doit apparaître dans la page `/docs/user` sous son application parente
|
|
139
|
+
- Le lien doit pointer vers `/docs/user/{slug}`
|
|
140
|
+
|
|
141
|
+
### ÉTAPE 5: INTÉGRATION
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
// App.tsx
|
|
145
|
+
import { {Name}DocPage } from '@/pages/docs/{path}/{Name}DocPage';
|
|
146
|
+
<Route path="{slug}" element={<{Name}DocPage />} />
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### ÉTAPE 6: RÉSUMÉ FINAL
|
|
150
|
+
|
|
151
|
+
Afficher:
|
|
152
|
+
- ✅ Fichiers créés (chemins cliquables)
|
|
153
|
+
- 🔗 URL: `/docs/{path}/{slug}`
|
|
154
|
+
- 📝 Prochaines étapes
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## TEMPLATES
|
|
159
|
+
|
|
160
|
+
→ **Voir `.claude/skills/documentation/templates.md`**
|
|
161
|
+
|
|
162
|
+
Templates disponibles:
|
|
163
|
+
- User Module (maquettes UI, FAQ, API)
|
|
164
|
+
- Database Schema (MCD HTML, tables détaillées)
|
|
165
|
+
- Developer Tool (installation, config, CI/CD)
|
|
166
|
+
- Patterns réutilisables (CodeBlock, Stats, Badges)
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## SOURCES DE DONNÉES
|
|
171
|
+
|
|
172
|
+
| Donnée | Source |
|
|
173
|
+
|--------|--------|
|
|
174
|
+
| Tables DB | `ApplicationDbContextModelSnapshot.cs` |
|
|
175
|
+
| Configurations | `Persistence/Configurations/{schema}/*.cs` |
|
|
176
|
+
| Permissions | `Domain/Authorization/Permissions.cs` |
|
|
177
|
+
| Routes | `App.tsx` |
|
|
178
|
+
| Traductions | `i18n/locales/*/docs.json` |
|
|
179
|
+
| Doc outils | WebSearch |
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## STRUCTURE i18n
|
|
184
|
+
|
|
185
|
+
```json
|
|
186
|
+
{
|
|
187
|
+
"breadcrumb": { "documentation": "...", "user": "...", "developer": "..." },
|
|
188
|
+
"common": { "tableOfContents": "...", "externalResources": "..." },
|
|
189
|
+
"user": { "{module}": { "title": "...", "sections": {...} } },
|
|
190
|
+
"developer": { "tools": {...}, "database": {...} }
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## CONTRAINTES
|
|
197
|
+
|
|
198
|
+
- Variables CSS: `var(--text-primary)`, `var(--bg-secondary)`, `var(--color-primary-600)`
|
|
199
|
+
- Responsive: `grid-cols-1 md:grid-cols-2 lg:grid-cols-3`
|
|
200
|
+
- Icônes: `lucide-react` uniquement
|
|
201
|
+
- Liens externes: avec `<ExternalLink />` icon
|
|
202
|
+
- MCD: composants React/HTML (JAMAIS ASCII)
|