@meltstudio/meltctl 4.31.0 → 4.32.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/dist/commands/init.js +17 -1
- package/dist/commands/init.test.js +6 -4
- package/dist/index.js +2 -0
- package/package.json +1 -1
package/dist/commands/init.js
CHANGED
|
@@ -117,6 +117,16 @@ description: >-
|
|
|
117
117
|
This is a reference skill — it explains the process, not executes it.
|
|
118
118
|
---
|
|
119
119
|
|
|
120
|
+
`,
|
|
121
|
+
link: `---
|
|
122
|
+
user-invocable: true
|
|
123
|
+
description: >-
|
|
124
|
+
Connect and verify required integrations (ticket tracker, browser
|
|
125
|
+
testing). Use after melt-setup, when tools aren't working, or when
|
|
126
|
+
a skill reports missing MCP connections. Guides setup, verifies
|
|
127
|
+
each tool works, and updates AGENTS.md connection status.
|
|
128
|
+
---
|
|
129
|
+
|
|
120
130
|
`,
|
|
121
131
|
};
|
|
122
132
|
const OPENCODE_COMMAND_FRONTMATTER = {
|
|
@@ -174,6 +184,11 @@ description: Update Melt skills and standards to the latest version.
|
|
|
174
184
|
description: Answer questions about the AI-First Development Playbook and team workflow.
|
|
175
185
|
---
|
|
176
186
|
|
|
187
|
+
`,
|
|
188
|
+
link: `---
|
|
189
|
+
description: Connect and verify required integrations (ticket tracker, browser testing).
|
|
190
|
+
---
|
|
191
|
+
|
|
177
192
|
`,
|
|
178
193
|
};
|
|
179
194
|
const GITIGNORE_ENTRIES = ['.env.local', '.claude/settings.local.json'];
|
|
@@ -321,6 +336,7 @@ export async function initCommand(options) {
|
|
|
321
336
|
'security-audit',
|
|
322
337
|
'update',
|
|
323
338
|
'help',
|
|
339
|
+
'link',
|
|
324
340
|
];
|
|
325
341
|
// Shared files (skip on re-init)
|
|
326
342
|
if (!isReInit) {
|
|
@@ -443,7 +459,7 @@ export async function initCommand(options) {
|
|
|
443
459
|
}
|
|
444
460
|
console.log();
|
|
445
461
|
console.log(chalk.dim(' The setup skill will analyze your project and fill in AGENTS.md.'));
|
|
446
|
-
console.log(chalk.dim('
|
|
462
|
+
console.log(chalk.dim(' Then run /melt-link to connect your ticket tracker and browser testing tools.'));
|
|
447
463
|
console.log();
|
|
448
464
|
}
|
|
449
465
|
console.log(chalk.green('Done!'));
|
|
@@ -36,6 +36,7 @@ const MOCK_TEMPLATES = {
|
|
|
36
36
|
'workflows/security-audit.md': '# Security Audit Workflow\nSecurity check.',
|
|
37
37
|
'workflows/update.md': '# Update Workflow\nUpdate skills.',
|
|
38
38
|
'workflows/help.md': '# Help Workflow\nAnswer questions.',
|
|
39
|
+
'workflows/link.md': '# Link Workflow\nConnect tools.',
|
|
39
40
|
'claude-settings.json': '{"permissions":{"allow":["Read"],"deny":["Bash"]}}',
|
|
40
41
|
'mcp-configs/base.json': '{"mcpServers":{"context7":{"command":"npx","args":["context7"]}}}',
|
|
41
42
|
};
|
|
@@ -114,13 +115,13 @@ describe('initCommand', () => {
|
|
|
114
115
|
// Verify ensureDir was called for skill directories
|
|
115
116
|
const ensureDirCalls = fs.ensureDir.mock.calls;
|
|
116
117
|
const skillDirs = ensureDirCalls.filter(c => c[0].includes('.claude/skills/melt-'));
|
|
117
|
-
expect(skillDirs.length).toBeGreaterThanOrEqual(
|
|
118
|
+
expect(skillDirs.length).toBeGreaterThanOrEqual(12);
|
|
118
119
|
});
|
|
119
120
|
it('creates all 11 Claude skills', async () => {
|
|
120
121
|
await initCommand({ claude: true });
|
|
121
122
|
const writeCalls = fs.writeFile.mock.calls;
|
|
122
123
|
const skillFiles = writeCalls.filter(c => c[0].includes('.claude/skills/melt-') && c[0].endsWith('SKILL.md'));
|
|
123
|
-
expect(skillFiles.length).toBe(
|
|
124
|
+
expect(skillFiles.length).toBe(12);
|
|
124
125
|
const skillNames = skillFiles.map(c => {
|
|
125
126
|
const match = c[0].match(/\.claude\/skills\/melt-([^/]+)/);
|
|
126
127
|
return match ? match[1] : '';
|
|
@@ -136,12 +137,13 @@ describe('initCommand', () => {
|
|
|
136
137
|
expect(skillNames).toContain('security-audit');
|
|
137
138
|
expect(skillNames).toContain('update');
|
|
138
139
|
expect(skillNames).toContain('help');
|
|
140
|
+
expect(skillNames).toContain('link');
|
|
139
141
|
});
|
|
140
142
|
it('creates Cursor commands without frontmatter', async () => {
|
|
141
143
|
await initCommand({ cursor: true });
|
|
142
144
|
const writeCalls = fs.writeFile.mock.calls;
|
|
143
145
|
const cursorFiles = writeCalls.filter(c => c[0].includes('.cursor/commands/melt-'));
|
|
144
|
-
expect(cursorFiles.length).toBe(
|
|
146
|
+
expect(cursorFiles.length).toBe(12);
|
|
145
147
|
// Cursor commands should NOT have frontmatter
|
|
146
148
|
const setupCmd = cursorFiles.find(c => c[0].includes('melt-setup.md'));
|
|
147
149
|
expect(setupCmd).toBeDefined();
|
|
@@ -152,7 +154,7 @@ describe('initCommand', () => {
|
|
|
152
154
|
await initCommand({ opencode: true });
|
|
153
155
|
const writeCalls = fs.writeFile.mock.calls;
|
|
154
156
|
const opencodeFiles = writeCalls.filter(c => c[0].includes('.opencode/commands/melt-'));
|
|
155
|
-
expect(opencodeFiles.length).toBe(
|
|
157
|
+
expect(opencodeFiles.length).toBe(12);
|
|
156
158
|
// OpenCode commands should have shorter frontmatter
|
|
157
159
|
const setupCmd = opencodeFiles.find(c => c[0].includes('melt-setup.md'));
|
|
158
160
|
expect(setupCmd).toBeDefined();
|
package/dist/index.js
CHANGED
|
@@ -32,6 +32,7 @@ program
|
|
|
32
32
|
.addHelpText('after', `
|
|
33
33
|
${chalk.bold('AI Skills')} ${chalk.dim('(run these in your AI coding tool, not the CLI):')}
|
|
34
34
|
${chalk.dim(' /melt-setup Analyze the project and customize AGENTS.md')}
|
|
35
|
+
${chalk.dim(' /melt-link Connect and verify ticket tracker + browser testing')}
|
|
35
36
|
${chalk.dim(' /melt-plan Design an implementation approach before writing code')}
|
|
36
37
|
${chalk.dim(' /melt-validate Run the validation plan and verify end-to-end')}
|
|
37
38
|
${chalk.dim(' /melt-review Review changes against project standards')}
|
|
@@ -64,6 +65,7 @@ const project = program
|
|
|
64
65
|
.addHelpText('after', `
|
|
65
66
|
${chalk.dim('Related skills (run in your AI coding tool after init):')}
|
|
66
67
|
${chalk.dim(' /melt-setup Analyze the project and customize AGENTS.md')}
|
|
68
|
+
${chalk.dim(' /melt-link Connect and verify ticket tracker + browser testing')}
|
|
67
69
|
${chalk.dim(' /melt-update Update Melt skills to the latest version')}
|
|
68
70
|
`);
|
|
69
71
|
project
|
package/package.json
CHANGED