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
- console.log(`\n4 file(s) installed to .claude/rules/mdma/\n`);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdma-cli",
3
- "version": "4.0.0",
3
+ "version": "4.1.1",
4
4
  "description": "Rules opinionated pour agents de code",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -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
+ ```
@@ -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 "type: description"`
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
@@ -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 cité** : ni dans les descriptions, titres, ou en tant qu'auteur. Tout est de l'utilisateur.
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 "type: description"`
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
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "context7": {
4
+ "command": "npx",
5
+ "args": ["-y", "@upstash/context7-mcp"]
6
+ }
7
+ }
8
+ }