@meltstudio/meltctl 5.20.0 → 5.21.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 +3 -3
- package/dist/index.js +56 -35
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Companion CLI for the Melt AI-first development workflow.
|
|
|
4
4
|
|
|
5
5
|
The Melt dev skills (`/melt-dev-*`) are distributed centrally via the Anthropic
|
|
6
6
|
org Skills registry and auto-update in Claude Code — there's no per-repo install.
|
|
7
|
-
Run `/melt-dev
|
|
7
|
+
Run `/melt-dev:setup` in Claude Code to scaffold `AGENTS.md` + a baseline
|
|
8
8
|
`.mcp.json` in a repo. This CLI handles auth, templates, and team workflows.
|
|
9
9
|
|
|
10
10
|
## Installation
|
|
@@ -41,9 +41,9 @@ meltctl version --check
|
|
|
41
41
|
|
|
42
42
|
Project scaffolding lives in the dev skills, not the CLI:
|
|
43
43
|
|
|
44
|
-
- `/melt-dev
|
|
44
|
+
- `/melt-dev:setup` — analyzes the project, writes a project-specific `AGENTS.md`,
|
|
45
45
|
and proposes a baseline `.mcp.json` (written only on your confirmation).
|
|
46
|
-
- `/melt-dev
|
|
46
|
+
- `/melt-dev:link` — connects and verifies your ticket tracker + browser testing
|
|
47
47
|
MCP servers, and fills in the `## Tool Connections` section of `AGENTS.md`.
|
|
48
48
|
|
|
49
49
|
`AGENTS.md` and `.mcp.json` are the only files Melt writes into a repo.
|
package/dist/index.js
CHANGED
|
@@ -7499,7 +7499,7 @@ var CLI_VERSION;
|
|
|
7499
7499
|
var init_version = __esm({
|
|
7500
7500
|
"src/utils/version.ts"() {
|
|
7501
7501
|
"use strict";
|
|
7502
|
-
CLI_VERSION = "5.
|
|
7502
|
+
CLI_VERSION = "5.21.0";
|
|
7503
7503
|
}
|
|
7504
7504
|
});
|
|
7505
7505
|
|
|
@@ -26581,7 +26581,7 @@ async function templatesCommand() {
|
|
|
26581
26581
|
source_default.bold.yellow("\u26A0 The per-repo Melt skill model has been retired (company-wide)."),
|
|
26582
26582
|
"This command now hands back MIGRATION INSTRUCTIONS, not a template refresh.",
|
|
26583
26583
|
`\u2192 Follow ${source_default.cyan("MIGRATION.md")} in the directory printed below to migrate this repo now.`,
|
|
26584
|
-
` (In Claude Code with the org skills, ${source_default.cyan("/melt-dev
|
|
26584
|
+
` (In Claude Code with the org skills, ${source_default.cyan("/melt-dev:setup")} does the same migration.)`,
|
|
26585
26585
|
""
|
|
26586
26586
|
].join("\n");
|
|
26587
26587
|
console.error(notice);
|
|
@@ -43071,7 +43071,7 @@ var ISSUE_RULES = [
|
|
|
43071
43071
|
severity: "low",
|
|
43072
43072
|
label: "Never audited",
|
|
43073
43073
|
category: "audits",
|
|
43074
|
-
howToFix: "Run `/melt-dev
|
|
43074
|
+
howToFix: "Run `/melt-dev:tech-audit` on the repo to create the baseline",
|
|
43075
43075
|
scope: "project",
|
|
43076
43076
|
suppressedInStatuses: ["commercial"]
|
|
43077
43077
|
},
|
|
@@ -43082,7 +43082,7 @@ var ISSUE_RULES = [
|
|
|
43082
43082
|
severity: "low",
|
|
43083
43083
|
label: "Audit over 90 days old",
|
|
43084
43084
|
category: "audits",
|
|
43085
|
-
howToFix: "Run `/melt-dev
|
|
43085
|
+
howToFix: "Run `/melt-dev:tech-audit` on the repo to refresh the baseline",
|
|
43086
43086
|
scope: "project"
|
|
43087
43087
|
},
|
|
43088
43088
|
{
|
|
@@ -43095,7 +43095,7 @@ var ISSUE_RULES = [
|
|
|
43095
43095
|
severity: "low",
|
|
43096
43096
|
label: "Audit overdue (30+ days)",
|
|
43097
43097
|
category: "audits",
|
|
43098
|
-
howToFix: "A repo's last audit is over 30 days old \u2014 re-run `/melt-dev
|
|
43098
|
+
howToFix: "A repo's last audit is over 30 days old \u2014 re-run `/melt-dev:tech-audit` (or the relevant audit skill) to refresh the findings.",
|
|
43099
43099
|
scope: "project"
|
|
43100
43100
|
},
|
|
43101
43101
|
{
|
|
@@ -43105,7 +43105,7 @@ var ISSUE_RULES = [
|
|
|
43105
43105
|
severity: "low",
|
|
43106
43106
|
label: "Some repos never audited",
|
|
43107
43107
|
category: "audits",
|
|
43108
|
-
howToFix: "Run `/melt-dev
|
|
43108
|
+
howToFix: "Run `/melt-dev:tech-audit` on each unaudited repo to create its baseline",
|
|
43109
43109
|
scope: "project",
|
|
43110
43110
|
suppressedInStatuses: ["commercial"]
|
|
43111
43111
|
},
|
|
@@ -43581,6 +43581,27 @@ async function skillsInstallCommand(opts) {
|
|
|
43581
43581
|
process.exit(1);
|
|
43582
43582
|
}
|
|
43583
43583
|
const roots = opts.path ? [path6.resolve(opts.path)] : getSkillsRoots();
|
|
43584
|
+
if (manifest.skills.length === 0) {
|
|
43585
|
+
const installed = roots.filter((root) => readMarker(root) !== null);
|
|
43586
|
+
for (const root of installed) {
|
|
43587
|
+
applyDevSkills(manifest, root);
|
|
43588
|
+
}
|
|
43589
|
+
const where2 = installed.map((root) => `${root.replace(os5.homedir(), "~")}/`).join(" and ");
|
|
43590
|
+
console.log(
|
|
43591
|
+
source_default.green(
|
|
43592
|
+
"\n Melt skills now come as Claude plugins (melt-dev, melt-company), installed for everyone in the Melt Studio org."
|
|
43593
|
+
)
|
|
43594
|
+
);
|
|
43595
|
+
if (installed.length > 0) {
|
|
43596
|
+
console.log(source_default.dim(` Removed the old copies from ${where2}.`));
|
|
43597
|
+
}
|
|
43598
|
+
console.log(
|
|
43599
|
+
source_default.dim(
|
|
43600
|
+
" Sign in to Claude Code with your Melt claude.ai account, then run /reload-plugins. Skills appear as /melt-dev:plan, /melt-dev:review, \u2026\n"
|
|
43601
|
+
)
|
|
43602
|
+
);
|
|
43603
|
+
return;
|
|
43604
|
+
}
|
|
43584
43605
|
const stale = opts.force ? roots : roots.filter((root) => readMarker(root)?.version !== manifest.version);
|
|
43585
43606
|
if (stale.length === 0) {
|
|
43586
43607
|
console.log(
|
|
@@ -43604,7 +43625,7 @@ async function skillsInstallCommand(opts) {
|
|
|
43604
43625
|
);
|
|
43605
43626
|
console.log(
|
|
43606
43627
|
source_default.dim(
|
|
43607
|
-
" Restart Claude Code / Cursor to load them (they appear as /melt-dev
|
|
43628
|
+
" Restart Claude Code / Cursor to load them (they appear as /melt-dev:plan, /melt-dev:review, \u2026).\n"
|
|
43608
43629
|
)
|
|
43609
43630
|
);
|
|
43610
43631
|
}
|
|
@@ -55963,7 +55984,7 @@ var ISSUE_RULES2 = [
|
|
|
55963
55984
|
severity: "low",
|
|
55964
55985
|
label: "Never audited",
|
|
55965
55986
|
category: "audits",
|
|
55966
|
-
howToFix: "Run `/melt-dev
|
|
55987
|
+
howToFix: "Run `/melt-dev:tech-audit` on the repo to create the baseline",
|
|
55967
55988
|
scope: "project",
|
|
55968
55989
|
suppressedInStatuses: ["commercial"]
|
|
55969
55990
|
},
|
|
@@ -55974,7 +55995,7 @@ var ISSUE_RULES2 = [
|
|
|
55974
55995
|
severity: "low",
|
|
55975
55996
|
label: "Audit over 90 days old",
|
|
55976
55997
|
category: "audits",
|
|
55977
|
-
howToFix: "Run `/melt-dev
|
|
55998
|
+
howToFix: "Run `/melt-dev:tech-audit` on the repo to refresh the baseline",
|
|
55978
55999
|
scope: "project"
|
|
55979
56000
|
},
|
|
55980
56001
|
{
|
|
@@ -55987,7 +56008,7 @@ var ISSUE_RULES2 = [
|
|
|
55987
56008
|
severity: "low",
|
|
55988
56009
|
label: "Audit overdue (30+ days)",
|
|
55989
56010
|
category: "audits",
|
|
55990
|
-
howToFix: "A repo's last audit is over 30 days old \u2014 re-run `/melt-dev
|
|
56011
|
+
howToFix: "A repo's last audit is over 30 days old \u2014 re-run `/melt-dev:tech-audit` (or the relevant audit skill) to refresh the findings.",
|
|
55991
56012
|
scope: "project"
|
|
55992
56013
|
},
|
|
55993
56014
|
{
|
|
@@ -55997,7 +56018,7 @@ var ISSUE_RULES2 = [
|
|
|
55997
56018
|
severity: "low",
|
|
55998
56019
|
label: "Some repos never audited",
|
|
55999
56020
|
category: "audits",
|
|
56000
|
-
howToFix: "Run `/melt-dev
|
|
56021
|
+
howToFix: "Run `/melt-dev:tech-audit` on each unaudited repo to create its baseline",
|
|
56001
56022
|
scope: "project",
|
|
56002
56023
|
suppressedInStatuses: ["commercial"]
|
|
56003
56024
|
},
|
|
@@ -56772,7 +56793,7 @@ function registerDailyPlanTools(server, getClient2) {
|
|
|
56772
56793
|
"get_pm_daily_plan",
|
|
56773
56794
|
{
|
|
56774
56795
|
title: "Get the PM's daily plan",
|
|
56775
|
-
description: "Returns the calling PM's daily plan for a day (defaults to today, Colombia time), or null if none exists. Each agenda item has a label, optional project/meeting/suggestedSkill, a status (pending/done/blocked/carried), and an optional note. Use this in melt-pm
|
|
56796
|
+
description: "Returns the calling PM's daily plan for a day (defaults to today, Colombia time), or null if none exists. Each agenda item has a label, optional project/meeting/suggestedSkill, a status (pending/done/blocked/carried), and an optional note. Use this in melt-pm:close-my-day to read back the morning's plan and reconcile it. Self-scoped \u2014 a PM only ever reads their own plan.",
|
|
56776
56797
|
inputSchema: {
|
|
56777
56798
|
date: external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe("YYYY-MM-DD. Omit for today.")
|
|
56778
56799
|
}
|
|
@@ -56783,7 +56804,7 @@ function registerDailyPlanTools(server, getClient2) {
|
|
|
56783
56804
|
"submit_pm_daily_plan",
|
|
56784
56805
|
{
|
|
56785
56806
|
title: "Submit/update the PM's daily plan",
|
|
56786
|
-
description: "Upserts the calling PM's daily plan for a day (defaults to today). melt-pm
|
|
56807
|
+
description: "Upserts the calling PM's daily plan for a day (defaults to today). melt-pm:plan-my-day calls this once it has built the morning agenda (items with status='pending'); melt-pm:close-my-day calls it again with the same items flipped to done/blocked/carried. Idempotent per (PM, day) \u2014 calling again replaces the day's agenda. Self-scoped.",
|
|
56787
56808
|
inputSchema: {
|
|
56788
56809
|
planDate: external_exports.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional().describe("YYYY-MM-DD. Omit for today."),
|
|
56789
56810
|
agenda: external_exports.array(planItemSchema)
|
|
@@ -56839,7 +56860,7 @@ function registerEndpointCheckTools(server, getClient2) {
|
|
|
56839
56860
|
"submit_endpoint_check",
|
|
56840
56861
|
{
|
|
56841
56862
|
title: "Submit an endpoint-security self-check",
|
|
56842
|
-
description: "Records the calling person's endpoint-security self-check against Melt's baseline (#507). melt-verify-endpoint calls this once it has run the read-only checks and produced the report: pass the 9 control results (5 technical pass/fail/unknown + 3 verbal confirmed/no/unknown), the OS, the one-line summary, what was remediated, and the full secrets-free markdown report. Self-scoped \u2014 the author comes from the JWT, so a caller only ever writes their own posture. Latest-check-wins per person. NEVER pass secrets (passwords, keys, tokens, internal hostnames) in any field.",
|
|
56863
|
+
description: "Records the calling person's endpoint-security self-check against Melt's baseline (#507). melt-company:verify-endpoint calls this once it has run the read-only checks and produced the report: pass the 9 control results (5 technical pass/fail/unknown + 3 verbal confirmed/no/unknown), the OS, the one-line summary, what was remediated, and the full secrets-free markdown report. Self-scoped \u2014 the author comes from the JWT, so a caller only ever writes their own posture. Latest-check-wins per person. NEVER pass secrets (passwords, keys, tokens, internal hostnames) in any field.",
|
|
56843
56864
|
inputSchema: submitEndpointCheckShape
|
|
56844
56865
|
},
|
|
56845
56866
|
withClientArgs(getClient2, submitEndpointCheck)
|
|
@@ -56921,7 +56942,7 @@ async function mcpCommand() {
|
|
|
56921
56942
|
init_version();
|
|
56922
56943
|
var program2 = new Command();
|
|
56923
56944
|
program2.name("meltctl").description(
|
|
56924
|
-
"Companion CLI for the Melt AI-first development workflow.\n\nThe Melt dev skills
|
|
56945
|
+
"Companion CLI for the Melt AI-first development workflow.\n\nThe Melt dev skills ship as the melt-dev Claude plugin from the Melt Studio org marketplace and update automatically in Claude Code \u2014 no per-repo install. Run /melt-dev:setup in Claude Code to scaffold AGENTS.md + MCP config in a repo.\n\nRequires a @meltstudio.co Google Workspace account. Run `npx @meltstudio/meltctl@latest login` first."
|
|
56925
56946
|
).version(CLI_VERSION).addHelpText("beforeAll", () => {
|
|
56926
56947
|
printBanner();
|
|
56927
56948
|
return "";
|
|
@@ -56929,18 +56950,18 @@ program2.name("meltctl").description(
|
|
|
56929
56950
|
"after",
|
|
56930
56951
|
`
|
|
56931
56952
|
${source_default.bold("AI Skills")} ${source_default.dim("(run these in Claude Code, not the CLI \u2014 run `meltctl skills install` to load them in the CLI):")}
|
|
56932
|
-
${source_default.dim(" /melt-dev
|
|
56933
|
-
${source_default.dim(" /melt-dev
|
|
56934
|
-
${source_default.dim(" /melt-dev
|
|
56935
|
-
${source_default.dim(" /melt-dev
|
|
56936
|
-
${source_default.dim(" /melt-dev
|
|
56937
|
-
${source_default.dim(" /melt-dev
|
|
56938
|
-
${source_default.dim(" /melt-dev
|
|
56939
|
-
${source_default.dim(" /melt-dev
|
|
56940
|
-
${source_default.dim(" /melt-dev
|
|
56941
|
-
${source_default.dim(" /melt-dev
|
|
56942
|
-
${source_default.dim(" /melt-dev
|
|
56943
|
-
${source_default.dim(" /melt-dev
|
|
56953
|
+
${source_default.dim(" /melt-dev:setup Analyze the project and customize AGENTS.md")}
|
|
56954
|
+
${source_default.dim(" /melt-dev:link Connect and verify ticket tracker + browser testing")}
|
|
56955
|
+
${source_default.dim(" /melt-dev:plan Design an implementation approach before writing code")}
|
|
56956
|
+
${source_default.dim(" /melt-dev:validate Run the validation plan and verify end-to-end")}
|
|
56957
|
+
${source_default.dim(" /melt-dev:review Review changes against project standards")}
|
|
56958
|
+
${source_default.dim(" /melt-dev:pr Create a well-structured pull request")}
|
|
56959
|
+
${source_default.dim(" /melt-dev:debug Systematically investigate and fix bugs")}
|
|
56960
|
+
${source_default.dim(" /melt-dev:tech-audit Run a project compliance audit")}
|
|
56961
|
+
${source_default.dim(" /melt-dev:ux-audit Review UI against usability heuristics")}
|
|
56962
|
+
${source_default.dim(" /melt-dev:security-audit Run a security posture audit across the platform")}
|
|
56963
|
+
${source_default.dim(" /melt-dev:cost-audit Run an AWS cost optimization audit")}
|
|
56964
|
+
${source_default.dim(" /melt-dev:help Answer questions about the development playbook")}
|
|
56944
56965
|
|
|
56945
56966
|
${source_default.bold("Setup")}
|
|
56946
56967
|
${source_default.dim(" skills install Install the dev skills (/melt-dev-*) into Claude Code (+ Cursor; respects CLAUDE_CONFIG_DIR, or --path <dir>)")}
|
|
@@ -56994,12 +57015,12 @@ var project = program2.command("project").description("manage project configurat
|
|
|
56994
57015
|
`
|
|
56995
57016
|
${source_default.dim("Project scaffolding now lives in the Melt dev skills (run these in Claude Code,")}
|
|
56996
57017
|
${source_default.dim("auto-distributed via the Anthropic org Skills registry):")}
|
|
56997
|
-
${source_default.dim(" /melt-dev
|
|
56998
|
-
${source_default.dim(" /melt-dev
|
|
57018
|
+
${source_default.dim(" /melt-dev:setup Analyze the project, write AGENTS.md, and propose MCP config")}
|
|
57019
|
+
${source_default.dim(" /melt-dev:link Connect and verify ticket tracker + browser testing")}
|
|
56999
57020
|
`
|
|
57000
57021
|
);
|
|
57001
57022
|
project.command("templates").description(
|
|
57002
|
-
"write the repo-migration playbook to a temp dir (the /melt-update \u2192 /melt-dev-* path); /melt-dev
|
|
57023
|
+
"write the repo-migration playbook to a temp dir (the /melt-update \u2192 /melt-dev-* path); /melt-dev:setup does the same"
|
|
57003
57024
|
).action(async () => {
|
|
57004
57025
|
await templatesCommand();
|
|
57005
57026
|
});
|
|
@@ -57016,10 +57037,10 @@ var audit = program2.command("audit", { hidden: true }).description("submit and
|
|
|
57016
57037
|
"after",
|
|
57017
57038
|
`
|
|
57018
57039
|
${source_default.dim("Related skills (run in your AI coding tool):")}
|
|
57019
|
-
${source_default.dim(" /melt-dev
|
|
57020
|
-
${source_default.dim(" /melt-dev
|
|
57021
|
-
${source_default.dim(" /melt-dev
|
|
57022
|
-
${source_default.dim(" /melt-dev
|
|
57040
|
+
${source_default.dim(" /melt-dev:tech-audit Run a project compliance audit")}
|
|
57041
|
+
${source_default.dim(" /melt-dev:ux-audit Review UI against usability heuristics")}
|
|
57042
|
+
${source_default.dim(" /melt-dev:security-audit Run a security posture audit across the platform")}
|
|
57043
|
+
${source_default.dim(" /melt-dev:cost-audit Run an AWS cost optimization audit")}
|
|
57023
57044
|
`
|
|
57024
57045
|
);
|
|
57025
57046
|
audit.command("submit").description("submit an audit report from a markdown file").argument("[file]", "path to the audit file (auto-detects from .audits/ if omitted)").action(async (file2) => {
|
|
@@ -57035,7 +57056,7 @@ var plan = program2.command("plan", { hidden: true }).description("submit and li
|
|
|
57035
57056
|
"after",
|
|
57036
57057
|
`
|
|
57037
57058
|
${source_default.dim("Related skill (run in Claude Code):")}
|
|
57038
|
-
${source_default.dim(" /melt-dev
|
|
57059
|
+
${source_default.dim(" /melt-dev:plan Design an implementation approach before writing code")}
|
|
57039
57060
|
`
|
|
57040
57061
|
);
|
|
57041
57062
|
plan.command("submit").description("submit or update a plan from a markdown file").argument("[file]", "path to the plan file (auto-detects from .plans/ if omitted)").action(async (file2) => {
|
package/package.json
CHANGED