@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 CHANGED
@@ -1,174 +1,48 @@
1
1
  # @meltstudio/meltctl
2
2
 
3
- CLI tool for Melt's AI-assisted development workflow. Initialize projects with Cursor AI commands and streamline your development process.
3
+ CLI tool for setting up AI-first development standards in your project.
4
4
 
5
- ## 🚀 Quick Start
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
- This command:
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
- meltctl project update
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
- Safely removes all Melt-generated files from your project while preserving user-created content. This command:
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
- ## 🛠️ Requirements
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
- - Node.js 22+ (works with Node.js 18+ but 22+ recommended)
110
- - [Cursor IDE](https://cursor.sh) for using the AI commands
111
- - Git repository (recommended)
25
+ # Re-initialize
26
+ meltctl project init --force
112
27
 
113
- ## 📚 Documentation
114
-
115
- For comprehensive documentation, visit:
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
- ## 🤝 Contributing
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
- Templates support dynamic content replacement (like timestamps) and are copied to your project during initialization.
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
- ## 📄 License
41
+ ## Requirements
169
42
 
170
- MIT © Melt Studio
43
+ - Node.js 22+
44
+ - `@meltstudio.co` Google Workspace account
171
45
 
172
- ---
46
+ ## License
173
47
 
174
- Made with ❤️ by [Melt Studio](https://meltstudio.co) for developers who ship fast without sacrificing quality.
48
+ Proprietary. All rights reserved.
@@ -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 fs.writeFile(path.join(cwd, '.mcp.json'), mcpConfig, 'utf-8');
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 your AI agent it will automatically fill in project details in AGENTS.md'));
201
- console.log(chalk.dim(' 2. Copy .env.melt.example to .env.local and fill in credentials'));
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 rules, MCP config) in your project.\n\nRequires a @meltstudio.co Google Workspace account. Run `meltctl login` first, then `meltctl project init` in your repo.')
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.4.0",
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": "MIT",
47
+ "license": "UNLICENSED",
49
48
  "dependencies": {
50
49
  "@commander-js/extra-typings": "^12.1.0",
51
50
  "@inquirer/prompts": "^8.2.1",