mrvn-cli 0.5.23 → 0.5.24

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 CHANGED
@@ -26805,6 +26805,23 @@ async function _assessArtifactRecursive(store, client, host, options, visited, d
26805
26805
  }
26806
26806
  }
26807
26807
  }
26808
+ if (options.applyUpdates) {
26809
+ const assessmentSummary = buildAssessmentSummary(
26810
+ commentSummary,
26811
+ commentAnalysisProgress,
26812
+ signals,
26813
+ children,
26814
+ linkedIssues
26815
+ );
26816
+ try {
26817
+ store.update(fm.id, {
26818
+ assessmentSummary,
26819
+ lastAssessedAt: assessmentSummary.generatedAt
26820
+ });
26821
+ } catch (err) {
26822
+ errors.push(`Failed to persist assessment summary: ${err instanceof Error ? err.message : String(err)}`);
26823
+ }
26824
+ }
26808
26825
  return {
26809
26826
  artifactId: fm.id,
26810
26827
  title: fm.title,
@@ -27011,6 +27028,33 @@ function emptyArtifactReport(artifactId, errors) {
27011
27028
  errors
27012
27029
  };
27013
27030
  }
27031
+ function buildAssessmentSummary(commentSummary, commentAnalysisProgress, signals, children, linkedIssues) {
27032
+ const childProgressValues = children.map((c) => {
27033
+ const updates = c.appliedUpdates.length > 0 ? c.appliedUpdates : c.proposedUpdates;
27034
+ const lastStatus = findLast(updates, (u) => u.field === "status");
27035
+ if (lastStatus && PROGRESS_DONE_STATUSES.has(String(lastStatus.proposedValue))) return 100;
27036
+ const lastProgress = findLast(updates, (u) => u.field === "progress");
27037
+ if (lastProgress) return lastProgress.proposedValue;
27038
+ return c.marvinProgress;
27039
+ });
27040
+ const childDoneCount = children.filter((c, i) => {
27041
+ const updates = c.appliedUpdates.length > 0 ? c.appliedUpdates : c.proposedUpdates;
27042
+ const lastStatus = findLast(updates, (u) => u.field === "status");
27043
+ const effectiveStatus = lastStatus ? String(lastStatus.proposedValue) : c.marvinStatus;
27044
+ return DONE_STATUSES15.has(effectiveStatus);
27045
+ }).length;
27046
+ const childRollupProgress = children.length > 0 ? Math.round(childProgressValues.reduce((s, p) => s + p, 0) / childProgressValues.length) : null;
27047
+ return {
27048
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
27049
+ commentSummary,
27050
+ commentAnalysisProgress,
27051
+ signals,
27052
+ childCount: children.length,
27053
+ childDoneCount,
27054
+ childRollupProgress,
27055
+ linkedIssueCount: linkedIssues.length
27056
+ };
27057
+ }
27014
27058
  function formatArtifactReport(report) {
27015
27059
  const parts = [];
27016
27060
  parts.push(`# Artifact Assessment \u2014 ${report.artifactId}`);
@@ -33625,7 +33669,7 @@ function createProgram() {
33625
33669
  const program = new Command();
33626
33670
  program.name("marvin").description(
33627
33671
  "AI-powered product development assistant with Product Owner, Delivery Manager, and Technical Lead personas"
33628
- ).version("0.5.23");
33672
+ ).version("0.5.24");
33629
33673
  program.command("init").description("Initialize a new Marvin project in the current directory").action(async () => {
33630
33674
  await initCommand();
33631
33675
  });