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.
- package/.claude/rules/mdma/best-practices.md +12 -22
- package/.claude/rules/mdma/git-default.md +1 -1
- package/bin/init.js +68 -10
- package/package.json +1 -1
- package/templates/best-practices.md +12 -22
- package/templates/git-default.md +1 -1
- package/templates/git-jira.md +2 -2
- package/templates/mcp.json +0 -8
|
@@ -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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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)
|
|
50
|
-
|
|
51
|
-
```
|
|
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 "
|
|
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
|
-
//
|
|
146
|
-
const
|
|
147
|
-
if (
|
|
148
|
-
|
|
149
|
-
|
|
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
|
@@ -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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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)
|
|
50
|
-
|
|
51
|
-
```
|
|
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
|
```
|
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
|