mdma-cli 4.1.0 → 4.2.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.
@@ -25,19 +25,16 @@ Le MCP **context7** permet de récupérer la documentation officielle à jour di
25
25
 
26
26
  ### Configuration
27
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
- }
28
+ **mdma-cli** configure automatiquement context7 en scope user lors de `npx mdma-cli add`.
29
+
30
+ Configuration manuelle si nécessaire :
31
+
32
+ ```bash
33
+ claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp
39
34
  ```
40
35
 
36
+ > **Scope user** : context7 est disponible pour tous vos projets, sans polluer les `.mcp.json` individuels.
37
+
41
38
  ### Usage
42
39
 
43
40
  Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
@@ -46,15 +43,8 @@ Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour
46
43
 
47
44
  ### API Key (optionnel)
48
45
 
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
- }
46
+ Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) :
47
+
48
+ ```bash
49
+ claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
60
50
  ```
@@ -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
package/bin/init.js CHANGED
@@ -1,8 +1,9 @@
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
+ import { execSync } from 'child_process';
6
7
 
7
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
9
  const PKG_ROOT = join(__dirname, '..');
@@ -10,8 +11,6 @@ const TEMPLATES_SRC = join(PKG_ROOT, 'templates');
10
11
  const RULES_DEST = join(process.cwd(), '.claude', 'rules', 'mdma');
11
12
 
12
13
  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');
15
14
 
16
15
  const PRESETS = {
17
16
  default: { workflow: 'default', git: 'default' },
@@ -61,6 +60,52 @@ function listOptions() {
61
60
  console.log('\nUsage: npx mdma-cli add [preset] or npx mdma-cli add --workflow=X --git=Y\n');
62
61
  }
63
62
 
63
+ function updateGitExclude() {
64
+ const excludePath = join(process.cwd(), '.git', 'info', 'exclude');
65
+
66
+ if (!existsSync(excludePath)) {
67
+ return false;
68
+ }
69
+
70
+ const content = readFileSync(excludePath, 'utf-8');
71
+ const linesToAdd = ['# Claude Code', 'CLAUDE.md', '.claude/'];
72
+ const missingLines = linesToAdd.filter(line => !content.includes(line));
73
+
74
+ if (missingLines.length === 0) {
75
+ return 'already';
76
+ }
77
+
78
+ const addition = '\n' + linesToAdd.join('\n') + '\n';
79
+ appendFileSync(excludePath, addition);
80
+ return true;
81
+ }
82
+
83
+ function setupContext7() {
84
+ try {
85
+ // Check if context7 is already configured
86
+ const result = execSync('claude mcp list', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
87
+ if (result.includes('context7')) {
88
+ return 'already';
89
+ }
90
+ } catch {
91
+ // claude command not found or error - try to add anyway
92
+ }
93
+
94
+ try {
95
+ execSync('claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp', {
96
+ encoding: 'utf-8',
97
+ stdio: ['pipe', 'pipe', 'pipe']
98
+ });
99
+ return true;
100
+ } catch (error) {
101
+ // Check if error is because it already exists
102
+ if (error.message && error.message.includes('already exists')) {
103
+ return 'already';
104
+ }
105
+ return false;
106
+ }
107
+ }
108
+
64
109
  function parseArgs(args) {
65
110
  const result = { preset: null, workflow: null, git: null };
66
111
 
@@ -142,15 +187,28 @@ function add(args) {
142
187
  copyFileSync(gitFile, join(RULES_DEST, `git-${git}.md`));
143
188
  console.log(` [ok] git-${git}.md`);
144
189
 
145
- // Copy MCP config to project root
146
- const mcpSrc = join(TEMPLATES_SRC, MCP_FILE);
147
- if (existsSync(mcpSrc)) {
148
- copyFileSync(mcpSrc, MCP_DEST);
149
- console.log(` [ok] .mcp.json (project root)`);
190
+ // Update .git/info/exclude
191
+ const excludeResult = updateGitExclude();
192
+ if (excludeResult === true) {
193
+ console.log(` [ok] .git/info/exclude (updated)`);
194
+ } else if (excludeResult === 'already') {
195
+ console.log(` [skip] .git/info/exclude (already configured)`);
196
+ } else {
197
+ console.log(` [skip] .git/info/exclude (not a git repo)`);
198
+ }
199
+
200
+ // Setup context7 MCP (user scope)
201
+ const context7Result = setupContext7();
202
+ if (context7Result === true) {
203
+ console.log(` [ok] context7 MCP (user scope)`);
204
+ } else if (context7Result === 'already') {
205
+ console.log(` [skip] context7 MCP (already configured)`);
206
+ } else {
207
+ console.log(` [warn] context7 MCP (claude CLI not found)`);
208
+ console.log(` Run manually: claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp`);
150
209
  }
151
210
 
152
- console.log(`\n5 file(s) installed to .claude/rules/mdma/`);
153
- console.log(`1 file(s) installed to project root (.mcp.json)\n`);
211
+ console.log(`\n5 file(s) installed to .claude/rules/mdma/\n`);
154
212
  }
155
213
 
156
214
  function main() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdma-cli",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "description": "Rules opinionated pour agents de code",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -25,19 +25,16 @@ Le MCP **context7** permet de récupérer la documentation officielle à jour di
25
25
 
26
26
  ### Configuration
27
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
- }
28
+ **mdma-cli** configure automatiquement context7 en scope user lors de `npx mdma-cli add`.
29
+
30
+ Configuration manuelle si nécessaire :
31
+
32
+ ```bash
33
+ claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp
39
34
  ```
40
35
 
36
+ > **Scope user** : context7 est disponible pour tous vos projets, sans polluer les `.mcp.json` individuels.
37
+
41
38
  ### Usage
42
39
 
43
40
  Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
@@ -46,15 +43,8 @@ Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour
46
43
 
47
44
  ### API Key (optionnel)
48
45
 
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
- }
46
+ Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) :
47
+
48
+ ```bash
49
+ claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
60
50
  ```
@@ -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
@@ -1,8 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "context7": {
4
- "command": "npx",
5
- "args": ["-y", "@upstash/context7-mcp"]
6
- }
7
- }
8
- }