mrvn-cli 0.5.18 → 0.5.19
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 +30 -5
- package/dist/index.js.map +1 -1
- package/dist/marvin-serve.js +29 -4
- package/dist/marvin-serve.js.map +1 -1
- package/dist/marvin.js +30 -5
- package/dist/marvin.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -14742,7 +14742,7 @@ function createActionTools(store) {
|
|
|
14742
14742
|
tags: external_exports.array(external_exports.string()).optional().describe("Replace all tags. When provided with sprints, sprint tags are merged into this array."),
|
|
14743
14743
|
sprints: external_exports.array(external_exports.string()).optional().describe("Sprint IDs to assign (replaces existing sprint tags). E.g. ['SP-001']."),
|
|
14744
14744
|
workFocus: external_exports.string().optional().describe("Work focus name (e.g. 'Budget UX'). Replaces existing focus:<value> tag."),
|
|
14745
|
-
progress: external_exports.number().optional().describe("Explicit progress percentage (0-100).")
|
|
14745
|
+
progress: external_exports.number().nullable().optional().describe("Explicit progress percentage (0-100). Pass null to clear the override and revert to auto-calculation from children.")
|
|
14746
14746
|
},
|
|
14747
14747
|
async (args) => {
|
|
14748
14748
|
const { id, content, sprints, tags, workFocus, progress, owner, assignee, ...updates } = args;
|
|
@@ -14785,6 +14785,8 @@ function createActionTools(store) {
|
|
|
14785
14785
|
if (typeof progress === "number") {
|
|
14786
14786
|
updates.progress = Math.max(0, Math.min(100, Math.round(progress)));
|
|
14787
14787
|
updates.progressOverride = true;
|
|
14788
|
+
} else if (progress === null) {
|
|
14789
|
+
updates.progressOverride = false;
|
|
14788
14790
|
}
|
|
14789
14791
|
const doc = store.update(id, updates, content);
|
|
14790
14792
|
if (args.status !== void 0 || typeof progress === "number") {
|
|
@@ -23790,7 +23792,7 @@ function createTaskTools(store) {
|
|
|
23790
23792
|
priority: external_exports.enum(["critical", "high", "medium", "low"]).optional().describe("New priority"),
|
|
23791
23793
|
tags: external_exports.array(external_exports.string()).optional().describe("Replace tags (e.g. remove old tags, add new ones)"),
|
|
23792
23794
|
workFocus: external_exports.string().optional().describe("Work focus name (e.g. 'Budget UX'). Replaces existing focus:<value> tag."),
|
|
23793
|
-
progress: external_exports.number().optional().describe("Explicit progress percentage (0-100). Overrides auto-calculation from child contributions.")
|
|
23795
|
+
progress: external_exports.number().nullable().optional().describe("Explicit progress percentage (0-100). Overrides auto-calculation from child contributions. Pass null to clear the override and revert to auto-calculation.")
|
|
23794
23796
|
},
|
|
23795
23797
|
async (args) => {
|
|
23796
23798
|
const { id, content, linkedEpic: rawLinkedEpic, tags: userTags, workFocus, progress, ...updates } = args;
|
|
@@ -23823,6 +23825,8 @@ function createTaskTools(store) {
|
|
|
23823
23825
|
if (typeof progress === "number") {
|
|
23824
23826
|
updates.progress = Math.max(0, Math.min(100, Math.round(progress)));
|
|
23825
23827
|
updates.progressOverride = true;
|
|
23828
|
+
} else if (progress === null) {
|
|
23829
|
+
updates.progressOverride = false;
|
|
23826
23830
|
}
|
|
23827
23831
|
const doc = store.update(id, updates, content);
|
|
23828
23832
|
if (args.status !== void 0 || typeof progress === "number") {
|
|
@@ -26715,16 +26719,37 @@ async function _assessArtifactRecursive(store, client, host, options, visited, d
|
|
|
26715
26719
|
);
|
|
26716
26720
|
children.push(childReport);
|
|
26717
26721
|
}
|
|
26722
|
+
if (children.length > 0) {
|
|
26723
|
+
const rolledUpProgress = computeWeightedProgress(
|
|
26724
|
+
children.map((c) => ({
|
|
26725
|
+
weight: resolveWeight(void 0).weight,
|
|
26726
|
+
progress: c.marvinProgress
|
|
26727
|
+
}))
|
|
26728
|
+
);
|
|
26729
|
+
if (rolledUpProgress !== currentProgress) {
|
|
26730
|
+
proposedUpdates.push({
|
|
26731
|
+
artifactId: fm.id,
|
|
26732
|
+
field: "progress",
|
|
26733
|
+
currentValue: currentProgress,
|
|
26734
|
+
proposedValue: rolledUpProgress,
|
|
26735
|
+
reason: `Rolled up from ${children.length} children (weighted average ${rolledUpProgress}%)`
|
|
26736
|
+
});
|
|
26737
|
+
}
|
|
26738
|
+
}
|
|
26718
26739
|
const signals = buildSignals(commentSignals, linkedIssues, statusDrift, proposedMarvinStatus);
|
|
26719
26740
|
const appliedUpdates = [];
|
|
26720
26741
|
if (options.applyUpdates && proposedUpdates.length > 0) {
|
|
26721
26742
|
for (const update of proposedUpdates) {
|
|
26722
26743
|
if (update.field === "review") continue;
|
|
26723
26744
|
try {
|
|
26724
|
-
|
|
26745
|
+
const updatePayload = {
|
|
26725
26746
|
[update.field]: update.proposedValue,
|
|
26726
26747
|
lastJiraSyncAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
26727
|
-
}
|
|
26748
|
+
};
|
|
26749
|
+
if (update.field === "progress") {
|
|
26750
|
+
updatePayload.progressOverride = false;
|
|
26751
|
+
}
|
|
26752
|
+
store.update(update.artifactId, updatePayload);
|
|
26728
26753
|
const updatedDoc = store.get(update.artifactId);
|
|
26729
26754
|
if (updatedDoc) {
|
|
26730
26755
|
if (updatedDoc.frontmatter.type === "task") {
|
|
@@ -33534,7 +33559,7 @@ function createProgram() {
|
|
|
33534
33559
|
const program = new Command();
|
|
33535
33560
|
program.name("marvin").description(
|
|
33536
33561
|
"AI-powered product development assistant with Product Owner, Delivery Manager, and Technical Lead personas"
|
|
33537
|
-
).version("0.5.
|
|
33562
|
+
).version("0.5.19");
|
|
33538
33563
|
program.command("init").description("Initialize a new Marvin project in the current directory").action(async () => {
|
|
33539
33564
|
await initCommand();
|
|
33540
33565
|
});
|