mustard-claude 3.0.1 → 3.0.2

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.
@@ -1,7 +1,8 @@
1
1
  import { existsSync, readdirSync } from 'fs';
2
- import { mkdir, copyFile, cp } from 'fs/promises';
2
+ import { mkdir, copyFile, cp, writeFile } from 'fs/promises';
3
3
  import { join, resolve, dirname } from 'path';
4
4
  import { fileURLToPath } from 'url';
5
+ import { execSync } from 'child_process';
5
6
  import chalk from 'chalk';
6
7
  import ora from 'ora';
7
8
  import inquirer from 'inquirer';
@@ -101,8 +102,143 @@ export async function initCommand(options) {
101
102
  count; // already counted
102
103
  }
103
104
  spinner.succeed(`Copied ${count} files to .claude/`);
105
+ // Generate mustard.json (git flow config)
106
+ await generateMustardJson(projectPath, options);
104
107
  printNextSteps();
105
108
  }
109
+ function detectDefaultBranch() {
110
+ try {
111
+ const ref = execSync('git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null', { encoding: 'utf-8' }).trim();
112
+ return ref.replace('refs/remotes/origin/', '');
113
+ }
114
+ catch {
115
+ try {
116
+ // Fallback: check if main or master exists
117
+ const branches = execSync('git branch -r', { encoding: 'utf-8' });
118
+ if (branches.includes('origin/main'))
119
+ return 'main';
120
+ if (branches.includes('origin/master'))
121
+ return 'master';
122
+ }
123
+ catch { /* not a git repo */ }
124
+ return 'main';
125
+ }
126
+ }
127
+ function detectHasSubmodules() {
128
+ try {
129
+ return existsSync(join(process.cwd(), '.gitmodules'));
130
+ }
131
+ catch {
132
+ return false;
133
+ }
134
+ }
135
+ function detectCurrentBranch() {
136
+ try {
137
+ return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
138
+ }
139
+ catch {
140
+ return null;
141
+ }
142
+ }
143
+ function detectRemoteBranches() {
144
+ try {
145
+ const output = execSync('git branch -r --format="%(refname:short)"', { encoding: 'utf-8' });
146
+ return output.split('\n').filter(Boolean).map(b => b.replace('origin/', ''));
147
+ }
148
+ catch {
149
+ return [];
150
+ }
151
+ }
152
+ async function generateMustardJson(projectPath, options) {
153
+ const configPath = join(projectPath, 'mustard.json');
154
+ if (existsSync(configPath)) {
155
+ console.log(chalk.gray('\n mustard.json already exists — preserved'));
156
+ return;
157
+ }
158
+ const defaultBranch = detectDefaultBranch();
159
+ const hasSubmodules = detectHasSubmodules();
160
+ const currentBranch = detectCurrentBranch();
161
+ const remoteBranches = detectRemoteBranches();
162
+ const hasDevBranch = remoteBranches.includes('dev') || remoteBranches.includes('develop');
163
+ console.log(chalk.bold('\nšŸ“‹ Git Flow Configuration\n'));
164
+ if (currentBranch) {
165
+ console.log(chalk.gray(` Detected: branch=${currentBranch}, default=${defaultBranch}, submodules=${hasSubmodules}`));
166
+ if (hasDevBranch)
167
+ console.log(chalk.gray(` Found dev branch: ${remoteBranches.includes('dev') ? 'dev' : 'develop'}`));
168
+ console.log();
169
+ }
170
+ let config;
171
+ if (options.yes) {
172
+ // Auto-config with sensible defaults
173
+ const flow = {};
174
+ if (hasDevBranch) {
175
+ flow['dev_*'] = remoteBranches.includes('dev') ? 'dev' : 'develop';
176
+ flow[remoteBranches.includes('dev') ? 'dev' : 'develop'] = defaultBranch;
177
+ }
178
+ config = {
179
+ git: {
180
+ flow,
181
+ pr: { enabled: true, provider: 'github' },
182
+ submodules: hasSubmodules
183
+ }
184
+ };
185
+ }
186
+ else {
187
+ // Interactive setup
188
+ const answers = await inquirer.prompt([
189
+ {
190
+ type: 'input',
191
+ name: 'production',
192
+ message: 'Production branch:',
193
+ default: defaultBranch
194
+ },
195
+ {
196
+ type: 'input',
197
+ name: 'devBranch',
198
+ message: 'Development branch (shared, leave empty to skip):',
199
+ default: hasDevBranch ? (remoteBranches.includes('dev') ? 'dev' : 'develop') : ''
200
+ },
201
+ {
202
+ type: 'input',
203
+ name: 'devPattern',
204
+ message: 'Personal branch pattern (glob → dev branch):',
205
+ default: 'dev_*',
206
+ when: (a) => !!a.devBranch
207
+ },
208
+ {
209
+ type: 'confirm',
210
+ name: 'prEnabled',
211
+ message: 'Use Pull Requests for merging?',
212
+ default: true
213
+ },
214
+ {
215
+ type: 'list',
216
+ name: 'provider',
217
+ message: 'Git provider:',
218
+ choices: ['github', 'gitlab', 'bitbucket'],
219
+ default: 'github',
220
+ when: (a) => a.prEnabled
221
+ }
222
+ ]);
223
+ const flow = {};
224
+ if (answers.devBranch) {
225
+ if (answers.devPattern) {
226
+ flow[answers.devPattern] = answers.devBranch;
227
+ }
228
+ flow[answers.devBranch] = answers.production;
229
+ }
230
+ config = {
231
+ git: {
232
+ flow,
233
+ pr: { enabled: answers.prEnabled, provider: answers.provider || 'github' },
234
+ submodules: hasSubmodules
235
+ }
236
+ };
237
+ }
238
+ const spinner = ora('Writing mustard.json...').start();
239
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n');
240
+ spinner.succeed('Created mustard.json');
241
+ }
106
242
  function printNextSteps() {
107
243
  console.log(chalk.green.bold('\nāœ… Done!\n'));
108
244
  console.log(chalk.white('Next: open Claude Code and run /scan to analyze your codebase.\n'));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mustard-claude",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "description": "Framework-agnostic CLI for Claude Code project setup",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1,6 +1,6 @@
1
1
  # /git - Git Operations
2
2
 
3
- > Commit, push, merge, and deploy. Handles monorepo (submodules) and single repo automatically.
3
+ > Commit, push, sync, PR, and deploy. Reads `mustard.json` for branch flow. Handles monorepo (submodules) and single repo automatically.
4
4
 
5
5
  ## Trigger
6
6
 
@@ -10,10 +10,51 @@
10
10
 
11
11
  | Action | Description |
12
12
  |--------|-------------|
13
+ | `sync` | Pull parent branch into current branch |
13
14
  | `commit` | Create commit (no push) |
14
- | `push` | Commit + push to remote |
15
- | `merge` | Merge current branch to main |
16
- | `deploy` | Push + merge to main (full deploy) |
15
+ | `push` | Sync + commit + push to remote |
16
+ | `merge` | Promote current → parent (PR if enabled, direct merge if not) |
17
+ | `deploy` | Push + merge + inform about cascade |
18
+
19
+ ## Configuration
20
+
21
+ Reads `mustard.json` from the **project root**. If not found, falls back to defaults.
22
+
23
+ ```json
24
+ {
25
+ "git": {
26
+ "flow": {
27
+ "dev_*": "dev",
28
+ "dev": "main"
29
+ },
30
+ "pr": {
31
+ "enabled": true,
32
+ "provider": "github"
33
+ },
34
+ "submodules": true
35
+ }
36
+ }
37
+ ```
38
+
39
+ ### Flow Resolution
40
+
41
+ Match current branch against `flow` keys (glob patterns). First match wins.
42
+
43
+ | Current branch | Pattern matched | Parent resolved |
44
+ |---------------|----------------|-----------------|
45
+ | `dev_rubens` | `dev_*` | `dev` |
46
+ | `dev` | `dev` | `main` |
47
+ | `feature/xyz` | no match | **error**: no parent configured |
48
+
49
+ **Fallback** (no `mustard.json`): parent = default branch (`main` or `master`).
50
+
51
+ ### Provider CLI
52
+
53
+ | Provider | CLI | PR command |
54
+ |----------|-----|------------|
55
+ | `github` | `gh` | `gh pr create` |
56
+ | `gitlab` | `glab` | `glab mr create` |
57
+ | `bitbucket` | `bb` | `bb pr create` (manual) |
17
58
 
18
59
  ## Behavior
19
60
 
@@ -22,7 +63,41 @@
22
63
  - **Minimize Bash calls** — chain EVERYTHING with `&&`. One Bash call per repo max.
23
64
  - **No investigation** — if a submodule is dirty, commit it.
24
65
  - Submodules BEFORE parent (always).
25
- - **Single repo**: skip all submodule steps — just commit/push/merge the root.
66
+ - **Single repo**: skip all submodule steps — just operate on the root.
67
+
68
+ ---
69
+
70
+ ## Step 0 — Resolve Parent (all actions except commit)
71
+
72
+ ```bash
73
+ cat mustard.json 2>/dev/null
74
+ git rev-parse --abbrev-ref HEAD
75
+ ```
76
+
77
+ Match the current branch against `git.flow` patterns. Store as `$PARENT`.
78
+ If no match and no `mustard.json`: `$PARENT` = default branch (detect via `git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || echo main`).
79
+
80
+ ---
81
+
82
+ ## sync
83
+
84
+ Pull the parent branch changes into the current branch.
85
+
86
+ ### Single repo / Parent repo
87
+
88
+ ```bash
89
+ git fetch origin $PARENT && git rebase origin/$PARENT
90
+ ```
91
+
92
+ ### Monorepo — submodules FIRST (PARALLEL, one Bash call each)
93
+
94
+ ```bash
95
+ cd <SUBMODULE_ABSOLUTE_PATH> && git fetch origin $PARENT && git rebase origin/$PARENT
96
+ ```
97
+
98
+ Then parent repo (same command at root).
99
+
100
+ If rebase has conflicts → abort rebase, report to user, STOP.
26
101
 
27
102
  ---
28
103
 
@@ -66,15 +141,21 @@ Types: feat, fix, refactor, docs, chore, test
66
141
 
67
142
  ## push
68
143
 
69
- Same as `commit`, but each step also pushes:
144
+ Sequential: **sync first**, then commit + push.
145
+
146
+ ### Phase 1 — Sync
147
+
148
+ Execute `sync` action. If conflicts → STOP.
70
149
 
71
- ### Submodules (PARALLEL — monorepo only, one Bash call each)
150
+ ### Phase 2 — Commit & Push
151
+
152
+ #### Submodules (PARALLEL — monorepo only, one Bash call each)
72
153
 
73
154
  ```bash
74
155
  cd <SUBMODULE_ABSOLUTE_PATH> && git add -A && git commit -m "<message>" && git push origin <branch>
75
156
  ```
76
157
 
77
- ### Parent / Root (ONE Bash call)
158
+ #### Parent / Root (ONE Bash call)
78
159
 
79
160
  ```bash
80
161
  git add -A && git commit -m "<message>" && git push origin <branch>
@@ -84,54 +165,93 @@ git add -A && git commit -m "<message>" && git push origin <branch>
84
165
 
85
166
  ## merge
86
167
 
87
- ### Step 1 — Detect context
168
+ Promote current branch into its parent. Behavior depends on `pr.enabled`.
169
+
170
+ ### Step 1 — Ensure pushed
171
+
172
+ Check if local is ahead of remote. If yes, execute `push` first.
173
+
174
+ ### Step 2a — PR mode (`pr.enabled: true`)
175
+
176
+ Create a Pull Request from current → parent branch.
177
+
178
+ #### GitHub (`gh`)
179
+
180
+ ```bash
181
+ gh pr create --base $PARENT --title "<title>" --body "<body>"
182
+ ```
183
+
184
+ #### GitLab (`glab`)
88
185
 
89
186
  ```bash
90
- git rev-parse --abbrev-ref HEAD && git submodule foreach --quiet 'echo $name'
187
+ glab mr create --target-branch $PARENT --title "<title>" --description "<body>"
91
188
  ```
92
- Single repo: skip `submodule foreach`.
93
189
 
94
- ### Step 2 — Merge ALL submodules (PARALLEL — monorepo only)
190
+ #### PR Title & Body
191
+
192
+ - Title: conventional commit style — `<type>: <short description>`
193
+ - Body: auto-generated from commit log since divergence from parent:
95
194
 
96
195
  ```bash
97
- cd <SUBMODULE_ABSOLUTE_PATH> && git checkout main && git pull && git merge <branch> && git push && git checkout <branch>
196
+ git log $PARENT..HEAD --oneline
98
197
  ```
99
198
 
100
- ### Step 3 — Merge parent / root
199
+ #### Monorepo Note
200
+
201
+ PRs are created at the **parent repo level only**. Submodules are committed and pushed, but PRs are not created per submodule (submodules follow parent via ref update).
202
+
203
+ ### Step 2b — Direct mode (`pr.enabled: false`)
204
+
205
+ Merge locally and push.
206
+
207
+ #### Monorepo — submodules FIRST (PARALLEL, one Bash call each)
101
208
 
102
209
  ```bash
103
- git checkout main && git pull && git merge <branch> && git push && git checkout <branch>
210
+ cd <SUBMODULE_ABSOLUTE_PATH> && git checkout $PARENT && git pull && git merge <branch> && git push && git checkout <branch>
211
+ ```
212
+
213
+ #### Parent / Root
214
+
215
+ ```bash
216
+ git checkout $PARENT && git pull && git merge <branch> && git push && git checkout <branch>
104
217
  ```
105
218
 
106
219
  ---
107
220
 
108
221
  ## deploy
109
222
 
110
- Sequential phases: Phase 1 must complete fully before Phase 2.
223
+ Sequential phases. Each phase must complete before the next.
224
+
225
+ ### Phase 1 — Push
226
+
227
+ Execute `push` action (includes sync).
228
+
229
+ ### Phase 2 — Merge to parent
111
230
 
112
- ### Phase 1 — Commit & Push
231
+ Execute `merge` action (current → parent).
113
232
 
114
- Execute `push` action.
233
+ ### Phase 3 — Cascade (if parent ≠ production)
115
234
 
116
- ### Phase 2 — Merge to Main
235
+ If `$PARENT` also has a parent in the flow (e.g., `dev` → `main`), inform the user:
117
236
 
118
- Execute `merge` action.
237
+ > Merged/PR created: `dev_rubens → dev`. To promote `dev → main`, switch to `dev` and run `/git deploy` again.
119
238
 
120
- If Phase 1 fails, Phase 2 is skipped.
239
+ Do NOT auto-cascade — each promotion is a deliberate decision.
121
240
 
122
241
  ---
123
242
 
124
243
  ## Cautions
125
244
 
126
- - Aborts if ANY repo has merge conflicts
127
- - Submodules BEFORE parent (both in push and merge)
245
+ - Aborts if ANY repo has merge conflicts (sync or push)
246
+ - Submodules BEFORE parent (in sync, push, and commit)
128
247
  - NEVER use `git add .` — use `git add -A` from the correct directory
129
- - If any push/merge fails, stop and report
248
+ - If any operation fails, stop and report
249
+ - PR creation requires the provider CLI to be installed and authenticated
130
250
 
131
251
  ## Performance Budget
132
252
 
133
253
  - **Max Task agents**: 1 per dirty submodule
134
254
  - **Max Bash calls per agent**: 1 (all commands chained)
135
- - **Max API calls total**: ≤ 10
255
+ - **Max API calls total**: ≤ 12
136
256
 
137
257
  ULTRATHINK