mdma-cli 4.0.0 → 4.1.1
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.
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Best Practices
|
|
2
|
+
|
|
3
|
+
## Règle absolue
|
|
4
|
+
|
|
5
|
+
> **Toujours coder selon les best practices reconnues** pour chaque langage, framework ou librairie utilisé.
|
|
6
|
+
|
|
7
|
+
## En cas de doute
|
|
8
|
+
|
|
9
|
+
Si plusieurs approches sont reconnues comme "best practice" :
|
|
10
|
+
|
|
11
|
+
1. **STOP** - ne pas choisir arbitrairement
|
|
12
|
+
2. Lister les options avec leurs avantages/inconvénients
|
|
13
|
+
3. Demander à l'utilisateur quelle approche privilégier
|
|
14
|
+
|
|
15
|
+
## Sources de référence
|
|
16
|
+
|
|
17
|
+
Par ordre de priorité :
|
|
18
|
+
1. Documentation officielle du langage/framework
|
|
19
|
+
2. Style guides officiels (Google, Airbnb, etc.)
|
|
20
|
+
3. Conventions établies dans le projet existant
|
|
21
|
+
|
|
22
|
+
## MCP recommandé
|
|
23
|
+
|
|
24
|
+
Le MCP **context7** permet de récupérer la documentation officielle à jour directement dans le contexte.
|
|
25
|
+
|
|
26
|
+
### Configuration
|
|
27
|
+
|
|
28
|
+
Ajouter dans `.mcp.json` (project scope, partagé via git) :
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"mcpServers": {
|
|
33
|
+
"context7": {
|
|
34
|
+
"command": "npx",
|
|
35
|
+
"args": ["-y", "@upstash/context7-mcp"]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Usage
|
|
42
|
+
|
|
43
|
+
Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
|
|
44
|
+
- "Implémente l'auth avec NextAuth, use context7"
|
|
45
|
+
- "Ajoute la validation Zod, use context7"
|
|
46
|
+
|
|
47
|
+
### API Key (optionnel)
|
|
48
|
+
|
|
49
|
+
Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) et ajouter :
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"context7": {
|
|
55
|
+
"command": "npx",
|
|
56
|
+
"args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
package/bin/init.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { copyFileSync, mkdirSync, rmSync, readdirSync, existsSync } from 'fs';
|
|
3
|
+
import { copyFileSync, mkdirSync, rmSync, readdirSync, existsSync, readFileSync, appendFileSync } from 'fs';
|
|
4
4
|
import { join, dirname } from 'path';
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
|
|
@@ -9,7 +9,9 @@ const PKG_ROOT = join(__dirname, '..');
|
|
|
9
9
|
const TEMPLATES_SRC = join(PKG_ROOT, 'templates');
|
|
10
10
|
const RULES_DEST = join(process.cwd(), '.claude', 'rules', 'mdma');
|
|
11
11
|
|
|
12
|
-
const CORE_FILES = ['models.md', 'style.md'];
|
|
12
|
+
const CORE_FILES = ['models.md', 'style.md', 'best-practices.md'];
|
|
13
|
+
const MCP_FILE = 'mcp.json';
|
|
14
|
+
const MCP_DEST = join(process.cwd(), '.mcp.json');
|
|
13
15
|
|
|
14
16
|
const PRESETS = {
|
|
15
17
|
default: { workflow: 'default', git: 'default' },
|
|
@@ -59,6 +61,26 @@ function listOptions() {
|
|
|
59
61
|
console.log('\nUsage: npx mdma-cli add [preset] or npx mdma-cli add --workflow=X --git=Y\n');
|
|
60
62
|
}
|
|
61
63
|
|
|
64
|
+
function updateGitExclude() {
|
|
65
|
+
const excludePath = join(process.cwd(), '.git', 'info', 'exclude');
|
|
66
|
+
|
|
67
|
+
if (!existsSync(excludePath)) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const content = readFileSync(excludePath, 'utf-8');
|
|
72
|
+
const linesToAdd = ['# Claude Code', 'CLAUDE.md', '.claude/'];
|
|
73
|
+
const missingLines = linesToAdd.filter(line => !content.includes(line));
|
|
74
|
+
|
|
75
|
+
if (missingLines.length === 0) {
|
|
76
|
+
return 'already';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const addition = '\n' + linesToAdd.join('\n') + '\n';
|
|
80
|
+
appendFileSync(excludePath, addition);
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
|
|
62
84
|
function parseArgs(args) {
|
|
63
85
|
const result = { preset: null, workflow: null, git: null };
|
|
64
86
|
|
|
@@ -140,7 +162,25 @@ function add(args) {
|
|
|
140
162
|
copyFileSync(gitFile, join(RULES_DEST, `git-${git}.md`));
|
|
141
163
|
console.log(` [ok] git-${git}.md`);
|
|
142
164
|
|
|
143
|
-
|
|
165
|
+
// Copy MCP config to project root
|
|
166
|
+
const mcpSrc = join(TEMPLATES_SRC, MCP_FILE);
|
|
167
|
+
if (existsSync(mcpSrc)) {
|
|
168
|
+
copyFileSync(mcpSrc, MCP_DEST);
|
|
169
|
+
console.log(` [ok] .mcp.json (project root)`);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Update .git/info/exclude
|
|
173
|
+
const excludeResult = updateGitExclude();
|
|
174
|
+
if (excludeResult === true) {
|
|
175
|
+
console.log(` [ok] .git/info/exclude (updated)`);
|
|
176
|
+
} else if (excludeResult === 'already') {
|
|
177
|
+
console.log(` [skip] .git/info/exclude (already configured)`);
|
|
178
|
+
} else {
|
|
179
|
+
console.log(` [skip] .git/info/exclude (not a git repo)`);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
console.log(`\n5 file(s) installed to .claude/rules/mdma/`);
|
|
183
|
+
console.log(`1 file(s) installed to project root (.mcp.json)\n`);
|
|
144
184
|
}
|
|
145
185
|
|
|
146
186
|
function main() {
|
package/package.json
CHANGED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Best Practices
|
|
2
|
+
|
|
3
|
+
## Règle absolue
|
|
4
|
+
|
|
5
|
+
> **Toujours coder selon les best practices reconnues** pour chaque langage, framework ou librairie utilisé.
|
|
6
|
+
|
|
7
|
+
## En cas de doute
|
|
8
|
+
|
|
9
|
+
Si plusieurs approches sont reconnues comme "best practice" :
|
|
10
|
+
|
|
11
|
+
1. **STOP** - ne pas choisir arbitrairement
|
|
12
|
+
2. Lister les options avec leurs avantages/inconvénients
|
|
13
|
+
3. Demander à l'utilisateur quelle approche privilégier
|
|
14
|
+
|
|
15
|
+
## Sources de référence
|
|
16
|
+
|
|
17
|
+
Par ordre de priorité :
|
|
18
|
+
1. Documentation officielle du langage/framework
|
|
19
|
+
2. Style guides officiels (Google, Airbnb, etc.)
|
|
20
|
+
3. Conventions établies dans le projet existant
|
|
21
|
+
|
|
22
|
+
## MCP recommandé
|
|
23
|
+
|
|
24
|
+
Le MCP **context7** permet de récupérer la documentation officielle à jour directement dans le contexte.
|
|
25
|
+
|
|
26
|
+
### Configuration
|
|
27
|
+
|
|
28
|
+
Ajouter dans `.mcp.json` (project scope, partagé via git) :
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"mcpServers": {
|
|
33
|
+
"context7": {
|
|
34
|
+
"command": "npx",
|
|
35
|
+
"args": ["-y", "@upstash/context7-mcp"]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Usage
|
|
42
|
+
|
|
43
|
+
Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
|
|
44
|
+
- "Implémente l'auth avec NextAuth, use context7"
|
|
45
|
+
- "Ajoute la validation Zod, use context7"
|
|
46
|
+
|
|
47
|
+
### API Key (optionnel)
|
|
48
|
+
|
|
49
|
+
Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) et ajouter :
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"context7": {
|
|
55
|
+
"command": "npx",
|
|
56
|
+
"args": ["-y", "@upstash/context7-mcp", "--api-key", "YOUR_API_KEY"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
package/templates/git-default.md
CHANGED
|
@@ -34,7 +34,7 @@ Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisa
|
|
|
34
34
|
|
|
35
35
|
### Après validation
|
|
36
36
|
1. `git add <fichiers>` (pas -A)
|
|
37
|
-
2. `git commit -m "
|
|
37
|
+
2. `git commit -m "XXX: description"`. Remplacer XXX par le prefix de conventionnal commits qui correspond le mieux au sujet traité (voir ### Commits)
|
|
38
38
|
3. `git push -u origin <branche>`
|
|
39
39
|
4. `gh pr create --fill`
|
|
40
40
|
5. Attendre validation utilisateur
|
package/templates/git-jira.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
2. **JAMAIS commit sans branche** `feature/` ou `fix/`
|
|
10
10
|
3. **JAMAIS merge sans PR**
|
|
11
11
|
4. **JAMAIS `git add -A`** : commiter uniquement les fichiers modifiés intentionnellement
|
|
12
|
-
5. **JAMAIS
|
|
12
|
+
5. **JAMAIS te citer** : ni dans les descriptions, titres, messages de commit ou co-auteur (pas de "Co-Authored-By"). Tout le travail est attribué à l'utilisateur uniquement
|
|
13
13
|
|
|
14
14
|
Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisateur.
|
|
15
15
|
|
|
@@ -34,7 +34,7 @@ Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisa
|
|
|
34
34
|
|
|
35
35
|
### Après validation
|
|
36
36
|
1. `git add <fichiers>` (pas -A)
|
|
37
|
-
2. `git commit -m "
|
|
37
|
+
2. `git commit -m "XXX: description"`. Remplacer XXX par le prefix de conventionnal commits qui correspond le mieux au sujet traité (voir ### Commits)
|
|
38
38
|
3. `git push -u origin <branche>`
|
|
39
39
|
4. `gh pr create --fill` en assignant le milestone correspondant à la version du ticket. Si ce milestone n'existe pas, le créer.
|
|
40
40
|
5. Attendre validation utilisateur
|