@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.
Files changed (3) hide show
  1. package/README.md +3 -3
  2. package/dist/index.js +56 -35
  3. 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-setup` in Claude Code to scaffold `AGENTS.md` + a baseline
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-setup` — analyzes the project, writes a project-specific `AGENTS.md`,
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-link` — connects and verifies your ticket tracker + browser testing
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.20.0";
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-setup")} does the same migration.)`,
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-tech-audit` on the repo to create the baseline",
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-tech-audit` on the repo to refresh the baseline",
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-tech-audit` (or the relevant audit skill) to refresh the findings.",
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-tech-audit` on each unaudited repo to create its baseline",
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-plan, /melt-dev-review, \u2026).\n"
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-tech-audit` on the repo to create the baseline",
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-tech-audit` on the repo to refresh the baseline",
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-tech-audit` (or the relevant audit skill) to refresh the findings.",
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-tech-audit` on each unaudited repo to create its baseline",
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-close-my-day to read back the morning's plan and reconcile it. Self-scoped \u2014 a PM only ever reads their own plan.",
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-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.",
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 (/melt-dev-*) are distributed centrally via the Anthropic org Skills registry and auto-update 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."
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-setup Analyze the project and customize AGENTS.md")}
56933
- ${source_default.dim(" /melt-dev-link Connect and verify ticket tracker + browser testing")}
56934
- ${source_default.dim(" /melt-dev-plan Design an implementation approach before writing code")}
56935
- ${source_default.dim(" /melt-dev-validate Run the validation plan and verify end-to-end")}
56936
- ${source_default.dim(" /melt-dev-review Review changes against project standards")}
56937
- ${source_default.dim(" /melt-dev-pr Create a well-structured pull request")}
56938
- ${source_default.dim(" /melt-dev-debug Systematically investigate and fix bugs")}
56939
- ${source_default.dim(" /melt-dev-tech-audit Run a project compliance audit")}
56940
- ${source_default.dim(" /melt-dev-ux-audit Review UI against usability heuristics")}
56941
- ${source_default.dim(" /melt-dev-security-audit Run a security posture audit across the platform")}
56942
- ${source_default.dim(" /melt-dev-cost-audit Run an AWS cost optimization audit")}
56943
- ${source_default.dim(" /melt-dev-help Answer questions about the development playbook")}
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-setup Analyze the project, write AGENTS.md, and propose MCP config")}
56998
- ${source_default.dim(" /melt-dev-link Connect and verify ticket tracker + browser testing")}
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-setup does the same"
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-tech-audit Run a project compliance audit")}
57020
- ${source_default.dim(" /melt-dev-ux-audit Review UI against usability heuristics")}
57021
- ${source_default.dim(" /melt-dev-security-audit Run a security posture audit across the platform")}
57022
- ${source_default.dim(" /melt-dev-cost-audit Run an AWS cost optimization audit")}
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-plan Design an implementation approach before writing code")}
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meltstudio/meltctl",
3
- "version": "5.20.0",
3
+ "version": "5.21.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",