@meltstudio/meltctl 5.1.0 → 5.3.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 +75 -3
- 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.3.0";
|
|
7454
7454
|
}
|
|
7455
7455
|
});
|
|
7456
7456
|
|
|
@@ -27188,6 +27188,11 @@ function createPmResource(config2) {
|
|
|
27188
27188
|
const res = await apiFetch(config2, `/pm/features/${id}`);
|
|
27189
27189
|
return unwrap("get feature", res);
|
|
27190
27190
|
},
|
|
27191
|
+
/** Every project's primary active phase, for the cross-project overview. */
|
|
27192
|
+
async listActivePhases() {
|
|
27193
|
+
const res = await apiFetch(config2, `/pm/active-phases`);
|
|
27194
|
+
return unwrap("list active phases", res);
|
|
27195
|
+
},
|
|
27191
27196
|
async createFeature(input) {
|
|
27192
27197
|
const res = await apiFetch(config2, `/pm/features`, {
|
|
27193
27198
|
method: "POST",
|
|
@@ -27273,6 +27278,29 @@ function createPmResource(config2) {
|
|
|
27273
27278
|
});
|
|
27274
27279
|
return unwrap("close phase", res);
|
|
27275
27280
|
},
|
|
27281
|
+
/**
|
|
27282
|
+
* Lock a scenario into a proposed phase (scenario-planner slice 1):
|
|
27283
|
+
* `scenario → proposed`. The phase starts feeding the planning baseline.
|
|
27284
|
+
* Manager-only; throws if the phase isn't in the `scenario` state.
|
|
27285
|
+
*/
|
|
27286
|
+
async lockPhase(id) {
|
|
27287
|
+
const res = await apiFetch(config2, `/pm/phases/${id}/lock`, {
|
|
27288
|
+
method: "POST"
|
|
27289
|
+
});
|
|
27290
|
+
return unwrap("lock phase", res);
|
|
27291
|
+
},
|
|
27292
|
+
/**
|
|
27293
|
+
* Activate a proposed phase into the project's live primary (scenario-
|
|
27294
|
+
* planner slice 1): `proposed → active`. Demotes any existing primary to
|
|
27295
|
+
* `proposed`. Manager-only; throws if the phase isn't in the `proposed`
|
|
27296
|
+
* state.
|
|
27297
|
+
*/
|
|
27298
|
+
async activatePhase(id) {
|
|
27299
|
+
const res = await apiFetch(config2, `/pm/phases/${id}/activate`, {
|
|
27300
|
+
method: "POST"
|
|
27301
|
+
});
|
|
27302
|
+
return unwrap("activate phase", res);
|
|
27303
|
+
},
|
|
27276
27304
|
async deletePhase(id) {
|
|
27277
27305
|
const res = await apiFetch(config2, `/pm/phases/${id}`, {
|
|
27278
27306
|
method: "DELETE"
|
|
@@ -27325,6 +27353,11 @@ function createPmResource(config2) {
|
|
|
27325
27353
|
* Patch the per-phase intent for a feature in a phase (#446 stage 2).
|
|
27326
27354
|
* Edits the through-table row's `targetStage`, `phaseDescription`, and/or
|
|
27327
27355
|
* `linearEpicUrl`. Server returns the updated membership row.
|
|
27356
|
+
*
|
|
27357
|
+
* Editing a membership inside a LOCKED phase (state `proposed`/`active`)
|
|
27358
|
+
* ripples through downstream baselines on the next read, so it requires
|
|
27359
|
+
* `force: true` (scenario-planner slice 1); without it the server rejects
|
|
27360
|
+
* with 409. Ignored for scenario/completed phases.
|
|
27328
27361
|
*/
|
|
27329
27362
|
async updatePhaseFeature(phaseId, featureId, patch) {
|
|
27330
27363
|
const res = await apiFetch(config2, `/pm/phases/${phaseId}/features/${featureId}`, { method: "PATCH", body: JSON.stringify(patch) });
|
|
@@ -53430,6 +53463,11 @@ function createPmResource2(config2) {
|
|
|
53430
53463
|
const res = await apiFetch2(config2, `/pm/features/${id}`);
|
|
53431
53464
|
return unwrap2("get feature", res);
|
|
53432
53465
|
},
|
|
53466
|
+
/** Every project's primary active phase, for the cross-project overview. */
|
|
53467
|
+
async listActivePhases() {
|
|
53468
|
+
const res = await apiFetch2(config2, `/pm/active-phases`);
|
|
53469
|
+
return unwrap2("list active phases", res);
|
|
53470
|
+
},
|
|
53433
53471
|
async createFeature(input) {
|
|
53434
53472
|
const res = await apiFetch2(config2, `/pm/features`, {
|
|
53435
53473
|
method: "POST",
|
|
@@ -53515,6 +53553,29 @@ function createPmResource2(config2) {
|
|
|
53515
53553
|
});
|
|
53516
53554
|
return unwrap2("close phase", res);
|
|
53517
53555
|
},
|
|
53556
|
+
/**
|
|
53557
|
+
* Lock a scenario into a proposed phase (scenario-planner slice 1):
|
|
53558
|
+
* `scenario → proposed`. The phase starts feeding the planning baseline.
|
|
53559
|
+
* Manager-only; throws if the phase isn't in the `scenario` state.
|
|
53560
|
+
*/
|
|
53561
|
+
async lockPhase(id) {
|
|
53562
|
+
const res = await apiFetch2(config2, `/pm/phases/${id}/lock`, {
|
|
53563
|
+
method: "POST"
|
|
53564
|
+
});
|
|
53565
|
+
return unwrap2("lock phase", res);
|
|
53566
|
+
},
|
|
53567
|
+
/**
|
|
53568
|
+
* Activate a proposed phase into the project's live primary (scenario-
|
|
53569
|
+
* planner slice 1): `proposed → active`. Demotes any existing primary to
|
|
53570
|
+
* `proposed`. Manager-only; throws if the phase isn't in the `proposed`
|
|
53571
|
+
* state.
|
|
53572
|
+
*/
|
|
53573
|
+
async activatePhase(id) {
|
|
53574
|
+
const res = await apiFetch2(config2, `/pm/phases/${id}/activate`, {
|
|
53575
|
+
method: "POST"
|
|
53576
|
+
});
|
|
53577
|
+
return unwrap2("activate phase", res);
|
|
53578
|
+
},
|
|
53518
53579
|
async deletePhase(id) {
|
|
53519
53580
|
const res = await apiFetch2(config2, `/pm/phases/${id}`, {
|
|
53520
53581
|
method: "DELETE"
|
|
@@ -53567,6 +53628,11 @@ function createPmResource2(config2) {
|
|
|
53567
53628
|
* Patch the per-phase intent for a feature in a phase (#446 stage 2).
|
|
53568
53629
|
* Edits the through-table row's `targetStage`, `phaseDescription`, and/or
|
|
53569
53630
|
* `linearEpicUrl`. Server returns the updated membership row.
|
|
53631
|
+
*
|
|
53632
|
+
* Editing a membership inside a LOCKED phase (state `proposed`/`active`)
|
|
53633
|
+
* ripples through downstream baselines on the next read, so it requires
|
|
53634
|
+
* `force: true` (scenario-planner slice 1); without it the server rejects
|
|
53635
|
+
* with 409. Ignored for scenario/completed phases.
|
|
53570
53636
|
*/
|
|
53571
53637
|
async updatePhaseFeature(phaseId, featureId, patch) {
|
|
53572
53638
|
const res = await apiFetch2(config2, `/pm/phases/${phaseId}/features/${featureId}`, { method: "PATCH", body: JSON.stringify(patch) });
|
|
@@ -54836,7 +54902,7 @@ function registerPhaseTools(server, getClient2) {
|
|
|
54836
54902
|
"update_phase",
|
|
54837
54903
|
{
|
|
54838
54904
|
title: "Update phase",
|
|
54839
|
-
description: "Patches fields on an existing phase. Pass only the fields you want to change. Common uses: rename, switch target shape, override or clear the computed current shape, set or clear primary, mark a phase closed/reopened. The PM should review the proposed change before this is called \u2014 this is a write operation. Setting closedAt non-null forces isActive=false + isPrimary=false; setting isActive=false also clears isPrimary.",
|
|
54905
|
+
description: "Patches fields on an existing phase. Pass only the fields you want to change. Common uses: rename, switch target shape, override or clear the computed current shape, set or clear primary, mark a phase closed/reopened. The PM should review the proposed change before this is called \u2014 this is a write operation. Setting closedAt non-null forces isActive=false + isPrimary=false; setting isActive=false also clears isPrimary. Editing a LOCKED phase (state active/proposed) requires force=true.",
|
|
54840
54906
|
inputSchema: {
|
|
54841
54907
|
id: external_exports.string().uuid().describe("Phase id from list_phases or create_phase."),
|
|
54842
54908
|
name: external_exports.string().min(1).optional(),
|
|
@@ -54856,6 +54922,9 @@ function registerPhaseTools(server, getClient2) {
|
|
|
54856
54922
|
),
|
|
54857
54923
|
jumpDurationWeeks: external_exports.number().positive().optional().describe(
|
|
54858
54924
|
"Override the project default jump duration for this phase, in weeks. Tighter (0.25-0.5) for fast iteration / proof-of-concept; longer (2-3) for hardening. The audit will eventually flag mismatches between jump duration and per-feature target stages."
|
|
54925
|
+
),
|
|
54926
|
+
force: external_exports.boolean().optional().describe(
|
|
54927
|
+
"Set true to edit a LOCKED phase (state active or proposed). Locked phases feed the planning baseline, so an edit recomputes every downstream phase/scenario \u2014 the server rejects with 409 unless force=true. Not needed for scenario (draft) phases."
|
|
54859
54928
|
)
|
|
54860
54929
|
}
|
|
54861
54930
|
},
|
|
@@ -54902,7 +54971,7 @@ Mandatory caller behavior: present the phase's name + id + active/closed status
|
|
|
54902
54971
|
"update_phase_feature",
|
|
54903
54972
|
{
|
|
54904
54973
|
title: "Update phase-feature membership",
|
|
54905
|
-
description: "Edits the per-phase intent for a feature in a phase: targetStage (what this phase aims to bring the feature to), phaseDescription (PM-authored note about what this jump means in this phase), linearEpicUrl (per-phase Linear epic), status (per-phase status \u2014 a feature can be done in one phase and in_progress in another). The same feature can have different per-phase values across phases. Use after assign_feature_to_phase when the PM wants per-membership values different from the feature-row defaults. The PM should review the proposed change before this is called \u2014 this is a write operation. Pass linearEpicUrl=null to clear the per-phase Linear link.",
|
|
54974
|
+
description: "Edits the per-phase intent for a feature in a phase: targetStage (what this phase aims to bring the feature to), phaseDescription (PM-authored note about what this jump means in this phase), linearEpicUrl (per-phase Linear epic), status (per-phase status \u2014 a feature can be done in one phase and in_progress in another). The same feature can have different per-phase values across phases. Use after assign_feature_to_phase when the PM wants per-membership values different from the feature-row defaults. The PM should review the proposed change before this is called \u2014 this is a write operation. Pass linearEpicUrl=null to clear the per-phase Linear link. Editing a membership in a LOCKED phase (state active/proposed) requires force=true.",
|
|
54906
54975
|
inputSchema: {
|
|
54907
54976
|
phaseId: external_exports.string().uuid().describe("Phase id from list_phases."),
|
|
54908
54977
|
featureId: external_exports.string().uuid().describe("Feature id of the membership to edit."),
|
|
@@ -54917,6 +54986,9 @@ Mandatory caller behavior: present the phase's name + id + active/closed status
|
|
|
54917
54986
|
),
|
|
54918
54987
|
status: external_exports.enum(["not_started", "in_progress", "done", "canceled"]).optional().describe(
|
|
54919
54988
|
"Per-phase status (#446 stage 7). Lets a feature be 'done' in a closed phase while still 'in_progress' in the active phase. Use this to resolve the close-phase warning when work for that phase is actually complete."
|
|
54989
|
+
),
|
|
54990
|
+
force: external_exports.boolean().optional().describe(
|
|
54991
|
+
"Set true to edit a membership in a LOCKED phase (state active or proposed). Without it the server rejects with 409, because editing a locked phase recomputes downstream planning baselines. Not needed for scenario (draft) phases."
|
|
54920
54992
|
)
|
|
54921
54993
|
}
|
|
54922
54994
|
},
|
package/package.json
CHANGED