@meltstudio/meltctl 5.9.0 → 5.11.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/index.js +106 -11
- 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.
|
|
7453
|
+
CLI_VERSION = "5.11.0";
|
|
7454
7454
|
}
|
|
7455
7455
|
});
|
|
7456
7456
|
|
|
@@ -27935,6 +27935,32 @@ function createProfileAuditsResource(config2) {
|
|
|
27935
27935
|
};
|
|
27936
27936
|
}
|
|
27937
27937
|
|
|
27938
|
+
// ../sdk/dist/resources/support-effort.js
|
|
27939
|
+
function createSupportEffortResource(config2) {
|
|
27940
|
+
return {
|
|
27941
|
+
/**
|
|
27942
|
+
* Get the by-project + by-architect rollups, the week/month trend, and the
|
|
27943
|
+
* actionable missing-time worklist. `period` selects the trend granularity
|
|
27944
|
+
* (default 'week').
|
|
27945
|
+
*/
|
|
27946
|
+
async get(opts = {}) {
|
|
27947
|
+
const params = new URLSearchParams();
|
|
27948
|
+
if (opts.period)
|
|
27949
|
+
params.set("period", opts.period);
|
|
27950
|
+
const query = params.toString();
|
|
27951
|
+
const path10 = query ? `/support-effort?${query}` : "/support-effort";
|
|
27952
|
+
const { data, status } = await apiFetch(config2, path10);
|
|
27953
|
+
if (status === 403)
|
|
27954
|
+
throw new Error("Access denied. Only Team Managers can view support effort.");
|
|
27955
|
+
if (status !== 200) {
|
|
27956
|
+
const msg = data && typeof data === "object" && "error" in data ? data.error : void 0;
|
|
27957
|
+
throw new Error(msg ?? `Failed to fetch support effort (${status})`);
|
|
27958
|
+
}
|
|
27959
|
+
return data;
|
|
27960
|
+
}
|
|
27961
|
+
};
|
|
27962
|
+
}
|
|
27963
|
+
|
|
27938
27964
|
// ../sdk/dist/client.js
|
|
27939
27965
|
var DEFAULT_TIMEOUT_MS = 1e4;
|
|
27940
27966
|
var RETRYABLE_STATUS = /* @__PURE__ */ new Set([502, 503, 504]);
|
|
@@ -28006,7 +28032,8 @@ function createMeltClient(config2) {
|
|
|
28006
28032
|
me: createMeResource(config2),
|
|
28007
28033
|
developers: createDevelopersResource(config2),
|
|
28008
28034
|
endpointChecks: createEndpointChecksResource(config2),
|
|
28009
|
-
profileAudits: createProfileAuditsResource(config2)
|
|
28035
|
+
profileAudits: createProfileAuditsResource(config2),
|
|
28036
|
+
supportEffort: createSupportEffortResource(config2)
|
|
28010
28037
|
};
|
|
28011
28038
|
}
|
|
28012
28039
|
|
|
@@ -42569,6 +42596,13 @@ var MARKER_FILE = ".melt-skills.json";
|
|
|
42569
42596
|
function getSkillsRoot() {
|
|
42570
42597
|
return path5.join(os5.homedir(), ".claude", "skills");
|
|
42571
42598
|
}
|
|
42599
|
+
function getSkillsRoots() {
|
|
42600
|
+
const roots = [getSkillsRoot()];
|
|
42601
|
+
if (import_fs_extra3.default.existsSync(path5.join(os5.homedir(), ".cursor"))) {
|
|
42602
|
+
roots.push(path5.join(os5.homedir(), ".cursor", "skills"));
|
|
42603
|
+
}
|
|
42604
|
+
return roots;
|
|
42605
|
+
}
|
|
42572
42606
|
function computeSkillHash(files) {
|
|
42573
42607
|
const hash2 = createHash("sha256");
|
|
42574
42608
|
for (const filePath of Object.keys(files).sort()) {
|
|
@@ -42671,9 +42705,9 @@ async function skillsInstallCommand(opts) {
|
|
|
42671
42705
|
);
|
|
42672
42706
|
process.exit(1);
|
|
42673
42707
|
}
|
|
42674
|
-
const
|
|
42675
|
-
const
|
|
42676
|
-
if (
|
|
42708
|
+
const roots = getSkillsRoots();
|
|
42709
|
+
const stale = opts.force ? roots : roots.filter((root) => readMarker(root)?.version !== manifest.version);
|
|
42710
|
+
if (stale.length === 0) {
|
|
42677
42711
|
console.log(
|
|
42678
42712
|
source_default.dim(
|
|
42679
42713
|
`
|
|
@@ -42683,16 +42717,19 @@ async function skillsInstallCommand(opts) {
|
|
|
42683
42717
|
);
|
|
42684
42718
|
return;
|
|
42685
42719
|
}
|
|
42686
|
-
|
|
42720
|
+
for (const root of stale) {
|
|
42721
|
+
applyDevSkills(manifest, root);
|
|
42722
|
+
}
|
|
42723
|
+
const where = stale.map((root) => `${root.replace(os5.homedir(), "~")}/`).join(" and ");
|
|
42687
42724
|
console.log(
|
|
42688
42725
|
source_default.green(
|
|
42689
42726
|
`
|
|
42690
|
-
\u2713 Installed ${manifest.skills.length} Melt dev skills (v${manifest.version}) to
|
|
42727
|
+
\u2713 Installed ${manifest.skills.length} Melt dev skills (v${manifest.version}) to ${where}.`
|
|
42691
42728
|
)
|
|
42692
42729
|
);
|
|
42693
42730
|
console.log(
|
|
42694
42731
|
source_default.dim(
|
|
42695
|
-
" Restart Claude Code to load them (they appear as /melt-dev-plan, /melt-dev-review, \u2026).\n"
|
|
42732
|
+
" Restart Claude Code / Cursor to load them (they appear as /melt-dev-plan, /melt-dev-review, \u2026).\n"
|
|
42696
42733
|
)
|
|
42697
42734
|
);
|
|
42698
42735
|
}
|
|
@@ -42754,7 +42791,11 @@ async function maybeSyncSkills(commandName) {
|
|
|
42754
42791
|
return;
|
|
42755
42792
|
}
|
|
42756
42793
|
const oldVersion = marker.version;
|
|
42757
|
-
|
|
42794
|
+
let diff = { added: [], changed: [], removed: [] };
|
|
42795
|
+
for (const root of getSkillsRoots()) {
|
|
42796
|
+
const rootDiff = applyDevSkills(manifest, root);
|
|
42797
|
+
if (root === skillsRoot) diff = rootDiff;
|
|
42798
|
+
}
|
|
42758
42799
|
console.log(source_default.dim(source_default.green(formatSyncNotice(oldVersion, manifest.version, diff))));
|
|
42759
42800
|
debugLog(`Skills sync: updated ${oldVersion} \u2192 ${manifest.version}`);
|
|
42760
42801
|
} catch (e) {
|
|
@@ -54496,6 +54537,30 @@ function createProfileAuditsResource2(config2) {
|
|
|
54496
54537
|
}
|
|
54497
54538
|
};
|
|
54498
54539
|
}
|
|
54540
|
+
function createSupportEffortResource2(config2) {
|
|
54541
|
+
return {
|
|
54542
|
+
/**
|
|
54543
|
+
* Get the by-project + by-architect rollups, the week/month trend, and the
|
|
54544
|
+
* actionable missing-time worklist. `period` selects the trend granularity
|
|
54545
|
+
* (default 'week').
|
|
54546
|
+
*/
|
|
54547
|
+
async get(opts = {}) {
|
|
54548
|
+
const params = new URLSearchParams();
|
|
54549
|
+
if (opts.period)
|
|
54550
|
+
params.set("period", opts.period);
|
|
54551
|
+
const query = params.toString();
|
|
54552
|
+
const path22 = query ? `/support-effort?${query}` : "/support-effort";
|
|
54553
|
+
const { data, status } = await apiFetch2(config2, path22);
|
|
54554
|
+
if (status === 403)
|
|
54555
|
+
throw new Error("Access denied. Only Team Managers can view support effort.");
|
|
54556
|
+
if (status !== 200) {
|
|
54557
|
+
const msg = data && typeof data === "object" && "error" in data ? data.error : void 0;
|
|
54558
|
+
throw new Error(msg ?? `Failed to fetch support effort (${status})`);
|
|
54559
|
+
}
|
|
54560
|
+
return data;
|
|
54561
|
+
}
|
|
54562
|
+
};
|
|
54563
|
+
}
|
|
54499
54564
|
var DEFAULT_TIMEOUT_MS2 = 1e4;
|
|
54500
54565
|
var RETRYABLE_STATUS2 = /* @__PURE__ */ new Set([502, 503, 504]);
|
|
54501
54566
|
function delay2(ms) {
|
|
@@ -54566,7 +54631,8 @@ function createMeltClient2(config2) {
|
|
|
54566
54631
|
me: createMeResource2(config2),
|
|
54567
54632
|
developers: createDevelopersResource2(config2),
|
|
54568
54633
|
endpointChecks: createEndpointChecksResource2(config2),
|
|
54569
|
-
profileAudits: createProfileAuditsResource2(config2)
|
|
54634
|
+
profileAudits: createProfileAuditsResource2(config2),
|
|
54635
|
+
supportEffort: createSupportEffortResource2(config2)
|
|
54570
54636
|
};
|
|
54571
54637
|
}
|
|
54572
54638
|
var auditFindingSchema2 = external_exports.object({
|
|
@@ -55833,6 +55899,34 @@ function registerEndpointCheckTools(server, getClient2) {
|
|
|
55833
55899
|
withClientArgs(getClient2, submitEndpointCheck)
|
|
55834
55900
|
);
|
|
55835
55901
|
}
|
|
55902
|
+
async function getSupportEffort(client, input) {
|
|
55903
|
+
return safe(async () => {
|
|
55904
|
+
const data = await client.supportEffort.get({ period: input.period });
|
|
55905
|
+
const totalMissingTime = data.missingTimeTickets.length;
|
|
55906
|
+
return {
|
|
55907
|
+
asOf: data.asOf,
|
|
55908
|
+
byProject: data.byProject,
|
|
55909
|
+
byArchitect: data.byArchitect,
|
|
55910
|
+
trend: data.trend,
|
|
55911
|
+
// Surface the count prominently; the full actionable list is available via
|
|
55912
|
+
// the read API / dashboard page (Slice 2) rather than flooding the tool.
|
|
55913
|
+
missingTimeCount: totalMissingTime
|
|
55914
|
+
};
|
|
55915
|
+
});
|
|
55916
|
+
}
|
|
55917
|
+
function registerSupportEffortTools(server, getClient2) {
|
|
55918
|
+
server.registerTool(
|
|
55919
|
+
"get_support_effort",
|
|
55920
|
+
{
|
|
55921
|
+
title: "Get tech-support effort",
|
|
55922
|
+
description: "Tech-support / DevOps effort rollup for the 'Tech Support Ops' Linear team (key DEV). Returns logged hours (parsed from each ticket's self-reported 'Time Spent' label \u2014 the architect's active effort, NOT cycle time) and ticket counts rolled up two ways: `byProject` (which client/product the support load lands on) and `byArchitect` (who is carrying it). Each rollup entry has ticketCount, totalLoggedMinutes, avgLoggedMinutes, and missingTimeCount. Also returns `missingTimeCount`: the number of Done tickets with no time label (a data-quality gap that makes the hours less trustworthy \u2014 the dashboard page surfaces the actionable list). `period` selects the trend granularity (week|month, default week). Manager-gated. Use for 'how much support work did <project> need?', 'who's carrying the support load?', and 'is our support time logged completely?'.",
|
|
55923
|
+
inputSchema: {
|
|
55924
|
+
period: external_exports.enum(["week", "month"]).optional().describe("Trend bucket granularity. Default week.")
|
|
55925
|
+
}
|
|
55926
|
+
},
|
|
55927
|
+
withClientArgs(getClient2, getSupportEffort)
|
|
55928
|
+
);
|
|
55929
|
+
}
|
|
55836
55930
|
var VERSION = "0.0.0";
|
|
55837
55931
|
function createMcpServer(clientOrProvider) {
|
|
55838
55932
|
const getClient2 = typeof clientOrProvider === "function" ? clientOrProvider : () => Promise.resolve(clientOrProvider);
|
|
@@ -55851,6 +55945,7 @@ function createMcpServer(clientOrProvider) {
|
|
|
55851
55945
|
registerFindingsTools(server, getClient2);
|
|
55852
55946
|
registerDailyPlanTools(server, getClient2);
|
|
55853
55947
|
registerEndpointCheckTools(server, getClient2);
|
|
55948
|
+
registerSupportEffortTools(server, getClient2);
|
|
55854
55949
|
return server;
|
|
55855
55950
|
}
|
|
55856
55951
|
async function startServer() {
|
|
@@ -55900,7 +55995,7 @@ ${source_default.dim(" /melt-dev-security-audit Run a security posture audit
|
|
|
55900
55995
|
${source_default.dim(" /melt-dev-help Answer questions about the development playbook")}
|
|
55901
55996
|
|
|
55902
55997
|
${source_default.bold("Setup")}
|
|
55903
|
-
${source_default.dim(" skills install Install the dev skills (/melt-dev-*) into Claude Code")}
|
|
55998
|
+
${source_default.dim(" skills install Install the dev skills (/melt-dev-*) into Claude Code (+ Cursor)")}
|
|
55904
55999
|
|
|
55905
56000
|
${source_default.bold("Admin Commands")} ${source_default.dim("(used by skills and team managers):")}
|
|
55906
56001
|
${source_default.dim(" audit submit [file] Submit an audit report")}
|
package/package.json
CHANGED