@meltstudio/meltctl 5.16.0 → 5.18.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.
Files changed (2) hide show
  1. package/dist/index.js +20 -9
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -7450,7 +7450,7 @@ var CLI_VERSION;
7450
7450
  var init_version = __esm({
7451
7451
  "src/utils/version.ts"() {
7452
7452
  "use strict";
7453
- CLI_VERSION = "5.16.0";
7453
+ CLI_VERSION = "5.18.0";
7454
7454
  }
7455
7455
  });
7456
7456
 
@@ -42622,6 +42622,10 @@ async function getClient() {
42622
42622
  // src/commands/skills.ts
42623
42623
  var MARKER_FILE = ".melt-skills.json";
42624
42624
  function getSkillsRoot() {
42625
+ const configDir = process.env["CLAUDE_CONFIG_DIR"];
42626
+ if (configDir) {
42627
+ return path5.join(configDir, "skills");
42628
+ }
42625
42629
  return path5.join(os5.homedir(), ".claude", "skills");
42626
42630
  }
42627
42631
  function getSkillsRoots() {
@@ -42733,7 +42737,7 @@ async function skillsInstallCommand(opts) {
42733
42737
  );
42734
42738
  process.exit(1);
42735
42739
  }
42736
- const roots = getSkillsRoots();
42740
+ const roots = opts.path ? [path5.resolve(opts.path)] : getSkillsRoots();
42737
42741
  const stale = opts.force ? roots : roots.filter((root) => readMarker(root)?.version !== manifest.version);
42738
42742
  if (stale.length === 0) {
42739
42743
  console.log(
@@ -43233,6 +43237,7 @@ function detectAuditType(filename) {
43233
43237
  const lower = filename.toLowerCase();
43234
43238
  if (lower.includes("security-audit")) return "security-audit";
43235
43239
  if (lower.includes("ux-audit")) return "ux-audit";
43240
+ if (lower.includes("cost-audit")) return "cost-audit";
43236
43241
  return "audit";
43237
43242
  }
43238
43243
  async function autoDetectAuditFile() {
@@ -43320,7 +43325,8 @@ async function auditListCommand(options) {
43320
43325
  const typeLabels = {
43321
43326
  audit: "Tech Audit",
43322
43327
  "ux-audit": "UX Audit",
43323
- "security-audit": "Security"
43328
+ "security-audit": "Security",
43329
+ "cost-audit": "Cost Audit"
43324
43330
  };
43325
43331
  if (options.latest) {
43326
43332
  console.log(source_default.bold(`
@@ -43366,7 +43372,7 @@ function printLatestAuditRow(r, typeLabels) {
43366
43372
  });
43367
43373
  const repo = r.repository ?? r.project;
43368
43374
  const label = typeLabels[r.type] ?? r.type;
43369
- const typeColor = r.type === "ux-audit" ? source_default.yellow : r.type === "security-audit" ? source_default.red : source_default.magenta;
43375
+ const typeColor = r.type === "ux-audit" ? source_default.yellow : r.type === "security-audit" ? source_default.red : r.type === "cost-audit" ? source_default.cyan : source_default.magenta;
43370
43376
  const ageText = daysAgo === 0 ? "today" : `${daysAgo}d ago`;
43371
43377
  const isSecurityAudit = r.type === "security-audit";
43372
43378
  const ageColor = isSecurityAudit ? daysAgo <= 30 ? source_default.green : daysAgo <= 90 ? source_default.yellow : source_default.red : daysAgo <= 7 ? source_default.green : daysAgo <= 30 ? source_default.yellow : source_default.red;
@@ -43384,7 +43390,7 @@ function printAuditRow(r, typeLabels) {
43384
43390
  });
43385
43391
  const repo = r.repository ?? r.project;
43386
43392
  const label = typeLabels[r.type] ?? r.type;
43387
- const typeColor = r.type === "ux-audit" ? source_default.yellow : r.type === "security-audit" ? source_default.red : source_default.magenta;
43393
+ const typeColor = r.type === "ux-audit" ? source_default.yellow : r.type === "security-audit" ? source_default.red : r.type === "cost-audit" ? source_default.cyan : source_default.magenta;
43388
43394
  console.log(
43389
43395
  ` ${source_default.dim(r.id.slice(0, 8).padEnd(10))} ${typeColor(label.padEnd(12))} ${source_default.white(repo.padEnd(40))} ${source_default.dim(r.author.padEnd(30))} ${source_default.dim(date5)}`
43390
43396
  );
@@ -43409,7 +43415,8 @@ async function auditViewCommand(id, options) {
43409
43415
  const typeLabels = {
43410
43416
  audit: "Tech Audit",
43411
43417
  "ux-audit": "UX Audit",
43412
- "security-audit": "Security Audit"
43418
+ "security-audit": "Security Audit",
43419
+ "cost-audit": "Cost Audit"
43413
43420
  };
43414
43421
  const label = typeLabels[audit2.type] ?? audit2.type;
43415
43422
  const date5 = new Date(audit2.createdAt).toLocaleDateString("en-US", {
@@ -56049,10 +56056,11 @@ ${source_default.dim(" /melt-dev-debug Systematically investigate an
56049
56056
  ${source_default.dim(" /melt-dev-tech-audit Run a project compliance audit")}
56050
56057
  ${source_default.dim(" /melt-dev-ux-audit Review UI against usability heuristics")}
56051
56058
  ${source_default.dim(" /melt-dev-security-audit Run a security posture audit across the platform")}
56059
+ ${source_default.dim(" /melt-dev-cost-audit Run an AWS cost optimization audit")}
56052
56060
  ${source_default.dim(" /melt-dev-help Answer questions about the development playbook")}
56053
56061
 
56054
56062
  ${source_default.bold("Setup")}
56055
- ${source_default.dim(" skills install Install the dev skills (/melt-dev-*) into Claude Code (+ Cursor)")}
56063
+ ${source_default.dim(" skills install Install the dev skills (/melt-dev-*) into Claude Code (+ Cursor; respects CLAUDE_CONFIG_DIR, or --path <dir>)")}
56056
56064
 
56057
56065
  ${source_default.bold("Admin Commands")} ${source_default.dim("(used by skills and team managers):")}
56058
56066
  ${source_default.dim(" audit submit [file] Submit an audit report")}
@@ -56093,7 +56101,9 @@ program2.command("mcp").description(
56093
56101
  await mcpCommand();
56094
56102
  });
56095
56103
  var skills = program2.command("skills").description("install the Melt dev skills (/melt-dev-*) into Claude Code");
56096
- skills.command("install").description("install the Melt dev skills into ~/.claude/skills/ (re-run to update)").option("--force", "reinstall even if already up to date").action(async (options) => {
56104
+ skills.command("install").description(
56105
+ "install the Melt dev skills into ~/.claude/skills/ (re-run to update; respects CLAUDE_CONFIG_DIR)"
56106
+ ).option("--force", "reinstall even if already up to date").option("--path <dir>", "install into this directory only (overrides CLAUDE_CONFIG_DIR)").action(async (options) => {
56097
56107
  await skillsInstallCommand(options);
56098
56108
  });
56099
56109
  var project = program2.command("project").description("manage project configuration").addHelpText(
@@ -56126,12 +56136,13 @@ ${source_default.dim("Related skills (run in your AI coding tool):")}
56126
56136
  ${source_default.dim(" /melt-dev-tech-audit Run a project compliance audit")}
56127
56137
  ${source_default.dim(" /melt-dev-ux-audit Review UI against usability heuristics")}
56128
56138
  ${source_default.dim(" /melt-dev-security-audit Run a security posture audit across the platform")}
56139
+ ${source_default.dim(" /melt-dev-cost-audit Run an AWS cost optimization audit")}
56129
56140
  `
56130
56141
  );
56131
56142
  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) => {
56132
56143
  await auditSubmitCommand(file2);
56133
56144
  });
56134
- audit.command("list").description("list submitted audits (Team Managers only)").option("--type <type>", "filter by type (audit, ux-audit, security-audit)").option("--repository <repo>", "filter by repository (owner/repo)").option("--latest", "show only the latest audit per project and type").option("--limit <n>", "max results (default 50, max 200)").action(async (options) => {
56145
+ audit.command("list").description("list submitted audits (Team Managers only)").option("--type <type>", "filter by type (audit, ux-audit, security-audit, cost-audit)").option("--repository <repo>", "filter by repository (owner/repo)").option("--latest", "show only the latest audit per project and type").option("--limit <n>", "max results (default 50, max 200)").action(async (options) => {
56135
56146
  await auditListCommand(options);
56136
56147
  });
56137
56148
  audit.command("view").description("view a submitted audit by ID (Team Managers only)").argument("<id>", "audit ID").option("-o, --output <file>", "save to file instead of printing").action(async (id, options) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meltstudio/meltctl",
3
- "version": "5.16.0",
3
+ "version": "5.18.0",
4
4
  "description": "AI-first development tooling for Melt teams — companion CLI for the org-distributed Claude Code dev skills",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",