@meltstudio/meltctl 4.4.0 → 4.5.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/README.md +26 -152
- package/dist/commands/init.js +31 -12
- package/dist/index.js +1 -1
- package/package.json +3 -4
package/README.md
CHANGED
|
@@ -1,174 +1,48 @@
|
|
|
1
1
|
# @meltstudio/meltctl
|
|
2
2
|
|
|
3
|
-
CLI tool for
|
|
3
|
+
CLI tool for setting up AI-first development standards in your project.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
# Install globally via npm
|
|
9
8
|
npm install -g @meltstudio/meltctl
|
|
10
|
-
|
|
11
|
-
# Initialize your project
|
|
12
|
-
cd your-project
|
|
13
|
-
meltctl project init
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## 📋 What It Does
|
|
17
|
-
|
|
18
|
-
`meltctl` sets up your project with:
|
|
19
|
-
|
|
20
|
-
- **`.cursor/commands/`** - 8 AI-powered Cursor commands for your workflow
|
|
21
|
-
- **`.melt/`** - Project templates, memory, and outputs structure
|
|
22
|
-
|
|
23
|
-
## 🤖 Cursor AI Commands
|
|
24
|
-
|
|
25
|
-
After running `meltctl project init`, you get these commands in Cursor:
|
|
26
|
-
|
|
27
|
-
### Core Workflow Commands
|
|
28
|
-
|
|
29
|
-
- **`/melt-plan`** - Create detailed implementation plans
|
|
30
|
-
- **`/melt-test-plan`** - Generate test strategy and test files
|
|
31
|
-
- **`/melt-docs`** - Update project documentation
|
|
32
|
-
- **`/melt-implement`** - Execute implementation with best practices
|
|
33
|
-
- **`/melt-pr`** - Create pull request with proper description
|
|
34
|
-
- **`/melt-review`** - Review code for quality and compliance
|
|
35
|
-
- **`/melt-complete`** - Complete story and handle deployment
|
|
36
|
-
|
|
37
|
-
### Specialized Commands
|
|
38
|
-
|
|
39
|
-
- **`/melt-debug`** - Systematic debugging with AI assistance
|
|
40
|
-
|
|
41
|
-
## 🎯 Usage
|
|
42
|
-
|
|
43
|
-
### Initialize a New Project
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
# Auto-detect shell type
|
|
47
|
-
meltctl project init
|
|
48
|
-
|
|
49
|
-
# Specify shell type explicitly
|
|
50
|
-
meltctl project init --shell sh # for bash/zsh
|
|
51
|
-
meltctl project init --shell ps # for PowerShell
|
|
52
9
|
```
|
|
53
10
|
|
|
54
|
-
|
|
55
|
-
- Creates necessary directories using bundled templates
|
|
56
|
-
- Installs Cursor command templates from organized template files
|
|
57
|
-
- Sets up project structure for AI-assisted development
|
|
58
|
-
- Supports both shell (sh/bash/zsh) and PowerShell environments
|
|
59
|
-
- Uses fs-extra for robust file operations and template copying
|
|
60
|
-
|
|
61
|
-
### Update Project
|
|
11
|
+
## Usage
|
|
62
12
|
|
|
63
13
|
```bash
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
Updates your project templates to the latest version. This command:
|
|
68
|
-
- Checks for CLI package updates and prompts to update if available
|
|
69
|
-
- Updates .cursor/commands/ with the latest command templates
|
|
70
|
-
- Verifies .melt/ workspace migration status
|
|
71
|
-
- Handles version compatibility automatically
|
|
72
|
-
|
|
73
|
-
### Clean Project
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
meltctl project clean
|
|
77
|
-
```
|
|
14
|
+
# Authenticate (required)
|
|
15
|
+
meltctl login
|
|
78
16
|
|
|
79
|
-
|
|
80
|
-
- Removes the entire `.melt/` directory (all Melt-generated content)
|
|
81
|
-
- Selectively removes only Melt commands from `.cursor/commands/`
|
|
82
|
-
- Preserves user-created files in `.cursor/commands/`
|
|
83
|
-
- Provides interactive confirmation before deletion
|
|
84
|
-
|
|
85
|
-
### Version Check
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
meltctl version --check
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Checks for available updates to the meltctl CLI. This command:
|
|
92
|
-
- Compares your current version with the latest published version
|
|
93
|
-
- Provides update instructions based on your package manager (npm/yarn)
|
|
94
|
-
- Handles network errors gracefully
|
|
95
|
-
|
|
96
|
-
### CI/CD Usage
|
|
97
|
-
|
|
98
|
-
For automated environments (CI/CD pipelines), you can skip the update check that runs before every command:
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
export MELTCTL_SKIP_UPDATE_CHECK=1
|
|
17
|
+
# Initialize your project
|
|
102
18
|
meltctl project init
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
This environment variable bypasses the automatic update enforcement that normally prevents running commands with outdated versions.
|
|
106
19
|
|
|
107
|
-
|
|
20
|
+
# Select specific tools
|
|
21
|
+
meltctl project init --claude # Claude Code only
|
|
22
|
+
meltctl project init --cursor # Cursor only
|
|
23
|
+
meltctl project init --claude --cursor # Both
|
|
108
24
|
|
|
109
|
-
-
|
|
110
|
-
|
|
111
|
-
- Git repository (recommended)
|
|
25
|
+
# Re-initialize
|
|
26
|
+
meltctl project init --force
|
|
112
27
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
- [Documentation Site](https://melt-development-prompts.vercel.app)
|
|
117
|
-
- [Getting Started Guide](https://melt-development-prompts.vercel.app/getting-started)
|
|
118
|
-
- [Developer Workflow](https://melt-development-prompts.vercel.app/workflows)
|
|
119
|
-
|
|
120
|
-
## 🏗️ Project Structure
|
|
121
|
-
|
|
122
|
-
After initialization, your project will have:
|
|
123
|
-
|
|
124
|
-
```
|
|
125
|
-
your-project/
|
|
126
|
-
├── .cursor/
|
|
127
|
-
│ └── commands/ # Cursor AI command templates
|
|
128
|
-
│ ├── melt-plan.md
|
|
129
|
-
│ ├── melt-test-plan.md
|
|
130
|
-
│ ├── melt-docs.md
|
|
131
|
-
│ ├── melt-implement.md
|
|
132
|
-
│ ├── melt-pr.md
|
|
133
|
-
│ ├── melt-review.md
|
|
134
|
-
│ ├── melt-complete.md
|
|
135
|
-
│ └── melt-debug.md
|
|
136
|
-
└── .melt/
|
|
137
|
-
├── memory/ # Project context and state
|
|
138
|
-
├── outputs/ # Generated plans and implementations
|
|
139
|
-
│ ├── plans/
|
|
140
|
-
│ ├── implementations/
|
|
141
|
-
│ └── reviews/
|
|
142
|
-
├── scripts/ # Utility scripts
|
|
143
|
-
└── templates/ # Custom templates
|
|
28
|
+
# Other commands
|
|
29
|
+
meltctl logout
|
|
30
|
+
meltctl version --check
|
|
144
31
|
```
|
|
145
32
|
|
|
146
|
-
##
|
|
147
|
-
|
|
148
|
-
This tool is part of the Melt Development Process. For issues or contributions:
|
|
149
|
-
- [GitHub Repository](https://github.com/MeltStudio/melt-development-prompts)
|
|
150
|
-
- [Report Issues](https://github.com/MeltStudio/melt-development-prompts/issues)
|
|
151
|
-
|
|
152
|
-
## 🏛️ Template Architecture
|
|
153
|
-
|
|
154
|
-
The CLI uses a bundled template system organized in:
|
|
155
|
-
|
|
156
|
-
```
|
|
157
|
-
packages/cli/
|
|
158
|
-
├── memory/ # Project context and standards
|
|
159
|
-
├── scripts/ # Utility scripts for sh and PowerShell
|
|
160
|
-
│ ├── sh/ # Bash/zsh utility scripts
|
|
161
|
-
│ └── ps/ # PowerShell utility scripts
|
|
162
|
-
└── templates/
|
|
163
|
-
└── cursor-commands/ # All 8 Cursor AI command templates
|
|
164
|
-
```
|
|
33
|
+
## What Gets Created
|
|
165
34
|
|
|
166
|
-
|
|
35
|
+
- `AGENTS.md` — AI agent instructions and project standards
|
|
36
|
+
- `.claude/settings.json` — Claude Code permissions
|
|
37
|
+
- `.claude/skills/melt-{setup,plan,review,pr,debug}/SKILL.md` — Claude Code workflow skills
|
|
38
|
+
- `.cursor/commands/melt-{setup,plan,review,pr,debug}.md` — Cursor workflow commands
|
|
39
|
+
- `.mcp.json` — MCP server configuration (Chrome DevTools)
|
|
167
40
|
|
|
168
|
-
##
|
|
41
|
+
## Requirements
|
|
169
42
|
|
|
170
|
-
|
|
43
|
+
- Node.js 22+
|
|
44
|
+
- `@meltstudio.co` Google Workspace account
|
|
171
45
|
|
|
172
|
-
|
|
46
|
+
## License
|
|
173
47
|
|
|
174
|
-
|
|
48
|
+
Proprietary. All rights reserved.
|
package/dist/commands/init.js
CHANGED
|
@@ -4,6 +4,12 @@ import fs from 'fs-extra';
|
|
|
4
4
|
import path from 'path';
|
|
5
5
|
import { authenticatedFetch, isAuthenticated } from '../utils/auth.js';
|
|
6
6
|
const SKILL_FRONTMATTER = {
|
|
7
|
+
setup: `---
|
|
8
|
+
user-invocable: true
|
|
9
|
+
description: Analyze the project and customize AGENTS.md for this codebase
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
`,
|
|
7
13
|
plan: `---
|
|
8
14
|
user-invocable: true
|
|
9
15
|
description: Design an implementation approach before writing code
|
|
@@ -135,7 +141,7 @@ export async function initCommand(options) {
|
|
|
135
141
|
console.log(chalk.bold('Initializing Melt development tools...'));
|
|
136
142
|
console.log();
|
|
137
143
|
const createdFiles = [];
|
|
138
|
-
const workflows = ['plan', 'review', 'pr', 'debug'];
|
|
144
|
+
const workflows = ['setup', 'plan', 'review', 'pr', 'debug'];
|
|
139
145
|
// Shared files (skip on re-init)
|
|
140
146
|
if (!isReInit) {
|
|
141
147
|
const agentsMd = templates['agents-md.md'];
|
|
@@ -145,14 +151,9 @@ export async function initCommand(options) {
|
|
|
145
151
|
}
|
|
146
152
|
const mcpConfig = templates['mcp-configs/base.json'];
|
|
147
153
|
if (mcpConfig) {
|
|
148
|
-
await
|
|
154
|
+
await mergeMcpConfig(cwd, mcpConfig);
|
|
149
155
|
createdFiles.push('.mcp.json');
|
|
150
156
|
}
|
|
151
|
-
const envExample = templates['env-melt-example'];
|
|
152
|
-
if (envExample) {
|
|
153
|
-
await fs.writeFile(path.join(cwd, '.env.melt.example'), envExample, 'utf-8');
|
|
154
|
-
createdFiles.push('.env.melt.example');
|
|
155
|
-
}
|
|
156
157
|
await updateGitignore(cwd);
|
|
157
158
|
}
|
|
158
159
|
// Claude Code files
|
|
@@ -172,7 +173,7 @@ export async function initCommand(options) {
|
|
|
172
173
|
await fs.writeFile(path.join(skillDir, 'SKILL.md'), skillContent, 'utf-8');
|
|
173
174
|
}
|
|
174
175
|
}
|
|
175
|
-
createdFiles.push('.claude/skills/melt-{plan,review,pr,debug}/SKILL.md');
|
|
176
|
+
createdFiles.push('.claude/skills/melt-{setup,plan,review,pr,debug}/SKILL.md');
|
|
176
177
|
}
|
|
177
178
|
// Cursor files
|
|
178
179
|
if (tools.cursor) {
|
|
@@ -183,7 +184,7 @@ export async function initCommand(options) {
|
|
|
183
184
|
await fs.writeFile(path.join(cwd, `.cursor/commands/melt-${name}.md`), workflowContent, 'utf-8');
|
|
184
185
|
}
|
|
185
186
|
}
|
|
186
|
-
createdFiles.push('.cursor/commands/melt-{plan,review,pr,debug}.md');
|
|
187
|
+
createdFiles.push('.cursor/commands/melt-{setup,plan,review,pr,debug}.md');
|
|
187
188
|
}
|
|
188
189
|
// Print summary
|
|
189
190
|
console.log(chalk.green('Created files:'));
|
|
@@ -197,13 +198,13 @@ export async function initCommand(options) {
|
|
|
197
198
|
}
|
|
198
199
|
if (!isReInit) {
|
|
199
200
|
console.log(chalk.yellow('Next steps:'));
|
|
200
|
-
console.log(chalk.dim(' 1. Run
|
|
201
|
-
console.log(chalk.dim(' 2.
|
|
202
|
-
console.log(chalk.dim(' 3. Commit the generated files'));
|
|
201
|
+
console.log(chalk.dim(' 1. Run /setup to customize AGENTS.md for your project'));
|
|
202
|
+
console.log(chalk.dim(' 2. Commit the generated files'));
|
|
203
203
|
console.log();
|
|
204
204
|
}
|
|
205
205
|
if (tools.claude) {
|
|
206
206
|
console.log(chalk.yellow('Available skills (type / in Claude Code to use):'));
|
|
207
|
+
console.log(chalk.dim(' /setup — Analyze the project and customize AGENTS.md for this codebase'));
|
|
207
208
|
console.log(chalk.dim(' /plan — Design an implementation approach before writing code'));
|
|
208
209
|
console.log(chalk.dim(' /review — Review changes against project standards'));
|
|
209
210
|
console.log(chalk.dim(' /pr — Create a well-structured pull request'));
|
|
@@ -212,6 +213,7 @@ export async function initCommand(options) {
|
|
|
212
213
|
}
|
|
213
214
|
if (tools.cursor) {
|
|
214
215
|
console.log(chalk.yellow('Available commands (use Cmd+Shift+P in Cursor):'));
|
|
216
|
+
console.log(chalk.dim(' melt-setup — Analyze the project and customize AGENTS.md for this codebase'));
|
|
215
217
|
console.log(chalk.dim(' melt-plan — Design an implementation approach before writing code'));
|
|
216
218
|
console.log(chalk.dim(' melt-review — Review changes against project standards'));
|
|
217
219
|
console.log(chalk.dim(' melt-pr — Create a well-structured pull request'));
|
|
@@ -220,6 +222,23 @@ export async function initCommand(options) {
|
|
|
220
222
|
}
|
|
221
223
|
console.log(chalk.green('Done!'));
|
|
222
224
|
}
|
|
225
|
+
async function mergeMcpConfig(cwd, templateContent) {
|
|
226
|
+
const mcpPath = path.join(cwd, '.mcp.json');
|
|
227
|
+
const templateConfig = JSON.parse(templateContent);
|
|
228
|
+
if (await fs.pathExists(mcpPath)) {
|
|
229
|
+
const existingContent = await fs.readFile(mcpPath, 'utf-8');
|
|
230
|
+
const existingConfig = JSON.parse(existingContent);
|
|
231
|
+
// Merge: add our servers without overwriting existing ones
|
|
232
|
+
existingConfig.mcpServers = {
|
|
233
|
+
...existingConfig.mcpServers,
|
|
234
|
+
...templateConfig.mcpServers,
|
|
235
|
+
};
|
|
236
|
+
await fs.writeFile(mcpPath, JSON.stringify(existingConfig, null, 2) + '\n', 'utf-8');
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
await fs.writeFile(mcpPath, templateContent, 'utf-8');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
223
242
|
async function updateGitignore(cwd) {
|
|
224
243
|
const gitignorePath = path.join(cwd, '.gitignore');
|
|
225
244
|
let content = '';
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ const packageJson = JSON.parse(readFileSync(join(__dirname, '../package.json'),
|
|
|
16
16
|
const program = new Command();
|
|
17
17
|
program
|
|
18
18
|
.name('meltctl')
|
|
19
|
-
.description('Set up AI-first development standards (AGENTS.md, Claude skills, Cursor
|
|
19
|
+
.description('Set up AI-first development standards (AGENTS.md, Claude skills, Cursor commands, MCP config) in your project.\n\nRequires a @meltstudio.co Google Workspace account. Run `meltctl login` first, then `meltctl project init` in your repo.')
|
|
20
20
|
.version(packageJson.version)
|
|
21
21
|
.addHelpText('beforeAll', () => {
|
|
22
22
|
printBanner();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meltstudio/meltctl",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "AI-first development tools for teams - set up AGENTS.md, Claude Code, Cursor, and Copilot standards",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -9,8 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/**/*",
|
|
12
|
-
"README.md"
|
|
13
|
-
"LICENSE"
|
|
12
|
+
"README.md"
|
|
14
13
|
],
|
|
15
14
|
"publishConfig": {
|
|
16
15
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -45,7 +44,7 @@
|
|
|
45
44
|
"automation"
|
|
46
45
|
],
|
|
47
46
|
"author": "Melt Studio",
|
|
48
|
-
"license": "
|
|
47
|
+
"license": "UNLICENSED",
|
|
49
48
|
"dependencies": {
|
|
50
49
|
"@commander-js/extra-typings": "^12.1.0",
|
|
51
50
|
"@inquirer/prompts": "^8.2.1",
|