@meltstudio/meltctl 4.112.1 → 4.113.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 +54 -1
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var CLI_VERSION;
14
14
  var init_version = __esm({
15
15
  "src/utils/version.ts"() {
16
16
  "use strict";
17
- CLI_VERSION = "4.112.1";
17
+ CLI_VERSION = "4.113.0";
18
18
  }
19
19
  });
20
20
 
@@ -3654,6 +3654,9 @@ async function createPhase(client, input3) {
3654
3654
  async function assignFeatureToPhase(client, input3) {
3655
3655
  return safe(() => client.pm.assignFeature(input3.phaseId, input3.featureId));
3656
3656
  }
3657
+ async function unassignFeatureFromPhase(client, input3) {
3658
+ return safe(() => client.pm.unassignFeature(input3.phaseId, input3.featureId));
3659
+ }
3657
3660
  var createPhaseInputSchema = z3.object({
3658
3661
  projectId: z3.number().int().positive(),
3659
3662
  name: z3.string().min(1),
@@ -3701,6 +3704,18 @@ function registerPhaseTools(server, client) {
3701
3704
  },
3702
3705
  (args) => assignFeatureToPhase(client, args)
3703
3706
  );
3707
+ server.registerTool(
3708
+ "unassign_feature_from_phase",
3709
+ {
3710
+ title: "Unassign feature from phase",
3711
+ description: "Removes the membership row that ties a feature to a phase. The feature itself is untouched \u2014 only its position in this phase. Use for restructuring the roadmap (moving a feature between phases) or pulling work out of a phase that's been over-scoped. The PM should review the proposed change before this is called \u2014 this is a write operation.",
3712
+ inputSchema: {
3713
+ phaseId: z3.string().uuid().describe("Phase id from list_phases."),
3714
+ featureId: z3.string().uuid().describe("Feature id of the membership to remove. The feature itself is not deleted.")
3715
+ }
3716
+ },
3717
+ (args) => unassignFeatureFromPhase(client, args)
3718
+ );
3704
3719
  }
3705
3720
  var STAGE_VALUES = ["idea", "poc", "pt", "mv", "mk", "ma", "mbi"];
3706
3721
  var STAGE_DESC = "idea | poc | pt | mv | mk | ma | mbi. The 7 maturity stages from the workflow doc \u2014 pick the one that matches where the work *looks like* it is right now (or where it should land for target).";
@@ -3710,6 +3725,10 @@ async function listFeatures(client, input3) {
3710
3725
  async function createFeature(client, input3) {
3711
3726
  return safe(() => client.pm.createFeature(input3));
3712
3727
  }
3728
+ async function updateFeature(client, input3) {
3729
+ const { id, ...patch } = input3;
3730
+ return safe(() => client.pm.updateFeature(id, patch));
3731
+ }
3713
3732
  var createFeatureInputSchema = z4.object({
3714
3733
  projectId: z4.number().int().positive(),
3715
3734
  name: z4.string().min(1),
@@ -3721,6 +3740,18 @@ var createFeatureInputSchema = z4.object({
3721
3740
  status: z4.string().optional(),
3722
3741
  clientDependencies: z4.string().optional()
3723
3742
  });
3743
+ var updateFeatureInputSchema = z4.object({
3744
+ id: z4.string().uuid(),
3745
+ name: z4.string().min(1).optional(),
3746
+ category: z4.string().min(1).optional(),
3747
+ description: z4.string().optional(),
3748
+ prdPath: z4.string().optional(),
3749
+ currentStage: z4.enum(STAGE_VALUES).optional(),
3750
+ targetStage: z4.enum(STAGE_VALUES).optional(),
3751
+ status: z4.string().optional(),
3752
+ clientDependencies: z4.string().optional(),
3753
+ linearEpicUrl: z4.string().url().nullable().optional()
3754
+ });
3724
3755
  function registerFeatureTools(server, client) {
3725
3756
  server.registerTool(
3726
3757
  "list_features",
@@ -3752,6 +3783,28 @@ function registerFeatureTools(server, client) {
3752
3783
  },
3753
3784
  (args) => createFeature(client, args)
3754
3785
  );
3786
+ server.registerTool(
3787
+ "update_feature",
3788
+ {
3789
+ title: "Update feature",
3790
+ description: "Patches fields on an existing feature. Pass only the fields you want to change. Common uses: advancing current_stage as work progresses, flipping status to in_progress/done, wiring linearEpicUrl after the Linear epic exists. The PM should review the proposed change before this is called \u2014 this is a write operation. Pass linearEpicUrl=null to clear the Linear link.",
3791
+ inputSchema: {
3792
+ id: z4.string().uuid().describe("Feature id from list_features or create_feature."),
3793
+ name: z4.string().min(1).optional(),
3794
+ category: z4.string().min(1).optional(),
3795
+ description: z4.string().optional(),
3796
+ prdPath: z4.string().optional(),
3797
+ currentStage: z4.enum(STAGE_VALUES).optional().describe(STAGE_DESC),
3798
+ targetStage: z4.enum(STAGE_VALUES).optional().describe(STAGE_DESC),
3799
+ status: z4.string().optional().describe("Common values: not_started, in_progress, done."),
3800
+ clientDependencies: z4.string().optional(),
3801
+ linearEpicUrl: z4.string().url().nullable().optional().describe(
3802
+ "Linear epic URL for the feature. Pass null to clear. Setting this also marks the feature as synced (synced_to_linear_at = now); clearing it also clears that timestamp."
3803
+ )
3804
+ }
3805
+ },
3806
+ (args) => updateFeature(client, args)
3807
+ );
3755
3808
  }
3756
3809
  var FLAG_STATUS_VALUES = ["open", "resolved", "dismissed", "all"];
3757
3810
  async function listAuditFlags(client, input3) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meltstudio/meltctl",
3
- "version": "4.112.1",
3
+ "version": "4.113.0",
4
4
  "description": "AI-first development tools for teams - set up AGENTS.md, Claude Code, Cursor, and OpenCode standards",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",